完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 T_C_Wong 于 2014-11-12 18:04 编辑
以下是一个LED流水灯的编译,大部分都明白了,就是剩下最后一部分: void Delay10ms(unsigned int c) 大概明白这是一个延时,但为何是10ms延时,为什么要出现a和b,为什么是38和130,为什么是三个for语句,而不是二个或者四个?超级不明白,曾经尝试修改过数值去影响LED的延时时间,不过还是不太明白具体数值和for的关系,在此,真心求教~~~! #include #include #define GPIO_LED P2 void Delay10ms(unsigned int); void main(void) { unsigned char n; GPIO_LED=0x01; while(1) { for(n=0;n<7;n++) { GPIO_LED=_crol_(GPIO_LED,1); Delay10ms(50); } for(n=0;n<7;n++) { GPIO_LED=_cror_(GPIO_LED,1); Delay10ms(50); } } } void Delay10ms(unsigned int c) { unsigned char a,b; for(;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } |
|
相关推荐
7个回答
|
|
最后一段你是指延时函数吗?!~主函数放前面感觉整洁点,把其他子函数放后面,必须在主函数前面声明下如《~void Delay10ms(unsigned int);》如果放前面就不要声明了!~
最佳答案
|
|
|
|
一个也可以!~4个也没问题,三个在软件调试的时候,通过需改A,和B两个数,湊10ms,比较方便!如果是一个的话改的不够精确!~·4个改的太麻烦!~
|
|
|
|
那是怎么知道这就能凑10ms的呢?? |
|
|
|
你要是会软件调试的时候就知道了!~在调试的时候看运行这个延时要多少时间(首先可以根据晶振和机器周期算出理论的值-----单片机运行a*b次所需要的时间),多了就减少,少了就增加,根据调整a或b看调到最接近10ms时候(或者你感觉这个精度可以满足你的要求)就OK了 |
|
|
|
本帖最后由 T_C_Wong 于 2014-11-12 18:16 编辑
衷心感谢指教,关于测试速度,是我大意忘记了,还有一个小问题,既然最下面一段语言已经做到延时,那么为什么在 void main中,仍然在Delay10ms后面的()里面填上50??是因为最后一段的延时必须做50次才能延时10ms? 那个。。。最后一段为什么不放在前面,而要放在后面,有什么玄机吗? |
|
|
|
你的延时函数是10MS但是你调用的时候需要延时500ms,就要把c设成50了!~ |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
494 浏览 0 评论
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
1050 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1151 浏览 0 评论
887 浏览 0 评论
928 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11842 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 13:17 , Processed in 0.677845 second(s), Total 87, Slave 70 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号