基于基于51单片机模拟交通灯程序单片机模拟交通灯程序
基于基于51单片机模拟交通灯程序单片机模拟交通灯程序
系统概要系统概要:由于该交通系统设计一个十字路口,A道为主干道,B道为支干道。由于主干道的交通压力较大车流量大,所以A道
的通行时间(即A道的绿灯与黄灯的时间应该比B道的绿灯与黄灯时间长),只有A道的通行时间比B道的通行时间长才能合理
的分配十字交通路口的交通压力。并且该系统应该有紧急的交通情况,也就是遇到交通的紧急情况,A道与B道的交通灯应该
为红色,禁止A道与B道的车辆通过,使紧急车辆通过后。重新恢复到A道与B道红绿灯状态。
首先a道方向绿灯亮,b到方向红灯亮,同时开始计时60s,在段数码管上显示时间60秒倒数。当时间少于10s倒计时A道方向
切换黄灯,B道依然为红灯。当60s倒计时结束后,A道方向黄灯开始转变为红灯,B道方向红灯开始转变为绿灯。并开始倒计
时30秒,当时间少于5s时B道方向由绿灯转变为黄灯,A道方向还是红灯亮。当5s倒计时结束后B道黄灯转变为红灯,A道开始
由红灯转变为绿灯。接着又开始循环以上步骤。应该还包含一个紧急车辆的情况,当有紧急车辆通过时,AB道都应该为红
灯。(绿灯用亮3个灯,黄灯亮一个灯,红灯则不亮,紧急情况用按下按键K3)
废话不多说直接上代码:废话不多说直接上代码:
#include
#define uchar unsigned char
#define uint unsigned int
sbit DU=P2^0;//段码锁存器开关
//sbit DU1=P2^0;
//sbit DU2=P2^0;
sbit WE=P2^1;//位码锁存器开关
sbit beep=P2^3;
sbit gd=P2^2;
//sbit B_red=P1^5
sbit anniu=P3^2;
unsigned int pp;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //0到6显示
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//7到f显示
uchar j,k,l=255;
uchar a1,a0;
uchar shijian,deng=1;
void delay(unsigned int i) //位码的转换 3*5*125=1875ms=1.875s
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display(unsigned char sh_c,unsigned char g_c)
{ gd=0;
DU=0;
P0=table[sh_c]; //时间十位
DU=1;
DU=0;
WE=0;
P0=0xfe;
WE=1;
WE=0;
delay(5);
评论0