标题: 单片机C语言交通信号灯 [打印本页]

作者: 天天儿    时间: 2020-6-5 10:51
标题: 单片机C语言交通信号灯
绿灯先亮4秒
最后一秒为快闪(亮暗各0.1秒,闪烁5次)
然后黄灯亮2秒
最后红灯亮4秒
    #include <reg52.h>
#define uchar unsigned char;
#define uint unsigned int;
sbit horizontal_red=P1^0;
sbit horizontal_yellow=P1^1;
sbit horizontal_green=P1^2;
sbit vertical_red=P1^3;
sbit vertical_yellow=P1^4;
sbit vertical_green=P1^5;
uchar code display_code[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X00};

//延时函数ms
void DelayMS(unsigned int a){
int i=0,j=a;
for(j=a;j>0;j--){
  for(i=0;i<120;i++){
   ;
  }
}
}        
   
//垂直通行
void vertical_1(){
  int i;   
for(i=0;i<=12;i++){
  horizontal_red=0;  //i<=12时,水平方向红灯亮,垂直方向绿灯亮倒计时9秒
  if(i<7){
   vertical_green=0;         
   P2=display_code[9-i];   
   DelayMS(1000);   
  }else if(i<=9){
   vertical_green=0;
     P2=display_code[9-i];
   DelayMS(200);
   P2=display_code[10];
   DelayMS(200);
  }else{
    vertical_green=1;        
      P2=0x00;
   vertical_yellow=0;            //垂直方向黄灯亮延迟3秒
   DelayMS(1000);
  }
  vertical_yellow=1;
  horizontal_red=1;         
}
}

//水平通行,垂直不通行
void horizontal_1(){
int i;   
for(i=0;i<=12;i++){
     vertical_red=0;    //i时<=12,垂直方向红灯亮,水平方向绿灯亮
  if(i<9){      //前九秒,水平方向绿灯亮
   horizontal_green=0;
  }else{
   horizontal_green=1;
   horizontal_yellow=0;
  }   
  if(i>3){          //i>3开始倒计时
   P3=display_code[12-i];           
   DelayMS(1000);   
  } else{
   DelayMS(1000);
  }
  P3=0x00;
}
horizontal_yellow=1;
vertical_red=1;
}

void main(){
P2=0x00;
P3=0x00;
while(1){
  vertical_1();
  horizontal_1();
}  
}

HY[FIN4[NHNFC}1`O~_{DGY.png (76.99 KB, 下载次数: 34)

HY[FIN4[NHNFC}1`O~_{DGY.png





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