《基于80C51交通灯控制课题资料.doc》由会员分享,可在线阅读,更多相关《基于80C51交通灯控制课题资料.doc(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Good is good, but better carries it.精益求精,善益求善。基于80C51交通灯控制课题-一、 基于80C51交通灯控制课程设计功能描述题目描述:请设计一个交通灯控制电路,并且编写相应的软件,完成交通灯的管理任务。题目要求:该控制任务应该完成下列功能:1.控制LED灯,完成交通灯的管理任务;2.按照分析、设计、调试和测试的软、硬件开发过程完成这个控制任务。功能描述:要先了解实际交通灯的控制变化规律。假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1南北绿灯通车,东西红灯。过20秒钟转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西仍然红灯
2、。再转状态3,东西绿灯通车,南北红灯。过20秒钟转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。最后循环至状态1.二、 课程设计分析设计1、80C51内部结构与外部引脚80C51的40个引脚可分为:电源引脚2根、时钟引脚2根、控制引脚4根和I/O引脚32根。80C51单片机内部结构图如图所示。引脚功能:Vss:接地端。Vcc:电源端,接+5V。XTAL1:接外部晶体的一个引脚。CHMOS单片机采用外部时钟信号时,外部时钟信号由此引入。XTAL2:接外部晶体的一个引脚。HMOS单片机采用外部时钟信号时,外部时钟信号由此引入。RST:复位信号输入。Vcc掉电后,此引脚可接备用电源,低功耗
3、条件下保证内部RAM中的数据。ALE:地址锁存允许。当单片机访问外部存储器时,该引脚的输出信号ALE用于锁存P0端口的低8位地址。ALE输出的频率为时钟振荡频率的1/6。对8751单片机片内EPROM编程时,编程脉冲由此引脚接入。PSEN:程序存储器允许。输出读外部程序存储器的选通信号。取指令操作期间,PSEN的频率为振荡频率的1/6;但若此期间有访问外部数据存储器的操作时,则有一个机器周期中的PSEN信号将不会出现。EA:EA=0,单片机只访问外部程序存储器。对于8031单片机此引脚必须接地。EA=1,单片机访问内部程序存储器。对于内部有程序存储器的8xx51单片机,此引脚应接高电平,但若地
4、址超过4KB范围(0fffh),单片机将自动访问外部程序存储器。在8751单片机片内EPROM编程期间,此引脚接入21V编程电源Vpp。P0.0P0.7:P0数据/低8位地址复用总线端口。P1.0P1.7:P1静态通用端口。P2.0P2.7:P2高八位地址总线动态端口。P3.0P3.7:双功能静态端口。2.LED数码显示器数码管在单片机应用系统中主要用于显示单片机的输出数据和状态等。LED显示器为发光二极管构成的显示器件。常用的LED显示器有两种供应状态,既共阴极LED与共阳极LED。3.7405非门电路4.双色LED.双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,公用负端。
5、当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。5.程序设计程序设计时,首先对东西南北路口计时寄存器进行地址分配、对路口红黄绿灯分配引脚、设置显示码缓冲区、设置定时器初始时间。然后对各个状态进行编程,编程过程中应注意各个状态计时初值和显示初值的设置,以及各个状态LED灯编程和调用。最后,数码显示的编程。绘制硬件电路图(用Protel软件)并对硬件电路进行说明;80c51的引脚:P2.1p2.6分别控制东西路口绿灯、黄灯、红灯和南北路口绿灯、黄灯、红灯。P3.0和p3.1控制LED数码显示。四、绘制软件流程图(用VISIO软
6、件)并对软件流程进行说明;开始四个路口红灯亮南北绿灯亮,东西红灯亮,延时南北黄灯闪烁,东西红灯亮,延时南北红灯亮,东西绿灯亮,延时南北红灯亮,东西黄灯闪烁,延时流程说明:程序开始进入状态0四个路口红灯亮;然后进入状态1南北绿灯亮,东西红灯亮,延时;然后进入状态2南北黄灯闪烁,东西红灯亮,延时;然后进入状态3南北红灯亮,东西绿灯亮,延时;然后进入状态4南北红灯亮,东西黄灯闪烁,延时;循环至状态1。五、程序的源代码清单及注释(汇编语言或C51程序);SECOND1EQU30H;东西路口计时寄存器SECOND2EQU31H;南北路口计时寄存器DBUFEQU40H;显示码缓冲区1TEMPEQU44H;
7、显示码缓冲区2LED_G1BITP2.1;东西路口绿灯LED_Y1BITP2.2;东西路口黄灯LED_R1BITP2.3;东西路口红灯LED_G2BITP2.4;南北路口绿灯LED_Y2BITP2.5;南北路口黄灯LED_R2BITP2.6;南北路口红灯ORG0000HLJMPSTARTORG0100HSTART:MOVTMOD,#01H;置T0为工作方式1MOVTH0,#3CH;置T0定时初值50msMOVTL0,#0B0HCLRTF0SETBTR0;启动T0CLRAMOVP1,A;关闭不相关的LED;*MOVR2,#20;置1s计数初值,50ms*20=1sMOVR3,#5;红灯亮5sMO
8、VSECOND1,#5;东西路口计时显示初值5sMOVSECOND2,#5;南北路口计时显示初值5sLCALLDISPLAYWAIT0:LCALLSTATE0;调用状态0JNBTF0,WAIT0;查询50ms到否CLRTF0MOVTH0,#3CH;恢复T0定时初值50msMOVTL0,#0B0HDJNZR2,WAIT0;判断1s到否?未到继续状态0MOVR2,#20;置50ms计数初值DECSECOND1;东西路口显示时间减1sDECSECOND2;南北路口显示时间减1sLCALLDISPLAYDJNZR3,WAIT0;状态0维持5s;*LOOP:MOVR2,#20;置50ms计数初值MOVR
9、3,#20;红灯闪20sMOVSECOND1,#25;东西路口计时显示初值25sMOVSECOND2,#25;南北路口计时显示初值25sLCALLDISPLAYWAIT1:LCALLSTATE1;调用状态1JNBTF0,WAIT1;查询100ms到否CLRTF0MOVTH0,#3CH;恢复T0定时初值100msMOVTL0,#0B0HDJNZR2,WAIT1;判断1s到否?未到继续状态1MOVR2,#20;置100ms计数初值DECSECOND1;东西路口显示时间减1sDECSECOND2;南北路口显示时间减1sLCALLDISPLAYDJNZR3,WAIT1;状态1维持20s;*MOVR2,
10、#5;置50ms计数初值5*4=20MOVR3,#3;绿灯闪3sMOVR4,#4;闪烁间隔200msMOVSECOND1,#5;东西路口计时显示初值5sMOVSECOND2,#5;南北路口计时显示初值5sLCALLDISPLAYWAIT2:LCALLSTATE2;调用状态2JNBTF0,WAIT2;查询50ms到否CLRTF0MOVTH0,#3CH;恢复T0定时初值50msMOVTL0,#0B0HDJNZR4,WAIT2;判断200ms到否?未到继续状态2CPLLED_G2;南北绿灯闪MOVR4,#4;闪烁间隔200msDJNZR2,WAIT2;判1s到否?未到继续状态2MOVR2,#5;置5
11、0ms计数初值DECSECOND1;东西路口显示时间减1sDECSECOND2;南北路口显示时间减1sLCALLDISPLAYDJNZR3,WAIT2;状态2维持3s;*MOVR2,#20;置50ms计数初值MOVR3,#2;黄灯闪2sMOVSECOND1,#2;东西路口计时显示初值2sMOVSECOND2,#2;南北路口计时显示初值2sLCALLDISPLAYWAIT3:LCALLSTATE3;调用状态3JNBTF0,WAIT3;查询100ms到否CLRTF0MOVTH0,#3CH;恢复T0定时初值100msMOVTL0,#0B0HDJNZR2,WAIT3;判断1s到否?未到继续状态3MOV
12、R2,#20;置100ms计数初值DECSECOND1;东西路口显示时间减1sDECSECOND2;南北路口显示时间减1sLCALLDISPLAYDJNZR3,WAIT3;状态3维持2s;*MOVR2,#20;置50ms计数初值MOVR3,#20;红灯闪20sMOVSECOND1,#25;东西路口计时显示初值25sMOVSECOND2,#25;南北路口计时显示初值25sLCALLDISPLAYWAIT4:LCALLSTATE4;调用状态4JNBTF0,WAIT4;查询100ms到否CLRTF0MOVTH0,#3CH;恢复T0定时初值100msMOVTL0,#0B0HDJNZR2,WAIT4;判
13、断1s到否?未到继续状态4MOVR2,#20;置100ms计数初值DECSECOND1;东西路口显示时间减1sDECSECOND2;南北路口显示时间减1sLCALLDISPLAYDJNZR3,WAIT4;状态4维持20s;*MOVR2,#5;置50ms计数初值MOVR4,#4;红灯闪20msMOVR3,#3;绿灯闪3sMOVSECOND1,#5;东西路口计时显示初值5sMOVSECOND2,#5;南北路口计时显示初值5sLCALLDISPLAYWAIT5:LCALLSTATE5;调用状态5JNBTF0,WAIT5;查询100ms到否CLRTF0MOVTH0,#3CH;恢复T0定时初值100ms
14、MOVTL0,#0B0HDJNZR4,WAIT5;判断200ms到否?未到继续状态5CPLLED_G1;东西绿灯闪MOVR4,#4;闪烁200msDJNZR2,WAIT5;判断1s到否?未到继续状态5MOVR2,#5;置100ms计数初值DECSECOND1;东西路口显示时间减1sDECSECOND2;南北路口显示时间减1sLCALLDISPLAYDJNZR3,WAIT5;状态5维持3s;*MOVR2,#20;置50ms计数初值MOVR3,#2;红灯闪2sMOVSECOND1,#2;东西路口计时显示初值2sMOVSECOND2,#2;南北路口计时显示初值2sLCALLDISPLAYWAIT6:
15、LCALLSTATE6;调用状态6JNBTF0,WAIT6;查询100ms到否CLRTF0MOVTH0,#3CH;恢复T0定时初值100msMOVTL0,#0B0HDJNZR2,WAIT6;判断1s到否?未到继续状态6MOVR2,#20;置100ms计数初值DECSECOND1;东西路口显示时间减1sDECSECOND2;南北路口显示时间减1sLCALLDISPLAYDJNZR3,WAIT6;状态6维持2sLJMPLOOP;大循环;*STATE0:;状态0SETBLED_R1;东西路口红灯亮CLRLED_Y1CLRLED_G1CLRLED_G2CLRLED_Y2SETBLED_R2;南北路口红
16、灯亮RETSTATE1:;状态1SETBLED_R1;东西路口红灯亮CLRLED_Y1CLRLED_G1CLRLED_R2CLRLED_Y2SETBLED_G2;南北路口绿灯亮RETSTATE2:;状态2CLRLED_Y2CLRLED_R2CLRLED_G1CLRLED_Y1SETBLED_R1;东西路口红灯亮RETSTATE3:;状态3CLRLED_G2CLRLED_R2CLRLED_G1CLRLED_Y1SETBLED_R1;东西路口红灯亮SETBLED_Y2;南北路口黄灯亮RETSTATE4:;状态4CLRLED_G2CLRLED_Y2SETBLED_R2;南北路口红灯亮SETBLED_
17、G1;东西路口绿灯亮CLRLED_Y1CLRLED_R1RETSTATE5:;状态5CLRLED_G2CLRLED_Y2SETBLED_R2;南北路口红灯亮CLRLED_Y1CLRLED_R1RETSTATE6:;状态6CLRLED_G2CLRLED_Y2SETBLED_R2;南北路口红灯亮CLRLED_G1CLRLED_R1SETBLED_Y1;东西路口黄灯亮RETDISPLAY:;数码显示MOVA,SECOND1;东西路口计时寄存器MOVB,#10;16进制数拆成两个10进制数DIVABMOVDBUF+3,AMOVA,BMOVDBUF+2,AMOVA,SECOND2;南北路口计时寄存器MO
18、VB,#10;16进制数拆成两个10进制数DIVABMOVDBUF+1,AMOVA,BMOVDBUF,AMOVR0,#DBUFMOVR1,#TEMPMOVR7,#4DP10:MOVDPTR,#LEDMAPMOVA,R0MOVCA,A+DPTRMOVR1,AINCR0INCR1DJNZR7,DP10MOVR0,#TEMPMOVR1,#4DP12:MOVR7,#8MOVA,R0DP13:RLCAMOVP3.0,CCLRP3.1SETBP3.1DJNZR7,DP13INCR0DJNZR1,DP12RETLEDMAP:DB3FH,06H,5BH,4FH,66H,6DH;0,1,2,3,4,5DB7DH
19、,07H,7FH,6FH,77H,7CH;6,7,8,9,A,BDB58H,5EH,7BH,71H,0,40H;C,D,E,F,-END六、上机调试运行结果及分析;1.硬件调试硬件调试可分为脱机调试与联机调试两步进行。脱机调试是在用户系统未工作时的一种硬件检测。第一步:目测。检查外部的各种元件或者是电路是否有断点。目测结果:电路及各元件正常。第二步是通电检查。通电后发现各个交通灯均能发光,证明电路线路无误。联机调试:将编好的程序写入单片机后进行调试。2.软件调试通过对各个子程序的调试后,经过系统调试程序正确。调试结果:调试的结果与设计要求一致。七、课程设计经验教训总结本系统是以单片机AT80C51芯片为核心部件,实现了能根据实际车流量通过AT80C51芯片设置红、绿灯燃亮时间的功能。此次在软件上是花费时间最多的,我们上网找资料,上图书馆,尽可能的了解有关于交通灯这方面的知识。通过这次毕业设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步。-