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. 회로도 개략도

이 실험에서는 두 개의 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 소프트웨어를 열고, 컴파일된 hex 파일을 선택하고, 외부 수정 발진기를 설정하고, 프로그램을 다운로드합니다. 프로그램을 마이크로컨트롤러에 구운 후 마이크로컨트롤러를 콜드 스타트(5V 전원 공급 장치를 차단한 다음 전원 켜기)하고 마이크로컨트롤러를 외부 수정 발진기로 전환한 다음 두 LED 조명의 밝고 어두운 변화를 관찰합니다.

추천

출처blog.csdn.net/m0_38039437/article/details/134549831