C言语小问题请教

[复制链接]
2599|4
 楼主| saul2006 发表于 2009-4-11 10:44 | 显示全部楼层 |阅读模式
用P2口的P2.0到P2.5六个LED模拟交通灯,<br />主干道红黄绿灯分别为P2.3,P2.4,P2.5.<br />次干道红黄绿灯分别为P2.0,P2.1,P2.2.<br />开始时主干道绿灯,次干道红灯,延时60S<br />后主干道黄灯,次干道红灯,延时5S后主干道红灯,次干道绿灯,<br />再延时60S后,主干道红灯,次干道黄灯,5S后返回最初状态,<br /><br />#include&ltat89x51.h&gt<br />unsigned&nbsp;int&nbsp;count;<br />void&nbsp;main(void)<br />{<br />&nbsp;&nbsp;TMOD=0x01;<br />&nbsp;&nbsp;TH0=(65536-50000)/256;<br />&nbsp;&nbsp;TL0=(65536-50000)%256;<br />&nbsp;&nbsp;TR0=1;<br />&nbsp;&nbsp;ET0=1;<br />&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;if(TF0==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_5=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_0=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count++;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(count==1200)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_5=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_4=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(count==100)<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_4=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_0=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_3=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_2=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(count==1200)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_3=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_1=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_2=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(count==100)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TF0=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TH0=(65536-50000)/256;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TL0=(65536-50000)%256;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;}<br />}<br /><br /><br />大家帮忙看看啊,C&nbsp;语言学得不好,一直搞不懂,<br />程序执行到第三个if语句时,就不会往下执行了,直接跳回到了开始,并这个时候有三个灯是亮的,次干道红灯,主干道黄灯和绿灯,<br />怎么才能让它向下执行而不跳回去呀??
f4335089 发表于 2009-4-12 15:20 | 显示全部楼层

看看吧

#include&ltat89x51.h&gt<br />unsigned&nbsp;int&nbsp;count;<br />void&nbsp;main(void)<br />{<br />&nbsp;&nbsp;TMOD=0x01;<br />&nbsp;&nbsp;TH0=(65536-50000)/256;<br />&nbsp;&nbsp;TL0=(65536-50000)%256;<br />&nbsp;&nbsp;TR0=1;<br />&nbsp;&nbsp;ET0=1;<br />&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;if(TF0==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_5=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_0=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count++;&nbsp;&nbsp;&nbsp;//&nbsp;count没赋值直接++&nbsp;&nbsp;&nbsp;????<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(count==1200)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_5=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_4=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(count==100)<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_4=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_0=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_3=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_2=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(count==1200)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_3=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_1=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P2_2=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(count==100)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TF0=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TH0=(65536-50000)/256;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TL0=(65536-50000)%256;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;}<br />}<br />}<br /><br /><br /><br /><br />由于没赋值导致后面的if语句都不执行&nbsp;,&nbsp;这应该是个问题把<br />
hulie 发表于 2009-4-13 21:19 | 显示全部楼层

你这个程序好乱啊

固然count没赋初值直接++不对,但这里不是错误原因。逐条分析,一开始点亮了主绿次红,到count满1200即60S后,count清零,点亮主黄,灭主绿,向下执行不符合count满1200或100的要求,返回到if(TF0=1)处,这里又点亮主绿。永远只能在这两个if间循环,这就是点亮三个灯的原因。并且你的定时一点用都没有,因为永远都是TF0=1。
lelee007 发表于 2009-4-21 17:37 | 显示全部楼层

写的什么玩意,乱七八糟的

你那几个嵌套的if的关系都弄明白了没有?<br /><br />C语言还是好好看看吧<br /><br />没人有功夫给你慢慢讲C语言
无聊小子 发表于 2009-4-21 20:28 | 显示全部楼层

嘻嘻

嘻嘻...C语言很久没用了.真怀念当年天天研究那东东...建议看看&quot;谭浩强&quot;的书,C语言相当不错的入门书籍...除了入门知识还包含了数据结构....真是一书两用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

99

帖子

0

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