您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 基于8086交通灯课程设计说明书
武汉纺织大学微机原理及应用课程设计说明书姓名学号学院外经贸学院班级题目基于8086/8088的交通灯程序设计指导教师周国鹏2010年6月-1-目录一、需求分析……………………………………………………………21、课题背景………………………………………………………22、课题训练内容…………………………………………………23、设备需求……………………………………………………….24、功能需求……………………………………………………….2二、设计方案…………………………………………………………..31、基于8255A的分析……………………………………………32、基于8259A的分析……………………………………………43、中断分析.....................................................................................4三、详细设计…………………………………………………………..51、信号灯显示模块.....................................52、LED显示模块………………………………………………….63、中断子程序模块……………………………………………….64、整合所有模块………………………………………………….65、硬件原理及电路图……………………………………………76、程序源代码…………………………………………………….9四、设计总计…………………………………………………………..15五、参考资料…………………………………………………………..16-2-一、需求分析1、课题背景现代城市交通日益拥挤,为保证交通安全,防止交通阻塞,在城市交通井然有序,交通信号灯便出为此出现在人们眼中。十字道口的红绿灯是交通法规的无声命令,是司机和行人的行为准则。十字道口的交通红绿灯控制是保证交通安全和道路畅通的关键。当前,国内大多数城市正在采用“自动”红绿交通灯,它具有固定的“红灯—绿灯”转换间隔,并自动切换。它们一般由“通行与禁止时间控制显示、红黄绿三色信号灯和方向指示灯”三部分组成。交通灯的时间控制显示,以固定时间值预先“固化”在单片机中,每次只是以一定周期交替变化。.2、课题训练内容设计一个基于8086/8088微型计算机的一个交通信号灯控制系统,要求能完成基本的交通灯控制,如红、绿、黄三种灯的定时交替点亮与熄灭;能提供行人通过时的临时信号修改;能提供当时当地的温度、湿度信息;提供基本的键盘输入。要求学生了解8086/8088微型计算机控制系统的基本设计方法与思路,能独立查阅资料并汇总,具备一定的控制系统设计能力,掌握绘制电路原理图的能力,能编写一定难度的汇编程序并调试。3、设备需求①.8086系统微机一台。②温度传感器(可自选)和湿度传感器(可自选)、信号放大器。③8253定时/计数器和8255A并行接口芯片、8259A、ADC0809。④小键盘一个,红,黄,绿,发光二极管。⑤LED发光二极管6个。4、功能需求本课题设计制作一个交通信号灯实时控制系统。①.在一个十字路口的一条主干道和一条支干到上分别装上一套红,黄,绿三种信号灯;用按键模拟十字路口的车辆检测传感器信号;用二个LED显示停靠车辆数和二个LED显示红(或)绿灯的时间。-3-②在一般情况下,主、支干道上的绿灯--黄灯--红灯每24秒交替变换。(红灯6s,绿灯12s,黄灯6秒)③当检测到主干道为红灯而且干道上超过29辆车时(用按键K1模拟干道上停靠车辆),且从干道上没有车辆时,支干道的绿灯转为黄灯,持续6s后,又变为红灯,同时主干道由红灯变为绿灯。④反之,当检测到支干道为红灯而且干道上超过29辆车时(用按键K1模拟干道上停靠车辆),支干道的绿灯转为黄灯,持续6s后,又变为红灯,同时支干道由红灯变为绿灯。⑤当检测到特殊车辆经过时(用按键K2模拟),主从干道都变成红灯,当检测到车辆经过后(再次按下按键3),恢复原来红绿灯情况。二、设计方案1,基于8255A的分析。根据课题内容,在本课题系统中,微机需要检测2按键送来的主,干道车辆到达信号及特殊车辆信号,并按一定的条件发出主、支干道6个信号灯的控制信号,以及LED显示器的控制信号。根据如(图1)的8255内部结构及引脚,显然,用一片8255A完全可以满足上述要求。可对于8255A作如下安排。PA0~PA7用来给信号灯在不同时刻发送不同状态的信号。PB0~PB7用来给LED发送LED驱动码。PC0~PC3用来发送对LED的控制信号,PC4~PC7暂时还未用到。其8255电路图如下(图2):图18255内部结构及引脚-4-图28255接线图2、基于8259A的分析。另端口A工作与方式0的无条件数据传输方式,用以控制交通灯的亮灭;端口B工作与方式1的输入方式,并设置为允许中断;将端口C的PC2,PC3接到负脉冲源上,使得每按一下按钮时分别表示支干道上有一辆车过来和主干道上有一辆车过来,而将PC0接到中断请求线上,模拟当干道上有特殊车辆来时,由中断请求线向CPU发出中断,CPU响应中断后发出控制信号来控制主,支干道交通灯变为状态。端口C的低4位用作输出接口,用来控制LED显示。3,有关中断技术的功能,可以采用8259外部中断来控制特殊车辆的到来和红灯路口的阻塞车辆数。再用K1、K2来模拟阻塞车辆和特殊车辆。其8259与K1、K2按键连线如下(图3):图38259中断控制和K1、K2接线图本模块主要用到以上5种硬件,各种硬件相连,组成整个系统的硬件系统。但是除了硬件系统外,还需要有软件来驱动硬件间相互配合执行,现给出其流程如下图4:8259KK2-KK2+KK1-KK1+IRQ7IRQ6-5-三、详细设计根据本小组对本课题的分析,最后确定将本课题分为如下四个模块:1,信号灯显示模块:本模块分六个子程序,其功能分别是主干道绿灯支干道红灯,主干道黄灯支干道红灯,主干道红灯分干道绿灯,主干道红灯,分干道黄灯。主支干道YNN开始主干道绿灯,支干道红灯设置中断向量,初始化8259开中断主干道黄灯支干道红灯;闪烁;倒计时4秒主干道红灯,支干道绿灯主干道红灯,支干道黄灯;闪烁倒计时4秒Main=29&&到计时到0Main=29&&到计时到0Y图4系统软件流程图-6-都红灯,主支干道灯都灭。在程序中分别是子程序light1,light2,light3,light4,light5,light6.2,LED显示模块:此模块分五个子程序,其功能分别是,led根据父程序通过ax和数据段main传过来的值控制4个LED的数字显示。Led1、led2两个子程序分别通过ax的值显示倒计时。led3,led4两个子程序分别通过main的值和buffer对应的驱动码显示阻塞车辆数。3,中断子程序模块,此模块分两个子程序,irq6用来处理K1触发的中断。此中断用来表示阻塞了一辆车,即main加一。irq7用来处理K2触发的中断,此中断用来处理十字路口来了一辆特殊车辆,即两条路的信号灯都成红灯,倒计时暂停。其中断子程序的流程图如下图五:图5中断子程序流程图4,此模块主要实现本课题的逻辑,即通过本调用以上三个模块的子程序将现整个课题连起来,并让整个系统能连续的运行,因此也负责整个程序的时序。本模块实现了整个系统的主程序,具体流程包括两重循环,三次分支,每一重用来循环控制信号灯四个基本状态的轮流转换,第二重循环用来控制时序及LED。第一次分支是根据每一重中断irq7入口保护现场主、支干道都亮红灯,同时,倒计时时间静止延时3S恢复现场中断返回中断irq6入口保护现场main(车辆数量)的值加1恢复现场中断返回-7-循环下的每个基本状态分别显示不同的信号灯,第二个分支是,根据数据段中的main来判断阻塞车辆是不是过多,是否需要信号灯的转换。第三个分支是根据信号灯是否黄灯时来商定要信号灯是否要闪烁。另外此模块还要负责中断的初始化,及开中断的时间。这也是本个负责的模块,其主要流程如图4和图6。图6中断控制图5、硬件原理及电路图是是是开始是否有中断红绿灯正常转换,倒计时正常显示否紧急车辆通行中断服务程序是否有紧急车辆通行否是否是记录车辆数中断记录车辆数量中断服务程序否-8--9-图7硬件原理及电路图6、程序源代码stacksegmentstack;定义堆栈段db64dup(?);申请64个字节的空间stackendsdatasegment;定义数据段bufferdw5b6fh,5b7fh,5b07h,5b7dh,5b6dh,5b66h,5b4fh,5b5bh,5b06h,5b3fhdw066fh,067fh,0607h,067dh,066dh,0666h,064fh,065bh,0606h,063fhdw3f6fh,3f7fh,3f07h,3f7dh,3f6dh,3f66h,3f4fh,3f5bh,3f06h,3f3fh;定义从29~0的LED驱动码maindb00h;定义main用来存放阻塞车辆数zhuangtaidw00h;用来存放交通灯的最近状态zhongduandw00h;用来存放中断时倒计时的状态dataendscodesegmentassumecs:code,ds:datastart:movax,data;程序开始movds,ax;中断向量初始化pushds;保护ds现场movax,0000hmovds,ax;将0至入dsmovax,offsetirq6addax,2000hmovsi,0038hmov[si],ax;将irq6的首地址偏移地址放入第16个中断向量字的低字中movax,0000hmovsi,003ahmov[si],ax;将irq6的首地址段地址放入第16个中断向量字的高字中movax,offsetirq7addax,2000hmovsi,003chmov[si],ax;将irq7的首地址偏移地址放入第16个中断向量字的低字中movax,0000hmovsi,003ehmov[si],ax;将irq7的首地址段地址放入第16个中断向量字的高字中popds;中断向量初始化完毕moval,80h-10-out63h,al;8255初始化leabx,buffermovdx,60h;dx,si两个寄存器的值用来控制LED显示的值again:movcx,4jump:movzhuangtai,cx;记录最近交通灯的状态cmpcx,4jeaaaa1cmpcx,3jeaaaa2cmpcx,2jeaaaa3jumpaaaa4;根据cx确定的状态输出交通灯(二级管表示)aaaa:moval,0movmain,alpushcx;每一个新的状态将阻塞车辆数清零;qiaonext3:movcx,23h;根据cx值通过延时得出一秒的时间movax,29cmpmain,aljezongd;阻塞车辆数大于等于30时交通灯转换状态next2:cmpcx,25h;根据cx的值,在黄灯时,闪烁jaeshan2cmpcx,19hjaeshancmpcx,0chjaeshan2jumpshanaaas:pushcxcallzdcsh;中断初始化movax,[bx+si]xchgal,ahcallled;LED显示当前倒计时数和阻塞车辆数popcxloopnext2incsiincsimovzhuangduan,sicmpsi,dxjnenext3;倒计时zongd:popcxloopjumpjumpagain;状态循环转换;主程序逻辑结束aaaa1:movsi,0;调用第一种信号灯状态代码,si=0表示从29开始倒计时-11-calllight1jumpaaaaaaaa2:movsi,54;调用第二种信号灯状态代码,si=54表示从2开始倒计时calllight2jumpaaaaaaaa3:movsi,0;调用第三种信号灯状态代码,si=0表示从29开始倒计时calllight3jumpaaaaaaaa4:movsi,54;调用第四种信号灯状态代码,si=54表示从2开始倒计时calll
本文标题:基于8086交通灯课程设计说明书
链接地址:https://www.777doc.com/doc-3603080 .html