完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本人入门学徒一枚,最近刚刚接触单片机,写了一个小程序,是控制单个数码管显示的程序(程序如下),在单步运行时,每次运行到delays()时就陷入死循环,个人感觉程序没有问题,就是不知道到底问题出自哪里,请入行的人给予知道。谢谢!
付程序如下: #include #define ST P3 unsigned char code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; char i; void delays(unsigned int c); void main() { for(i=0;i<10;i++) { ST=~table; delays(1000); } } void delays(unsigned int c) { unsigned int a, b; for (;c>0;c--) for (b=5000;b>0;b--) for (a=2000;a>0;a--); } |
|
相关推荐
14个回答
|
|
|
|
|
|
main程序放最后 不然要声明函数的
|
|
|
|
|
|
|
|
table是个数组常亮吧,常量什么按位取反呢?看不明白
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
取反是为了控制数码管,这里不是问题。因为我如果把延时函数去掉,函数是正常的,只是加上这个delays,运行到这里就变化死循环 |
|
|
|
手头教程是: for(i=0;i<136;i++) { P0=Pattern_P0; P2=Pattern_P2; DelayMS(100); } 不知道你那个“~”操作是什么意思 P0=Pattern_P0; P0=~P0 要不你先赋值在按位取反看看 |
|
|
|
本帖最后由 ntmusic 于 2013-11-30 11:21 编辑
个人感觉你的程序写的不是很规范。 首先,ST=~table;是错误的写法。因为table是一个数组。 其次,你的程序for循环不写{},绝对是硬伤。以后你会明白的。 再次,对于纯计数用的变量,unsiged char要比char型生成的代码少,不越界的情况下unsigned char 要比unsignedint省内存和ROM 最后,程序"死"在那里是假象,真正原因是延时太长(你也不想想单片机的运算速度)。你为什么不试一试减少一下延时函数的变量赋值呢 |
|
|
|
个人赞同十一楼的观点,你算算你延时的时间,太长了吧,另外keil有一个bug,就是main函数,是能无限循环的,相当于一个while(1),for循环的镶嵌也太多了,
|
|
|
|
11楼正解,你换一个延时函数试试,
|
|
1 条评论
|
|
你这个 ST=~table; KEIL编译器通不过的!
|
|
|
|
void delays(unsigned int c)
{ unsigned int a, b; for (;c>0;c--) for (b=5000;b>0;b--) for (a=2000;a>0;a--); }//FOR不加括号这习惯不好 DELAYMS没有进入死循环这不过延时了很长时间而已! |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-移植前准备之git管理内核源码
978 浏览 0 评论
【瑞萨RA2L1入门学习】+ MacOS安装e2studio
403 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-本地仓库管理之分支间的操作
685 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】3D 图形显示
560 浏览 0 评论
676 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12216 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-26 14:43 , Processed in 0.953633 second(s), Total 72, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号