交通灯十字路口控制器程序.docx

上传人:b****1 文档编号:3580017 上传时间:2023-05-06 格式:DOCX 页数:16 大小:16.49KB
下载 相关 举报
交通灯十字路口控制器程序.docx_第1页
第1页 / 共16页
交通灯十字路口控制器程序.docx_第2页
第2页 / 共16页
交通灯十字路口控制器程序.docx_第3页
第3页 / 共16页
交通灯十字路口控制器程序.docx_第4页
第4页 / 共16页
交通灯十字路口控制器程序.docx_第5页
第5页 / 共16页
交通灯十字路口控制器程序.docx_第6页
第6页 / 共16页
交通灯十字路口控制器程序.docx_第7页
第7页 / 共16页
交通灯十字路口控制器程序.docx_第8页
第8页 / 共16页
交通灯十字路口控制器程序.docx_第9页
第9页 / 共16页
交通灯十字路口控制器程序.docx_第10页
第10页 / 共16页
交通灯十字路口控制器程序.docx_第11页
第11页 / 共16页
交通灯十字路口控制器程序.docx_第12页
第12页 / 共16页
交通灯十字路口控制器程序.docx_第13页
第13页 / 共16页
交通灯十字路口控制器程序.docx_第14页
第14页 / 共16页
交通灯十字路口控制器程序.docx_第15页
第15页 / 共16页
交通灯十字路口控制器程序.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

交通灯十字路口控制器程序.docx

《交通灯十字路口控制器程序.docx》由会员分享,可在线阅读,更多相关《交通灯十字路口控制器程序.docx(16页珍藏版)》请在冰点文库上搜索。

交通灯十字路口控制器程序.docx

交通灯十字路口控制器程序

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetable[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x40

};

//*************digitdisplayport*******

sbitled_w1=P1^1;

sbitled_w2=P1^0;

sbitled_w3=P1^3;

sbitled_w4=P1^2;

//*****defineledport**********

sbitR1=P2^4;//eastandwestredled

sbitY1=P2^3;//eastandwestyellowled

sbitG1=P2^2;//eastandwestgreenled

sbitR2=P2^5;//southandnorthredled

sbitY2=P2^6;//southandnorthyellowled

sbitG2=P2^7;//southandnorthgreenled

//*********definekey**************

sbitk0=P3^0;//emergency

sbitk1=P3^1;//eastandwestpass

sbitk2=P3^2;//southandnorthpass

sbitk3=P3^3;//startandsubtract1

sbitk4=P3^4;//pauseandadd1

sbitk5=P3^5;//settime

//*********definevariable*********

bitflag,flag_t;

uchardx_time,nb_time;

ucharcnt,pass_time,cnt1,y_time;

uchark0num,k1num,k2num,k3num,k4num,k5num;

//*********definekey********

voiddelay(uinti)

{

uintx,y;

for(x=i;x>0;x--)

for(y=110;y>0;y--);

}

voidtimer0_init()

{

TMOD=0x11;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

EA=1;

ET0=1;

ET1=1;

}

voidled_display(uchardx,nb)

{

uchardx1,dx2,nb1,nb2;

dx2=dx/10;

dx1=dx%10;

nb2=nb/10;

nb1=nb%10;

if(dx>99)

{

led_w1=1;

led_w2=1;

}

else

{

led_w1=0;

P0=table[dx1];

delay(5);

led_w1=1;

if(dx<10&&dx>0)led_w2=1;

else

{

led_w2=0;

P0=table[dx2];

delay(5);

led_w2=1;

}

}

if(nb>99)

{

led_w3=1;

led_w4=1;

}

else

{

led_w3=0;

P0=table[nb1];

delay(5);

led_w3=3;

if(nb<10&&nb>0)led_w4=1;

else

{

led_w4=0;

P0=table[nb2];

delay(5);

led_w4=4;

}

}

}

//*************lightwork**********

voidcircle_led()

{

if(!

flag)

{

if(pass_time>5)

{

led_display(pass_time-5,pass_time);

R1=1;Y1=1;G1=0;//eastandwestpass

R2=0;Y2=1;G2=1;//southandnorthstop

}

if(pass_time<=5&&pass_time>0)

{

if(cnt>=10)led_display(pass_time,pass_time);

elseled_display(100,pass_time);

R1=1;G1=1;//eastandwestyellowledflash

if(cnt>=10)Y1=0;

elseY1=1;

R2=0;Y2=1;G2=1;

}

if(pass_time==0)

{

pass_time=nb_time;

flag=1;

}

}

else

{

if(pass_time>5)

{

led_display(pass_time,pass_time-5);

R1=0;Y1=1;G1=1;//eastandweststop

R2=1;Y2=1;G2=0;//southandnorthpass

}

if(pass_time<=5&&pass_time>0)

{

if(cnt>=10)led_display(pass_time,pass_time);

elseled_display(pass_time,100);

R1=0;Y1=1;G1=1;

R2=1;G2=1;//southandnorthyellowledflash

if(cnt>=10)Y2=0;

elseY2=1;

}

if(pass_time==0)

{

pass_time=dx_time;

flag=0;

}

}

}

