交通灯C语言程序_第1页
交通灯C语言程序_第2页
交通灯C语言程序_第3页
交通灯C语言程序_第4页
交通灯C语言程序_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar data buf4;uchar data sec_dx=20; /东西数默认uchar data sec_nb=30;/南北默认值uchar data set_timedx=20;/设置东西方向的时间uchar data set_timenb=30;/设置南北方向的时间int n;uchar data countt0;/定时器0中断次数/定义5组开关sbit k4=P37; /切换方向sbit k1=P35

2、;/时间加sbit k2=P36;/时间减sbit k3=P34;/确认sbit k5=P31;/禁止/ P32/只允许东西方向通行,中断0/ P33/只允许南北方向通行,中断1sbit Red_nb=P26;/南北红灯标志sbit Yellow_nb=P25;/南北黄灯标志sbit Green_nb=P24; /南北绿灯标志sbit Red_dx=P23;/东西红灯标志sbit Yellow_dx=P22;/东西黄灯标志sbit Green_dx=P21;/东西绿灯标志sbit Buzz=P30;bit Buzzer_Indicate;bit set=0;/调时方向切换键标志 =1时,南北,

3、=0时,东西bit dx_nb=0;/东西南北控制位bit shanruo=0;uchar code table11=/共阴极字型码0x3f, /-00x06, /-10x5b, /-20x4f, /-30x66, /-40x6d, /-50x7d, /-60x07, /-70x7f, /-80x6f, /-90x00 /-NULL;/函数的声明部分void delay(int ms);/延时子程序void key();/按键扫描子程序void key_to1();/键处理子程序void key_to2();void key_to3();void display();/显示子程序void lo

4、go(); /开机LOGOvoid Buzzer();/主程序void main()TMOD=0X11; /定时器设置TH0=0X3C;/定时器0置初值 0.05STL0=0XB0;EA=1;/开总中断ET0=1;/定时器0中断开启TR0=1;/启动定时0EX0=1;/开外部中断0EX1=1;/开外部中断1 logo();P2=0Xc3;/ 开始默认状态,东西绿灯,南北黄灯 sec_nb=sec_dx+5; /默认南北通行时间比东西多5秒while(1) key(); /调用按键扫描程序display(); /调用显示程序Buzzer();/函数的定义部分void key(void)/按键扫描

5、子程序 if(k1!=1)/当K1(时间加)按下时display(); /调用显示,用于延时消抖if(k1!=1) TR0=0; /关定时器shanruo=0;P2=0x00;if(set=0)set_timedx+; /南北加1Selseset_timenb+; /东西加1Sif(set_timenb=100)set_timenb=1;if(set_timedx=100)set_timedx=1; /加到100置1sec_nb=set_timenb ; /设置的数值赋给东西南北sec_dx=set_timedx;/ do display();while(k1!=1);if(k2!=1)/当K

6、2(时间减)按键按下时display(); /调用显示,用于延时消抖if(k2!=1) TR0=0; /关定时器shanruo=0;P2=0x00;if(set=0)set_timedx-; /南北减1Selseset_timenb-; /东西减1Sif(set_timenb=0)set_timenb=99;if(set_timedx=0 )set_timedx=99; /减到1重置99sec_nb=set_timenb ; /设置的数值赋给东西南北sec_dx=set_timedx; do display(); /调用显示,用于延时while(k2!=1);if(k3!=1)/当K3(确认)

7、键按下时display(); /调用显示,用于延时消抖if(k3!=1)TR0=1; /启动定时器Buzzer_Indicate=0;sec_nb=set_timenb;/从中断回复,仍显示设置过的数值sec_dx=set_timedx;/显示设置过的时间if(set=0)/时间倒时到0时 P2=0X00;/东西绿灯,南北红灯Green_dx=1;Red_nb=1;sec_nb=sec_dx+5; /回到初值else P2=0x00;/南北绿灯,东西红灯Green_nb=1;Red_dx=1;sec_dx=sec_nb+5; if(k4!=1)/当K4(切换)键按下 display(); /调

