三色交通燈只代表轉(zhuǎn)向指示,全滅表示形式的通行
1.整個(gè)系統(tǒng)具有開(kāi)啟、停止、運(yùn)行等選項(xiàng),在停止?fàn)顟B(tài)可以進(jìn)行通行時(shí)間的設(shè)置;
2.可以對(duì)車輛的通行時(shí)間進(jìn)行設(shè)置;
3.不同類型的通行應(yīng)可以單獨(dú)設(shè)置,如上下直行和左右直行可以為不同的通行時(shí)間;
4.利用LCD1602(LM016L)指示各個(gè)路口通行剩余時(shí)間以及修改時(shí)間。
sbit k1=P3^2;//設(shè)置
sbit k2=P3^3;//加
sbit k3=P3^4;//減
sbit k4=P3^0;//啟動(dòng)
sbit k5=P3^1;//停止
sbit red1 =P1^0; //南北方向
sbit yellow1=P1^1;
sbit green1 =P1^2;
sbit red2 =P1^3; //東西方向
sbit yellow2=P1^4;
sbit green2 =P1^5;
sbit left1=P1^7;//東西左拐
sbit left2=P1^6;//南北左拐
uchar sec=0,miao=0; //定時(shí)
uchar nan=0,dong=0;//東西南北時(shí)間
uchar mode=0; //路燈工作順序
uchar nan_lim=10,dong_lim=10,left1_lim=10,left2_lim=15;//自由調(diào)整時(shí)主次干道綠燈時(shí)間
uchar yellow_time=3;//黃燈時(shí)間
uchar human_time=10;//行人通行時(shí)間
uchar moshi=10;
uchar disp[]="00s";
void delay(uint i)//延時(shí)
{
while(i--);
}
void control()//控制路燈
{
switch(mode)
{
case 0:red1=0;yellow1=1;green1=1;
red2=1;yellow2=1;green2=0;//東西直行
left1=1;left2=1;
nan=dong_lim+yellow_time*2+left1_lim+2;
dong=dong_lim;//設(shè)置初始時(shí)間
break;
case 1:red1=0;yellow1=1;green1=1;
red2=1;yellow2=0;green2=1;//東西黃燈亮
left1=1;left2=1;
dong=yellow_time;
break;
case 2:red1=0;yellow1=1;green1=1;//東西左拐
red2=1;yellow2=1;green2=1;
left1=0;left2=1;
dong=left1_lim;//設(shè)置初始時(shí)間
break;
case 3:red1=0;yellow1=1;green1=1;
red2=1;yellow2=0;green2=1;//東西黃燈亮
left1=1;left2=1;
dong=yellow_time;
break;
case 4:red1=1;yellow1=1;green1=0;
red2=0;yellow2=1;green2=1;//東西紅燈亮
left1=1;left2=1;
nan=nan_lim;
dong=nan_lim+yellow_time*2+left2_lim+2;//設(shè)置初始時(shí)間
break;
case 5:red1=1;yellow1=0;green1=1;
red2=0;yellow2=1;green2=1;//南北黃燈亮
left1=1;left2=1;
nan=yellow_time;
break;
case 6:red1=1;yellow1=1;green1=1;
red2=0;yellow2=1;green2=1;//南北左拐
left1=1;left2=0;
nan=left2_lim;
break;
case 7:red1=1;yellow1=0;green1=1;
red2=0;yellow2=1;green2=1;//南北黃燈亮
left1=1;left2=1;
nan=yellow_time;
break;
case 8:red1=1;yellow1=1;green1=1;//行人通行
red2=1;yellow2=1;green2=1;
left1=1;left2=1;
nan=human_time+1;
dong=human_time;
}
}
//清屏
void clear()
{
write_com(0x01);//清屏
delay(15000);
}
void main()//主函數(shù)
{
init_1602();//初始化LCD
TMOD=0x01;//定時(shí)器設(shè)置
TH0=0x3c; //50ms
TL0=0xb0;
ET0=1; //開(kāi)中斷
EA=1;
TR0=1; //啟動(dòng)定時(shí)器
red1=0;yellow1=1;green1=1; //禁行
red2=0;yellow2=1;green2=1;
left1=1;left2=1;
while(1)
{
if(!k1 &&(moshi<10)) //設(shè)置
{ //模式切換
if(moshi<5)
moshi++;
else
moshi=1;
clear();//清屏
while(!k1);
}
if(moshi==1)//調(diào)節(jié)南北時(shí)間
{
if(!k2)
{
if(nan_lim<99)
nan_lim++;
while(!k2);
}
if(!k3)
{
if(nan_lim>1)
nan_lim--;
while(!k3);
}
}
if(moshi==2)//調(diào)節(jié)南北左拐時(shí)間
{
if(!k2)
{
if(left2_lim<99)
left2_lim++;
while(!k2);
}
if(!k3)
{
if(left2_lim>1)
left2_l