基于单片机交通信号灯设计.docx
《基于单片机交通信号灯设计.docx》由会员分享,可在线阅读,更多相关《基于单片机交通信号灯设计.docx(23页珍藏版)》请在冰豆网上搜索。
基于单片机交通信号灯设计
单片机系统
课程设计
成绩评定表
设计课题:
基于单片机的交通信号灯设计
学院名称:
电气工程学院
专业班级:
电气F1206
学生姓名:
学号:
指导教师:
设计地点:
31-510
设计时间:
2014-12-29~2015-01-09
指导教师意见:
成绩:
签名:
年月日
单片机系统
课程设计
课程设计名称:
基于单片机的交通信号灯设计
专业班级:
电气F1206
学生姓名:
学号:
指导教师:
课程设计地点:
31-510
课程设计时间:
2014-12-29~2015-01-09
单片机系统课程设计任务书
学生姓名
专业班级
电气F1206
学号
题目
基于单片机的交通信号灯设计
课题性质
工程设计
课题来源
自拟
指导教师
主要内容
(参数)
利用89C51单片机设计交通信号灯系统,实现以下功能
1、在正常的工作情况下,系统的红、黄、绿灯交替进行转换,而且在对应的LED显示器上可以以到计时的方式显示剩余时间。
2、在紧急的情况下,两组交通灯同时为红灯,禁止所有的车辆通行,只允许特殊的车辆通过,当紧急的车辆通过后系统要可以通过手动按钮恢复以前的正常工作情况方式。
任务要求
(进度)
第1-2天:
熟悉课程设计任务及要求,查阅技术资料,确定设计方案。
第3-4天:
按照确定的方案设计单元电路。
要求画出单元电路图,元件及元件参数选择要有依据,各单元电路的设计要有详细论述。
第5-6天:
软件设计,编写程序。
第7-8天:
实验室调试。
第9-10天:
撰写课程设计报告。
要求内容完整、图表清晰、文理流畅、格式规范、方案合理、设计正确,篇幅不少于6000字。
主要参考
资料
[1]张迎新.单片微型计算机原理、应用及接口技术(第2版)[M].北京:
国防工业出版社,2004
[2]赵晶主编Prote199高级应用人民邮电出版社,2000
[3]于海生编著微型计算机控制技术清华大学出版社2003.4
[4]张志良编著单片机原理与控制技术[M]机械工业出版社,2005
[5]蒋方君编著在论循环时序电路的简便设计[J]机电一体化,2005
[6]徐维祥.单片微型机原理及应用大连理工大学出版社,2006
审查意见
系(教研室)主任签字:
年月日
1绪论
1.1交通信号灯概况
十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊,那么靠什么来实现这井然秩序呢?
靠的就是交通信号灯的自动指挥系统。
由于传统的交通灯控制管理系统一般有数字电路构成,电路复杂,体积大,成本高。
而本系统采用单片机为主控元件,能够简单,方便的实现交通灯的控制管理。
系统适应于十字路口道路。
在正常的工作情况下,系统的红、黄、绿灯交替进行转换,而且在对应的LED显示器上可以以到计时的方式显示剩余时间。
在紧急的情况下,两组交通灯同时为红灯,禁止所有的车辆通行,只允许特殊的车辆通过,当紧急的车辆通过后系统要可以通过手动按钮恢复以前的正常工作情况方式。
进人正常的工作。
因此,该系统设计方便、实用,而且硬件的元件连接又是十分的简单
1.2本文研究内容
所设计的交通灯管理系统主要有主控摸块(89C51单片机)。
译码/驱动电路,时钟电路,交通灯模拟部分,紧急情况手动控制部分及剩余时间显示部分等组成。
利用单片机89C51定时功能,是红、黄、绿灯分别点亮和熄灭一段时间,并且通过与显示器的连接可以显示剩余时间。
而且当出现特殊或紧急的情况时,可以通过紧急情况手动控制单元的按钮进行特别的处理,而当紧急的情况消失后,系统又可以通过解除按钮恢复正常工作。
令其中断方式为1,当定时时间到时则立即执行中断程序,并转向下一个状态,同时调用显示子程序,在LED显示器上显示剩余时间。
2总体方案设计
主要设计,通过单片机AT89C51对外设各个硬件进行连接,并通过软件的设计,对十字路口交通信号灯进行模拟控制。
时钟电路,产生单片机工作所需要的时钟信号,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格工作。
AT89C51通过连接硬件,并对信号做出处理。
锁存器,锁存信息。
74LS373,外设扩展CPU并行接口。
LED,显示剩余时间。
交通灯,指示车辆通行。
图2.1交通灯总设计方案框图
所设计的交通灯管理系统主要有主控摸块(89C51单片机)。
译码/驱动电路,时钟电路,交通灯模拟部分,紧急情况手动控制部分及剩余时间显示部分等组成。
2.2AT89C51
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
单片机的引脚除了电源、复位、时钟接入和用户I/O口外,其余引脚都是为了实现系统扩展而设置的。
这些引脚构成了三总线结构,即16位地址总线(AB)、8位数据总线(DB)和8位控制总线(CB)。
数据总线:
DO~D7、PA0~PA7、PB0~PB7、PC0~PC7,此32条数据总线均为双向三态,其中D0~D7用于传送CPU与74ls373之间的命令与数据,PAO~PA7、PB0~PB7、PC0~PC7分别于ABC3口对应,用于74ls373与外设之间的数据传送数据。
控制线:
、
、RESET
:
读信号,输入信号线,低电平有效。
表示CPU对74LS373进行读操作。
:
写信号,输入信号线,低电平有效。
表示CPU对74LS373进行写操作。
RESET:
复位信号,输入信号线,高电平有效。
寻址线:
、A0、A1
:
片选信号,输入信号线,低电平有效。
3硬件电路
3.1时钟电路设计
时钟电路由一个晶体振荡器12MHZ和两个33PF的瓷片电容组成。
时钟电路产生单片机工作所需要的时钟信号,而时序所研究的是指令执行中各信号之间的相互关系。
单片机本身就如一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格工作。
单片机芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2,在芯片外部通过两个引脚跨接晶体振荡器和微调电容,形成反馈电路,可得时钟电路图(图3.1)。
图3.1时钟电路图
振荡电路产生的振荡脉冲并不直接使用,而是经分频后再为系统所用振荡脉冲经过二分频后才作为系统的时钟信号。
在二分频的基础上再三分频产生ALE信号,再二分频的的基础上再六分频得到机器周期信号。
晶振Y1也可以采用6MHz或者11.0592MHz,在正常工作的情况下可以采用更高频率的的晶振,晶振的振荡频率直接影响单片机的处理速度,频率越大单片机处理速度越快。
本设计采用11.0592MHz,图中用约等于12MHz。
起振电容C1、C2一般采用15~33uF,并且电容离晶振越近越好,晶振离单片机越近越好。
本设计中C1、C2采用33uF。
3.2复位电路设计
单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。
89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。
当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。
单片机系统的复位方式有:
手动按钮复位和上电复位。
采用专用复位电路芯片构成复位电路在实际应用系统中,为了保证复位电路可靠的工作,常将RC电路接施密特电路后再接入单片机复位端;或采用专用的复位电路芯片。
复位电路的极性电容C1的大小直接影响单片机的复位时间,一般采用10~30uF,容值越大需要的复位时间越短。
(如图3.2)
图3.2复位电路图
3.3显示电路设计
3.3.1倒计时器电路设计
倒计时器的电路原理图主要有CPU内核、实时日历时钟芯片和现实及其驱动电路三部分组成。
交通信号灯模拟控制的硬件电路如图3.3.1所示。
从图中可以看出,交通信号灯的控制通过单片机的P1口实现。
当端口给出高电平时,相应的指示灯才亮;而当端口给出低电平时,相应的指示灯处于灭的状态。
图3.3.1倒计时器显示电路
3.3.2红绿灯显示电路设计
其中在本次设计中,红绿灯显示电路分别由红黄绿三种颜色发光二极管显示,选用共阴极的LED,由于P0口有上拉电阻,所以选用O直接驱动,在共阴极端用NPN型的三极管扩流,简化了电路的复杂度。
(如图3.3.2)
图3.3.2红绿信号灯显示电路图
4软件设计
4.1软件实现功能综述
交通信号灯模拟控制的软件设计也比较简单。
其基本思路是利用软件延时,对相应信号灯的点亮时间加以控制。
4.2流程图设计
4.2.1主程序流程图设计
图4.2.1主程序流程图
4.2.2中断流程图设计
本设计的中断程序的功能是在有重要车辆通过时,相应车道的信号灯持续为绿灯,而对应车道的信号灯则持续为红灯,直到重要车辆通过后,恢复正常点亮规律
图4.2.2中断程序流程图
5仿真电路
本设计通过proteus仿真节省了大量的做实物的时间,为能够短时间内做好设计提供了很大帮助。
Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:
①实现了单片机仿真和SPICE电路仿真相结合。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
②支持主流单片机系统的仿真。
同时支持第三方的软件编译和调试环境,如Keil C51 uVision2等软件。
④具有强大的原理图绘制功能。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。
根据功能要求分别仿真各种情况下的亮灯情况,具体如下:
如图5.1仿真图所示,正常情况下主干道方向亮绿灯,主干道放行。
支干道方向亮红灯,支
图5.1红灯仿真图
如图5.2所示主干道方向亮黄灯3秒,支干道方向亮红灯:
图5.2黄灯仿真图
如图5.3仿真图所示,有紧急车通过时按下按键K0时,主、支干道均亮红灯特殊指示灯亮:
图5.3特殊指示灯仿真图
6总结
在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。
一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。
在整个设计过程中大部分时间是用在程序上面的。
很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对系统的结构很熟悉。
因此可以说系统的设计是软件和硬件的结合,二者是密不可分的。
通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。
这次设计以单片机AT89C51作为城市交通灯的控制核心,模拟定周期交通信号灯的工作状态。
以单片机89c51为主,设计连接数据存储器,复位电路,时钟电路。
对输入输出接口进行设计连接。
本系统就是充分利用了AT89C51的I/O引脚。
系统采用51系列的AT89C51单片机和可编程并行I/O接口芯片74ls373为中心器件来设计交通信号灯控制器,实现了AT89C51单片机的设置交通信号灯点亮时间的功能;交通灯的点亮采用了LED;电源则接220V交流电源,最后对各个程序进行软件的设计编程。
并对所设计的内容进行仿真,测试。
系统设计简便、实用、操作简单、程序设计简便。
参考文献
[1]张迎新.单片微型计算机原理、应用及接口技术(第2版)[M].北京:
国防工业出版社,2004
[2]赵晶主编Prote199高级应用人民邮电出版社,2000
[3]于海生编著微型计算机控制技术清华大学出版社2003.4
[4]张志良编著单片机原理与控制技术[M]机械工业出版社,2005
[5]蒋方君编著在论循环时序电路的简便设计[J]机电一体化,2005
[6]徐维祥.单片微型机原理及应用大连理工大学出版社,2006
附录A系统原理图
系统原理图
附录B源程序
主程序清单ORG 0000H
AJMP MAIN
ORG 00013H
LJMP INT9 跳到跳到特种车辆自动服务程序
…………….数字显示代码…………………………………..
TAB:
DB 3FH,6H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH
/*主程序*/
ORG 0300H
MAIN:
MOV 25H,#60 南北通行时间初始值,存到25H单元
MOV 26H,#30 东西通行时间初始值,存到26H单元
SETB IT0 外部中断一边沿触发
MOV IE,#8FH 开中断
.......南北绿灯东西红灯..........
NBLD:
MOV R1,25H 为南北方向显示时间做准备
NBLD1:
MOV 20H,R1 南北通行时间60秒(25h)=60(NBLD即东西绿灯)
MOV P2,#1EH 点亮南北绿灯东西红灯
MOV A,R1
ADD A,#3
MOV 21H,A 为东西方向显示时间做准备
LCALL DISP1 显示通行所剩时间,其中有0.5秒延时
LCALL DISP1 再次显示以便数码管不闪,且再延时0.5秒以便凑够一秒
DJNZ R1,NBLD1 判断60秒是否已完,若未完则从新显示、延时
............南北黄灯闪东西红灯.............
ShanHD:
MOV R2,#3 黄灯闪亮3秒
HD:
MOV P2,#1DH 点亮黄灯
MOV 22H,R2 为显示时间做准备
LCALL DISP2 黄灯闪亮剩时显示其中延时0.5秒
MOV P2,#1FH 熄灭黄灯
LCALL DISP2 显时,且再延时0.5秒以便凑够1秒
DJNZ R2,HD 判断3秒是否已完,若未完则从新闪灭、延时和显示
......南北红灯东西绿灯.............
DXLD:
MOV R3,26H 东西通行30秒(26H)=30, (DXLD即东西绿灯)
DXLD1:
MOV P2,#33H 点亮南北红灯东西绿灯
MOV 24H,R3 为东西方向显示时间做准备
MOV A,R3
ADD A,#3
MOV 23H,A 为南北方向显示时间做准备
LCALL DISP3 时间显示其中有0.5秒延时
LCALL DISP3 凑够1秒时间
DJNZ R3,DXLD1 判断30秒是否已完
.......南北红灯东西黄灯闪..................
ShanHD1:
MOV R2,#3 转入黄灯闪亮3秒
HD1:
MOV 22H,R2 为显示做准备
MOV P2,#2BH 点亮南北红灯东西黄灯
LCALL DISP2 显示时间,并延时0.5秒
MOV P2,#3BH 点亮南北红灯关闭东西黄灯
LCALL DISP2 显时,且再延时0.5秒以便凑够1秒
DJNZ R2,HD1 判断3秒是否到,若未到继续闪灭东西黄灯
AJMP NBLD 主程序到此完
......延时程序.......... .........
DELAY3:
MOV R6,#1 5ms延时(5ms=50*50*2us)
DE61:
MOV R0,#1
DE71:
DJNZ R0,DE71
DJNZ R6,DE61
RET
DELAY:
ACALL DELAY1 10ms延时
ACALL DELAY1
RET
DELAY1:
MOV R6,#50 5ms延时,(5ms=50*50*2us)
DE6:
MOV R0,#50
DE7:
DJNZ R0,DE7
DJNZ R6,DE6
RET
.....南北通行的时间显示子程序..........
DISP1:
MOV P0,#0 熄灭数码管
MOV R7,#25 以下调用四次5毫秒延时程序,故25*4*5毫秒=0.5秒
RP1:
MOV A,20H 南北方向要显示时间移到寄存器A
MOV DPTR,#TAB 要显示的数字代码表首地址
MOV B,#10
DIV AB 要显示的时间与10相除,求出十位和个位
MOVC A,@A+DPTR 找到十位的显示代码
MOV P1,#00001110B; 选择南北数码管十位片
MOV P0,A 送出十位显示代码
LCALL DELAY1 延时5ms以点亮数码管
MOV A,B 把个位数移到寄存器A
MOVC A,@A+DPTR 找到个位数显代码
MOV P1,#00001101B 选择南北数码管个位片
MOV P0,A 送出个位数显示代码
LCALL DELAY1 延时5ms以点亮数码管
MOV A,21H 东西方向要显时间移到寄存器A
MOV DPTR,#TAB 要显示的数字代码表首地址
MOV B,#10
DIV AB 要显示的时间与10相除,求出十位和个位
MOVC A,@A+DPTR 找到十位的显示代码
MOV P1,#00001011B; 选择东西数码管的十位片
MOV P0,A 送出十位显示代码
LCALL DELAY1 延时5ms以点亮数码管
MOV A,B 把个位数移到寄存器A
MOVC A,@A+DPTR 找到个位的显示代码
MOV P1,#00000111B 选择东西数码管的个位片
MOV P0,A 送出个位显示码
LCALL DELAY1
DJNZ R7,RP1 是否已循环25次
RET
.............黄灯的时间显示子程序................
DISP2:
MOV P0,#0 熄灭数码管
MOV R7,#25 以下调用两次0.01秒延时程序,
RP2:
MOV A,22H 要显示的时间移到寄存器A
MOV DPTR,#TAB 要显示的数字代码表首地址
MOV B,#10
DIV AB 要显示的时间与10相除,求十位和个位
MOVC A,@A+DPTR 找到十位的显示代码
MOV P1,#00001010B; 选择南北数码管十位片和东西数码管十位片
MOV P0,A 送出十位显示代码
LCALL DELAY 延时10ms以点亮数码管
MOV P1,#00000101B 选择东西南北数码管个位片
MOV A,B 把个位数移到寄存器A
MOVC A,@A+DPTR 找到个位数显示代码
MOV P0,A 送出个位数显示代码
LCALL DELAY 延时10ms一点亮数码管
DJNZ R7,RP2
RET
..........东西通行的时间显示子程序.........
DISP3:
MOV P0,#0 熄灭数码管
MOV R7,#25 以下调用4次调用延时程序,
RP3:
MOV A,23H 要南北方向显示的时间移到寄存器A
MOV DPTR,#TAB 要显示的数字代码表首地址
MOV B,#10
DIV AB 要显示的时间与10相除,求出十位和个位
MOVC A,@A+DPTR 找到十位的显示代码
MOV P1,#00001110B; 选择南北数码管十位片
MOV P0,A 送出十位显示代码
LCALL DELAY1 延时5ms以点亮数码管
MOV A,B 把个位数移到寄存器A
MOVC A,@A+DPTR 找到个位数显示代码
MOV P1,#00001101B; 选择南北道数码管个位片
MOV P0,A 送出个位数显示代码
LCALL DELAY1 延时5ms一点亮数码管
MOV A,24H 要东西方向显示的时间移到寄存器A
MOV B,#10
DIV AB 要显示的时间与10相除,求出十位和个位
MOVC A,@A+DPTR 找到十位的显示代码
MOV P1,#00001011B
MOV P0,A 送出十位显示代码
LCALL DELAY1 延时5ms以点亮数码管
MOV A,B
MOVC A,@A+DPTR
MOV P1,#00000111B 选择东西数码管个位片
MOV P0,A 送出个位显示代码
LCALL DELAY1
DJNZ R7,RP3
RET
............特殊车辆通过的时间显示子程序..........
DISP4:
MOV P0,#0 熄灭数