关于C51 的for语句 请教大家

[复制链接]
 楼主| yuanbao502 发表于 2009-3-24 16:26 | 显示全部楼层 |阅读模式
#include&nbsp;&ltreg51.h&gt<br />#define&nbsp;uint&nbsp;unsigned&nbsp;int<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br />uchar&nbsp;code&nbsp;NUM[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};<br />uchar&nbsp;code&nbsp;DIS[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};<br />/////////////////<br />#define&nbsp;CC&nbsp;2<br />void&nbsp;delay(uint&nbsp;k)///////延时<br />{<br />&nbsp;uint&nbsp;i;uchar&nbsp;j;<br />&nbsp;for(i=0;i&ltk;i++)<br />&nbsp;{<br />&nbsp;&nbsp;for(j=0;j&lt121;j++);<br />&nbsp;}<br />}<br />////////////<br />void&nbsp;Pfrint(uint&nbsp;z)//送显示<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0=NUM[z/10];<br />&nbsp;&nbsp;P1=DIS[0];<br />&nbsp;&nbsp;delay(1);<br />&nbsp;&nbsp;/////////////<br />&nbsp;&nbsp;P0=NUM[z%10];<br />&nbsp;&nbsp;P1=DIS[1];<br />&nbsp;&nbsp;delay(1);<br />&nbsp;&nbsp;/////////////<br />}<br />void&nbsp;main()////主程序<br />{<br />&nbsp;uchar&nbsp;x=1;<br />&nbsp;uchar&nbsp;z;<br />&nbsp;uint&nbsp;y;<br />&nbsp;<br />&nbsp;for(x=1;x&lt25;x++)<br />&nbsp;{<br />&nbsp;&nbsp;for(z=0;z&lt250;z++)<br />&nbsp;&nbsp;{y=x*CC;<br />&nbsp;&nbsp;Pfrint(y);}<br />&nbsp;&nbsp;<br />&nbsp;}<br />}<br /><br /><br />&nbsp;<br /><br />这个程序&nbsp;&nbsp;用&nbsp;keil调试&nbsp;是可以结束的<br /><br />也就是for语句&nbsp;的循环是有次数的&nbsp;<br /><br />但是我下载到&nbsp;&nbsp;实验板上面的时候&nbsp;&nbsp;显示的现象是&nbsp;0,&nbsp;2,&nbsp;4&nbsp;.......48<br /><br />然后&nbsp;&nbsp;再循环了&nbsp;从48&nbsp;跳到0&nbsp;再开始显示?<br /><br />&nbsp;&nbsp;for&nbsp;语句&nbsp;按道理&nbsp;循环次数有限的啊<br /><br />请大虾帮忙<br /><br />谢谢<br />
computer00 发表于 2009-3-24 16:36 | 显示全部楼层

哈哈,我看中了楼主的Pfrint这个单词有意思....

楼主你的程序没有主循环,跑到最后面又跑回去了。<br /><br />在后面加个while(1);让它停下来。
 楼主| yuanbao502 发表于 2009-3-24 22:40 | 显示全部楼层

关于C51 的for语句 请教大家

Pfrint&nbsp;是自己随便起的一个名字<br />我E文不好拉<br />谢谢楼上的<br />虽然后面加个&nbsp;while(1)&nbsp;能让它动态循环停止<br />但是&nbsp;如果不加&nbsp;它是怎么循环的&nbsp;我还是看不明白<br />for(z=0;z&lt250;z++)<br />&nbsp;&nbsp;{y=x*CC;<br />&nbsp;&nbsp;Pfrint(y);}<br />这里是执行&nbsp;250次<br /><br /><br />for(x=1;x&lt25;x++)<br />{<br />&nbsp;&nbsp;for(z=0;z&lt250;z++)<br />&nbsp;&nbsp;{y=x*CC;<br />&nbsp;&nbsp;Pfrint(y);}<br />&nbsp;&nbsp;<br />}<br />这个是&nbsp;250*25次啊<br />执行完&nbsp;应该不执行了啊<br />我用keil单步调试&nbsp;到最后显示执行250*25次<br />但是下载到&nbsp;实验板上却&nbsp;是循环显示&nbsp;&nbsp;不知道为什么啊?<br />
vwwj 发表于 2009-3-25 01:30 | 显示全部楼层

主函数必须是死循环,程序才能不停运行

<br />&nbsp;&nbsp;要是没有死循环,程序运行完了就会跑到没有代码的地方去运行,这样就跑飞了死机然后自动重启
 楼主| yuanbao502 发表于 2009-3-25 09:31 | 显示全部楼层

关于C51 的for语句 请教大家

谢谢&nbsp;上面的&nbsp;两位
yudongx 发表于 2009-3-26 22:49 | 显示全部楼层

建议先用好汇编,然后再进入C,汇编是基础

  
lelee007 发表于 2009-3-27 20:06 | 显示全部楼层

LZ好像没怎么看明白几个高手给的解答哦

哈哈,<br />吧main函数改成如下的形式<br />void&nbsp;main()////主程序<br />{<br />uchar&nbsp;x=1;<br />uchar&nbsp;z;<br />uint&nbsp;y;<br /><br />for(x=1;x&lt25;x++)<br />{<br />&nbsp;&nbsp;for(z=0;z&lt250;z++)<br />&nbsp;&nbsp;{y=x*CC;<br />&nbsp;&nbsp;Pfrint(y);}<br />&nbsp;&nbsp;<br />}<br />//主程序死循环<br />while(1);<br />//主程序死循环<br />}<br /><br />然后再编译下载到你的实验板看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

16

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部