51单片机实现交通灯控制程序

合集下载

51单片机实现交通灯控制程序

51单片机实现交通灯控制程序

51单片机实现交通灯控制程序2010-04-28 23:02当出现交通事故时,按下单片机右侧开关,所有红灯亮,交通停止,通行时间保持,弹起开关,交通接停止时的时间继续进行#include<reg52.h>#include<stdio.h>#define unchar unsigned char#define unint unsigned intsbit key=P3^2;unchar code dis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};unint i,j,k;unint s;unchar h;void delay(unint c); void cut0();void cut1();void cut2();void cut3();void cut4();void cut5();void cut6();void cut7();void main(){TMOD=0X06;TH0=0Xff;TL0=0xff;TR0=1;EA=1;EX0=1;EX1=1;ET0=1;P1=0x00;P3=0xff;P0=0xf6;P2=0xf5;for(h=29;h>0;h--) { for(s=24;s>0;s--) {cut0();P3=0xfc;P1=0xff;P3=0xfd;P1=dis[h/10];delay(1);P3=0xfc;P1=0xff;P1=dis[h%10];delay(1);}}for(h=4;h>0;h--){cut1();P2=0xf3;delay(10);P2=0xf7;delay(10);P3=0xfc;P1=0xff;P3=0xfe;P1=dis[h%10];delay(20);}P2=0xee;for(h=29;h>0;h--) { for(s=24;s>0;s--) {cut2();P3=0xfc;P1=0xff;P3=0xfd;P1=dis[h/10];delay(1);P3=0xfc;P1=0xff;P3=0xfe;P1=dis[h%10];delay(1);}}for(h=4;h>0;h--){P2=0xde;delay(10);P2=0xfe;delay(10);P3=0xfc;P1=0xff;P3=0xfe;P1=dis[h%10];delay(20);}P2=0xf6;P0=0xf5;for(h=29;h>0;h--) { for(s=24;s>0;s--) {cut4();P3=0xfc;P1=0xff;P3=0xfd;P1=dis[h/10];delay(1);P3=0xfc;P1=0xff;P3=0xfe;P1=dis[h%10];delay(1);}}for(h=4;h>0;h--){cut5();P0=0xf3;delay(10);P0=0xf7;delay(10);P3=0xfc;P1=0xff;P3=0xfe;P1=dis[h%10];delay(20);}P0=0xee;for(h=29;h>0;h--) { for(s=24;s>0;s--) {cut6();P3=0xfc;P1=0xff;P3=0xfd;P1=dis[h/10];delay(1);P3=0xfc;P1=0xff;P3=0xfe;P1=dis[h%10];delay(1);}}for(h=4;h>0;h--){cut7();P0=0xde;delay(10);P0=0xfe;delay(10);P3=0xfc;P1=0xff;P3=0xfe;P1=dis[h%10];delay(20);}}void delay(unint c){while(c--)for(j=1500;j>0;j--); }void cut0(){key=1;if(key==0)while(1){P2=0xf6;key=1;if(key==1){P2=0xf5;break ;}}}void cut1(){key=1;if(key==0)while(1){P2=0xf6;key=1;if(key==1){P2=0xf7;break ;}}}void cut2(){key=1;if(key==0)while(1){P2=0xf6;key=1;if(key==1) {P2=0xee; break ;}}}void cut3() {key=1;if(key==0)while(1){P2=0xf6; key=1;if(key==1) {P2=0xfe; break ;}}}void cut4() {key=1;if(key==0)while(1){P0=0xf6; key=1;if(key==1) {P0=0xf5; break ;}}}void cut5() {key=1;if(key==0)while(1){P0=0xf6; key=1;if(key==1) {P0=0xf7; break ;}}}void cut6() {key=1;if(key==0)while(1){P0=0xf6; key=1;if(key==1) {P0=0xee; break ;}}}void cut7() {key=1;if(key==0)while(1){P0=0xf6; key=1;if(key==1) {P0=0xfe; break ;}}}。

51单片机红绿灯设计报告

51单片机红绿灯设计报告

51单片机红绿灯设计报告一、设计目的在交通管理中,红绿灯是一种重要的交通设施,能够有效地控制交通流量,保证道路交通的安全和顺畅。

本设计旨在使用51单片机实现一个红绿灯控制系统,通过控制红绿灯的状态来实现交通信号控制。

二、系统设计1.设计原理红绿灯控制系统分为两种模式:定时模式和交通流量感应模式。

在定时模式下,红绿灯会按照预设的时间间隔循环切换;在交通流量感应模式下,通过传感器检测车辆的流量来实现智能控制。

2.硬件设计本设计采用51单片机作为控制核心,配合电路部件包括红绿灯LED 灯、传感器等。

51单片机通过IO口控制LED灯的状态,同时接收传感器信号用于交通流量感应模式。

3.软件设计软件设计主要包含控制程序和交通流量感应算法。

控制程序通过定时器产生中断来实现定时模式下红绿灯的切换;交通流量感应算法通过读取传感器信号来判断是否有车辆通过,进而控制红绿灯的切换。

三、系统实现1.控制程序控制程序主要实现红绿灯状态的切换,包括定时模式和交通流量感应模式的切换逻辑。

在定时模式下,通过定时器中断来实现红绿灯的周期性切换;在交通流量感应模式下,通过传感器信号来判断车辆的流量,并根据流量大小来调整红绿灯的状态。

2.传感器接口传感器接口用于检测车辆的流量,根据传感器的信号来实现对红绿灯状态的控制。

在系统中,传感器可以是红外传感器、光电传感器等,通过检测车辆通过时的信号变化来判断车辆的流量。

3.LED灯控制LED灯控制通过51单片机的IO口来实现,控制红绿灯的状态。

根据控制程序的逻辑,51单片机可以实现红绿灯的亮灭控制,从而实现交通信号的控制。

四、系统优化1.系统稳定性优化为了提高系统的稳定性,在设计中可以加入硬件看门狗等机制来监测系统的运行状态,确保系统正常运行。

2.智能交通流量控制在交通流量感应模式下,可以通过进一步算法优化,实现更加智能的交通流量控制,提高红绿灯的切换效率。

3.软硬件结合优化软硬件结合优化可以进一步提高系统的性能和稳定性,减少系统的延迟,提高交通信号的控制效率。

51单片机用C语言实现交通灯_红绿灯_源程序

51单片机用C语言实现交通灯_红绿灯_源程序

