完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
单片机实验课,要求做交通灯的程序,我编了一个,主程序应该是对的,但是延时程序有问题,灯闪的特别快,相当于没有延迟的。请问我的程序哪里有问题吗?是用8255芯片来实验的
#include #include #define com8255 XBYTE[0xf0003] #define pa8255 XBYTE[0xf0000] #define pb8255 XBYTE[0xf0001] #define pc8255 XBYTE[0xf0002] #define uchar unsigned char void delay(unsigned int time) { unsigned int i,z; for(z=0;z for(i=0;i<1000;i++); } void main () { com8255=0x80; pa8255=0x7b; delay(10); while(1) { uchar count=5,a=5; pa8255=0x7e; delay(10); while(count--) { pa8255=0x7e; delay(1); pa8255=0x7f; delay(1); } pa8255=0x7d; delay(6); pa8255=0xdb; delay(10); while(a--) { pa8255=0xdb; delay(1); pa8255=0xfb; delay(1); } pa8255=0xbb; delay(6);} } |
|
相关推荐
7个回答
|
|
|
云汉达人 楼主把这个delay(1)里面的数字加大一点试试,延时应该会改变……具体多少合适看你自己需求,要精确延时建议用定时器……
|
|
|
|
|
|
延时是要看晶振的,,建议先用示波器来测试一下。。。
|
|
|
|
|
|
延时程序写错了。正确应该是
void delay(unsigned int time) { unsigned int i,z; for(z=0;z for(i=0;i<1000;i++); } 注意你那上面那个分号,相当于没有嵌套循环了。 |
|
|
|
|
|
云汉达人 void delay(unsigned int time)
{ unsigned int i,z; for(z=0;z for(i=0;i<1000;i++); } 第一个分号去掉 |
|
|
|
|
|
云汉达人 可以用示波器测试一下你的delay(1)的时间有多少 你可以将一个管脚先置高 然后delay(1000)拉低 示波器测试延迟了多少 除以100就是delay(1)的时间 然后基本就可以做精确延时了
|
|
|
|
|
|
|
|
|
|
|
|
你那个delay的值要计算一下
|
|
|
|
|
只有小组成员才能发言,加入小组>>
1027 浏览 1 评论
1856 浏览 0 评论
1837 浏览 1 评论
3261 浏览 5 评论
3587 浏览 9 评论
1029浏览 1评论
1853浏览 1评论
如何知道嵌入式电子控制单元 (ECU) 中的RAM使用情况?
1365浏览 1评论
1858浏览 0评论
1183浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 13:59 , Processed in 1.151698 second(s), Total 86, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
4155