Tomzong 发表于 2007-1-17 11:02

学校电子竞赛--

我在P1.0口接了一个LED,并且通过程序了解单片机工作情况<br />我设计的电路和程序如下:<br />#include&nbsp;&ltreg51.h&gt<br />#include&nbsp;&ltstdio.h&gt<br />void&nbsp;delay(unsigned&nbsp;char&nbsp;i);<br />sbit&nbsp;p10&nbsp;=&nbsp;P1^0;<br /><br />void&nbsp;main()<br />{<br />&nbsp;<br />&nbsp;while(1)<br />&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;p10&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(3000);&nbsp;&nbsp;&nbsp;&nbsp;//延时&nbsp;3000*1=3秒<br />&nbsp;&nbsp;&nbsp;&nbsp;p10&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;}<br /><br /><br />void&nbsp;delay(unsigned&nbsp;char&nbsp;i)<br />{<br />unsigned&nbsp;char&nbsp;j,k;<br />&nbsp;&nbsp;for(j=i;j&gt0;j--)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(k=120;k&gt0;k--)&nbsp;{}&nbsp;&nbsp;&nbsp;&nbsp;/*excute&nbsp;for&nbsp;1ms*/<br />&nbsp;&nbsp;&nbsp;}<br />}<br />结果,上电后,发觉LED灯不亮,我重新上电后发觉LED灯亮,但不延时灭.<br />不知道问题出在何处,还望指教!<br />电路设计和程序问题?<br /> 相关链接:<a href='https://bbs.21ic.com/upfiles/img/20071/200711711236822.rar'>https://bbs.21ic.com/upfiles/img/20071/200711711236822.rar</a>

二氧化碳 发表于 2007-1-17 11:07

变量对不上

unsigned&nbsp;char&nbsp;j,k;<br /><br />delay(3000);&nbsp;&nbsp;&nbsp;&nbsp;//延时&nbsp;3000*1=3秒<br /><br />变量定义错了。CHAR最大就是255

Tomzong 发表于 2007-1-17 12:47

回复

程序修改过了,但发现还是有问题,LED灯一直亮.请帮忙看看硬件图,谢谢!解压文件就可以看见PROTEL图.

forthlab 发表于 2007-1-17 13:15

看这里,漏了一行。

用仿真器单步运行一下就能发现问题啊。<br />下次注意<br /><br /><br />while(1)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;p10&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(3000);&nbsp;&nbsp;&nbsp;&nbsp;//延时&nbsp;3000*1=3秒<br />&nbsp;&nbsp;&nbsp;&nbsp;p10&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(3000);&nbsp;&nbsp;&nbsp;&nbsp;//**********************延时&nbsp;3000*1=3秒<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />

Tomzong 发表于 2007-1-17 17:22

谢谢!

LED还是不正常显示.请大虾们帮看看电路

awey 发表于 2007-1-17 21:44

硬件没问题

void&nbsp;main()<br />{<br /><br />while(1)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;p10&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(3000);&nbsp;&nbsp;&nbsp;&nbsp;//延时&nbsp;3000*1=3秒<br />&nbsp;&nbsp;&nbsp;&nbsp;p10&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(3000);&nbsp;&nbsp;&nbsp;&nbsp;//延时&nbsp;3000*1=3秒<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />void&nbsp;delay(unsigned&nbsp;int&nbsp;i)<br />{<br />unsigned&nbsp;char&nbsp;k;<br />unsigned&nbsp;int&nbsp;&nbsp;j;<br />&nbsp;&nbsp;for(j=i;j&gt0;j--)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(k=120;k&gt0;k--)&nbsp;{}&nbsp;&nbsp;&nbsp;&nbsp;/*excute&nbsp;for&nbsp;1ms*/<br />&nbsp;&nbsp;&nbsp;}<br />}

王紫豪 发表于 2007-1-18 08:29

服了你了

unsigned&nbsp;char&nbsp;k;<br />unsigned&nbsp;int&nbsp;&nbsp;j;<br />&nbsp;&nbsp;for(j=i;j&gt0;j--)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(k=120;k&gt0;k--)&nbsp;{}&nbsp;&nbsp;&nbsp;&nbsp;/*excute&nbsp;for&nbsp;1ms*/<br />&nbsp;&nbsp;&nbsp;}<br />}<br />////////////////////<br />unsigned&nbsp;char&nbsp;k;<br />unsigned&nbsp;int&nbsp;&nbsp;j;<br /><br />for&nbsp;里面的条件是j&gt0,k&gt0&nbsp;&nbsp;,楼主请告诉我&nbsp;j,k&nbsp;啥时候小于零?

awey 发表于 2007-1-18 09:01

楼上正确

变量不能定义成&nbsp;unsigned&nbsp;,不然永远不会小于0。<br />

coldra 发表于 2007-1-18 09:12

j,k 最后会等于零然后循环终结

页: [1]
查看完整版本: 学校电子竞赛--