标题: 尝试写了一个交通灯的程序,但是不知道哪里错了,秒表秒数动得很快,求大神指导 [打印本页]

作者: 电ac    时间: 2020-6-29 04:53
标题: 尝试写了一个交通灯的程序,但是不知道哪里错了,秒表秒数动得很快,求大神指导
这是我写的代码。
#include<regx51.h>
sbit R=P1^0;
sbit Y=P1^1;
sbit G=P1^2;
sbit com1=P3^0;
sbit com2=P3^1;
unsigned char c,miao;
unsigned char dm[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(unsigned int i)
{
while(i--);
}
void timer() interrupt 1
{   
   TH0=(65536-25000)/256;
  TL0=(65536-25000)%256;
  c++;
  if(c>=40)
   c=0;
   miao--;
}
void xs()
{
com1=1;com2=0;
P2=dm[miao/10];
delay(1000);
P2=0xff;
com1=0;com2=1;
P2=dm[miao%10];
delay(1000);
P2=0xff;
}
void t0()
{
   TMOD=0X01;
    EA=1;
    ET0=1;
  TR0=1;
    TH0=(65536-25000)/256;
  TL0=(65536-25000)%256;
}
void main ()
{
t0();
    while (1)
    {
   miao=39;
   while(miao!=0)
   {
    G=0;
    Y=1;
    R=1;
    xs();
    }
   miao=5;
   while(miao!=0)
   {
    Y=0;
    R=1;
    G=1;
    xs();
   }
   miao=59;
   while(miao!=0)
   {
    R=0;
    G=1;
    Y=1;
    xs();
    }
  }  
}


作者: 不要黑    时间: 2020-6-29 15:11
定时器中断函数。if语句后加大括号
void timer() interrupt 1
{   
   TH0=(65536-25000)/256;
  TL0=(65536-25000)%256;
  c++;
  if(c>=40)
{
   c=0;
   miao--;
}
}

作者: xianfajushi    时间: 2020-6-29 15:11
  c=0;    miao--;应该用花括号括起来,{  c=0;    miao--;}对?
作者: man1234567    时间: 2020-6-29 17:40
楼上正解。
IF如果不加括号只将随后的一句纳入条件判断,也就是说你原来的程序只有当C达到40后置零,而miao--并不受条件约束,加了括号后所有括号内的都纳入条件判断。
c>=40不写成c=40是怕跑飞么
作者: 电ac    时间: 2020-7-1 23:01
谢谢各位大佬,确实是大佬说的那样,程序可以正常运行了
作者: 电ac    时间: 2020-7-1 23:15
xianfajushi 发表于 2020-6-29 15:11
c=0;    miao--;应该用花括号括起来,{  c=0;    miao--;}对?

是的,已经改好了。谢谢

作者: 电ac    时间: 2020-7-1 23:16
不要黑 发表于 2020-6-29 15:11
定时器中断函数。if语句后加大括号
void timer() interrupt 1
{   

你说的是对的,谢谢




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1