c o d eu n s i g n e dc h a rt a b [ ] = { 0 x 3 f , 0 x 0 6 , 0 x 5 b , 0 x 4 f , 0 x 6 6 , 0 x 6 d , 0 x 7 d , 0 x 0 7 , 0 x 7 f , 0 x 6 f } ; / / 共阴数码管 0 9 u n s i g n e dc h a rD i s _ S h i w e i ; / / 定义十位 u n s i g n e dc h a rD i s _ G e w e i ;/ / 定 g n e di n tc n t ) { w h i l e ( c n t ) ; } m a i n ( ) { T M O D| = 0 x 0 1 ; / / 定时器设置 1 0 m si n1 2 Mc r y s t a l 定时器 0 ,工作方式 1 ,1 6 位定时器 T H 0 = 0 x d 8 ; / / 6 5 5 3 5 1 0 0 0 0 = 5 5 5 3 5 = D 8 F 0 (十六进制) T L 0 = 0 x f 0 ; I E =0 x 8 2 ;/ / 中断控制,E A = 1 开总中断,E T 0 = 1 :定时器 0 中断允许 T R 0 = 1 ; / / 开定时器 0 中断 P 1 = 0 x f c ; / / 红灯亮,根据红黄绿接灯的顺序。 r e d= 1 ; w h i l e ( 1 ) { P 0 = D i s _ S h i w e i ; / / 显示十位,这里实现用 8 位数码管,即左 1 位 P 2 = 0 ; d e l a y ( 3 0 0 ) ; / / 短暂延时 P 0 = D i s _ G e w e i ;/ / 显示个位,左数,2 位 P 2 = 1 ;

51单片机红绿灯设计报告

51单片机红绿灯设计报告

51单片机红绿灯设计报告一、引言红绿灯是城市道路交通管理中非常重要的设备,它能够有效地控制车辆和行人的通行,维护交通秩序,提高交通效率。

本报告将介绍一种基于51单片机的红绿灯设计,利用单片机的强大功能,实现了智能化、自动化的红绿灯控制系统。

二、设计原理1.硬件设计本设计使用了51单片机,通过其IO口控制LED灯的亮灭。

红绿灯的控制通过三个IO口分别连接到红、黄、绿三个LED灯,通过控制这三个IO口的电平,实现红绿灯的切换。

2.软件设计设计中使用了C语言进行程序开发。

程序通过设置IO口的状态和延时函数,控制红绿灯的切换和延时时间。

三、电路设计1.电路图电路图给出了51单片机、LED灯和电流限制电阻之间的连接关系。

单片机的P1口连接到红、黄、绿三个LED灯上,通过改变P1口的电平,控制LED的亮灭。

2.电路元件说明-51单片机:中央处理器,负责控制整个系统的运行和信号的处理。

-LED灯:用于显示红、黄、绿三种不同的状态。

-电流限制电阻:用于限制电流大小,保护51单片机和LED灯。

四、程序设计程序设计中,通过无限循环实现红绿灯系统的连续运行,程序中设置了红绿灯切换的时间间隔和黄灯亮灭的时间间隔。

五、实验结果经过测试,本设计能够正常地实现红绿灯的切换,各种状态都能够正确显示。

红灯亮10秒,黄灯亮3秒,绿灯亮15秒,然后循环重复。

六、总结本设计利用51单片机的强大功能,实现了红绿灯的自动切换。

通过控制IO口的电平和延时函数,能够实现红绿灯的各种状态的切换。

该设计简单、实用、可靠,适用于城市交通管理中的红绿灯设备。

51单片机用C语言实现交通灯

51单片机用C语言实现交通灯

51单片机用C语言实现交通灯51 单片机用C 语言实现交通灯(红绿灯)源程序交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改。

源程序如下:#include bit red,green,yellow,turnred; //定义红、黄、绿及转红标志code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管0- 9unsigned char Dis_Shiwei;//定义十位unsigned char Dis_Gewei; //定义个位void delay(unsigned int cnt) //用于动态扫描数码管的延时程序{while(--cnt);}main() {TMOD |=0x01;//定时器设置10ms in 12M crystal 定时器0,工作方式1,16 位定时器TH0=0xd8; //65535-10000=55535=D8F0(十六进制)TL0=0xf0;IE= 0x82; //中断控制,EA=1 开总中断,ET0=1:定时器0 中断允许TR0=1; //开定时器0中断P1=0xfc;//红灯亮,根据红黄绿接灯的顺序。

red =1;while(1) {P0=Dis_Shiwei;//显示十位,这里实现用8 位数码管,即左1 位P2=0;delay(300); //短暂延时P0=Dis_Gewei; //显示个位,左数,2 位P2=1;delay(300);}}void tim(void) interrupt 1 using 1{static unsigned char second=60,count; //初值60TH0=0xd8;//重新赋值,10 毫秒定时TL0=0xf0;count++;if (count==100) {count=0;second--;//秒减1if(second==0){ //这里添加定时到0 的代码,可以是灯电路,继电器吸合等,或者执行一个程序if(red) //红灭,先转黄{red=0;yellow=1;second=4;P1=0xF3;//黄灯亮4 秒,黄灯为过渡灯,再根据情况转绿或转红}else if(yellow && !turnred){yellow=0;green=1;second=25;P1=0xCF;// 绿灯亮25 秒,}else if(green){yellow=1;green=0;second=4;P1=0xF3;//黄灯亮4 秒turnred=1;}else if(yellow && turnred) //绿灯灭,转黄灯,后红灯,turnred=1 时{red=1;yellow=0;P1=0xFC;//红灯亮60 秒second=60;turnred=0; //接下来是转黄,绿。

51单片机控制交通灯原理图及C语言程序

51单片机控制交通灯原理图及C语言程序

Proteus仿真原理图:Keil C源程序:#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit RED_DONGXI = P1^0;//南北方向红灯亮sbit YELLOW_DONGXI = P1^1;//南北方向黄灯亮sbit RED_NANBEI = P1^3;//东西方向红灯亮sbit GREEN_DONGXI = P1^2;//南北方向绿灯亮sbit YELLOW_NANBEI = P1^4;//东西方向黄灯亮sbit GREEN_NANBEI = P1^5;//东西方向绿灯亮sbit DXweixuan1 = P1^6;//南北方向数码管位选1sbit DXweixuan2 = P1^7;//南北方向数码管位选2sbit NBweixuan1 = P3^0;//东西方向数码管位选1sbit NBweixuan2 = P3^1;//东西方向数码管位选2sbit L1=P3^5;sbit L2=P3^6;sbit L3=P3^7;uint aa, bai,shi,ge,bb;uint shi1,ge1,shi2,ge2;uint code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uint code table1[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};void delay(uint z);void init(uint a);void display(uint shi1,uint ge1,uint shi2,uint ge2);void xtimer0();void init1();void init2();void init3();void init4();void init5();void xint1();void xint0();void LED_ON();void LED_OFF();void main(){P0=0xFF;P1=0xFF;P2=0x00;P3=0xFF;EA=1;EX0=1;IT0=0;init1();while(1){init2();//第2个状态init3(); //第3个状态init4(); //第4个状态init5();//第5个状态}}void init1()//第一个状态:东西、南北方向均亮红灯5S {uint temp;temp=5;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_DONGXI=0; //第一个状态东西、南北均亮红灯5SRED_NANBEI=0;GREEN_DONGXI=1;GREEN_NANBEI=1;YELLOW_DONGXI=1;YELLOW_NANBEI=1;if(aa==20)//定时20*50MS=1S{aa=0;temp--;}shi1=shi2=temp/10;ge1=ge2=temp%10;if(temp==0){temp=5;break;}display(ge1,shi1,ge2,shi2);}}void init2()//第二个状态:东西亮红灯30S~5S、南北亮绿灯25~0S;{uint temp;temp=26;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_DONGXI=1;RED_NANBEI=0;GREEN_DONGXI=0;GREEN_NANBEI=1;YELLOW_DONGXI=1;//第二个状态:东西亮绿灯25S、南北亮红灯YELLOW_NANBEI=1;if(aa==20)//定时20*50MS=1S{aa=0;temp--;shi1=(temp+5)/10;ge1=(temp+5)%10;shi2=temp/10;ge2=temp%10;if(temp==0){temp=26;break;}}display(ge1,shi1,ge2,shi2);}}void init3() //第三个状态:东西绿灯变为黄灯闪5次、南北亮红灯5S {uint temp;temp=6;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_NANBEI=0;GREEN_DONGXI=1;if(aa==20)//定时20*50MS=1S{aa=0;temp--;YELLOW_DONGXI=~YELLOW_DONGXI;shi1=temp/10;shi2=shi1;ge1=temp%10;ge2=ge1;}if(temp==0){temp=6;break;}display(ge1,shi1,ge2,shi2);}}void init4()//第四个状态:东西亮绿灯25~0S,南北方向亮红灯30~5S;{uint temp;temp=26;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_DONGXI=0;RED_NANBEI=1;YELLOW_DONGXI=1;//第一个状态东西、南北均亮红灯5SGREEN_NANBEI=0;if(aa==20){aa=0;temp--;shi1=temp/10;shi2=(temp+5)/10;ge1=temp%10;ge2=(temp+5)%10;if(temp==0){temp=26;break;}}display(ge1,shi1,ge2,shi2);}}void init5()//第五个状态:东西亮红灯、南北绿灯闪5次转亮黄灯5S {uint temp;temp=6;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_NANBEI=1;RED_DONGXI=0;GREEN_DONGXI=1;GREEN_NANBEI=1;if(aa==20){aa=0;temp--;YELLOW_NANBEI=~YELLOW_NANBEI;shi1=temp/10;shi2=shi2;ge1=temp%10;ge2=ge1;if(temp==0){temp=6;break;}}display(ge1,shi1,ge2,shi2);}}void display(uint shi1,uint ge1,uint shi2,uint ge2) {DXweixuan1=0;DXweixuan2=1;NBweixuan1=1;NBweixuan2=1;P0=table[ge1];delay(5);DXweixuan1=1;DXweixuan2=0;NBweixuan1=1;NBweixuan2=1;P0=table[shi1];delay(5);DXweixuan1=1;DXweixuan2=1;NBweixuan1=0;NBweixuan2=1;P0=table[ge2];delay(5);DXweixuan1=1;DXweixuan2=1;NBweixuan1=1;NBweixuan2=0;P0=table[shi2];delay(5);}void xint0() interrupt 0 {RED_NANBEI=0;RED_DONGXI=0;GREEN_NANBEI=1;GREEN_DONGXI=1;YELLOW_NANBEI=1;YELLOW_DONGXI=1;P0=0x00;NBweixuan1=0;NBweixuan2=0;DXweixuan1=0;DXweixuan2=0;delay(2);return ;}void xint1() interrupt 2 {RED_NANBEI=1;RED_DONGXI=1;GREEN_NANBEI=0;GREEN_DONGXI=0;YELLOW_NANBEI=1;YELLOW_DONGXI=1;P0=0x00;NBweixuan1=0;NBweixuan2=0;DXweixuan1=0;DXweixuan2=0;delay(2);return ;}void xtimer0() interrupt 1 {TH0=(65535-50000)/256;TL0=(65535-50000)%256;aa++;}void delay(uint z){uint x,y;for(x=0;x<z;x++)for(y=0;y<110;y++); }。

基于51单片机控制交通灯的程序设计

基于51单片机控制交通灯的程序设计

基于51单片机控制交通灯的程序设计#include<reg51.h>unsigned char code dis_7[21]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x89,0x8c,0x00,0xff};//共阳数码管段码unsigned char data disbuf[6]={0x00,0x00,0x00,0x00,0x00,0x00};//显示缓冲区:时分秒使用unsigned char data count_timedx[]={2,10,5,10,25}; //东西方向倒计时时间unsigned char data count_timenb[]={2,25,10,5,10}; //南北方向倒计时时间unsigned char data Hour=14,Minite=06,Second=0,Halfsec=0; //定义时钟位unsigned char xdata *ledaddr=0x2000; //锁存器选通地址unsigned char data Ms=0,Lightcode=0,Light_step,Led_step,Light_num;unsigned int dataFault_dx=0,Fault_nb=0,Fault_total=0,Countdx=0,Countnb=0;sbit p10=P1^0; //第0位数码管位控制端sbit p11=P1^1; //第1位数码管位控制端sbit p12=P1^2; //第2位数码管位控制端sbit p13=P1^3; //第3位数码管位控制端sbit p14=P1^4; //第4位数码管位控制端sbit p15=P1^5; //第5位数码管位控制端sbit p16=P1^6; //发光二极管选通sbit p17=P1^7; //按键选通sbit p33=P3^3; //k1键用于切换四种功能/******************************************************************* **********//****************************1毫秒延时函数*******************************/ void delay1ms(int t){unsigned int i,j;for(i=0;i<t;i++)for(j=0;j<120;j++);}/******************************************************************* ********//*************************键盘扫描函数****************************************/ unsigned char getkey(void) {unsigned char Yiwei;unsigned char test=0x00,tim;*ledaddr=test;if(p17==0 && tim==0) //判断是否有按键按下{p17=1;tim=1;test=0xfe;delay1ms(5);for(Yiwei=0;Yiwei<8;Yiwei++) //处理按键{*ledaddr=test;if(p17==0)break;else test=(test<<1)+1;}return Yiwei;}else if(p17==0){}else {tim=0;}}/******************************************************************* **********//************************六位LED数码管显示***********************************/void displed(unsigned int hour_shi,unsigned int hour_ge,unsigned int min_shi,unsigned intmin_ge,unsigned int sec_shi,unsigned int sec_ge){*ledaddr=dis_7[hour_shi]; //时的十位显示p10=0;delay1ms(1);p10=1;*ledaddr=dis_7[hour_ge]; //时的个位显示p11=0;delay1ms(1);p11=1;*ledaddr=dis_7[min_shi]; //分的十位显示p12=0;delay1ms(1);p12=1;*ledaddr=dis_7[min_ge]; //分的个位显示p13=0;delay1ms(1);p13=1;*ledaddr=dis_7[sec_shi]; //秒的十位显示p14=0;delay1ms(1);p14=1;*ledaddr=dis_7[sec_ge]; //秒的个位显示p15=0;delay1ms(1);p15=1;}/******************************************************************* **********//******************************发光二极管显示函数*****************************/void displight(unsigned int state){if(state==0) //状态0:各方向红灯全亮{Lightcode=0xbb;}else if(state==1) //状态1:东西绿灯亮,南北红灯亮{Lightcode=0xbe;}else if(state==2) //状态2:东西黄灯闪烁,南北红灯亮{Lightcode=0xbd;}else if(state==3) //状态3:东西红灯亮,左行亮,南北红灯亮{Lightcode=0xb3;}else if(state==4) //状态4:东西红灯亮,南北直行绿灯亮{Lightcode=0xeb;}else if(state==5) //状态5:东西红灯亮,南北黄灯闪烁{Lightcode=0xdb;}else if(state==6) //状态6:东西红灯亮,南北红灯亮,左行亮{Lightcode=0x3b;}//黄灯闪烁if((Halfsec%2)==0){if(state==2)Lightcode=0xbf; //东西闪烁if(state==5)Lightcode=0xfb; //南北闪烁}*ledaddr=Lightcode; //送交通灯显示状态p16=0;delay1ms(1);p16=1;}/******************************************************************* *********//****************************违章车辆统计函数********************************/void weizhang(void) // 红灯亮的时候是否有车通过,KL1键显示东西,KL2键显示南北 {unsigned char key1;key1=getkey(); //获得键值if((key1==0)&&(Light_step>=4)&&(Light_step<=6)) //KL1键显示南北方向违章车辆,且只在南北方向为红灯时加1{Fault_dx++;if(Fault_dx==99) //最大计数99辆{Fault_dx=0;}}else if((key1==2)&&(Light_step>=1)&&(Light_step<=3)) //KL3键显示东西方向违章车辆,且只在东西方向为红灯时加1{Fault_nb++;if(Fault_nb==99) //最大计数99辆{Fault_nb=0;}}}/******************************************************************* ********//****************************数字钟函数***********************************/void shuzizhong(void) //数字钟:KL3键调节秒,KL4键调节分,KL5键调节时 {unsigned char data key2;key2=getkey(); //获得键值if(key2==2) //调节秒,按一次KL3,则加一秒{Second++;if(Second==60)Second=0;}if(key2==3) //调节分,按一次KL4,则加一分{Minite++;if(Minite==60)Minite=0;}if(key2==4) //调节时,按一次KL5,则加一时{Hour++;if(Hour==24)Hour=0;}disbuf[0]=Second%10; //时钟显示,送缓冲区disbuf[1]=Second/10;disbuf[2]=Minite%10;disbuf[3]=Minite/10;disbuf[4]=Hour%10;disbuf[5]=Hour/10;}/******************************************************************* **********//**************修改倒计时间函数*********************************************/void change_time(void) //注意:只修改绿灯、黄灯或左行灯时间,红灯时间自动求出 {unsigned int data key3=0;key3=getkey();if(key3==4) //KL5键选择要修改东西向倒计时{Light_num++;if(Light_num>4) Light_num=0;}if(key3==5) //KL2键用于修改东西方向倒计时,加1 {count_timedx[Light_num]++;if(count_timedx[Light_num]>=99)count_timedx[Light_num]=99;}if(key3==1)//KL6键用于修改东西方向倒计时,减1 {count_timedx[Light_num]--;if(count_timedx[Light_num]<1)count_timedx[Light_num]=1;}if(key3==6) //KL7键用于修改南北方向倒计时,加1 {count_timenb[Light_num]++;if(count_timenb[Light_num]>=99)count_timenb[Light_num]=99;}if(key3==2)//KL3键用于修改南北方向倒计时,减1 {count_timenb[Light_num]--;if(count_timenb[Light_num]<1)count_timenb[Light_num]=1;}count_timedx[4]=count_timenb[2]+count_timenb[3]+count_timenb[4]; //调整,求各方向红灯时间count_timenb[1]=count_timedx[1]+count_timedx[2]+count_timedx[3]; //红灯时间=绿灯+黄灯+左行灯}/******************************************************************* *********//************************定时器/计数器t0中断函数******************************/void time_intt0(void) interrupt 1 {TH0=0x4c; //赋初值定时50msTL0=0x00;Ms++;if(Ms>9){Ms=0;Halfsec++; //计时半秒if(Halfsec==2){Halfsec=0;Second++; //计时一秒Countdx--; //东西、南北倒计时减一Countnb--;}if(Second==60){Second=0;Minite++;//计时一分}if(Minite==60){Minite=0;Hour++; //计时一小时}if(Hour==24)Hour=0;}if((Countdx==0)||(Countnb==0)) //转换交通灯显示状态{Light_step++;if(Light_step>6){Light_step=1;}if(Countnb==0)Countnb=count_timenb[Light_step];//东西为红灯,南北绿、黄、左切换if(Countdx==0)Countdx=count_timedx[Light_step];//南北为红灯,东西绿、黄、左切换}}/******************************************************************* **********//****************外部中断1服务函数********************************************/void int_1(void) interrupt 2 //数码管显示状态切换 {EX1=0; //关中断if(Led_step<4){Led_step++;}if(Led_step==4){Led_step=0;}EX1=1;//开中断}/************串行口中断服务函数*********************************************/void ser_put(void) interrupt 4 //上位机发出字符'c',则清违章记录,若发出'g',则上传违章记录{if(RI==1) //接收到上位机发出的字符{RI=0;ACC=SBUF; //取字符if(ACC=='c') //清违章记录{Fault_dx=0;Fault_nb=0;}else if(ACC=='g')//上传违章记录{Fault_total=Fault_dx+Fault_nb;SBUF=Fault_total;}}if(TI==1) //发送中断TI=0;}/******************************************************************* **********//***************8051初始化函数************************************************/void Istr(void) {/*定时器初始化*/TMOD=0x21;//定时器1工作于方式2,做波特率发生器;定时器0工作于方式1,做定时器TH1=0xfa; //产生9.6kbit/s波特率TL1=0xfa;TH0=0x4c; //50msTL0=0x00;/*串行通信初始化*/SCON=0x50;PCON=0X80|PCON;/*启动定时器,开中断*/ET1=0; //禁止定时器1中断ET0=1;TR1=1;TR0=1;IT1=1; //设置外部中断为边沿触发EX1=1;ES=1;EA=1;}/************************主函数***********************************************/ void main(void) {Istr(); //调用初始化函数Led_step=0;Light_step=0;Light_num=0;Countdx=count_timedx[0];Countnb=count_timenb[0];SBUF='s';while(1){if(Led_step==0) //显示倒计时{displed(20,(Countdx/10),(Countdx%10),20,(Countnb/10),(Countnb%10));}if(Led_step==1) //显示时钟{shuzizhong(); //调用数字钟函数displed(disbuf[5],disbuf[4],disbuf[3],disbuf[2],disbuf[1],disbuf[0]);}if(Led_step==2) //修改倒计时数{change_time(); //调用修改倒计时时间函数displed(Light_num,count_timedx[Light_num]/10,count_timedx[Light_num]%10,Light_num,count_timenb[Light_num]/10,count_timenb[Light_num]%10);}if(Led_step==3) //显示并统计违章数{weizhang(); //调用违章记录函数displed(15,Fault_dx/10,Fault_dx%10,15,Fault_nb/10,Fault_nb%10);}displight(Light_step);//显示交通灯}}/*********over*******over************over*********over*********over* ******over***/。

51单片机交通灯课程设计

51单片机交通灯课程设计

51单片机交通灯课程设计一、课程目标知识目标:1. 理解51单片机的基本原理和结构,掌握其在交通灯控制系统中的应用。

2. 学习并掌握C语言编程基础,能运用C语言编写51单片机的程序代码。

3. 了解交通灯的工作原理,掌握交通灯时序控制方法。

技能目标:1. 能运用51单片机设计并实现一个简单的交通灯控制系统。

2. 掌握使用Keil软件进行51单片机程序编写、编译和调试。

3. 学会分析并解决实际交通灯控制中可能出现的问题。

情感态度价值观目标:1. 培养学生对电子技术及嵌入式系统开发的兴趣,激发创新意识。

2. 增强学生的团队合作精神,培养在项目实践中主动沟通、协作解决问题的能力。

3. 提高学生的实践操作能力,使其认识到理论知识在实际应用中的价值。

分析课程性质、学生特点和教学要求:本课程为电子信息类专业的实践课程,旨在帮助学生将所学的51单片机理论知识运用到实际项目中。

学生已具备一定的电子技术和C语言基础,但实际操作能力和项目经验不足。

针对此情况,课程目标设定以实用性为主,注重培养学生的动手能力和团队协作能力。

二、教学内容1. 51单片机原理及结构复习:回顾51单片机的内部结构、工作原理,重点掌握其I/O口特性及编程方法。

相关教材章节:第三章《51单片机结构及工作原理》。

2. C语言编程基础:巩固C语言基础,学习51单片机程序设计中的常用语法和编程技巧。

相关教材章节:第五章《51单片机的C语言编程》。

3. 交通灯工作原理:介绍交通灯的基本工作原理及时序控制方法,分析实际应用中的交通灯控制系统。

相关教材章节:第七章《嵌入式系统应用实例》。

4. 51单片机交通灯控制系统设计:结合实际项目,学习51单片机在交通灯控制中的应用。

教学内容安排:a. 交通灯控制系统需求分析b. 硬件电路设计与搭建c. 软件程序编写与调试d. 系统测试与优化5. 教学进度安排:第1周:复习51单片机原理及结构,介绍C语言编程基础。

第2周:讲解交通灯工作原理,分析交通灯控制系统实例。

基于51单片机的交通灯设计

基于51单片机的交通灯设计

基于51单片机的交通灯设计交通信号灯是现代城市交通管理的重要组成部分,也是保障道路交通安全的关键设施之一、为了更好地了解交通信号灯的设计原理和实现方法,本文将以基于51单片机的交通灯设计为例,详细介绍相关知识。

首先,我们需要了解51单片机的基本知识。

51单片机是一种常见的8位单片机,广泛应用于各类嵌入式系统中。

其开发工具多样,编程语言灵活,易于上手。

交通信号灯通常由红、黄、绿三种颜色的灯组成。

在运行过程中,红灯、黄灯和绿灯依次亮起,来实现交通的有序流动。

这背后的原理是通过控制每个灯的亮灭状态和持续时间,来控制车辆和行人的行动。

1.硬件设计:首先,需要设计交通信号灯的电路,并将其连接到51单片机上。

电路中需要包括三个LED灯(红、黄、绿),以及相应的电阻和连接线路。

2.程序编写:使用51单片机开发环境,编写程序来控制交通信号灯的闪烁状态和时间。

程序中需要定义每个灯的亮灭状态和持续时间,并按照预定的顺序进行切换。

可能遇到的问题和解决方法:1.灯的亮灭状态和时间不符合预期:检查程序中对每个灯的控制语句,确保逻辑正确。

也可以通过使用调试器来单步执行代码,以查看每个步骤的执行情况。

2.电路连接错误:检查电路连接是否正确,确保每个灯的电源和地线正确连接,并没有短路或断路的情况。

3.程序逻辑错误:检查程序中的条件判断和循环语句,确保程序按照预期的顺序和时间来切换灯的状态。

在交通信号灯设计中,还可以考虑以下几个方面的优化:1.增加传感器:可以通过添加传感器模块,来根据实时的交通流量和行人情况,动态调整交通信号灯的切换时间。

这样可以更好地适应实际交通状况。

2.增加无线通信功能:可以通过添加无线通信模块,与其他信号灯或交通管理中心进行通信,实现更高级的交通控制和协调。

这样可以提高交通效率和安全性。

3.引入自学习算法:可以通过引入机器学习算法,对交通信号灯进行优化和调整。

根据交通流量、行人情况等实时数据,自动调整交通信号灯的切换策略,进一步提升交通效率。

利用51单片机实现交通红绿灯讲解

利用51单片机实现交通红绿灯讲解


END
谢谢大家!
MOV A,#0B6H
MOVX @DPTR,A ;从A口输出数据0B6H,来控制相应二极管发光
INC DPTR
MOV A,#0DH
MOVX @DPTR,A ;从B口输出数据0DH,来控制相应二极管发光

西


黄绿红 110
黄绿红 110
黄绿红 黄绿红 110 11 0
B口低4位(ODH)
;允许定时器1中断

SEYB TR1
;打开定时器1

SJMP $
SER: MOV TH1,#3CH

MOV TL1,#0B0H ;定时器重装初值

DJNZ R1,NO ;循环定时(20H)次

MOV R1,20H

DJNZ R2,NO ;循环定时(21H)次

MOV R2,21H

RET
NO: RETI
MOV 20H,#0AH

MOV 21H,#01H
LCALL DELY
;延时0.5s
MOV DPTR,#0FF7CH
MOV A,#0BEH
MOVX @DPTR,A
INC DPTR
MOV A,#0FH
MOVX @DPTR,A
;东西红灯亮
MOV 20H,#0AH

MOV 21H,#01H

LCALL DELY

MOVX @DPTR,A
;南北红灯亮
MOV 20H,#0AH

MOV 21H,01H

LCALL DELY
;延时0.5s
DJNZ R7,JOD1
;闪烁次数未到继续

基于51单片机交通灯程序

基于51单片机交通灯程序

嗫************************************************************ 初始化、开机自检* 第一个状态:主干道、支干道均亮红灯5S* 第二个状态:主干道亮绿灯27S 、支干道亮红灯* 第三个状态:主干道黄灯闪烁、支干道红灯闪烁* 第四个状态:主干道亮红灯、支干道亮绿灯22S* 第五个状态:主干道红灯闪烁、支干道黄灯闪烁* 返回到第二个状态* 其中外部中断INTO 、INT1 分别控制主、支干道亮绿灯**************************************************************//* 11.0592MHz 晶振*/#include<reg51.h>// 头文件#include<intrins.h>// 头文件#define uchar unsigned char// 宏定义#define uint unsigned int// 宏定义sbit RED_ZHU = P1^0; sbit YELLOW_ZHU = P1^1; sbit GREEN_ZHU = P1^2;sbit RED_ZHI = P1^3;sbit YELLOW_ZHI = P1^4;sbit GREEN_ZHI = P1^5;uint aa, bai,shi,ge,bb;/* 数码管显示0-9*/uint code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; /* 子函数声明*/void delay(uint z);void delay0(uint z);void display(uint ge,uint shi);void xtimer0();void check();void init1();void init2();void init3();void init4();void init5();void xint0();void xint1();void GREEN_ZHU_ON();void GREEN_ZHI_ON();/********************************************************* 主函数*********************************************************/ void main(){EA=1;// 开中断EX0=1;// 允许外部中断INT0 中断IT0=0;// 定义INT0 触发方式PX0=1;// 中断优先级高EX1=1;// 允许外部中断INT1 中断IT1=0;// 定义INT1 触发方式PX1=1;// 中断优先级高check();// 开机自检init1();// 第 1 个状态while(1) {init2();// 第2 个状态init3();// 第3 个状态init4();// 第4 个状态init5();// 第 5 个状态}}void init1()// 第一个状态:主干道、支干道均亮红灯{5S int temp; temp=6;// 变量赋初值TMOD=0x01;// 定时器T0 工作于方式 1 TH0=0x4c;TL0=0x00;// 定时器赋初值EA=1;// 开中断ET0=1;// 开定时中断TR0=1;// 开定时器T0 while(1) {RED_ZHU=0; RED_ZHI=0; GREEN_ZHU=1; GREEN_ZHI=1;YELLOW_ZHU=1; YELLOW_ZHI=1;}if(aa==20)// 定时 20*50MS=1S{aa=O;//定时完成一次后清 0temp--;//变量自减if(temp<0){break;}shi=temp%100/10;// 显示十位ge=temp%10;// 显示个位}display(ge,shi);}in it2()//第二个状态:主干道亮绿灯 27S 、支干道亮红灯int temp;temp=31;//变量赋初值TMOD=0x01;// 定时器 T0 工作于方式 1 TH0=0x4c;TL0=0x00;// 定时器赋初值EA= 1 ;//开中断ETO=I;//开定时中断TRO=I;//开定时器TOwhile(1){RED_ZHU=1; RED_ZHI=0;GREEN_ZHU=0;GREEN_ZHI=1;YELLOW_ZHU=1; YELLOW_ZHI=1;if(aa==20)// 定时 20*50MS=1S{aa=0;//定时完成一次后清 0temp--;// 变量自减if(temp==3){ break;}shi=temp%100/10;// 显示十位ge=temp%10;// 显示个位}void{display(ge,shi);init3()// 第三个状态:主干道黄灯闪烁、支干道红灯闪烁 int temp; temp=4;// 变量赋初值TMOD=0x01;// 定时器 T0 工作于方式 1TH0=0x4c;TL0=0x00;// 定时器赋初值EA=1;// 开中断ET0=1;// 开定时中断TR0=1;// 开定时器 T0while(1){GREEN_ZHU=1;if(aa==20)// 定时 20*50MS=1S{aa=O;//定时完成一次后清 0temp--;// 变量自减 YELLOW_ZHU=~YELLOW_ZHU;RED_ZHI=~RED_ZHI;if(temp<0){break;}shi=temp%100/10;// 显示十位 ge=temp%10;// 显示个位}display(ge,shi);;} ini t4()//第四个状态:主干道亮红灯、支干道亮绿灯 inttemp;temp=26;//变量赋初值TMOD=0x01;// 定时器 T0 工作于方式 1TH0=0x4c;TL0=0x00;// 定时器赋初值EA= 1 ;//开中断ETO=I;//开定时中断TRO=I;//开定时器TO }void{ } void {22Swhile(1){RED_ZHU=0;RED_ZHI=1;YELLOW_ZHU=1;GREEN_ZHI=0; if(aa==20)// 定时 20*50MS=1S {aa=0;//定时完成一次后清 0temp--;//变量自减 if(temp==3) {break;}shi=temp%100/10;// 显示十位ge=temp%10;// 显示个位}display(ge,shi);}ini t5()//第五个状态:主干道红灯闪烁、支干道黄灯闪烁 int temp; temp=4;//变量赋初值TMOD=0x01;// 定时器 T0 工作于方式 1TH0=0x4c;TL0=0x00;// 定时器赋初值EA= 1 ;//开中断ETO=I;//开定时中断TRO=I;//开定时器TOwhile(1){RED_ZHI=1;GREEN_ZHU=1;GREEN_ZHI=1;if(aa==20)// 定时 20*50MS=1S{aa=0;//定时完成一次后清 0temp--;// 变量自减YELLOW_ZHI=~YELLOW_ZHI;RED_ZHU=~RED_ZHU;if(temp<0){}void{break;} shi=temp%100/10;// 显示十位ge=temp%10;// 显示个位}display(ge,shi);}}/* 显示子函数*/void display(uint ge,uint shi){P0=0xfd;P2=table[shi];// 显示十位delay0(5);P0=0xfe;P2=table[ge];// 显示个位delay0(5);}void xint0() interrupt 0 // 外部中断INT0{GREEN_ZHU_ON();}void xint1() interrupt 2 // 外部中断INT1{GREEN_ZHI_ON();}void GREEN_ZHU_ON()// 外部中断INT0 显示子程序{RED_ZHI=0;RED_ZHU=1;GREEN_ZHI=1;GREEN_ZHU=0;YELLOW_ZHI=1;YELLOW_ZHU=1;P0=0x00;P2=0Xff; delay0(1000);return;}void GREEN_ZHI_ON()// 外部中断INT1 显示子程序{ RED_ZHI=1;RED_ZHU=0;GREEN_ZHI=0;GREEN_ZHU=1;YELLOW_ZHI=1;YELLOW_ZHU=1;P0=0x00;P2=0xff; delay0(1000); return;}void check()// 开机自检子程序{RED_ZHI=0;RED_ZHU=0;GREEN_ZHI=0;GREEN_ZHU=0;YELLOW_ZHI=0;YELLOW_ZHU=0;P0=0x00;P2=0Xff;delay(2);RED_ZHI=1;RED_ZHU=1;GREEN_ZHI=1;GREEN_ZHU=1;YELLOW_ZHI=1;YELLOW_ZHU=1;P0=0xff;P2=0xff;}/* 定时中断子函数*/void xtimer0() interrupt 1{TH0=0x4c;TL0=0x00;aa++;}/* 延时子函数*/void delay0(uint z){uint i,j;for(i=0;i<z;i++)for(j=0;j<110;j++);}/*********************************************************500ms 延时函数晶振:11.0592MHz*********************************************************/ void delay(uchar j) {uchar k;uint i;for(;j>0;j--){for(i=1250;i>0;i--){for(k=180;k>0;k--);}。

基于51单片机的交通信号灯系统_毕业设计

基于51单片机的交通信号灯系统_毕业设计

毕业设计基于单片机的交通信号的灯控制系统一. 综合实训的主要内容 1.设计任务设计一单片机控制的交通信号灯系统,模拟城市十字路口交通信号灯功能。

2.基本功能要求2.1 交通信号控制直行车道红黄绿灯控制、左行车道绿灯控制、人行横道红绿灯控制。

2.2 通行时间显示数码管倒计时显示通行时间。

2.3 时间参数设置存储按键实现通行时间的设置,并存储到EEPROM (24C02)芯片中。

二. 硬件方案设计与论证 1. 显示模块设计1.1倒计时时间显示设计思想:由于该系统要求完成倒计时显示通行时间的功能,且考虑到实际的交通系统中车辆及行人通行时间不会超过一分钟,基于以上原因,我们考虑完全采用数码管显示,四个路口分别采用一个二位共阴极数码管进行显示。

(其实物图见附录1图5.3)图2.1 数码管原理图原理图分析:为了显示数字或字符,必须对数字或字符进行编码。

七段数码管GND abcde fg dp gf ed c ba(a)(a,b,c,d,e,f,g)加上一个小数点(dp),共计8段,构成一个字节,通过对这八段给予高低平使二极管导通或截止,从而显示不同的数字或字符。

系统中所使用的是2位共阴数码管(实物图见附录),其管脚从左上方起顺时针依次为1,a,b,e,d,2,g,f,dp,c。

1.2 状态灯显示设计思想:由于该系统要求完成状态灯显示的功能,我们把各个路口的红灯和黄灯设成直行和左拐两个通行方式所共有,也就是说,一个路口只需四个状态灯,一个直行通行的绿灯,一个左拐通行的绿灯,一个共有的红灯,一个共有的黄灯,人行横道采用红绿灯控制,综上所述,我们共使用16个LED绿灯,12个LED 红灯,4个LED黄灯来完成状态灯显示功能。

2.控制模块设计2.1 设计思想由于本系统结构简单,实现较容易,不需要大量的外围扩展,所以我们采用STC89C51单片机作为主控制器,STC89C51单片机具有体积小,功耗低,控制能力强,价格低、扩展灵活,使用方便等特点,其最小系统由振荡电路、复位电路构成。

C51单片机的交通灯控制系统.

C51单片机的交通灯控制系统.

基于C51单片机的交通灯控制系统1、实验方案论证:进行十字路口的交通信号灯控制电路设计,画出电路原理图及实验电路图,进行软件编程、以及使用说明文档的建立等一整套工作任务。

进行十字路口的交通信号灯控制程序设计,提交一个符合上述功能要求的十字路口的交通信号灯控制系统设计。

2、控制流程分析:对设计要求进行分析后可得出以下交通工作状态表:3、硬件设计概要:根据设计要求,可用6个LED灯分别模拟东西、南北的交通灯。

具体接法如下:AT89C51的P1口接LED灯,P1.0、P1.1、P1.2分别接东西方向红、绿、黄交通灯,P1.3、P1.4、P1.5分别接南北方向的红、绿、黄交通灯。

P1口和LED 灯之间要接限流保护电阻。

两位数码管段选接P2口,位选接P0口低两位,P0口低两位接上拉电阻使其可以输出高电平。

紧急情况按钮一端接地,另一端与外中断1引脚相连;恢复正常按钮一端接地,另一端与外中断0引脚相连。

三、原理图设计1、LED显示部分电路设计:把单片机AT89C51的P1口作为红黄绿灯显示部分,用6个LED灯分别模拟东西、南北的交通灯。

P1.0、P1.1、P1.2各通过一个300Ω的限流保护电阻接东西方向的红、绿、黄LED灯;P1.3、P1.4、P1.5各通过一个300Ω的限流保护电阻接南北方向的红、绿、黄LED灯。

LED灯的一端接电源,另一端经电阻接P1口,因此当P1口引脚输出低电平时LED灯发光,即此方案采取低电平驱动方式。

具体电路如下:2、紧急情况处理电路设计:紧急情况按钮一端接地,另一端与外中断1引脚相连;恢复正常按钮一端接地,另一端与外中断0引脚相连。

在程序设计时,我会将其设置为下降沿触发方式。

具体电路如下:3、数字显示电路设计:选用共阴极两位数码管。

两位数码管A~G引脚各通过一个300Ω的限流保护电阻分别接P2.0~P2.6,位选1引脚和2引脚分别接P0.0口低两位,P0口低两位接5kΩ的上拉电阻使其可以输出高电平。

51单片机的交通灯设计(可用)

51单片机的交通灯设计(可用)

基于51单片机的交通灯设计2.AT89C51单片机最小实现电路及配套发光二极管电路。

3.设计要求1.编程要求:主程序利用 C 语言编写。

2.实现功能:使用AT89C51单片机控制 4个方向的交通灯(红﹑黄﹑绿)并用数码管显示其时间。

3. 实验现象:状态一:主干道、支干道均亮红灯5秒;状态二:主干道亮绿灯30秒、支干道亮红灯;状态三:主干道绿灯闪3次转亮黄灯、支干道亮红灯3秒;状态四:主干道亮红灯、支干道亮绿灯25秒;状态五:主干道亮红灯、支干道绿灯闪3次转亮黄灯3秒;返回到第二个状态。

4.设计相关知识4.1 硬件设计1. AT89C51简介:AT89C51是一种带4K字节闪存可编程可擦除只读存储器的低电压、高性能CMOS 8位微处理器。

它是一种带2K字节闪存可编程可擦除只读存储器的单片机。

AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

2. 2位8段数码管工作原理:2位8段数码管电路采用“共阴”连接,阴极公共端(COM)由晶体管推动。

如图4-3所示:段码和位码,段码即段选信号 SEG,它负责数码管显示的内容,图中 a~g、dp组成的数据(a 为最低位,dp 为最高位)就是段码。

位码即位选信号 DIG,它决定哪个数码管工作,哪个数码管不工作。

当需要某一位数码管显示数字时,只需要先选中这位数码管的位信号,再给显示数字的段码。

4.2 软件应用1. Proteus7.5简介:Proteus软件不仅具有EDA工具软件的仿真功能,还能仿真单片机及外围器件Proteus从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等。

在编译方面,它支持IAR、Keil和MPLAB等多种编译器。

郭天祥51单片机交通灯程序

郭天祥51单片机交通灯程序
{
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(3);
dula=1;
P0=table[ge];
dula=0;
P0=ela=0;
delayms(3);
}
void delayms(uint xms)
郭天祥51单片机交通灯程序
/*--------------------------------------------------------------
*/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
{
ledy=1;
ledg=1;
ledr=0;
shi=(50-num1)/10;
ge=(50-num1)%10;
display(shi,ge);
keyscan();
}
}
while(flag==2)
{
ledr=1;
ledg=0;
ledy=1;
P0=0x00;
dula=1;
dula=0;
keyscan();
}
while(flag==3)
{
ledr=1;
ledg=1;
ledy=0;
P0=0x00;
dula=1;
dula=0;
keyscan();
}
while(flag==4)
{
ledr=0;
ledg=1;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机实现交通灯控制程序2010-04-28 23:02
当出现交通事故时,按下单片机右侧开关,所有红灯亮,交通停止,通行时间保持,弹起开关,交通接停止时的时间继续进行
#include<reg52.h>
#include<stdio.h>
#define unchar unsigned char
#define unint unsigned int
sbit key=P3^2;
unchar code dis[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,0xff
};
unint i,j,k;
unint s;
unchar h;
void delay(unint c); void cut0();
void cut1();
void cut2();
void cut3();
void cut4();
void cut5();
void cut6();
void cut7();
void main()
{
TMOD=0X06;
TH0=0Xff;
TL0=0xff;
TR0=1;
EA=1;
EX0=1;
EX1=1;
ET0=1;
P1=0x00;
P3=0xff;
P0=0xf6;
P2=0xf5;
for(h=29;h>0;h--) { for(s=24;s>0;s--) {
cut0();
P3=0xfc;
P1=0xff;
P3=0xfd;
P1=dis[h/10];
delay(1);
P3=0xfc;
P1=0xff;
P1=dis[h%10];
delay(1);
}
}
for(h=4;h>0;h--)
{
cut1();
P2=0xf3;
delay(10);
P2=0xf7;
delay(10);
P3=0xfc;
P1=0xff;
P3=0xfe;
P1=dis[h%10];
delay(20);
}
P2=0xee;
for(h=29;h>0;h--) { for(s=24;s>0;s--) {
cut2();
P3=0xfc;
P1=0xff;
P3=0xfd;
P1=dis[h/10];
delay(1);
P3=0xfc;
P1=0xff;
P3=0xfe;
P1=dis[h%10];
delay(1);
}
}
for(h=4;h>0;h--)
{
P2=0xde;
delay(10);
P2=0xfe;
delay(10);
P3=0xfc;
P1=0xff;
P3=0xfe;
P1=dis[h%10];
delay(20);
}
P2=0xf6;
P0=0xf5;
for(h=29;h>0;h--) { for(s=24;s>0;s--) {
cut4();
P3=0xfc;
P1=0xff;
P3=0xfd;
P1=dis[h/10];
delay(1);
P3=0xfc;
P1=0xff;
P3=0xfe;
P1=dis[h%10];
delay(1);
}
}
for(h=4;h>0;h--)
{
cut5();
P0=0xf3;
delay(10);
P0=0xf7;
delay(10);
P3=0xfc;
P1=0xff;
P3=0xfe;
P1=dis[h%10];
delay(20);
}
P0=0xee;
for(h=29;h>0;h--) { for(s=24;s>0;s--) {
cut6();
P3=0xfc;
P1=0xff;
P3=0xfd;
P1=dis[h/10];
delay(1);
P3=0xfc;
P1=0xff;
P3=0xfe;
P1=dis[h%10];
delay(1);
}
}
for(h=4;h>0;h--)
{
cut7();
P0=0xde;
delay(10);
P0=0xfe;
delay(10);
P3=0xfc;
P1=0xff;
P3=0xfe;
P1=dis[h%10];
delay(20);
}
}
void delay(unint c)
{
while(c--)
for(j=1500;j>0;j--); }
void cut0()
{
key=1;
if(key==0)
while(1)
{
P2=0xf6;
key=1;
if(key==1)
{
P2=0xf5;
break ;
}
}
}
void cut1()
{
key=1;
if(key==0)
while(1)
{
P2=0xf6;
key=1;
if(key==1)
{
P2=0xf7;
break ;
}
}
}
void cut2()
{
key=1;
if(key==0)
while(1)
{
P2=0xf6;
key=1;
if(key==1) {
P2=0xee; break ;
}
}
}
void cut3() {
key=1;
if(key==0)
while(1)
{
P2=0xf6; key=1;
if(key==1) {
P2=0xfe; break ;
}
}
}
void cut4() {
key=1;
if(key==0)
while(1)
{
P0=0xf6; key=1;
if(key==1) {
P0=0xf5; break ;
}
}
}
void cut5() {
key=1;
if(key==0)
while(1)
{
P0=0xf6; key=1;
if(key==1) {
P0=0xf7; break ;
}
}
}
void cut6() {
key=1;
if(key==0)
while(1)
{
P0=0xf6; key=1;
if(key==1) {
P0=0xee; break ;
}
}
}
void cut7() {
key=1;
if(key==0)
while(1)
{
P0=0xf6; key=1;
if(key==1) {
P0=0xfe; break ;
}
}
}。

相关文档
最新文档