找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1642|回复: 0
打印 上一主题 下一主题
收起左侧

单片机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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表