




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include#define uchar unsigned char#define uint unsigned intuchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40;/*digit display port*sbit led_w1=P11;sbit led_w2=P10;sbit led_w3=P13;sbit led_w4=P12;/*define led port *sbit R1=P24; /east and west red ledsbit Y1=P23; /east and west yellow ledsbit G1=P22; /east and west green ledsbit R2=P25; /south and north red ledsbit Y2=P26; /south and north yellow ledsbit G2=P27; /south and north green led/*define key*sbit k0=P30; /emergencysbit k1=P31; /east and west passsbit k2=P32; /south and north passsbit k3=P33; /start and subtract 1sbit k4=P34; /pause and add 1sbit k5=P35; /set time/*define variable*bit flag,flag_t;uchar dx_time,nb_time;uchar cnt,pass_time,cnt1,y_time;uchar k0num,k1num,k2num,k3num,k4num,k5num;/*define key*void delay(uint i)uint x,y;for(x=i;x0;x-)for(y=110;y0;y-); void timer0_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;void led_display(uchar dx,nb)uchar dx1,dx2,nb1,nb2;dx2=dx/10;dx1=dx%10;nb2=nb/10;nb1=nb%10;if(dx99)led_w1=1;led_w2=1;elseled_w1=0;P0=tabledx1;delay(5);led_w1=1;if(dx0) led_w2=1;elseled_w2=0;P0=tabledx2;delay(5);led_w2=1;if(nb99)led_w3=1;led_w4=1;elseled_w3=0;P0=tablenb1;delay(5);led_w3=3;if(nb0) led_w4=1;elseled_w4=0;P0=tablenb2;delay(5);led_w4=4;/*light work*void circle_led()if(!flag)if(pass_time5)led_display(pass_time-5,pass_time);R1=1;Y1=1;G1=0;/east and west passR2=0;Y2=1;G2=1;/south and north stopif(pass_time0)if(cnt=10) led_display(pass_time,pass_time);else led_display(100,pass_time);R1=1;G1=1; /east and west yellow led flashif(cnt=10)Y1=0;else Y1=1;R2=0;Y2=1;G2=1;if(pass_time=0)pass_time=nb_time;flag=1;elseif(pass_time5)led_display(pass_time,pass_time-5);R1=0;Y1=1;G1=1;/east and west stopR2=1;Y2=1;G2=0;/south and north passif(pass_time0)if(cnt=10) led_display(pass_time,pass_time);else led_display(pass_time,100);R1=0;Y1=1;G1=1;R2=1;G2=1; /south and north yellow led flashif(cnt=10)Y2=0;else Y2=1;if(pass_time=0)pass_time=dx_time;flag=0;void emergency() /east and west,south and north stopled_display(0,0);R1=0;Y1=1;G1=1;R2=0;Y2=1;G2=1;void dx_pass() /east and west pass,south and north stopled_display(100,100);if(y_time0)TR1=1;R1=0;Y1=1;G1=1;R2=1;G2=1; /south and north yellow led flashif(cnt1=10)Y2=0;else Y2=1;if(y_time=0)TR1=0;R1=1;Y1=1;G1=0;R2=0;Y2=1;G2=1;void nb_pass() /south and north pass,east and west stopled_display(100,100);if(y_time0)TR1=1;R1=1;G1=1;if(cnt1=10)Y1=0;/east and west yellow led flashelse Y1=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;/*keyboard scan*void keyscan() 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)/pausedelay(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)case 1:TR0=1;flag_t=1; /调整时间时,pass_time值不变。k5num=1;break;case 2:k5num=2;break;case 3:TR0=0;k5num=0;pass_time=dx_time; /重新赋值break;if(k5num!=0)if(k3=0)delay(10);if(k3=0)while(!k3);switch(k5num)case 1:dx_time-;if(dx_time10)dx_time=99;break;case 2:nb_time-;if(nb_time=100)dx_time=10;break;case 2:nb_time+;if(nb_time=100)nb_time=10;break;void main()timer0_init();dx_time=45;nb_time=30;pass_time=dx_time;while(1)keyscan();if(k0num)emergency();elseswitch(k4num)case 0:if(!k1num&!k2num)circle_led();elseif(k1num) dx_pass();if(k2num) nb_pass();break;case 1: switch(k5num)case 0:if(!k1num&!k2num)circle_led();elseif(k1num) dx_pass();if(k2num) nb_pass();break;case 1:R1=1;Y1=1;G1=1; /调整时间时,关闭所有灯R2=1;Y2=1;G2=1;if(cnt=10)led_display(100,nb_time);elseled_display(dx_time,nb_time);break;case 2:R1=1;Y1=1;G1=1;/调整时间时,关闭所有灯R2=1;Y2=1;G2=1;if(cnt=10)led_display(dx_time,100);elseled_display(dx_time,nb_time);break;break;void timer0() interrupt 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论