课程设计报告书课程名称:交通信号灯模拟控制系统目录一、设计概述 (1)(一)交通灯的应用前景及现状 (1)(二)课程设计的性质和目的 (1)二、设计任务 (1)三、方案简介 (2)四、设计详解 (4)(一)显示子程序 (4)(二)定时子程序 (4)(三)总体程序流程 (4)五、元件清单及主要元件说明 (5)(一)AT89S51单片机 (6)(二)共阴极数码管 (8)(三)发光二极管(红绿黄三色) (8)六、系统硬件设计 (8)(一)单片机主电路 (8)(二)交通灯接口电路 (9)(三)LED数码管显示电路 (10)(四)键盘口电路 (10)七、系统软件设计 (11)(一)初始化程序 (11)(二)显示子程序 (11)(三)定时中断处理程序 (12)(四)紧急中断处理程序 (13)(五)延迟程序 (14)八、设计心得 (14)九、参考文献 (15)十、附录 (15)交通信号灯模拟控制系统一、设计概述(一)交通灯的应用前景及现状随着社会经济的发展,城市交通问题越来越引起人们的关注。
人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。
城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。
所以,如何采用合适的控制方法,最大限度利用好耗费巨资修建的城市高速道路,缓解主干道与匝道、城区同周边地区的交通拥堵状况,越来越成为交通运输管理和城市规划部门亟待解决的主要问题。
在大、中城市,十字道口的红绿灯是交通法规的无声命令,是司机和行人的行为准则。
十字道口的交通红绿灯控制是保证交通安全和道路畅通的关键。
当前,国内大多数城市正在采用“自动”红绿交通灯,它具有固定的“红灯—绿灯”转换间隔,并自动切换。
它们一般由“通行与禁止时间控制显示、红黄绿三色信号灯和方向指示灯”三部分组成。
在交通灯的通行与禁止时间控制显示中,通常根据交通规律设置红绿黄三色信号的时间,时间控制都是固定的。
交通灯的时间控制显示,以固定时间值预先设置在单片机中,每次以一定周期交替变化。
(二)课程设计的性质和目的本课程设计的主要目的是通过对电子技术及单片机原理的学习,综合掌握电子电路综合设计的过程,设计要求和具体的设计方法。
通过设计更好的复习、理解模拟电子、数字电子和单片机等课程内容,使理论和实际相结合,加强学生的动手能力以及查阅相关资料解决实际问题的能力,培养学生从事设计工作的整体观念。
二、设计任务1、完成交通灯的变化规律,即一个十字路口为东西方向和南北方向,四个路口均有红黄绿三灯和两个LED数码管。
交通灯上电后进入初始状态即东西南北均为红灯亮。
5秒后转状态1:南北绿灯亮通车,东西红灯亮,禁止通行,持续30秒;30秒后转状态2:南北绿灯灭转黄灯闪亮,延时5秒,东西仍红灯亮;5秒后转状态3:东西绿灯亮通车,南北转红灯,持续30秒;30秒后转状态4:东西绿灯灭转黄灯闪,延时5秒,南北仍红灯。
最后循环至状态1 。
2、用8个LED 数码管(各方向均两个,分别表示个位和十位),显示倒计时。
倒计时用于提醒驾驶员或行人信号灯发生改变的时间,以便他们在“停止”和“通行”两者作出合适的选择。
3、在紧急状态下,通过K1键手动设置,将所有路口的灯变为红灯;再次按下此键后进入状态1,然后依次循环。
三、 方案简介通过网上查阅资料,最终确定以下几种方案:(一)方案一采用74HC573锁存器控制数码管显示,使用动态扫描方法,控制数码管位选和段选的通断来使数码管依次显示相应数值;交通灯则可通过单片机的I/O 口来直接控制其关断;按键可通过对外部中断标志位的查询来控制紧急情况的相应动作。
此方案框图如下:状态3:南北红灯,东西绿灯状态4:南北红灯,东西黄灯状态2:南北黄灯,东西红灯状态1:南北绿灯,东西红灯图1 状态示意图(二)方案二为使数码管的控制简单、显示稳定,可以采用静态显示方法,使用CD4511译码器来控制数码管显示;根据要求,显示部分为两位数,因此可将数码管分为四组:南北个位,南北十位,东西个位,东西十位; CD4511输入四位,输出七位,因此需16个I/O 口便可控制四组数码管,再用4个I/O 口控制数码管的公共极,其余I/O 口足够交通灯和按键使用。
此方案的整体框图如下:(三)方案三在方案一、二的基础上,进一步简化电路,数码管采用静态显示方法,且将其分组减少到两组,十位为一组,个位为一组,使用共阴极数码管,将所有数码管位选通端接地,我们只需给十位组和个位组送不同的段选信号就行了,I/O 口控制采用低电平灌电流方式,这样便会有足够电流驱动数码管显示;此种方案既不需要再扩展I/O 口,直接用单片机控制数码管显示和交通灯的亮灭,电路较为简单。
方案框图如下:图3 方案二框图图2 方案一框图方案比较以上三种方案各有利弊,但综合考虑,方案三的电路较为简单,使用器件少,成本低,且能完成设计要求的全部功能,因此其性价比较高,所以最终选择方案三进行设计。
四、设计详解本方案使用AT89S51单片机,P0口和P1口控制数码管的段选,采用静态显示方法;P2口和P3口的个别位用来控制交通灯(发光二极管)的亮灭;定时采用定时器0的方式一,外接12MHz的晶振;按键接INT0/P3.2(外部中断0),并设为高优先级中断,中断方式为电平中断,一旦有紧急情况发生,便按下按键进行中断,中断子程序便是使所有路口红灯亮,断开按键进入状态1。
(一)显示子程序数码管显示数字为0—9,可以利用查表方式显示相应数字,将编辑好的数字显示代码存入表中,代码显示内容与其在表中位置相对应({0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}),将表中相应位置的代码送进数码管段选控制I/O口(P0,P1)便可使数码管显示相应数字。
(二)定时子程序定时采用定时器0的方式一,外接12MHz的晶振,通过计算给定时器装入合适初值,为方便计算,可设定时器一次中断为50ms,这样中断20次即为1s,然后每个5s或30s便执行相应动作。
(三)总体程序流程(分块流程图见“七、软件原理”)图4 总体程序流程图五、元件清单及主要元件说明(一)AT89S51单片机1)本次设计主要用到I/O口P0口、P1口、P2口和P3口,P3口的P3.2即外部中断0引脚,XTAL1和XTAL2两端口接12MHz晶振,选用定时器0的方式一进行定时,若有紧急情况,可通过按键(接P3.2)进行中断处理。
·VCC:电源电压·GND:接地·P0口:P0口是一组8位双向I/0口。
P0口即可作地址/数据总线使用,又可以作为通用的I/O口使用。
当CPU访问片外存储器时,P0口分时低8位地址总线,后作双向数据总线,此时,P0口就不能再作I/O 口使用了。
在访问期间激活要使用上拉电阻。
单片机·P1口:Pl 是一个带内部上拉电阻的8准位双向I/O口,P1作为通用的I/O口使用。
·P2 口:P2 是一个带有内部上拉电阻的8 位准双向I/O 口,P2即可作为通用的I/O口使用,也可以作为片外存储器的高8位地址总线,与P0口配合,组成16位片外存储器单元地址。
· P3 口:P3 口是一组带有内部上拉电阻的8 位准双向I/0 口。
P3 口除了作为通用的I/O口使用之外,每个引脚还具有第二功能,具体分配如表2·RST :复位输入。
当振荡器工作时,RST 引脚出现两个机器周期以上高电平将使单片机复位。
WDT 溢出将使该引脚输出高电平,设置SFR AUXR 的DISRT0 位(地址8EH )可打开或关闭该功能。
DISRT0位缺省为RESET 输出高电平打开状态。
·ALE /PROG ————:当访问外部程序存储器或数据存储器时,ALE (地址锁存允许)输出脉冲用于锁存地址的低8位字节。
即使不访问外部存储器,ALE 仍以时钟振荡频率的1/6 输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:每当访问外部数据存储器时将跳过一个ALE 脉冲。
对F1ash 存储器编程期间,该引脚还用于输入编程脉冲(PROG )。
如有必要,可通过对特殊功能寄存器(SFR )区中的8EH 单元的D0 位置位,可禁止ALE 操作。
该位置位后,只有一条M0VX 和M0VC 指令ALE 才会被激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE 无效。
·PSEN ————程序储存允许(PSEN ————)输出是外部程序存储器的读选通信号,当AT89S51 由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN ————有效,即输出两个脉冲。
当访问外部数据存储器,没有两次有效的PSEN ————信号。
·EA ——/VPP :外部访问允许。
欲使CPU 仅访问外部程序存储器(地址为0000H -FFFFH ),EA 端必须保持低电平(接地)。
需注意的是:如果加密位LB1被编程,复位时内部会锁存EA 端状态。
如EA 端为高电平(接VCC 端),CPU 则执行内部程序存储器中的指令。
F1ash 存储器编程时,该引脚加上+12V 的编程电压Vcc 。
·XTAL1:振荡器反相放大器及内部时钟发生器的输入端。
·5个中断源,它们是两个外中断INT0(P3.2)和INT1(P3.3)、两个片内定时/计数器溢出中断TF0和TF1,一个是片内串行口中断TI 或RI ,程序入口地址如表3:表3 中断源程序入口七、系统软件设计(一)初始化程序初始化,设定标志位初值,选择定时器及工作方式,装入定时器初值,开总中断,开定时器中断和外部中断0。
void init(){flag=0;flag1=0;num=5;tt=0;P0=0x00;P1=0x00;TMOD=0x10;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET1=1;TR1=1;EX0=1;IT0=1;}(二)显示子程序LED计时每1秒都要刷新1次,采用的是静态显示,首先将时间(num)除以10,将整数对应的十位组显示转换为字节赋值给P0口,余数对应的个位组显示转换为字节赋值给P1口。
if(num>0){P0=table[num/10];P1=table[num%10];num--; } else {P0=table[0]; P1=table[0]; num=5; flag=2; }(三)定时中断处理程序定时器工作的基本原理其实就是给初值,让它不断加1直至减完为模值,这个初值是送到TH 和TL 中的。