基于stc15l104e单片机模拟pwm调光小夜灯

基于stc15l104e单片机模拟pwm调光小夜灯

ID:20859172

大小:210.00 KB

页数:7页

时间:2018-10-17

基于stc15l104e单片机模拟pwm调光小夜灯_第1页
基于stc15l104e单片机模拟pwm调光小夜灯_第2页
基于stc15l104e单片机模拟pwm调光小夜灯_第3页
基于stc15l104e单片机模拟pwm调光小夜灯_第4页
基于stc15l104e单片机模拟pwm调光小夜灯_第5页
资源描述:

《基于stc15l104e单片机模拟pwm调光小夜灯》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、基于STC15L104E单片机模拟PWM调光小夜灯(2012-10-2314:44:44)转载▼标签:分类:硬件单片机stcl5模拟pwmled调光杂谈鉴于宿舍晚上会被宿管灭灯,所以制作了•一个小台灯在关灯沿"窥探”用,但是舍友陈某@反应光线太强影响其睡眠,所以决心做个可以调光的LED小夜灯,窥探自己的隐私,让别人睡觉去吧...搜索自己的原件库,发现上半年买的STC15L104E—直没用,所以打算就用单片机来控制了,当然,如果用模拟电路,可能几个元件就可以完成了,但是,模拟对我来说更难设计,所以,,,好吧,废话多

2、了下面贴电路:其实也没什么,纯粹是IO操作,两个开光是调光用,AMS117是降压用,AMP4953就相当于开关,后面的电感电容电路是防止出现闪烁的,额,如果有问题的话可以贴出來.下而介绍模拟PWM操作,毕竟不是硬件的PWM而II要顾及程序长度,所以模拟出来的PWM频率600HZ,不过用在LED上应该足够了.设PWM基数为PWM_NUM,PWM比较输出值为PWM_CMP.主要思路就是利用单片机内部计时器按一定周期中断,然后在中断服务程序里令PWM_NUM加一,判断是否小于PWM_CMP比较值,如果小于,则IO输出高

3、,否则输出低,这样,我们就可以通过修改PWM_CMP的值来调节10输出脉宽,达到模拟PWM的效果了.PWM周期=计时器中断时间/PWM_NUM;好吧,我的文字表达能力不好,贴张图来说明可能比较好:如图,假设1^14_^^=6^^1^_1^=16,也就是,?〜14_1;14达到16后清零.每个•时器中断周期PWM_NUM自动加一,判断是否小于PWM_CMP,是则输出高电平,否则输出低电平,所以,如图所示,当PWM_NUM累加到6前,输出电平是一直是高的,知道PWM.NUM累加到6后,输出就拉低了,当PWM

4、_NUM达到16后,清零,这时PWM.NUM又小于PWM_CMP,故PWM输出又为高了,周而S始,就达到模拟PWM的效果了,PWM周期就等于PWM.NUM«装周期.当然值得注意的是,因为判断是在中断服务程序中执行,所以汁时器周期不能太短.好吧,贴整个完整的程序出来,它的功能我先说明一下.按下key1变亮,按下key2变暗,长按则连续调节,两个键一起按下改变显示方式,分别有四个模式,单个分别亮,两个亮,两个都不亮.每次改变亮度和模式都写入单片机EEPR0M,开机读取EEPR0M,这样便能开机保持上次关机的状态,不用

5、每次打开都要调Vf了.说到这我就要吐槽了,这STC15系列A版外部中断呐,连掉电唤醒都实现不了,那儿个外部中断LI都是摆设的.所以原本打算使用掉电模式作为关机状态的,但是唤醒不了(除了复位键),所以只好用外部硬件开关关机了....废话不多说,贴程序,程序有标注,看不明白或有问题指教的贴出来,虚心接受.#includenreg52.hn#include"intrins.h#defineON0//LED是低电平有效#defineOFF1#definePWM_TIME200//计时器计数值#defineMODEL.AD

6、DR0x0000//EEPEOM地址#definePWM_CMP_ADDR0x0200sfrAUXR=0x8e;sfrP3Ml=0xbl;sfrP3M0=0xb2;sfrIAP_DATA=0xc2;sfrIAP_ADDRH=0xc3;sfrIAP_ADDRL=0xc4;sfrIAP_CMD=0xc5;sfrIAP_TRIG=0xc6;sfrIAP_CONTR=Oxc7;sbitKEYl=P3A0;sbitKEY2=P3A1;sbitLED1=P3A2;sbitLED2=P3A3;unsignedcharkey_d

7、own,key_cont,key_up;//donw为上开沿,cont为长效,up为下降沿unsignedcharpwm_cmp=l;//PWM比较值unsignedcharpwm_num=0;//PWMU•数值unsignedcharled_model=0;//LED模式unsignedcharpwm_delay=0;//延时竹存unsignedcharcmp_temp;//led_cmp的竹存,用于运算是否写入EEPROM//计时器0初始化voidtimer一init(){TMOD=0x00;//模式0,16

8、位自动装载模式EA=1;ET0=l;TR0=1;AUXR

9、=0x80;//IT模式TL0=65536-PWM_TIME;TH0=(65536-PWM_TIME)»8;}//EEPROM读写后防止误操作voideeprom_dle()IAP_CONTR=0;IAP_CMD=0;1AP_TRIG=0;IAP_ADDRH=0;IAP_ADDRL=0;}//擦除EEPROM扇区v

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。