8、用显示,用于延时消抖if(k4!=1) TR0=0;set=!set;/取反set标志位,以切换调节方向dx_nb=set;dodisplay(); while(k4!=1);if(k5!=1)/当K5(禁止)键按下时 display(); /调用显示,用于延时消抖 if(k5!=1) TR0=0;/关定时器P2=0x00;Red_dx=1;Red_nb=1;/全部置红灯sec_dx=00;/四个方向的时间都为00sec_nb=00;Buzzer_Indicate=1;dodisplay(); while(k5!=1); void display(void) /显示子程序buf1=sec_nb

9、/10; /第1位 东西秒十位buf2=sec_nb%10; /第2位 东西秒个位buf3=sec_dx/10; /第3位 南北秒十位buf0=sec_dx%10; /第4位 南北秒个位P1=0xff; / 初始灯为灭的P0=0x00;P1=0xfe; /片选LED1P0=tablebuf1;/送东西时间十位的数码管编码delay(1);/延时P1=0xff;/关显示P0=0x00;P1=0xfd; /片选LED2P0=tablebuf2;delay(1);P1=0xff;P0=0x00;P1=0Xfb; /片选LED3P0=tablebuf3;delay(1);P1=0xff;P0=0x00

10、;P1=0Xf7;P0=tablebuf0;/片选LED4delay(1);void time0(void) interrupt 1 using 1 /定时中断子程序TH0=0X3C;/重赋初值TL0=0XB0;TR0=1;/重新启动定时器countt0+;/软件计数加1if(countt0=10)if(sec_nb<=5)&&(dx_nb=0)&&(shanruo=1) /东西黄灯闪 Green_dx=0;Yellow_dx=0; if(sec_dx<=5)&&(dx_nb=1)&&(shanruo=1) /南北黄灯

11、闪 Green_nb=0;Yellow_nb=0;if(countt0=20) / 定时器中断次数=20时(即1秒时)countt0=0;/清零计数器sec_dx-;/东西时间减1sec_nb-;/南北时间减1if(sec_nb<=5)&&(dx_nb=0)&&(shanruo=1) /东西黄灯闪 Green_dx=0;Yellow_dx=1; if(sec_dx<=5)&&(dx_nb=1)&&(shanruo=1) /南北黄灯闪 Green_nb=0;Yellow_nb=1; if(sec_dx=0&&am

12、p;sec_nb=5) /当东西倒计时到0时,重置5秒,用于黄灯闪烁时间sec_dx=5;shanruo=1;if(sec_nb=0&&sec_dx=5)/当南北倒计时到0时,重置5秒,用于黄灯闪烁时间sec_nb=5;shanruo=1;if(dx_nb=0&&sec_nb=0)/当黄灯闪烁时间倒计时到0时, P2=0x00;/重置东西南背方向的红绿灯Green_nb=1;Red_dx=1;dx_nb=!dx_nb;shanruo=0;sec_nb=set_timenb;/重赋南北方向的起始值sec_dx=set_timenb+5;/重赋东西方向的起始值if(

13、dx_nb=1&&sec_dx=0)/当黄灯闪烁时间到P2=0X00;/重置东西南北的红绿灯状态Green_dx=1;Red_nb=1;dx_nb=!dx_nb;shanruo=0;sec_dx=set_timedx;/重赋东西方向的起始值sec_nb=set_timedx+5;/重赋南北方向的起始值/外部中断0void int0(void) interrupt 0 using 1 /只允许东西通行TR0=0;/关定时器P2=0x00;Green_dx=1;/东西方向置绿灯Red_nb=1;/南北方向为红灯Buzzer_Indicate=0;sec_dx=00;/四个方向的时间都为00sec_nb=00;/外部中断1void int1(void) interrupt 2 using 1 /只允许南北通行 TR0=0;/关定时器P2=0x00;Green_nb=1;/置南北方向为绿灯Red_dx=1;/东西方向为红灯Buzzer_Indicate=0;sec_nb=00;/四个方向的时间都为00sec_dx=00;void logo()/开机的Logo "- - - -" for(n=0;n<50;n+) P0=0x40; P1=0xfe;delay(1);

温馨提示

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

评论

0/150

提交评论