voidemergency()//eastandwest,southandnorthstop

{

led_display(0,0);

R1=0;Y1=1;G1=1;

R2=0;Y2=1;G2=1;

}

voiddx_pass()//eastandwestpass,southandnorthstop

{

led_display(100,100);

if(y_time<=5&&y_time>0)

{

TR1=1;

R1=0;Y1=1;G1=1;

R2=1;G2=1;//southandnorthyellowledflash

if(cnt1>=10)Y2=0;

elseY2=1;

}

if(y_time==0)

{

TR1=0;

R1=1;Y1=1;G1=0;

R2=0;Y2=1;G2=1;

}

}

voidnb_pass()//southandnorthpass,eastandweststop

{

led_display(100,100);

if(y_time<=5&&y_time>0)

{

TR1=1;

R1=1;G1=1;

if(cnt1>=10)Y1=0;//eastandwestyellowledflash

elseY1=1;

R2=0;Y2=1;G2=1;

}

if(y_time==0)

{

TR1=0;

R1=0;Y1=1;G1=1;

R2=1;Y2=1;G2=0;

}

}

 

//***********keyboardscan************

voidkeyscan()

{

if(!

k5num)

{

if(k0==0)//*******emergency*******

{

delay(10);

if(k0==0)

{

while(!

k0);

TR0=0;

k0num=1;

}

}

if(!

k1num&&!

k0num)

{

if(k1==0)

{

delay(10);

if(k1==0)

{

while(!

k1);

k1num=1;

k2num=0;

y_time=5;//单方向通行时,黄灯闪烁时间

TR0=0;

TR1=1;

}

}

}

if(!

k2num&&!

k0num)

{

if(k2==0)

{

delay(10);

if(k2==0)

{

while(!

k2);

k1num=0;

k2num=1;

y_time=5;//单方向通行时,黄灯闪烁时间

TR0=0;

TR1=1;

}

}

}

if(k3==0)

{

delay(10);

if(k3==0)

{

while(!

k3);

if(k1num||k2num)pass_time=dx_time;//由东西或南北通行返回时,重新开始执行。

k0num=0;

k1num=0;

k2num=0;

k4num=0;

k5num=0;

TR0=1;

TR1=0;

flag_t=0;

}

}

if(!

k4&&!

k0num)//pause

{

delay(10);

if(k4==0)

{

while(!

k4);

TR0=0;

k4num=1;

}

}

}

if(k4num==1)//暂停键按下时,才可以调整两个方向通行时间

{

if(k5==0)

{

delay(10);

if(k5==0)

{

k5num++;

while(!

k5);

switch(k5num)

{

case1:

TR0=1;

flag_t=1;//调整时间时,pass_time值不变。

k5num=1;

break;

case2:

k5num=2;

break;

case3:

TR0=0;

k5num=0;

pass_time=dx_time;//重新赋值

break;

}

}

}

if(k5num!

=0)

{

if(k3==0)

{

delay(10);

if(k3==0)

{

while(!

k3);

switch(k5num)

{

case1:

dx_time--;

if(dx_time<10)dx_time=99;

break;

case2:

nb_time--;

if(nb_time<10)nb_time=99;

break;

}

}

}

if(k4==0)

{

delay(10);

if(k4==0)

{

while(!

k4);

switch(k5num)

{

case1:

dx_time++;

if(dx_time>=100)dx_time=10;

break;

case2:

nb_time++;

if(nb_time>=100)nb_time=10;

break;

}

}

}

}

}

}

voidmain()

{

timer0_init();

dx_time=45;

nb_time=30;

pass_time=dx_time;

while

(1)

{

keyscan();

if(k0num)emergency();

else

{

switch(k4num)

{

case0:

if(!

k1num&&!

k2num)

circle_led();

else

{

if(k1num)dx_pass();

if(k2num)nb_pass();

}

break;

case1:

switch(k5num)

{

case0:

if(!

k1num&&!

k2num)

circle_led();

else

{

if(k1num)dx_pass();

if(k2num)nb_pass();

}

break;

case1:

R1=1;Y1=1;G1=1;//调整时间时,关闭所有灯

R2=1;Y2=1;G2=1;

if(cnt<=10)

led_display(100,nb_time);

else

led_display(dx_time,nb_time);

break;

case2:

R1=1;Y1=1;G1=1;//调整时间时,关闭所有灯

R2=1;Y2=1;G2=1;

if(cnt<=10)

led_display(dx_time,100);

else

led_display(dx_time,nb_time);

break;

}

break;

}

}

}

}

voidtimer0()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

cnt++;

if(cnt==20)

{

cnt=0;

if(flag_t==0)pass_time--;//调整时间时,不执行此操作

}

}

voidtimer1()interrupt3

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

cnt1++;

if(cnt1==20)

{

cnt1=0;

y_time--;//单方向通行时,黄灯闪烁时间。

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2