2022年交通灯十字路口控制器程序_第1页
2022年交通灯十字路口控制器程序_第2页
2022年交通灯十字路口控制器程序_第3页
2022年交通灯十字路口控制器程序_第4页
2022年交通灯十字路口控制器程序_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include #define uchar unsigned char #define uint unsigned int uchar code table= 0 x3f,0 x06,0 x5b,0 x4f, 0 x66,0 x6d,0 x7d,0 x07, 0 x7f,0 x6f,0 x40 ; /*digit display port* sbit led_w1=P11; 1 / 35 sbit led_w2=P10; sbit led_w3=P13; sbit led_w4=P12; /*define led port * sbit R1=P24; /east and west red

2、led sbit Y1=P23; /east and west yellow led sbit G1=P22; /east and west green led sbit R2=P25; /south and north red led sbit Y2=P26; /south and north yellow led sbit G2=P27; /south and north green led /*define key* 2 / 35 sbit k0=P30; /emergency sbit k1=P31; /east and west pass sbit k2=P32; /south an

3、d north pass sbit k3=P33; /start and subtract 1 sbit k4=P34; /pause and add 1 sbit 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; 3 / 35 /*define key* void delayuint i uint x,y; forx=i;x0;x- for

4、y=110;y0;y-; void timer0_init TMOD=0 x11; TH0=65536-50000/256; TL0=65536-50000%256; 4 / 35 TH1=65536-50000/256; TL1=65536-50000%256; EA=1; ET0=1; ET1=1; void led_displayuchar dx,nb uchar dx1,dx2,nb1,nb2; dx2=dx/10; dx1=dx%10; nb2=nb/10; 5 / 35 nb1=nb%10; ifdx99 led_w1=1; led_w2=1; else led_w1=0; P0=

5、tabledx1; delay5; led_w1=1; 6 / 35 ifdx0 led_w2=1; else led_w2=0; P0=tabledx2; delay5; led_w2=1; ifnb99 7 / 35 led_w3=1; led_w4=1; else led_w3=0; P0=tablenb1; delay5; led_w3=3; ifnb0 led_w4=1; else 8 / 35 led_w4=0; P0=tablenb2; delay5; led_w4=4; /*light work* void circle_led if.flag 9 / 35 ifpass_ti

6、me5 led_displaypass_time-5,pass_time; R1=1;Y1=1;G1=0; /east and west pass R2=0;Y2=1;G2=1; /south and north stop ifpass_time0 ifcnt=10 led_displaypass_time,pass_time; else led_display100,pass_time; R1=1;G1=1; /east and west yellow led flash ifcnt=10 Y1=0; 10 / 35 else Y1=1; R2=0;Y2=1;G2=1; ifpass_tim

7、e=0 pass_time=nb_time; flag=1; else ifpass_time5 11 / 35 led_displaypass_time,pass_time-5; R1=0;Y1=1;G1=1; /east and west stop R2=1;Y2=1;G2=0; /south and north pass ifpass_time0 ifcnt=10 led_displaypass_time,pass_time; else led_displaypass_time,100; R1=0;Y1=1;G1=1; R2=1;G2=1; /south and north yellow

8、 led flash ifcnt=10 Y2=0; 12 / 35 else Y2=1; ifpass_time=0 pass_time=dx_time; flag=0; void emergency /east and west,south and north stop 13 / 35 led_display0,0; R1=0;Y1=1;G1=1; R2=0;Y2=1;G2=1; void dx_pass /east and west pass,south and north stop led_display100,100; ify_time0 TR1=1; R1=0;Y1=1;G1=1;

9、R2=1;G2=1; /south and north yellow led flash 14 / 35 ifcnt1=10 Y2=0; else Y2=1; ify_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 stop 15 / 35 led_display100,100; ify_time0 TR1=1; R1=1;G1=1; ifcnt1=10 Y1=0; /east and west yellow led flash else Y1=1; R

10、2=0;Y2=1;G2=1; ify_time=0 16 / 35 TR1=0; R1=0;Y1=1;G1=1; R2=1;Y2=1;G2=0; /*keyboard scan* void keyscan if.k5num ifk0=0 /*emergency* 17 / 35 delay10; ifk0=0 while.k0; TR0=0; k0num=1; if.k1num&.k0num ifk1=0 18 / 35 delay10; ifk1=0 while.k1; k1num=1; k2num=0; y_time=5; /单方向通行时,黄灯闪耀时间 TR0=0; TR1=1; 19 /

11、 35 if.k2num&.k0num ifk2=0 delay10; ifk2=0 while.k2; k1num=0; k2num=1; y_time=5; /单方向通行时,黄灯闪耀时间 TR0=0; 20 / 35 TR1=1; ifk3=0 delay10; ifk3=0 while.k3; ifk1num|k2num pass_time=dx_time; / 由东西或南北通行返回时,重新开头执行;21 / 35 k0num=0; k1num=0; k2num=0; k4num=0; k5num=0; TR0=1; TR1=0; flag_t=0; if.k4&.k0num /paus

12、e delay10; 22 / 35 ifk4=0 while.k4; TR0=0; k4num=1; ifk4num=1 /暂停键按下时,才可以调整两个方向通行时间 ifk5=0 23 / 35 delay10; ifk5=0 k5num+; while.k5; switchk5num case 1: TR0=1; flag_t=1; /调整时间时, pass_time 值不变;k5num=1; break; case 2: 24 / 35 k5num=2; break; case 3: TR0=0; k5num=0; pass_time=dx_time; /重新赋值 break; ifk5

13、num.=0 ifk3=0 25 / 35 delay10; ifk3=0 while.k3; switchk5num case 1: dx_time-; ifdx_time10 dx_time=99; break; case 2: nb_time-; 26 / 35 ifnb_time=100 dx_time=10; break; case 2: nb_time+; ifnb_time=100 nb_time=10; break; 28 / 35 void main timer0_init; dx_time=45; nb_time=30; pass_time=dx_time; while1

14、keyscan; 29 / 35 ifk0num emergency; else switchk4num case 0: if.k1num&.k2num circle_led; else ifk1num dx_pass; ifk2num nb_pass; 30 / 35 break; case 1: switchk5num case 0: if.k1num&.k2num circle_led; else ifk1num dx_pass; ifk2num nb_pass; break; 31 / 35 case 1: R1=1;Y1=1;G1=1; R2=1;Y2=1;G2=1; ifcnt=10 /调整时间时,关闭全部灯led_display100,nb_time; else led_displaydx_time,nb_time; break; case 2: R1=1;Y1=1;G1=1; R2=1;Y2=1;G2=1; ifcnt=10 /调整时间时,关闭全部灯led_displaydx_time,100; 32 / 35 else led_displaydx_time,nb_time; break; br

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论