标题: 两位数码管显示器控制交通灯,c语言 [打印本页]

作者: WANGHAO.521    时间: 2016-12-2 10:14
标题: 两位数码管显示器控制交通灯,c语言
#include<reg52.h>
#define uchar unsigned char
bit flag;
sbit red1_1=P1^0;   //南北红灯D1
sbit yel1_1=P1^1; //南北黄灯D2
sbit gre1_1=P1^2; //南北绿灯D3
sbit red1_2=P1^3; //南北红灯D4
sbit yel1_2=P1^4; //南北黄灯D5
sbit gre1_2=P1^5; //南北绿灯D6

sbit red2_1=P1^6; //东西红灯D7
sbit yel2_1=P1^7; //东西黄灯D8
sbit gre2_1=P0^0; //东西绿灯D9
sbit red2_2=P0^1; //东西红灯D10
sbit yel2_2=P0^2; //东西黄灯D11
sbit gre2_2=P0^3; //东西绿灯D12

uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98};
uchar n,n1,aa=0,shi,ge,shi1,ge1;
void init();
void xianshi1(uchar shi,uchar ge);
void xianshi2(uchar shi1,uchar ge1);
void delay(uchar z)
{
  uchar x,y;
  for(x=z;x>0;x--)
     for(y=110;y>0;y--);
}
main()
{
   n=30;
     shi=n/10;
  ge=n;
     n1=30;
     shi1=n1/10;
  ge1=n1;

    init();
   while(1)
      {
      if(flag!=1)
       xianshi1(shi,ge);
    else
            xianshi2(shi1,ge1);

   }
}

void xianshi1(uchar shi,uchar ge)
{
     P3=0x02;
     P2=tab[ge];
     delay(200);
     P3=0x01;
     P2=tab[shi];
     delay(200);
}


void xianshi2(uchar shi1,uchar ge1)
{
  P3=0x08;
  P2=tab[ge1];
     delay(200);
     P3=0x04;
     P2=tab[shi1];
     delay(200);

}

void init()
{
  TMOD=0x01;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%6;
  EA=1;
  ET0=1;
  TR0=1;
}

void timer0() interrupt 1
{
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%6;
  aa++;
     if(flag!=1)
       {
    if(aa==20)
       {
          aa=0;
                      red1_1=0;red1_2=0;
                      gre2_1=0;gre2_2=0; //启动南北红灯1和东西绿灯2   

         n--;
                   shi=n/10;
          ge=n;

                if(n<=3)
                    {
       red1_1=0;red1_2=0;
       gre2_1=1;gre2_2=1;
                      yel2_1=0;yel2_2=0;//启动南北红灯1和东西黄灯2

                     if(n<=0)
            {
                        n=30;         
                           red1_1=1;red1_2=1;
         gre1_1=0;gre1_2=0;
         yel2_1=1;yel2_2=1;
         red2_1=0;red2_2=0;//启动南北绿灯1和东西红灯2

                        TR0=0;
                           TH0=(65536-50000)/256;
                        TL0=(65536-50000)%6;
            TR0=1;
                           aa++;
            flag=1;

                 }
                     }
                 }
       }
     else
     {
        if(flag==1)
          {  
            //   TH0=(65536-50000)/256;
         //   TL0=(65536-50000)%6;
         //   TR0=1;
            //   aa++;
            if(aa==20)
       {
             aa=0;                     
                   n1--;
                   shi1=n1/10;
                    ge1=n1;
          if(n1<=3)
           {
    gre1_1=1;gre1_2=1;
              yel1_1=0;yel1_2=0;
             red2_1=0;red2_2=0;//启动南北黄灯1和东西红灯2

                 if(n1<=0)
         {
            n1=30;
                           yel1_1=1;yel1_2=1;
                           red2_1=1;red2_2=1;

                 TR0=0;
                TH0=(65536-50000)/256;
                TL0=(65536-50000)%6;
                TR0=1;
                  flag=0;
                }
                    }
                 }
          }
      }
}



作者: 临兵酎者    时间: 2017-11-27 15:24
有原理图吗?




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