1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
最近在学单片机,学到PWM调光程序,自己也写了一个,但是发现有个问题:
程序是这样的: //2013.3.30 #include ***it LED=P1^0; void Delay(unsigned int t); void main (void) { unsigned int CYCLE=600,PWM_LOW=0; while(1) { LED=1; Delay(60000); for(PWM_LOW=1;PWM_LOW LED=0; Delay(PWM_LOW); LED=1; Delay(CYCLE-PWM_LOW); } LED=0; for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)//逐渐变暗 { LED=0; Delay(PWM_LOW); LED=1; Delay(CYCLE-PWM_LOW); } } } void Delay(unsigned int t) { while(--t); } 程序如果这样写,那会很顺畅,从暗变亮,到最亮之后从亮变暗 但如果我改一个字: 把逐渐变暗的for循环里的红色-1删掉,改成 for(PWM_LOW=CYCLE;PWM_LOW>0;PWM_LOW--)//逐渐变暗 程序就会出问题,从暗变亮之后到达最亮,然后会有一下熄灭的过程,然后才会变暗 表示不能理解为什么一个“-1”会有这么大效果? 求高手指导 |
|
相关推荐
8个回答
|
|
不知道你们有没有遇到这样的结果,刚才从另一个网站上,高手告诉我是:没有“-1”时,Delay(CYCLE-PWM_LOW);就会变成Delay(0);而子程序里是while(--t);while()函数里面的变量就会变成负的。所以才会出现问题。感谢高手们哈!
|
|
|
|
本帖最后由 wyb0104 于 2013-4-2 23:05 编辑
我又发现了,不是while()函数的变亮--t变成负数 因为我定义的t的类型是unsigned int型,范围是0~65535 所以--0=65535,于是Delay(CYCLE-PWM_LOW);是循环65536次,所以延时很长时间。 所以如果改成PWM_LOW=0,Delay(PWM_LOW);所以亮很久,才从暗到亮 改成PWM_LOW=CYCLE,所以灭很久,才从亮到暗 个人经验,希望有用... |
|
|
|
多谢....见识了.
|
|
|
|
老大,能不能上个图啊!
|
|
|
|
让俺也见识下!
|
|
|
|
原来如此,确实是这个原因
|
|
|
|
进来学习学习,刚开始搞单片机
|
|
|
|
程序烧录好了,是呼吸灯的效果就是呼吸有点急促
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
205 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1253 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
848 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
853 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1073 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12012 浏览 31 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 00:17 , Processed in 0.579620 second(s), Total 53, Slave 47 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号