天天看點

交通燈(一)

南北方向  綠25秒         東西方向   紅30秒

                黃5秒                            綠25秒

                紅30秒                          黃5秒

#include<reg52.h>     //包含頭檔案,一般情況不需要改動,頭檔案包含特殊功能寄存器的定義

#include<math.h>  

#define uchar unsigned char

#define uint  unsigned int

#define ulang unsigned lang

static unsigned char count;

code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 

        //共陰數位管 0-9

uchar smg[8];                 //定義緩沖區

uint  we,ns,h,j; 

int aaa(); 

int bbb();

int eee();

void delay(unsigned int cnt)

{

 while(--cnt);

}

void display( )

           smg[0]=tab[we/10];     

      smg[1]=tab[we%10];

 smg[2]=0x00;             

           smg[3]=0x00;   

            smg[4]=0x00;

      smg[5]=0x00;            

                 smg[6]=tab[ns/10];  

 smg[7]=tab[ns%10];

void main()

     uchar i;

     tmod |=0x01;  //定時器0 10ms in 12m crystal 用于計時

th0=0xd8;     //初值

tl0=0xf0;

et0=1;

tr0=1;

     ea =1;     

 display();

 while(1)

 {

for(i=0;i<8;i++)  //顯示函數

  {

     p0=smg[i];

p2=i;

delay(100);

  }

          ccc();

display( );

      }

void timer() interrupt 1  

   th0=0xd8;                  //重新指派

   tl0=0xf0;

   count++;

int aaa()

          if(j<25)

     {

     if(j==1) { we=30,ns=25; }

ns--;

     we--;

     p1=0xde;

return 0; } 

   if(25<=j<30)

 {       

     if(j==26)  {  ns=5; } 

    p1=0xee;

ns--; 

we--;  

return 0;   }

int bbb()

            if(h<25)

     if(h==1) { we=25,ns=30; }

      p1=0xf3;

   if(25<=h<30)

     if(h==26)  {  we=5; } 

    p1=0xf5;

 }

 int eee()

  j=0;

h=0;

return 0;

 int ccc()

 if (count==100)

   {

           count=0;

   j++;

if ( (j>30)&&(j!=61))  { h++;      bbb();

   if(j==61)

 { eee(); return 0;}

              aaa();     return 0;   

  }