LED PWM调光C程序
#include sbit LED1 = P3^0; sbit LED = P3^1; //定义LED灯,通过LED显示调光效果 sbit LED2 = P3^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 = 50; // 时间可以调整 这个是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) { LED1 = 1; LED = 1; //灯灭 LED2 = 1; } count++; if(count == CYCLE) { count=0; if(PWM_ON!=0) //如果左右时间是0 保持原来状态 LED1 = 0; LED = 0; //灯亮 LED2 = 0; } } 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务