#include <reg52.h>
sbit LED = P1^2; unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms unsigned char PWM_ON ;//定义高电平时间 void delay(unsigned int cnt) { while(--cnt); }
main() { bit Flag;
TMOD |=0x01;//定时器设置 0.1ms in 12M crystal TH0=(65536-100)/256; TL0=(65536-100)%256;//定时0.1mS IE= 0x82; //打开中断 TR0=1;
CYCLE = 10;// 时间可以调整 这个是10调整 8位PWM就是256步 while(!Flag) { delay(20000); //延时时间,从一个亮度到下一个亮度的间隔时间,速度快就能看到连续效果 PWM_ON++; //这个使用较长延时,以便能看清楚变化过程 if(PWM_ON == CYCLE) { //这个里可以添加其他程序 如到最亮时候控制设备 Flag=1; } }
while(Flag) //亮度递减 同上,是个相反的过程 { delay(20000); PWM_ON--; if(PWM_ON == 0) { Flag=0; } } } /********************************/ /* 定时中断 */ /********************************/ void tim(void) interrupt 1 using 1 { static unsigned char count; // TH0=(65536-100)/256; TL0=(65536-100)%256;//定时0.1mS
if (count==PWM_ON) { LED = 1; //灯灭 } count++; if(count == CYCLE) { count=0; if(PWM_ON!=0) //如果左右时间是0 保持原来状态 LED = 0;//灯亮
} } 上面就是程序,运行了一下,P1^2相连的led不停的由明到暗,又由暗到明, 本人刚弄这一块,以我自己理解,由明到暗和由暗到明只有一次,然后程序就结束,忘大侠们指点 |