求助用51单片机c语言编写一个交通灯的程序

2019-07-16 07:15发布

     要求红灯60s,黄灯20s,绿灯60s,黄灯20s这样循环,我不知道该怎样在这三个灯之间转换?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
SHENGTAILIE
2019-07-16 17:22
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit zhuy=P1^1;
sbit zhiy=P1^4;
uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code trafficdate[]={0x22,0x0c,0x14,0x21};
uchar aa=0,flag;
uchar seczhu,seczhi,zhus,zhug,zhis,zhig;
void delay (uint z)                          //时间延迟函数
{              
        uint x,y;
        for(x=z;x>0;x--)
        for (y=120;y>0;y--);
}
void init()
{TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
P1=0x21;
}
void display()
{zhus=seczhu/10;
zhug=seczhu%10;
zhis=seczhi/10;
zhig=seczhi%10;

P2=0xfe;
P0=table[zhus];
delay(5);

P2=0xfd;
P0=table[zhug];
delay(5);

P2=0xfb;
P0=table[zhis];
delay(5);

P2=0xf7;
P0=table[zhig];
delay(5);
}
void main (void)
{
        uchar i;            
    seczhu=50;
    seczhi=55;
        EA=1;
        init();
        while (1)
        {          
      switch(flag)
               {
              case 1: P1=0x22;
                      for(i=0;i<3;i++)
                        {
                              zhuy=~zhuy;
                              delay(140);
                           }       
                                  break;
              case 2: P1=0x0c;
                      break;
              case 3: P1=0x14;
                      for(i=0;i<3;i++)
                        {
                               zhiy=~zhiy;
                               delay(140);
                            }
                                  break;
              case 4: P1=0x21;
                          break;
             }                       
         }
  }   
void timer0() interrupt 1
{
  aa++;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  if(aa==20)
    {
      aa=0;
      seczhu--;
      seczhi--;
          if((seczhu==0)&&(seczhi==5))
         {
          seczhu=5;
          seczhi=5;
          flag=1;
         }
      if((seczhu==0)&&(seczhi==0)&&(flag==1))
         {
          seczhu=35;
          seczhi=30;
          flag=2;
         }
     if((seczhu==5)&&(seczhi==0))
         {
          seczhu=5;
          seczhi=5;
                  flag=3;
         }
     if((seczhu==0)&&(seczhi==0)&&(flag==3))
         {
          seczhu=50;
          seczhi=55;
          flag=4;
         }
    }
  display();
}

一周热门 更多>