单片机交通灯程序流程图
单片机课程设计交通灯(完整版)
门控串行数据输入
异步中央复位
符合 JEDEC 标准 no.7A
静电放电 (ESD) 保护:
·HBM EIA/JESD22-A114-B 超过 2000 V
·MM EIA/JESD22-A115-A 超过 200 V 。
多种封装形式
额定从-40 °C至 +85 °C和-40 °C至 +125 °C。
设计思想基于完成以上任务分析结合所学有关知识尤其是本学期所学关于单片机的中断系统和定时计数器的相关知识及应用我们知道对于15红绿黄四组各三盏灯的控制可以通过把这十二盏灯分别接到单片机的六个输出引脚若用p1口进行输出则分配如下at89c51l1l2l3l4l5l6东西红东西黄东西绿南北红南北黄南北绿led显示分布1642
亮灯规律:东西绿灯亮25s,南北红灯亮25s
东西绿灯闪5s,南北红灯亮5s
东西黄灯亮2s,南北红灯亮2s
东西红灯亮25s,南北绿灯亮25s
东西红灯亮5s,南北绿灯闪5s
东西红灯亮2s,南北黄灯亮2s
2.2.
(1)加强对单片机和汇编语言的认识,充分掌握和理解设计各部分的工作原理、设计过程、选择芯片器件、模块化编程等多项知识。
3.2.LED
3.2.1.七段数码显示器:
七段发光线段分别用a、b、c、d、e、f、g七个小写字母表示。
3.2.2.LED数码管:
半导体数码管又称LED数码管,是一种广泛使用的显示器件。LED有两种:共阳极型和共阴极型。
LED优点:亮度高、字形清晰,工作电压低(1.5~3V)、体积小、可靠性高、寿命长,响应速度极快。
1.引言
交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
用单片机控制交通灯源程序代码及流程图
用单片机控制交通灯传统的交通灯控制电路一般由数字电路构成,电路复杂、体积大、成本高。
采用单片机控制交通灯不但可以解决上述问题,而且还具有时间显示功能,非常方便。
下面介绍一种用单片机控制交通灯的方法。
一、硬件硬件电路如附图。
AT89C2051的P1.7~P1.5和P1.3~P1.1直接驱动红、黄、绿灯,利用单片机的串口和二片74LS164串/并转换移位寄存器实现时间显示,七段数码管为共阴管,硬件电路极为简单。
二、软件交通灯有红、黄、绿三种。
红灯亮,停止通行;绿灯亮,允许通行;黄灯亮,作过渡。
红灯亮60秒,绿灯亮55秒,黄灯亮5秒。
每组灯的亮暗状态以2分钟为周期循环,故程序采用主、子程序方式,循环结构。
另外,为了简化电路,红、黄、绿灯采用低电平点亮。
源程序清单如下:ORG0000HSTART:MOVDRTR,#TABMOVSCON,#00HMOVP1,#6CH;点亮红、绿灯MOVR0,#0;R0清零LEFT:INCR0CJNER0,#55,LP0;R0<55,转LP0MOVP1,#6AH;R0=55,点亮红、黄灯LJMPLP1LP0:CJNER0,#60,LP1;R0<60,转LP1MOVP1,#0C6H;R0=60,点亮绿、红灯LJMPRIGHTLP1:LCALLDBDBLCALLDISPLJMPLEFT;20H为1,转LEFTRIGHT:DECR0CJNER0,#5,LP2;R0>0,转LP2MOVP1,#0A6H;R0=5,点亮黄、红灯LJMPLP3LP2:CJNER0,#0,LP3MOVP1,#6CH;R0=0,点亮红、绿灯LJMPLEFTLP3:LCALLDBDBLCALLDISPLJMPRIGHTDBDB:MOVA,R0MOVB,#10DIVABMOVR1,AMOVR2,BRETDISP:MOVA,R2MOVCA,@A+DPTRMOVSBUF,AJNBTI,$;查TI位CLRTIMOVA,R1MOVCA,@A+DPTRMOVSBUF,AJNBT1,$CLRTILCALLDEALYRETDELAY:MOVR3,#09HK1:MOVR4,#100K2:MOVR5,#250K3:DJNZR5,K3DJNZR4,K2KJNZR3,K1RETTAB:DB3FH,06H,5BHDB4FH,66HDB6DH,7DH,07HDB7FH,6FH三.实验电路及连线四.实验说明1.因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。
单片机红绿灯程序完整版
通灯设计交通灯设计方案:1:实现东西路----南北路红绿灯的交通指示。
2:东西路灯变化----红绿黄一南北路灯变化----绿黄红> T3:红灯延时时间---25S绿灯延时时间---20S黄灯延时时间一3S4:数码管显示:红灯---前20S不显示,只在最后5S开始倒计时显示。
绿灯---前15S不显示,只在最后5S开始倒计时显示。
黄灯---3S倒计时显示(若东西路为黄灯,南北路为红灯,那么南北绿的数码管也显示3S)。
5:交通应急事件处理:利用中断分别实现东西路---南北路的交通应急事件处理。
6:延时程序的使用:用循环延时和定时器计时的方法。
注:P1.0---北路绿灯,P1.1--北路黄灯,P1.2---北路红灯cP1.3--东路绿灯,P1.4---东路黄灯,P1.5----东路红灯。
【交通灯流程图】开始延时20秒5秒倒计时结束其他灯不变南北路绿灯亮,红,黄灯灭东西路红灯亮,绿,黄灯灭南北路绿灯数码管开始倒计时5秒南北路绿灯灭,黄灯亮且数码管开始倒计时3秒东西路红灯——数码管开始倒计时3秒3秒倒计时结束延时25秒5秒倒计时结束东西路绿灯亮,黄灯,红灯灭南北路红灯亮,黄灯,绿灯灭东西路数码管开始倒计时5秒其他灯不变东西路绿灯灭,黄灯亮且数码管开始倒计时3秒南北路红灯一一数码管开始倒计时3秒3秒倒计时结束程序如下:ORG 0000HLJMP LOOPORG 000BHLJMP WZDOORG 0013HLJMP WZD1ORG 0030HLOOP:MOV R3,#5MOV R4,#5MOV R2,#20l=LIfc=ER;定时器0中断,实现交通应急事件;下载可编辑亮 oMOV SP,#70H MOV IE,#85HMOV TMOD,#01H ;置T0为工作方式1MOV TH0,#3CH;置T0定时初值50msMOV TL0,#0B0HCLRTF0SETBTR0;启动定时器T0SETB P1.1 ;东---红灯亮,北---绿灯亮SETB P1.2CLR P1.0SETB P1.3SETB P1.4CLR P1.5ACALL DEL30SACALL Y ELLOW1 ; 北---绿灯转黄灯,东---红灯亮 ACALL DEL3S ;延时后北---黄灯火SETB P1.0;东:红灯火,绿灯亮,北:黄灯火,红灯CLR P1.2SETB P1.4SETB P1.5ACALL DEL55S ; 北---红灯不变,东---绿灯转黄灯ACALL Y ELLOW2ACALL DEL3SSJMP LOOPYELLOW1: ; 北---绿灯转黄灯,东---红灯不变SETB P1.0SETB P1.2CLR P1.1SETB P1.3CLR P1.5SETB P1.4RETYELLOW2: ; 东---绿灯转黄灯,北---红灯不变SETB P1.0SETB P1.1CLR P1.2SETB P1.3CLR P1.4RETWZD0: ;实现南北路交通应急事件CLR P1.0 ;(南北路保持畅通,东西路停止通行)SETB P1.1SETB P1.2SETB P1.3SETB P1.4CLR P1.5JNB P3.2,WZD0RETIWZD1: ;实现东西路交通应急事件CLR P1.3 ;(东西路保持畅通,南北路停止通行)CLR P1.2SETB P1.1SETB P1.0SETB P1.4SETB P1.5JNB P3.3,WZD1RETIDEL30S: J红绿灯延时DEL25S:JNB TF0QEL25S ;查询50ms到否CLR TFOMOV TH0,#3CH ;恢复T0定时初值50msMOV TL0,#0B0HDJNZ R2,DEL25S ;判断1s到否?未到继续状态MOV R2,#20 ;置50ms计数初值DJNZ R4,DEL25S ;状态1维持25s取数延时DEL5S:5MOV R2,#6DEL5:MOV A,R2ACALLST ;取数MOV P0,A ;实现数码管显示ACALL DEL1S ;每隔1S减1DJNZ R2,DEL5RETDEL3S:MOV R2,#4HDEL3:MOV A,R2ACALL ST ;取数MOV P2,AMOV P0,A ;数码管显示ACALL DEL1SDJNZ R2,DEL3RETDEL55S:ACALL DEL20SMOV R2,#6 ;倒计时5S DEL55:ACALL DEL1SMOV A,R2ACALLSTMOV P2,A ;数码管显示DJNZ R2QEL55RETDEL1S: ;1S 延时子程序MOV R5,#0BHST1:MOV R6,#0DAH下载可编辑ST2:MOV R7,#0CFHDJNZ R7,$DJNZ R6,ST2DJNZ R5,ST1RETDEL20S: ;20S延时子程序MOV R5,#0BH;#0DCHST3:MOV R6,#0DAHST4:MOV R7,#0CFHDJNZ R7,$DJNZ R6,ST4DJNZ R5,ST3RETST: ;取数MOV DPTR,#TABMOVC A,@A+DPTRRETTAB:DB 0FFH,0FFH,0F9H,0A4H,0B0H,99H,92HEnd.专业.整理.。
51单片机交通灯(加急救车)
51单片机控制交通灯一、实现功能:1、先南北红灯亮,东西绿灯亮。
南北红灯亮维持25秒,在南北红灯亮的同时东西绿灯也亮,并维持20秒;到20秒时,东西绿灯闪亮,闪亮3秒后熄灭。
在东西绿灯熄灭时,东西黄灯亮,并维持2秒。
到2秒时,东西黄灯熄灭,东西红灯亮,同时,南北红灯熄灭,绿灯亮,东西红灯亮维持30秒。
南北绿灯亮维持25秒,然后闪亮3秒后熄灭。
同时南北黄灯亮,维持2秒后熄灭,这时南北红灯亮,东西绿灯亮。
周而复始。
2、用一个按键模拟急救车到达。
急救车到达路口时,四个方向的红灯全亮,10秒钟后恢复正常显示。
3、一辆急救车正在过路口时(即四个方向全红灯10秒倒计时未结束),又来了一辆急救车,重新从10秒开始倒计时。
4、急救车过去之后(即10秒倒计时结束),路灯状态要继续急救车到达之前的状态往下运行。
5、数码管显示绿灯变红灯、红灯变绿灯以及急救车10秒钟的倒计时。
6、急救车从路口过的时候,蜂鸣器响1s停1s的循环报警。
二、proteus仿真电路图注:此图仅作为仿真使用。
实际焊接电路时,由于单片机的驱动能力较弱,所以数码管的位选、LED的控制最好加上三极管进行电流放大,否则即使能实现功能,但是LED和数码管的发光的亮度也不强。
三、C语言程序程序#include <reg51.h>#define uchar unsigned char#define uint unsigned int#define duan P0#define wei P2code uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; uchar buff[8] = {10,10,10,10,10,10,10,10};uchar weizhi = 0;uchar alarm = 0;uchar bk_TH1 = 0;uchar bk_TL1 = 0;uchar bk_cnt = 0;uchar bk_cnt_time = 0;uchar cnt_time = 0;uchar cnt = 0;uchar cnt_flash = 0;bit cnt_finish = 0;bit LED = 0;bit beef_flag = 1;sbit Er = P1^0; //东西—红灯sbit Eg = P1^1; //东西—绿灯sbit Ey = P1^2; //东西—黄灯sbit Sr = P1^3; //南北—红灯sbit Sg = P1^4; //南北—绿灯sbit Sy = P1^5; //南北—黄灯sbit beef = P1^6; //蜂鸣器void display(void);void main(void){uchar time = 0;TMOD |= 0x11;TH0 = (65536-2000)/256;TL0 = (65536-2000)%256;TH1 = (65536-50000)/256;TL1 = (65536-50000)%256;ET1 = 1;ET0 = 1;INT0 = 1;EX0 = 1;IP |= 0x02;EA = 1;TR0 = 1;TR1 = 1;Sr = 0;Sg = 0;Sy = 0;Er = 0;Eg = 0;Ey = 0;beef = 0;buff[0] = 11;buff[1] = 11;buff[2] = 11;buff[3] = 11;buff[4] = 11;buff[5] = 11;buff[6] = 10;buff[7] = 10;while(1){while((cnt<20)&&(alarm == 0)){Sr = 1;Sg = 0;Sy = 0;Er = 0;Eg = 1;Ey = 0;time = (25-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<23)&&(alarm == 0)){Sr = 1;Sg = 0;Sy = 0;Er = 0;Eg = LED;Ey = 0;time = (25-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<25)&&(alarm == 0)) {Sr = 1;Sg = 0;Sy = 0;Er = 0;Eg = 0;Ey = 1;time = (25-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<50)&&(alarm == 0)) {Sr = 0;Sg = 1;Sy = 0;Er = 1;Eg = 0;Ey = 0;time = (55-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<53)&&(alarm == 0)) {Sr = 0;Sg = LED;Sy = 0;Er = 1;Eg = 0;Ey = 0;time = (55-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt_finish != 1)&&(alarm == 0)){Sr = 0;Sg = 0;Sy = 1;Er = 1;Eg = 0;Ey = 0;time = (55-cnt);buff[7] = time%10;buff[6] = time/10;}cnt_finish = 0;while(alarm == 1){Er = 1;Eg = 0;Ey = 0;Sr = 1;Sg = 0;Sy = 0;time = (10-cnt);buff[7] = time%10;buff[6] = time/10;if(cnt == 10){TR1 = 0;TH1 = bk_TH1;TL1 = bk_TL1;cnt = bk_cnt;cnt_time = bk_cnt_time;TR1 = 1;alarm = 0;}beef = beef_flag;}beef = 0;}}void int0(void) interrupt 0{TR1 = 0;if(alarm == 0){bk_TH1 = TH1;bk_TL1 = TL1;bk_cnt = cnt;bk_cnt_time = cnt_time;}TH1 = (65536-50000)/256;TL1 = (65536-50000)%256;cnt = 0;cnt_time = 0;alarm = 1;TR1 = 1;}void timer0(void) interrupt 1 {TH0 = (65536-2000)/256;TL0 = (65536-2000)%256;display();}void timer1(void) interrupt 3 {TH1 = (65536-50000)/256;TL1 = (65536-50000)%256;if(++cnt_time == 20){cnt_time = 0;cnt++;beef_flag = ~beef_flag;}if(++cnt_flash == 4){cnt_flash = 0;LED = ~LED;}if(cnt == 55){cnt = 0;cnt_finish = 1;}}void display(void){duan = 0xff;wei = (1<<weizhi);duan = tab[buff[weizhi]];if(++weizhi == 8){weizhi = 0;}}。
单片机整套实验及程序(交通灯_跑马灯等)
实验1 跑马灯实验一、实验目的●初步学会Proteus ISIS和uVision2单片机集成开发环境的使用;●初步掌握采用汇编语言与C语言开发单片机系统的程序结构;●掌握80C51单片机通用I/O口的使用;●掌握单片机内部定时/计数器的使用及编程方法以及中断处理程序的编写方法。
二、实验设备及器件●硬件:PC机,HNIST-1型单片机实验系统●软件:Proteus ISIS单片机仿真环境,uVision2单片机集成开发环境三、实验内容●编写一段程序,采用P1口作为控制端口,使与P1口相接的四个发光二极管〔D1、D2、D3、D4〕按照一定的方式点亮。
如点亮方式为:先点亮D1,延时一段时间,再顺序点亮D2……D4,然后又是D4……D1,同时只能有一个灯亮;然后每隔一段时间一次使相邻两个灯亮,三个灯亮,四个灯亮,最后闪烁三次,接着循环变化。
●基于Proteus ISIS仿真环境完成上述功能的仿真。
●基于uVision2单片机集成开发环境与硬件平台完成程序的脱机运行。
四、实验原理图图3.1 跑马灯实验电路原理图电路原理图如上图3.1所示,AT89S52的P1.0~P1.3控制4个发光二极管,发光二极管按照一定次序发光,相邻发光二极管的发光时间间隔可以通过定时器控制,还可以通过软件延时实现。
五、软件流程图与参考程序●主程序流程图如下:●参考程序#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar aa,num,speed,flag;uchar code table[]={0x0e,0x0d,0x0b,0x07};uchar code table1[]={0x0a,0x05,0x09,0x06};uchar codetable2[]={0x0c,0x09,0x03,0x08,0x01,0x0e,0x0c,0x08,0x00};void delay(uint z)//延时函数{uint x;uchar y;for(x=z;x>0;x--)for(y=200;y>0;y--);}void init()//条件初始化函数{ flag=0;speed=10;//控制跑马灯流水速度TMOD=0x01;//中断方式TH0=(65535-50000)/256;TL0=(65536-50000)%256;//初值EA=1;//翻开总中断ET0=1;//翻开外中断0TR0=1;}void main(){init();//调用初始化函数while(1){if(flag){delay(2000);//调用延时函数for(num=0;num<4;num++)//从左至右间隔一个依次闪烁{P1=table[num];delay(2000);}for(num=3;num>0;num--)//从左至右间隔一个依次闪烁{P1=table[num];delay(2000);}for(num=0;num<4;num++)//从左至右间隔两个依次闪烁{P1=table1[num];delay(2000);}for(num=3;num>0;num--)//从左至右间隔两个依次闪烁{P1=table1[num];delay(2000);}for(num=0;num<6;num++)//两个,三个,四个跑马灯依次闪烁{P1=table2[num];delay(2000);}for(num=0;num<5;num++)//闪烁5次{P1=0xff;//全暗delay(2000);P1=0X00;//全亮delay(2000);}speed=speed-3;//变速if(speed==4){speed=10;}}}}void timer0() interrupt 1//中断函数{TH0=(65535-50000)/256;TL0=(65536-50000)%256;aa++;if(aa==speed){aa=0;flag=1;}}六、实验思考题●请用汇编指令完本钱实验内容,深刻理解汇编语言程序设计结构。
Proteus实现单片机交通灯_图+程序(调试可用)
这是我初学单片机,并用Proreus软件自己绘制自己编写程序实现的一个交通红绿灯的系统。
这是硬件连接图和程序,以便今后复习。
左上右下中控制部分,上面一个开关按下时,南北方向绿灯,东西方向红灯黄灯闪烁3秒绿灯设置15秒,红灯设置18秒。
绿灯走完15秒后黄灯闪烁3秒变为红灯,红灯走完18秒后变成绿灯,以此循环。
源程序:COUNT EQU30H;T0中断计数SNLEDDATA EQU31H;存储南北数码管显示的数据SNCOLORFLAG EQU32H;=1时南北绿灯亮,=2时南北黄灯亮,=3时南北红灯亮SNLEDDATAINIT EQU33H;存储南北各颜色灯的初始时间EWLEDDATA EQU34H;存储东西数码管显示的数据EWCOLORFLAG EQU35H;=1时东西红灯亮,=2时东西绿灯亮,=3时东西黄灯亮EWLEDDATAINIT EQU36H;存储东西各颜色灯的初始时间org0000hlJMP MAINorg0003hljmp exint0ORG000BHlJMP INTT0org0013hljmp exint1org0100h;主函数**************************************MAIN:CALL INITSTART:MOV A,COUNTCJNE A,#200,NOT1S;没到1秒跳转MOV COUNT,#00;1秒时间到DEC SNLEDDATAMOV A,SNLEDDATAJNZ checkewleddataMOV SNLEDDATA,SNLEDDATAINITINC SNCOLORFLAGMOV A,SNCOLORFLAGCJNE A,#04,checkewleddataMOV SNCOLORFLAG,#01checkewleddata:DEC EWLEDDATAMOV A,EWLEDDATAJNZ timenotoverMOV EWLEDDATA,EWLEDDATAINITINC EWCOLORFLAGMOV A,EWCOLORFLAGCJNE A,#04,timenotoverMOV EWCOLORFLAG,#01TIMENOTOVER:NOT1S:call ewcolorcheckCALL snCOLORCHECKCALL DISPLAYJMP START;*********************************************;初始化函数***********************************INIT:MOV SP,#60HMOV TMOD,#01HMOV TH0,#0eCHMOV TL0,#078HMOV COUNT,#00HMOV SNLEDDATAINIT,#15MOV EWLEDDATAINIT,#18MOV SNLEDDATA,SNLEDDATAINITMOV EWLEDDATA,EWLEDDATAINITSETB TR0;开定时器0SETB ET0;允许定时器0中断setb ex0;允许外部0中断setb ex1;允许外部1中断setb it0;外部中断0下降沿触发setb it1;外部中断1下降沿触发SETB EA;开总中断MOV P2,#0feHMOV SNCOLORFLAG,#01RET;*****************************************;外部中断0*********************************** exint0:push accpush pswmov a,p0push accmov a,p1push accmov a,p2push accclr ex1clr p2.0clr p2.1clr p2.2clr p2.3setb p1.4clr p1.1clr p1.2setb p1.5clr p1.3clr p1.4jnb p3.2,$setb ex1pop accmov p2,apop accmov p1,apop accmov p0,apop pswpop acc;外部中断1*********************************** exint1:push accpush pswmov a,p0push accmov a,p1push accmov a,p2push accclr ex0clr p2.0clr p2.1clr p2.2clr p2.3setb p1.4setb p1.2clr p1.1clr p1.0setb p1.3clr p1.5clr p1.4jnb p3.3,$setb ex0pop accmov p2,apop accmov p1,apop accmov p0,apop pswpop acc;T0中断函数*******************************INTT0:PUSH ACCPUSH PSWMOV TH0,#0ecH;#0echMOV TL0,#078H;#078hMOV A,P2RL ACJNE A,#11101111B,NOT5MOV A,#0feH;p2.0=0,南北数码管十位亮,p2.1=0,南北数码管个位亮NOT5:MOV P2,A;p2.2=0,东西数码管十位亮,p2.3=0,东西数码管个位亮INC COUNTPOP PSWPOP ACCRETI;****************************************;南北红绿黄灯控制**************************snCOLORCHECK:PUSH ACCPUSH BPUSH PSWsngreen:MOV A,SNCOLORFLAGCJNE A,#01,snYELLOWMOV SNLEDDATAINIT,#03;设置南北黄灯闪烁时间CLR P1.2CLR P1.1SETB P1.0;南北绿灯亮JMP snCOLORCHECKOUTsnYELLOW:;MOV A,SNCOLORFLAGCJNE A,#02,snredMOV SNLEDDATAINIT,#18;设置南北红灯亮时间MOV A,COUNTDIV ABMOV A,BCJNE A,#00H,snNOTFLASHCPL P1.1;南北黄灯闪烁CLR P1.0CLR P1.2snNOTFLASH:JMP snCOLORCHECKOUTsnred:MOV SNLEDDATAINIT,#15;设置南北绿灯亮时间CLR P1.0CLR P1.1SETB P1.2;南北红灯亮snCOLORCHECKOUT:POP PSWPOP BPOP ACCRET;******************************************************;东西红绿黄灯控制**************************************ewCOLORCHECK:PUSH ACCPUSH BPUSH PSWewred:MOV A,ewCOLORFLAGCJNE A,#01,ewyellowMOV ewLEDDATAINIT,#15;设置东西绿灯亮时间CLR P1.3CLR P1.4SETB P1.5;东西红灯亮JMP ewCOLORCHECKOUT;MOV A,ewCOLORFLAGCJNE A,#03,ewgreenMOV ewLEDDATAINIT,#18;设置东西红灯亮时间MOV A,COUNTMOV B,#100DIV ABMOV A,BCJNE A,#00H,ewNOTFLASHCPL P1.4;东西黄灯闪烁CLR P1.3CLR P1.5ewNOTFLASH:JMP ewCOLORCHECKOUTewgreen:MOV ewLEDDATAINIT,#03;设置东西黄灯闪烁时间CLR P1.4CLR P1.5SETB P1.3;东西绿灯亮ewCOLORCHECKOUT:POP PSWPOP BPOP ACCRET;************************************************************;数码管显示**************************************************DISPLAY:PUSH ACCPUSH PSWPUSH BMOV A,SNLEDDATAMOV B,#10DIV ABMOV A,EWLEDDATAMOV B,#10DIV ABMOV R2,BMOV R3,AMOV DPTR,#TABLEMOV A,P2 DISPSNH:CJNE A,#0feH,DISPSNLMOV A,R1MOVC A,@A+DPTRMOV P0,AJMP DISPOUT DISPSNL:CJNE A,#0fdH,DISPEWHMOV A,R0MOVC A,@A+DPTRMOV P0,AJMP DISPOUT DISPEWH:CJNE A,#0fbH,DISPEWLMOV A,R3MOVC A,@A+DPTRMOV P0,AJMP DISPOUT DISPEWL:CJNE A,#0f7H,DISPOUTMOV A,R2MOVC A,@A+DPTRMOV P0,A DISPOUT:POP BRET;************************************************** TABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;0123456789END。
交通灯原理图及流程图
860 t1 920
Num1 3 G2 OFF Y2 ON R2 OFF
Y Y
Num1 Num1-1
Num1 23 G2 OFF
Y2 OFF
Num=0
R2 ON
N t1=920
Y Y
N
t1 0
c num1/10;d num1%10;
交通灯原理图及流 程图总线原理 图(Multisim 软件图)89c5 2 引脚图复位 电路(Multisi m 软件图)晶 振电路(Multi sim 软件图) 按键电路键盘 LED 数码管显 示 LED 指示灯 复位电路 晶 振电路 单片 机 电源电路 硬件设计框图 开始 父昨罚谣 牢制锨乒德靛 陡斧黑坝筏超 疆隘犹侵篙践 哲凝鬼备恩 蔓斌芍熬衣里 厕科窟沃男曰 份长寄邦秩圣 础眩砌消弄乞 秋撩秘利辩塔 名巴咀臆卓耗 焰
NO 0 OFF 1
建表 table[]={ 0x3f,0x06,0x5b,0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c,
0x39, 0x5e, 0x79, 0x71, 0} 用于显示 0,1,2,…A,b,…E,F,灭。
G1 ON; Y1 OFF; R1 OFF; G2 OFF; Y2 OFF; R2 ON; Num 20; num1 23; a num/10; b num%10; c num1/10; d num1%10; TMOD 0x11; TH0 (65536-50000)/256; TL0 (65536-50000) %256; TH1 (65536-50000)/256; TL1 (65536-50000) %256; EA 1; ET0 1; ET1 1; TR0 1;TR1 1;
基于单片机控制的交通灯设计(含完整C程序 原理图)
电子与信息工程学院课程设计报告(2010—2011学年第2 学期)课程名称:单片机课程设计班级:学号:姓名:指导教师:2011年03月3.过程(如实际程序开发、电子制作,详细说明有关原理、开发过程、调试过程、结果)一.交通灯芯片介绍SST89E58RD:是8位FLASH FLEX51系列单片机。
FLASH FLEX51是在高级FLASH CMOS半导体工艺下设计和生产出来的单片机产品之一。
单片机有40K片内FLASH EEPROM程序存储器,它利用SST的超级FLASH专利技术,这些都是SST的领先技术。
超级FLASH存储器被分为两个独立的程序存储器块,基本FLASH Block0占用32K字节片内程序存储空间,二级FLASH Block1占用8K字节的片内程序存储器空间;8K字节的二级FLASH块能被映射到32K字节低地址空间它也能从程序计数器中被隐藏掉而用做一个独立的类似EEPROM的数据存储器。
其具有以下特点:兼容80C51系列,内置超级FLASH存储器的单片机;工作电压Vdd=4.5~5.5;1K*8的内部RAM(256Bytes+768Bytes,可以放心使用C语言编程)等。
8155:Intel8155是可编程RAM/IO芯片,为40脚双列直插式封装。
有256*8位静态RAM,2个8位和1个6位可编程并行I/O接口,以及1个14位可编程定时器/计数器。
可直与MCS-51单片机相接,是MCS-51单片机应用系统中应用最多的芯片之一其内部结构图和引脚图如图1所示图1在交通灯系统中,四位数码管是用来显示交通灯倒计时时间的,一路显示放行线时间,一路显示禁止线时间四位数码管的电路如图2:图2四位八段数码管,属共阴逆序,高电平有效,所以不带小数点的0-f的段码如下:{0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH};PROTEUS 仿真图如图3:图3四位数码管的显示使用了并行扩展芯片8155,8155与单片机SST89E58RD的接口如图4图48155的高8位数据地址线与单片机的P0口相连,CE与AD15相连,IO/M与AD8相连数码管的八位段选与PB口相连,四位位选与PA口相连。
单片机控制交通灯(内含程序和实物图)
摘要随着经济发展,汽车数量急剧增加,城市道路日渐拥挤,交通拥塞已成为一个国际性的问题。
因此,设计可靠、安全、便捷的多功能交通灯控制系统有极大的现实必要性。
根据交通灯在实际控制中的特点,结合单片机的控制功能,提出了一种用单片机自动控制交通灯的简易方法。
设计中包括硬件电路的设计和程序设计两大步骤,对单片机学习中的几个重要内容都有涉足。
单片机的应用正在不断深入,单片机可以用来仿真各个系统。
在自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。
那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。
交通信号灯控制方式很多。
本系统采用单片机STC89C52为中心器件来设计交通灯控制器,实现了通过P1口设置红、绿灯燃亮时间的功能;红绿灯循环点亮,倒计时剩5秒时黄灯闪烁警示(交通灯信号通过P1口输出,显示时间通过P0口输出至双位数码管)。
本系统设计周期短、可靠性高、实用性强、操作简单、维护方便、扩展功能强。
关键词:单片机交通灯数码管Microcontroller to control traffic lights Abstract: With economic development, a sharp increase in the number of cars, increasingly crowded city roads, traffic congestion has become an international problem. Therefore, the design of reliable, safe, convenient and versatile traffic light control system of great practical necessity.According to the characteristics of the traffic lights in the actual control, combined with the microcontroller control functions, and easy with Auto Control traffic lights. The design includes two steps of the hardware circuit design and programming have to get involved in several important single-chip learning.The application of microcontroller is the deepening of the Microcontroller can be used to simulate systems. In the automatic control of microcomputer application system, the Microcontroller is often used as a core component to use only Microcontroller knowledge is not enough, but also according to the specific hardware architecture hardware and software, to be improved.Crossroads shuttle vehicles, pedestrians bustling Dealers lane, walkways, and orderly. Rely on to achieve this orderly order? Rely on automatic command system of traffic lights. Traffic signal control. The system uses the Microcontroller STC89C52-centric devices to design the traffic signal controller to achieve a set of red, green light to kindle through the P1 port function of time; traffic light cycle lights, countdown 5 seconds left flashing yellow warning (traffic light signals through the P1 the output port, and displays the time through the P0 port output to double-digit LED). The system design cycle, high reliability, practical, simple operation, easy maintenance, strong extensions.Key words:microcontroller traffic light digital tub目录第1章前言 (1)1.1交通灯发展概述 (1)1.2 课题背景及意义 (2)1.3课题任务及主要实现内容 (3)1.4 原理分析 (4)1.4.1交通灯显示时序的理论分析 (4)1.4.2 交通灯显示的理论分析 (5)第2章设计方案分析 (6)2.1 单片机与外围接口部件 (6)2.2 倒计时显示界面 (7)2.3 交通灯 (7)第3章硬件系统设计 (8)3.1 单片机的选择 (8)3.2 硬件电路实现 (11)3.2.1 最小系统设计 (11)3.2.2 显示设计 (13)3.2.3 发光二极管模拟红绿灯 (15)3.2.4 按键模块 (16)第4章软件电路设计 (17)4.1 软件编译环境测试 (17)4.1.1 C语言介绍 (17)4.1.2 Keil uVision4介绍 (17)4.2软件总体设计 (17)第5章电路检测 (21)结论 (24)致谢 (25)参考文献 (26)附录: (27)源程序: (29)第1章前言单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
单片机8255交通灯程序
交通灯程序/*********************************************************** 十字路口交通灯控制 C 程序***********************************************************/#include <reg51.h>#define uchar unsigned char#define uint unsigned int/*****定义控制位*******************************************/sbit Time_Show_LED2=P2^5; //Time_Show_LED2(直行时间显示)控制位sbit Time_Show_LED1=P2^4; //Time_Show_LED1(直行时间显示)控制位sbit EW_LED2=P2^3; //EW_LED2控制位sbit EW_LED1=P2^2; //EW_LED1控制位sbit SN_LED2=P2^1; //SN_LED2控制位sbit SN_LED1=P2^0; //SN_LED1控制位sbit SN_Yellow=P1^6; //SN黄灯sbit EW_Yellow=P1^2; //EW黄灯sbit EW_ManGreen=P3^0; //EW人行道绿灯sbit SN_ManGreen=P3^1; //SN人行道绿灯sbit Special_LED=P2^6; //交通特殊指示灯sbit Busy_LED=P2^7; //交通繁忙指示灯sbit Nomor_Button=P3^5; //交通正常按键sbit Busy_Btton=P3^6; //交通繁忙按键sbit Special_Btton=P3^7; //交通特殊按键sbit EW_ManRed=P3^3; //EW人行道红灯sbit SN_ManRed=P3^4; //SN人行道红灯bit Flag_SN_Yellow; //SN黄灯标志位bit Flag_EW_Yellow; //EW黄灯标志位char Time_EW; //东西方向倒计时单元char Time_SN; //南北方向倒计时单元uchar EW=60,SN=40,EWL=19,SNL=19; //程序初始化赋值,正常模式uchar EW1=60,SN1=40,EWL1=19,SNL1=19; //用于存放修改值的变量uchar codetable[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //0-9段选码uchar code S[8]={0x28,0x48,0x18,0x48,0x82,0x84,0x81,0x84};//交通信号灯控制代码/**********************延时子程序**************************/void Delay(uchar a){uchar i;i=a;while(i--){;}}/*****************显示子函数******************************/ void Display(void){uchar h,l;h=Time_EW/10;l=Time_EW%10;P0=table[l];EW_LED2=1; //点亮EW_LED2Delay(2);EW_LED2=0; //熄灭EW_LED2P0=table[h];EW_LED1=1; //点亮EW_LED1Delay(2);EW_LED1=0;h=Time_SN/10;l=Time_SN%10;P0=table[l];SN_LED2=1; //点亮SN_LED2Delay(2);SN_LED2=0;P0=table[h];SN_LED1=1; //点亮SN_LED1Delay(2);SN_LED1=0;h= EW1/10;l= EW1%10;P0=table[l];Time_Show_LED1=1; //点亮Time_Show_LED1Delay(2);Time_Show_LED1=0;P0=table[h];Time_Show_LED2=1; //点亮Time_Show_LED2Delay(2);Time_Show_LED2=0;}/**********************外部0中断服务程序******************/void INT0_srv(void)interrupt 0 using 1{EX0=0; //关中断if(Nomor_Button==0) //测试按键是否按下,按下为正常状态 {EW1=60;SN1=40;EWL1=19;SNL1=19;Busy_LED=0; //关繁忙信号灯Special_LED =0; //关特殊信号灯}if(Busy_Btton==0) //测试按键是否按下,按下为繁忙状态 {EW1=45;SN1=30;EWL1=14;SNL1=14;Special_LED=0; //关特殊信号灯Busy_LED=1; //开繁忙信号灯}if(Special_Btton==0)//测试按键是否按下,按下为特殊状态 {EW1=75;SN1=55;EWL1=19;SNL1=19;Busy_LED=0; //关繁忙信号灯Special_LED =1;//开特殊信号灯}EX0=1; //开中断}/**********************T0中断服务程序*******************/ void timer0(void)interrupt 1 using 1{static uchar count;TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==10){if(Flag_SN_Yellow==1) //测试南北黄灯标志位{SN_Yellow=~SN_Yellow;}if(Flag_EW_Yellow==1) //测试东西黄灯标志位{EW_Yellow=~EW_Yellow;}}if(count==20){Time_EW--;Time_SN--;if(Flag_SN_Yellow==1) //测试南北黄灯标志位{SN_Yellow=~SN_Yellow;}if(Flag_EW_Yellow==1) //测试东西黄灯标志位{EW_Yellow=~EW_Yellow;}count=0;}}/*********************主程序开始***********************/ void main(void){Busy_LED=0;Special_LED=0;IT0=1; //INT0负跳变触发TMOD=0x01; //定时器工作于方式1TH0=(65536-50000)/256; //定时器赋初值TL0=(65536-50000)%256;EA=1; //CPU开中断总允许ET0=1; //开定时中断EX0=1; //开外部INTO中断TR0=1; //启动定时while(1){/*******S0状态**********/SN_ManRed=0;SN_ManGreen=1; //SN人行道通行EW_ManRed=1; //EW人行道禁止EW_ManGreen=0;Flag_EW_Yellow=0; //EW关黄灯显示信号Time_EW=EW;Time_SN=SN;while(Time_SN>=5){P1=S[0]; //SN绿灯,EW红灯Display();}/*******S1状态**********/P1=0x00;while(Time_SN>=0){Flag_SN_Yellow=1; //SN开黄灯信号位P1=P1|0x08; //保持EW红灯Display();}/*******S2状态**********/SN_ManRed=1; //SN人行道禁止SN_ManGreen=0;EW_ManRed=1; //EW人行道禁止EW_ManGreen=0;Flag_SN_Yellow=0; //SN关黄灯显示信号Time_SN=SNL;while(Time_SN>=5){P1=S[2]; //SN左拐绿灯亮,EW红灯Display();}/*******S3状态**********/P1=0x00;while(Time_SN>=0){Flag_SN_Yellow=1; //SN开黄灯信号位P1=P1|0x08; //保持EW红灯Display();}/***********赋值*********/EW=EW1;SN=SN1;EWL=EWL1;SNL=SNL1;/*******S4状态**********/SN_ManRed=1; //SN人行道禁止SN_ManGreen=0;EW_ManRed=0;EW_ManGreen=1; //EW人行道通行Flag_SN_Yellow=0; //SN关黄灯显示信号Time_EW=SN;Time_SN=EW;while(Time_EW>=5){P1=S[4]; //EW通行,SN红灯Display();}/*******S5状态**********/P1=0X00;while(Time_EW>=0){Flag_EW_Yellow=1;//EW开黄灯信号位P1=P1|0x80; //保持SN红灯Display();}/*******S6状态**********/SN_ManRed=1; //SN人行道禁止SN_ManGreen=0;EW_ManRed=1; //EW人行道禁止EW_ManGreen=0;Flag_EW_Yellow=0;//EW关黄灯显示信号Time_EW=EWL;while(Time_EW>=5){P1=S[6]; //EW左拐绿灯亮,SN红灯Display();}/*******S7状态**********/P1=0X00;while(Time_EW>=0){Flag_EW_Yellow=1; //EN开黄灯信号位P1=P1|0x80; //保持SN红灯Display();}/***********赋值********/EW=EW1;SN=SN1;EWL=EWL1;SNL=SNL1;}}。
单片机交通灯
3
结论
结论
单片机交通灯系统具有结构简 单、成本低廉、稳定性高等优 点,能够有效地提高道路通行
效率,减少交通拥堵
通过合理的系统设计和程序实 现,可以满足各种复杂路口的
控制需求
在实际应用中,还可以根据需 要对系统进行扩展和改进,例 如增加倒计时功能、调整红绿
灯切换时间等
-
THANK YOU
设计思路
按键模块设计
按键模块采用独立式 按键,通过按键可以 手动控制交通灯的开 关。当按下按键时, 单片机接收到信号, 通过程序控制交通灯 的切换
交通灯模块设计
交通灯模块由红、绿 、黄三种颜色的LED 灯组成。通过单片机 控制LED灯的亮灭, 可以模拟交通灯的工 作状态。正常情况下 ,绿灯表示车辆可以 通过路口,红灯表示 车辆需要停止等待, 黄灯表示车辆需要注 意即将变灯
程序实现
子程序实现
子程序包括LED显示子程序、按键处理子程 序和交通灯控制子程序等。LED显示子程序 负责根据需要显示的数字动态控制七段数码 管的亮灭;按键处理子程序负责检测按键是 否按下,并执行相应的操作;交通灯控制子 程序则根据时钟电路的计时结果控制红、绿 、黄三种LED灯的亮灭。子程序的实现主要 通过单片机的寄存器操作和控制语句完成
设计思路
单片机选型
考虑到系统的稳定性 和成本,我们选用 AT89C51单片机作为 主控模块。AT89C51 是一种常用的8位单 片机,具有低功耗、 高性能的特点,能够 满足交通灯系统的控 制需求
设Байду номын сангаас思路
显示模块设计
LED显示模块采用共阳极七段数码管,用于显示时间、 倒计时等数字信息。通过单片机控制七段数码管的亮灭 ,可以动态地显示数字
交通灯流程图
#include<reg52.h>sbit nbh=P1^0; //端口定义sbit nbl=P1^1;sbit dxh=P1^5;sbit dxl=P1^6;sbit k1=P3^0;sbit k2=P3^1;sbit k3=P3^2;char code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; char code wei[]={0xf7,0xfb,0xfd,0xfe};int dx=60,nb=60;bit flag=1,fx=0,flag1=1; //fx=1为东西,0为南北void init(){TMOD=0x01; //初始化TH0=0x3c;TL0=0xb0;EA=1;ET0=1;TR0=1;}void timer0() interrupt 1 //定时中断{int s;TF0=0;TR0=0;TH0=0x3c;TL0=0xb0;s++;if(s==10){s=0;flag=~flag;if(dx<=10){if(fx) {dxl=~dxl;}else {nbl=~nbl;}}if(flag){dx--;nb--;if(dx==0) {dx=60;nb=60;fx=~fx;}}}TR0=1;}void delay(int ms) //消抖用的延时{int i;for(;ms>0;ms--)for(i=122;i>0;i--);}void display() //数码管显示{int a,b,c,d;a=dx/10;b=dx%10;c=nb/10;d=nb%10;P2=wei[3];P0=duan[a];delay(5);P2=wei[2];P0=duan[b];delay(5);P2=wei[1];P0=duan[c];delay(5);P2=wei[0];P0=duan[d];delay(5);}void LED() //进入自动控制状态{if(fx){if(dx<=10){dxh=1;nbl=1;nbh=0;dxl=0;}else{dxl=0;dxh=1;nbl=1;nbh=0;}}else{if(nb<=10){dxl=1;dxh=0;nbh=1;}else{dxl=1;dxh=0;nbl=0;nbh=1;}}}void key() //按键设置{if(!k1){delay(10);if(!k1){if(!flag1){TR0=1;dx=10;nb=10;flag1=1;}}}if(!k2){delay(10);if(!k2){flag1=0;if(fx){dx=10;nb=10;TR0=1;while(fx){LED();display();}dx=99;nb=99;TR0=0;}else {dx=99;nb=99;TR0=0;}}}if(!k3){delay(10);if(!k3){flag1=0;if(!fx){dx=10;nb=10;TR0=1;while(!fx){LED();display();}dx=99;nb=99;TR0=0;}else {dx=99;nb=99;TR0=0;}}}}void main() //主程序{init();while(1){LED();display();key();}}。
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++); }。
交通灯控制系统流程图
1.概述当前,在世界范围内,一个以微电子技术,计算机和通信技术为先导的,以信息技术和信息产业为中心的信息革命方兴未艾。
而计算机技术怎样与实际应用更有效的结合并有效的发挥其作用是科学界最热门的话题,也是当今计算机应用中空前活跃的领域。
本文主要从单片机的应用上来实现十字路口交通灯智能化的管理,用以控制过往车辆的正常运作。
2.过程分析图1是一个十字路口示意图。
分别用1、2、3、4表明四个流向的主车道,用A、B、C、P分别表示各主车道的左行车道、直行车道、右行车道以及人行道。
用a、b、c、p分别表示左转、直行、右转和人行道的交通信号灯,如图2所示。
交通灯闪亮的过程:路口1的车直行时的所有指示灯情况为:3a3b2p绿3c红+4a4b4c 3p全红+1c 绿1a1b4p红+2c绿2a2b1p红路口2的车直行时的所有指示灯情况为:4a4b3p绿4c红+ 1a1b1c 4p全红+ 2c绿2a2b1p红+3c绿3a3b2p红故路口3的车直行时的所有指示灯情况为:1a1b4p绿1c红+ 2a2b2c 1p全红+3c绿3a3b2p红+4c 绿4a4b3p红故路口4的车直行时的所有指示灯情况为:2a2b1p绿2c红+3c3a3b2p全红+4c绿4a4b3p红+1c绿1a1b4p红图1:十字路口交通示意图图2:十字路口通行顺序示意图图3:十字路口交通指示灯示意图图4:交通灯控制系统硬件框图3、硬件设计本系统硬件上采用AT89C52单片机和可编程并行接口芯片8155,分别控制图2所示的四个组合。
AT89C52单片机具有MCS-51内核,片内有8KB Flash、256字节RAM、6个中断源、1个串行口、最高工作频率可达24MHz,完全可以满足本系统的需要;与其他控制方法相比,所用器件可以说是比较简单经济的。
4、软件流程图图5:交通灯控制系统流程图5、交通灯控制系统软件ORG 0000HLJMP MAINORG 0100HMAIN:MOV SP,#60H; LCALL DIR ;调用日期、时间显示子程序LOOP:MOV P1,#0FFHLJMP TESTLCALL ROAD1 ;路口1的车直行时各路口灯亮情况LCALL DLY30s ;延时30秒MOV P1,#0FFH ;恢复P1口高电平LCALL RESET ;恢复8155各口为高电平LCALL YELLOW1 ;路口1的车直行-->路口2的车直行黄灯亮情况LCALL DLY5s ;延时5秒LCALL RESET ;恢复8155各口为高电平MOV P1,#0FFH ;恢复P1口LCALL ROAD2 ;路口2的车直行时各路口灯亮情况LCALL DLY30s ;延时30秒LCALL RESET ;恢复8155A 、B口为高电?MOV P1,#0FFH ;恢复P1口高电平LCALL YELLOW2 ;路口2的车直行-->路口3的车直行黄灯亮情况LCALL DLY5s ;延时5秒LCALL RESET ;恢复8155A 、B口为高电?MOV P1,#0FFH ;恢复P1口高电平LCALL ROAD3 ;路口3的车直行时各路口灯亮情况LCALL DLY30s ;延时30秒LCALL RESET ;恢复8155A 、B口为高电?MOV P1,#0FFH ;恢复P1口高电平LCALL YELLOW3 ;路口3的车直行-->路口4的车直行黄灯亮情况LCALL DLY5s ;延时5秒LCALL RESET ;恢复8155各口为高电平MOV P1,#0FFH ;恢复P1口高电平LJMP TESTLCALL ROAD4 ;路口4的车直行时各路口灯亮情况LCALL DLY30s ;延时30秒SETB P1.5 ;恢复P1.5高电平SETB P1.4 ;恢复P1.4高电平MOV DPTR,#0FFFFH ;恢复8155各口为高电平LCALL YELLOW4 ;路口4的车直行-->路口1的车直行黄灯亮情况LCALL DLY5s ;延时5秒SETB P1.6 ;恢复P1.6高电平SETB P1.3 ;恢复P1.3高电平MOV DPTR,#0FFFFH ;恢复8155各口为高电平LJMP LOOP;路口1的车直行时各路口灯亮情况3a3b2p绿3c红+4a4b4c3p全红+1c绿1a1b4p红+2c绿2a2b1p红ROAD1:MOV DPTR,#7F00H ;置8155命令口地址;无关位为1)MOV A,#03H ;A口、B口输出,A口、B口为基本输入输出方式MOVX @DPTR,A ;写入工作方式控制字INC DPTR ;指向A口MOV A,#79H ;1a1b4p红1c绿2a2b1p红MOVX @DPTR,AINC DPTR ;指向B口LOOP:MOV P1,#0FFHLJMP TESTLCALL ROAD1 ;路口1的车直行时各路口灯亮情况LCALL DLY30s ;延时30秒MOV P1,#0FFH ;恢复P1口高电平LCALL RESET ;恢复8155各口为高电平LCALL YELLOW1 ;路口1的车直行-->路口2的车直行黄灯亮情况 LCALL DLY5s ;延时5秒LCALL RESET ;恢复8155各口为高电平MOV P1,#0FFH ;恢复P1口LCALL ROAD2 ;路口2的车直行时各路口灯亮情况LCALL DLY30s ;延时30秒LCALL RESET ;恢复8155A 、B口为高电?MOV P1,#0FFH ;恢复P1口高电平LCALL YELLOW2 ;路口2的车直行-->路口3的车直行黄灯亮情况 LCALL DLY5s ;延时5秒LCALL RESET ;恢复8155A 、B口为高电?MOV P1,#0FFH ;恢复P1口高电平LCALL ROAD3 ;路口3的车直行时各路口灯亮情况LCALL DLY30s ;延时30秒LCALL RESET ;恢复8155A 、B口为高电?MOV P1,#0FFH ;恢复P1口高电平LCALL YELLOW3 ;路口3的车直行-->路口4的车直行黄灯亮情况 LCALL DLY5s ;延时5秒LCALL RESET ;恢复8155各口为高电平MOV P1,#0FFH ;恢复P1口高电平LJMP TESTLCALL ROAD4 ;路口4的车直行时各路口灯亮情况LCALL DLY30s ;延时30秒SETB P1.5 ;恢复P1.5高电平SETB P1.4 ;恢复P1.4高电平MOV DPTR,#0FFFFH ;恢复8155各口为高电平LCALL YELLOW4 ;路口4的车直行-->路口1的车直行黄灯亮情况LCALL DLY5s ;延时5秒SETB P1.6 ;恢复P1.6高电平SETB P1.3 ;恢复P1.3高电平MOV DPTR,#0FFFFH ;恢复8155各口为高电平LJMP LOOP;路口1的车直行时各路口灯亮情况3a3b2p绿3c红+4a4b4c3p全红+1c绿1a1b4p红+2c绿2a2b1p红ROAD1:MOV DPTR,#7F00H ;置8155命令口地址;无关位为1)MOV A,#03H ;A口、B口输出,A口、B口为基本输入输出方式MOVX @DPTR,A ;写入工作方式控制字INC DPTR ;指向A口MOV A,#79H ;1a1b4p红1c绿2a2b1p红MOVX @DPTR,AINC DPTR ;指向B口MOV A,#0E6H ;3a3b2p绿3c红4a4b3p红MOVX @DPTR,AMOV P1,#0DEH ;4c红2c绿RET6、结语本系统结构简单,操作方便;可现自动控制,具有一定的智能性;对优化城市交通具有一定的意义。
利用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
;闪烁次数未到继续
最新单片机-交通灯(含程序)解析
单片机课程设计报告题目现代交通灯的设计专业电气工程及其自动化班级电气081学号 3080421029学生姓名郭琪指导老师王水鱼老师2010年秋季学期起止日期:2011年1月10日至2011年1月14日平时(10%任务完成(30%答辩(30%课设报告(30%总评成绩目录一、引言 3二、概要设计 42.1 设计思路42.2 设计的主要内容和要求 42.3 总体设计框图 5三、硬件设计 53.1 LED循环电路设计 63.1.1 89c51单片机概述 6 3.1.2 LED循环说明9 3.2 倒计时显示电路11 3.2.1 74LS164芯片11 3.2.2 共阴极数码显示管12 3.2.3 倒计时电路133.2.4 急通车电路13四、软件设计 144.1 程序流程图14 4.2 LED红绿灯显示14 4.3 到计时显示164.4 急通车控制164.5程序代码16五、总结 16 参考文献 17 附录一: 18 附录二: 19基于51单片机的交通灯控制系统设计摘要:在日常生活中,交通信号灯的使用,市交通得以有效管理,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
交通灯控制系统由80C51单片机、键盘、LED显示、交通灯延时组成。
系统除具有基本交通灯功能外,还具有时间设置、LED信息显示功能,市交通实现有效控制。
关键词:交通灯,单片机,自动控制一、引言当今,红绿灯安装在个个道口上,已经成为疏导交通车辆最常见和最有效的手段。
但这个技术在19世纪就已经出现了。
1858年,在英国伦敦主要街头安装了以燃煤气为光源的红、蓝两色的机械般手势信号灯,用以指挥马车通行。
这是世界上最早的交通信号灯。
1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的会议大厦前的广场上,安装了世界上最早的煤气红绿灯。
它由红绿两以旋转方式玻璃提灯组成,红色表示“停止”,绿色表示“注意”。
1869年1月2日,煤气灯爆炸,是警察受伤,遂被取消!电气启动的红绿灯出现在美国,这种红绿灯由红黄绿三色圆形的投光器组成,1914年始装于纽约市5号大街的一座高塔上。
单片机 交通灯实验
P0.3
P0.2
P0.1
P0.0
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
北G
北Y
北R
西G
西Y
西R
南G
南Y
南R
东G
东Y
东R
1
1
0
1
0
1
1
1
0
1
0
1
设置一个秒计数单元SEC每秒+1,设置两个控制值变量a,b。
采用断处理按键的方式,其优点是按键后处理程序能立即响应和处理,响应的速度也是最快最及时的。本实验可以不采用中断处理按键,在主程序中利用查询键盘的方式判断按键然后进行相对应的程序处理即可。
六、总结
通过本次实验,我已熟练掌握C51对单片机的外部中断及定时器中断的编程,对编译错误的查错能力也有了提升。在处理交通灯闪烁问题时,由于当时定义的ESC变量是整型的,不能为小数,于是想到把ESC代表的秒数翻倍,两个单位作为一秒但是感觉不太好,后来把ESC变量改为了float型,采用强制转换成int型然后和原值相减的方式((int)ESC-ESC!=0)达到了目的。
图42K1键按下保持南北通行状态
3、K2键按下保持东西通行状态,暂停原来的交通灯状态(如图4-3)
图43K2键按下保持东西通行状态
4、K3键按下恢复原来的交通灯状态并正常运行(如图4-4)
图44K3键按下恢复原来的交通灯状态并正常运行
5、K4键按下恢复正常交通灯运行并复位(如图4-5)
图45K4键按下恢复正常交通灯运行并复位