51 マイコン PWM 制御 LED 調光実験

51 マイコン PWM 制御 LED 調光実験

1。概要

この記事では、デューティ サイクルを通じて LED ライトのフェード効果を制御するマイコンの PWM を紹介し、この実験を通じて PWM の原理を習得し、それを何かに応用することができます。

2. 操作手順

2.1.ハードウェア回路

1.ハードウェアの準備
名前 モデル
マイクロコントローラー STC12C2052 1
LEDランタン なし 2
水晶発振器 12MHz 1
キャパシタンス 30pf 2
抵抗 100オーム 2
ブレッドボード なし 1
接続線 なし 5
2. 回路図の概略図

この実験では 2 つの LED ライトを交互に点滅させるために使用したため、ピン 11 が LED ライトに接続されているのと同じ方法で、別の LED ライトをピン 9 に接続するだけです。
ここに画像の説明を挿入します

2.2.プログラムコード

/*************************************************************
* 程序名: PWM控制两个LED灯亮度渐亮渐暗
* 编写人: bruce
* 硬件支持:TC12C2052 外部12MHZ晶振
* 日  期: 2023-11-14
* 修改日志: 通过控制PWM占空比调控LED灯亮和灭实现亮度渐变效果
/*************************************************************/

#include<STC12C2052AD.H>


/*********************************************************************************************
函数名:PWM初始化函数
调  用:PWM_init();
参  数:无
返回值:无
结  果:将PCA初始化为PWM模式,初始占空比为0
备  注:需要更多路PWM输出直接插入CCAPnH和CCAPnL即可
/**********************************************************************************************/
void PWM_init (void){
    
    
	CMOD=0x02; //设置PCA定时器
 	CL=0x00; 
 	CH=0x00;
	CCAPM0=0x42; //PWM0设置PCA工作方式为PWM方式(0100 0010)
 	CCAP0L=0x00; //设置PWM0初始值与CCAP0H相同
 	CCAP0H=0x00; // PWM0初始时为0

	CCAPM1=0x42; //PWM1设置PCA工作方式为PWM方式(使用时删除//)
	CCAP1L=0x00; //设置PWM1初始值与CCAP0H相同
 	CCAP1H=0x00; // PWM1初始时为0

	//CCAPM2=0x42; //PWM2设置PCA工作方式为PWM方式
	//CCAP2L=0x00; //设置PWM2初始值与CCAP0H相同
 	//CCAP2H=0x00; // PWM2初始时为0

	//CCAPM3=0x42; //PWM3设置PCA工作方式为PWM方式
	//CCAP3L=0x00; //设置PWM3初始值与CCAP0H相同
 	//CCAP3H=0x00; // PWM3初始时为0

 	CR=1; //启动PCA定时器
}


/*********************************************************************************************
函数名:PWM0占空比设置函数
调  用:PWM0_set();
参  数:0x00~0xFF(亦可用0~255)
返回值:无
结  果:设置PWM模式占空比,为0时全部高电平,为1时全部低电平
备  注:如果需要PWM1的设置函数,只要把CCAP0L和CCAP0H中的0改为1即可
/**********************************************************************************************/
void PWM0_set(unsigned char a){
    
    
	CCAP0L=a;
	CCAP0H=a;
}

/*********************************************************************************************
函数名:PWM1占空比设置函数
调  用:PWM1_set();
参  数:0x00~0xFF(亦可用0~255)
返回值:无
结  果:设置PWM模式占空比,为0时全部高电平,为1时全部低电平
/**********************************************************************************************/
void PWM1_set(unsigned char a){
    
    
	CCAP1L=a;
	CCAP1H=a;
}

/*********************************************************************************************
函数名:毫秒级CPU延时函数
调  用:DELAY_MS (?);
参  数:1~65535(参数不可为0)
返回值:无
结  果:占用CPU方式延时与参数数值相同的毫秒时间
备  注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
void DELAY_MS (unsigned int a){
    
    
	unsigned int i;
	while( --a != 0){
    
    
		for(i = 0; i < 600; i++);
	}
}

void main(void){
    
    
	//PWM初始化
	PWM_init();
	
	while(1){
    
    
		unsigned char a;
		for(a=0x00;a<0xff;a++){
    
    
			//设置PWM0占空比
			PWM0_set(a);
			//设置PWM1占空比
			PWM1_set(~a);
			DELAY_MS(8);
		}
		for(a=0xff;a>0x00;a--){
    
    
			//设置PWM0占空比
			PWM0_set(a);
			//设置PWM1占空比
			PWM1_set(~a);
			DELAY_MS(8);
		}
	}

}

2.3. 書き込みプログラム

Keil ツールを使用してプログラムをコンパイルし、STC-ISP ソフトウェアを開き、コンパイルされた 16 進数ファイルを選択し、外部水晶発振器を設定して、プログラムをダウンロードします。プログラムをマイクロコントローラーに焼き付けた後、マイクロコントローラーをコールドスタートし (5V 電源を遮断してから電源をオン)、マイクロコントローラーを外部水晶発振器に切り替え、2 つの LED ライトの交互の明暗の変化を観察します。

おすすめ

転載: blog.csdn.net/m0_38039437/article/details/134549831