//本程序用占空比可调节的PWM方波来控制大功率LED的亮度,PWM波占空比可从0到100
// PWM 控制 LED 灯渐亮渐灭程序
// 晶振为12M
// 利用STC12C5624AD单片机的PWM功能产生占空比可变的 PWM 方波
// 按K1,PWM值增加,则占空比减小,LED 灯渐暗。
// 按K2,PWM值减小,则占空比增加,LED 灯渐亮。
// 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。
//…..安徽师范大学物理与电子信息学院07级电子信息工程专业 曾祥…………..//
#include sfr CCON=0xD8; sfr CMOD=0xD9; sfr CL=0xE9; sfr CH=0xD8; sfr CCAP0L=0xEA; sfr CCAP0H=0xFA; sfr CCAPM0=0xDA; unsigned char PWM=0x7f; //PWM初值 unsigned char flag=0; sbit K1 =P2^6 ; //增加键 sbit K2 =P2^7 ; //减少键 sbit BEEP=P2^5; //蜂鸣器 sbit CR=0xDE; void Beep(); void delayms(unsigned char ms); void delay(unsigned char t); void main(void) { CMOD=0x02; //PCA计数脉冲选择为fos/2 CL=0x00; CH=0x00; CCAP0L=0xC0; CCAP0H=PWM; CCAPM0=0x42; CR=1; while(1) { if(K1==1&&K2==1) flag=0; if(K1==0) { delay(50); if(K1==0&&flag==0) { if(PWM<0xf5) { CR=0; PWM+=10; delayms(10); CR=1; } else { PWM=0xff;Beep();} flag=1; } } if(K2==0) { delay(50); if(K2==0&&flag==0) { if(PWM>0x0a) { CR=0; PWM-=10 ;delayms(10); CR=1; } else {PWM=0x00;Beep();} } flag=1; } CCAP0H=PWM; } } /*********************************************************/ //蜂鸣器子程序 /*********************************************************/ void Beep() { unsigned char i ; for (i=0 ;i<100 ;i++) { delayms(3) ; BEEP=0 ; //Beep取反 } BEEP=1 ; //关闭蜂鸣器 delayms(100); } /*********************************************************/ // 延时子程序1 /*********************************************************/ void delay(unsigned char t) { while(t--) ; } /*********************************************************/ // 延时子程序2 /*********************************************************/ void delayms(unsigned char ms) { unsigned char i ; while(ms--) { for(i = 0 ; i < 120 ; i++) ; } }