完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
想做一个两秒为周期的呼吸灯,一秒内越来越亮 ,第二秒内越来越暗。
可是按我写的程序变成一点的一点变亮 , 最后保持不变 ,求各位大神帮帮忙解答一下。 我的思路是计时器为1us ,里面有两个标记pwmt和tt, 当pwmt=1000的时候, 输出的value+1或者-1 , 然后当value=1000时,刚好经过了1000个pwm周期 ,也就是1000*1000*1us =1s,这样也就刚好在1s内value由0到最大,输出应该由最暗到最亮,反之也一样。 在每个pwm周期内tt小于value的时候输出等于1 ,tt大于value的时候输出等于0,这样也就做到了占空比逐渐增加或减小的pwm波形。 #include #define uint unsigned int ***it DA=P2^1; uint PWMT,tt,value; void init()//初始化计数器T0 { TMOD=0x01; TH0=(65536-1)/256; TL0=(65536-1)%256; EA=1; ET0=1; TR0=1; } void temer0() interrupt 1 { TH0=(65536-1)/256; TL0=(65536-1)%256; PWMT++; tt++; } void main() { uint sign;//标记,当sign=1时value递增,sign=0时value递减 init(); while(1) { if(PWMT>1000)//每过一个PWM周期,也就是1000*1us=1ms,value加一或减一 { PWMT=0; if(sign==1) value++; if(sign==0) value--; } if(value==1000)//value=1000说明经过了1000个pwm周期 也就是1000*1ms=1s sign=0; if(value==0) sign=1; if(tt>1000)//value最大1000,所以tt不能大于1000 tt=0; if(tt else DA=0; } } 根据我的理解这程序应该可以实现预计的功能 ,可实际下载到单片机里后完全不对 。希望大神们帮帮忙 |
|
相关推荐
2个回答
|
|
你的PWM部分,频率改变上好像不问题。
|
|
|
|
没发完呀
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
386 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1670 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1123 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1005 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1229 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12018 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 14:16 , Processed in 0.636994 second(s), Total 74, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号