⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 交通灯.txt

📁 实施交通灯的控制
💻 TXT
字号:
附  录
附录1
#include<AT89X51.H>
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,
                               0x66,0x6d,0x7d,0x07,
                               0x7f,0x6f,0x77,0x7c,
                               0x39,0x5e,0x79,0x71,0x00};
unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
                               0xef,0xdf,0xbf,0x7f};
unsigned char dispbuf[]={0,0,0,0,0,0,0,0};
unsigned char tempcount=0,temp=29,temp0,date=9;
unsigned char count=0,m=0;
unsigned int k=0,date0=0;
bit flag=1,flag0=0,flag1=0,flag2=0,flag3=0;
/*延时函数*/
void delay10ms(void)
{
 unsigned char i,j;
 for(i=20;i>0;i--)
  for(j=248;j>0;j--);
}
void main(void)              //主函数
{
 IP=0x01;
 TMOD=0x01;                  //定义T0为计数中断INT0为下降沿触发
 TH0=(65536-1000)/256;
 TL0=(65536-1000)%256;
 TR0=1;
 ET0=1;
 EA=1;
 EX0=1;
 IT0=1;
 while(1)
 {
  if(flag==1)
  {
   P1=0x9e;                 //东西方向绿灯亮,南北方向红灯亮
   P3_0=1;
   P3_1=1;
   P3_3=1;
   P3_7=0;
  }
   if(flag0==1)             //东西方向黄灯亮,南北方向红灯闪烁
   {
   P1_0=1;
   P1_1=0;
   P1_2=1;
   P1_3=1;
   P1_4=1;
   P1_6=1;
   P1_7=0;
   P3_0=1;
   P3_1=1;
   P3_3=1;
  }
  if(flag1==1)              //东西方向红灯亮,南北方向绿灯亮
  {
   P1=0xf3;
   P3_0=0;
   P3_1=0;
   P3_3=1;
   P3_7=1;
  }
  if(flag2==1)             
  
   P1_0=1;
   P1_1=1;
   P1_3=1;
   P1_4=0;
   P1_5=1;
   P1_6=1;
   P1_7=1;
   P3_1=1;
   P3_3=0;
   P3_7=1;
  }
  if(flag3==1)
  {
   P1=0xdb;
   P3_0=0;
   P3_1=1;
   P3_3=1;
   P3_7=0;
   }
 }
}
void t0(void)interrupt 1 using 0
{
 TH0=(65536-1000)/256;
 TL0=(65536-1000)%256;
 P0=dispcode[dispbuf[count]];
 P2=dispbitcode[count];  
 count++;
 if(count==8)
  count=0;
  m++;                       
 if(m==100)                   //使的红灯闪烁
  {
   m=0;
   if(flag0==1)
   {
    P1_5=~P1_5;
	P3_7=~P3_7;
	}
   if(flag2==1)
   {
    P1_2=~P1_2;
	P3_0=~P3_0;
	}
  }
 if(flag3==0)                //警车或急救车到来时保存当前的状态
 {
  temp0=temp;
  k++;
 }
 else                        
 
  flag=0;
  flag0=0;
  flag1=0;
  flag2=0;
  temp0=date;
  date0++;
  if(date0==1000)
  {
   date0=0;
   date--;
   if(date==0xff)           
   {
    date=9;
    flag3=0;
   }
  }
 }
 if(k==1000)
 {
  k=0;
  temp--;
  tempcount++;
  }
 dispbuf[1]=temp0%10;
 dispbuf[0]=temp0/10;
 dispbuf[3]=temp0%10;
 dispbuf[2]=temp0/10;
 dispbuf[5]=temp0%10;
 dispbuf[4]=temp0/10;
 dispbuf[7]=temp0%10;
 dispbuf[6]=temp0/10;
 if(0<tempcount&&tempcount<=30)
 {
  if(tempcount==30)
  {
   temp=4;
   flag=0;
   if(flag3==0)
   {
    flag0=1;
    dispbuf[2]=16;
    dispbuf[3]=16;
    dispbuf[4]=16;
    dispbuf[5]=16;
    }
   }
   else if(flag3==0)
    flag=1;
  }
 if(30<tempcount&&tempcount<=35) //东西方向绿灯亮了30s后,东西方向黄灯亮 ,南北方向红灯闪烁   
 {
  if(flag3==0)
   flag0=1;
  if(tempcount==35)            
  {
   temp=19;
   flag0=0;
   if(flag3==0)
    flag1=1;
  }
  else if(flag3==0)             //黄灯亮时,如果警车或急救车到来时显示时间否者不显示时间
  {
   dispbuf[2]=16;
   dispbuf[3]=16;
   dispbuf[4]=16;
   dispbuf[5]=16;
  }
 }
 if(35<tempcount&&tempcount<=55) //东西方向黄灯亮了5s后,东西方向红灯亮,南北方向绿灯亮
 {
  if(flag3==0)
   flag1=1;
  if(tempcount==55)
  {
   temp=4;
   flag1=0;
   if(flag3==0)
   {
    flag2=1;
    dispbuf[0]=16;
    dispbuf[1]=16;
    dispbuf[6]=16;
    dispbuf[7]=16;
    }
   }
  }
 if(55<tempcount&&tempcount<=60) //南北方向绿灯亮了20s后,南北方向黄灯亮,东西方向红灯闪烁
 {
  if(flag3==0)
   flag2=1;
  if(tempcount==60)              //南北方向黄灯亮了5s后,南北方向红灯亮,东西方向绿灯亮
  { 
   tempcount=0;
   temp=29;
   flag2=0;
   if(flag3==0)
    flag=1;
  }
  else if(flag3==0)              //黄灯亮时,如果警车或急救车到来时显示时间否者不显示时间
  {
   dispbuf[0]=16;
   dispbuf[1]=16;
   dispbuf[6]=16;
   dispbuf[7]=16;
  }
 }
}
void into(void)interrupt 0 using 1
{
 delay10ms();
 IE0=0;
 flag3=1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -