打印

C言语小问题请教

[复制链接]
1653|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
saul2006|  楼主 | 2009-4-11 10:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用P2口的P2.0到P2.5六个LED模拟交通灯,
主干道红黄绿灯分别为P2.3,P2.4,P2.5.
次干道红黄绿灯分别为P2.0,P2.1,P2.2.
开始时主干道绿灯,次干道红灯,延时60S
后主干道黄灯,次干道红灯,延时5S后主干道红灯,次干道绿灯,
再延时60S后,主干道红灯,次干道黄灯,5S后返回最初状态,

#include<at89x51.h>
unsigned int count;
void main(void)
{
  TMOD=0x01;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  TR0=1;
  ET0=1;
  while(1)
  {
    if(TF0==1)
    {
      P2_5=0;
      P2_0=0;
      count++;   
      if(count==1200)
      { 
        count=0;
        P2_5=1;
        P2_4=0;        
        count++;       
        if(count==100)
    { 
           count=0;
      P2_4=1;
      P2_0=1;
      P2_3=0;
         P2_2=0;
       count++;
       if(count==1200)
       {
             count=0;
                 P2_3=0;
             P2_1=1;
        P2_2=1;
             count++;
        if(count==100)
             {
              TF0=0;
              TH0=(65536-50000)/256;
              TL0=(65536-50000)%256;
             }
     }
       }       
     }
   }
 }
}


大家帮忙看看啊,C 语言学得不好,一直搞不懂,
程序执行到第三个if语句时,就不会往下执行了,直接跳回到了开始,并这个时候有三个灯是亮的,次干道红灯,主干道黄灯和绿灯,
怎么才能让它向下执行而不跳回去呀??

相关帖子

沙发
f4335089| | 2009-4-12 15:20 | 只看该作者

看看吧

#include<at89x51.h>
unsigned int count;
void main(void)
{
  TMOD=0x01;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  TR0=1;
  ET0=1;
  while(1)
  {
    if(TF0==1)
    {
      P2_5=0;
      P2_0=0;
      count++;   // count没赋值直接++   ????
      if(count==1200)
      { 
        count=0;
        P2_5=1;
        P2_4=0;        
        count++;       
        if(count==100)
    { 
           count=0;
      P2_4=1;
      P2_0=1;
      P2_3=0;
         P2_2=0;
       count++;
       if(count==1200)
       {
             count=0;
                 P2_3=0;
             P2_1=1;
        P2_2=1;
             count++;
        if(count==100)
             {
              TF0=0;
              TH0=(65536-50000)/256;
              TL0=(65536-50000)%256;
             }
     }
       }       
     }
   }
}
}




由于没赋值导致后面的if语句都不执行 , 这应该是个问题把

使用特权

评论回复
板凳
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的关系都弄明白了没有?

C语言还是好好看看吧

没人有功夫给你慢慢讲C语言

使用特权

评论回复
5
无聊小子| | 2009-4-21 20:28 | 只看该作者

嘻嘻

嘻嘻...C语言很久没用了.真怀念当年天天研究那东东...建议看看"谭浩强"的书,C语言相当不错的入门书籍...除了入门知识还包含了数据结构....真是一书两用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

99

帖子

0

粉丝