微机接口交通信号灯课程设计报告.docx
郑州大学信息工程学院课程设计报告交通灯模拟系统专业:计算机科学与技术班 级:2班学号:20082430247姓名:朱文峰指导教师:关国利、张行进、许金梅序言红绿灯(交通信号灯)系以规定之时间上交互更迭之光色讯号,设置于交岔路口或其他特殊地点,用以将道路通行权指定给车辆驾驶人与行人,管制其行止及转向之交通管制设施。为一由电力运转之交通管制设施,以红、黄、绿三色灯号或辅以音响,指示车辆及行人停止、注意与行进,设于交岔路口或其他必要地点。十字道口的红绿灯是交通法规的无声命令,是司机和行人的行为准则。十字道口的交通红绿灯控制是保证交通安全和道路畅通的关键。当前,国内大多数城市正在采用“自动”红绿交通灯,它具有固定的“红灯绿灯”转换间隔,并自动切换。它们一般由“通行与禁止时间控制显示、红黄绿三色信号灯和方向指示灯”三部分组成。在交通灯的通行与禁止时间控制显示中,通常要么东西、南北两方向各60秒;要么根据交通规律,东西方向60秒,南北方向40秒,时间控制都是固定的。交通灯的时间控制显示,以固定时间值预先“固化”在单片机中,每次只是以一定周期交替变化。但是,实际上不同时刻的车辆流通状况是十分复杂的,是高度非线性的、随机的,还经常受认为因素的影响。采用定时控制经常造成道路有效应用时间的浪费,出现绿灯方向车辆较少,红灯方向车辆积压。它不顾当前道路上交通车辆数的实际情况变化,其最大的缺陷就在于当路况发生变化时,不能满足司机与路人的实际需要,轻者造成时间上的浪费,重者直接导致交通堵塞,导致城市交通效率的下降。 目前,有一种使用“模糊控制”技术控制交通灯的方法。能够根据十字路口两个方向上车辆动态状况,自动判断红绿灯时间间隔,以保证最大车流量,减少道口的交通堵塞。但是却不像定时控制,能用数字显示器显示当前灯色剩余时间,以便于驾驶员随时掌握自己的驾驶动作,及时停车或启动。 本次课程设计采用定时加中断控制的方式进行,对两个方向车辆的通行时间分别计时,可随意进行更改双向的通行时间。目 录1、 课程设计的目的和要求 41.1 课程设计目的和意义1.2 试验的目的和内容1.3 试验的基本要求2、 硬件总体设计 52.1 并行接口电路82552.2 8253计数器2.3 8259中断3、硬件基础知识7 3.1 8255控制字 3.2 8255端口C控制字3.3 8253命令格式4、软件总体设计 8 4.1流程图过程 4.2主程序流程图5、源代码 10 5.1 程序代码 5.2 运行结果6、结束语16 7、参考文献17 一.课程设计的目的和要求1.1课程设计的目的和意义:微机原理与接口技术是计算机、电子类专业的专业基础课。在课程体系种占有重要的位置。课程设计的目的是配合平时的教学和实验,以达到巩固和消化课堂教学内容,进一步加强综合应用能力,启发创新思维的目的。是培养学生综合素质,提高动手能力,提高发现问题和解决问题能力的重要阶段。1.2实验目的 了解交通灯管理的基本工作原理 熟悉8259A中断控制器的工作原理和应用编程 熟悉8255A并行接口的各种工作方式和应用 熟悉8253计数器/定时器的工作方式及应用编程,掌握利用软硬件相结合定时的方法 掌握多位LED显示问题的解决 1.3实验内容(1) 利用8255端口C控制LED发光管。LED发光管L7(红),L6(黄) ,L5(绿)作为南北路口的交通灯与8255的PC7,PC6,PC5相连,L2(红),L1(黄),L0(绿)作为东西路口的交通灯与PC4,PC3,PC2相连。编程使六个灯按交通灯变化规律亮灭。十字路口交通灯的变化要求:(2) 1南北路口的绿灯和东西方向的红灯同时点亮30秒钟左右; 2南北路口的黄灯闪烁5秒钟,东西路口亮红灯继续亮; 3南北路口的红灯和东西路口的绿灯同时点亮30秒钟左右; 4南北路口的红灯继续亮,同时东西路口的黄灯闪烁若干次。 5如此循环重复。(3)1.利用软件延时子系统实现30秒控制 2.利用8253硬件延时实现30秒控制 3.利用8253定时,将绿灯亮的剩余时间在两位LED数码管上动态显示出来。二 硬件总体设计各芯片主要管脚的功能如下:1. 8255A:(1) 8255A端口的连接情况PC7:发光管L7相连,表示南北红灯,其中 1表示亮,0表示暗PC6:发光管L6相连,表示南北黄灯,其中1表示亮,0表示暗PC5:发光管L5相连,表示南北绿灯,其中1表示亮,0表示暗PC4:发光管L2相连,表示东西红灯,其中 1表示亮,0表示暗PC3:发光管L1相连,表示东西黄灯,其中1表示亮,0表示暗PC2:发光管L0相连,表示东西绿灯,其中1表示亮,0表示暗PC1:和数码管S1端相连,作为片选数码管的十位显示PC0: 和数码管S1端相连,作为片选数码管的个位显示同样地还有A端口PA6:与七段数码管的a相连PA5:与七段数码管的b相连PA4:与七段数码管的c相连PA3:与七段数码管的d相连PA2:与七段数码管的e相连PA1:与七段数码管的f相连PA0:与七段数码管的g相连位码驱动输入端S1接+5V,S0、dp接地 (2) 三个端口均工作于方式0,处于输出状态 (3) 8255A 的A口地址为288H,B口地址为289H,C口为28AH,控制端口地址为28BH GUN288hPC7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 8255APC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0 . a b c d e f g dp8位数码管8位数码管 S1 s0 红 黄 绿 红 黄 绿 . L7 L6 L5 L2 L1 L0 2. .8253:(1) 8253的CLK0口由于输入一个1MHZ的脉冲所以要求采用串联的方式OUT0与CLK1连接,GATE0与GATE1一起连接到5V的电源上,最终使OUT1口产生1HZ的方波,脉冲输入到8259的IR0端,产生中断,调中断服务子程序。中断请求信号。 (2) 定时器0:输入信号设为1KHZ,工作在方式3,输出为1000HZ方波,OUT0和计数器1的相连,作为计数器1的输入信号。定时器1:输入信号为OUT0,工作站方式3,计数初值为1000,输出为1HZ方波(3) 8253的计数器0的地址是280H,计数器1的地址是281H控制端口地址是283H3 . 8259 8253计数器1的 OUT1口产生1HZ的方波,脉冲输入到8259的IR0端,产生中断,调中断服务子程序。中断请求信号。 8259IR1IR0 OUT0GATE08253 CLK0 OUT1GATE1CLK1 5V 中断产生的硬件线路连接三 硬件知识点1 介绍本系统所选用的各种芯片的引脚、功能、相应的命令字控制格式。(1) .8255A的控制字:(2) .端口C按位置1/复0控制(3)8253命令字的格式:D7 D6 D5 D4 D3 D2 D1 D0 SC1SC0RW1RW0M2M1M0BCD00 计数器0 00 计数器锁存读命令 000 方式0 D0=0 按二进制格式计数01 计数器1 01 只读/写低字节 001 方式1 D0=1按BCD码格式计数10 计数器2 10 只读/写高字节 *10 方式211 非法 11 先读/写低字节 *11 方式3 ,后读/写高字节 100 方式4 101 方式5 四 软件总体设计 (1) 主程序先对各个硬件初始化,在开CPU中断,然后空操作,等待中断。执行低级中断(IR3)时,8255的PC1,PC0口负责选数码管,PA口负责显示数字,通过查表法查出09的数码管编码。采用循环扫描方法,人眼即可看到连续的二位数。数码管的显示为中断主函数的死循环,不断地刷新数码管显示,直到产生新的中断,重新的对8255输入新的值,产生新的数码数字的变化。 (2) 对于红绿灯的状态可以分为六个状态,其中黄灯闪烁为两个状态,为了是LED显示灯状态,通过8255的C端口进行赋值,输出状态的信号。这里需要用到pC端口的位置置1的方法,赋予状态变量的值。(3) 流程图的过程4. 程序流程图 Counter>50 开始8255初始化8255初始化8253初始化Counter=80,mins=30 NCounter>40N YCounter奇?Counter>10Y NCounter奇?N YN YY南北黄东西红东西红东西红南北绿东西黄南北红南北红东西绿,南北红 Y数码管显示数码管显示Minus-; counter- Nminus=0? Minus=40 上面只是过程状态的显示,没有详细的说出具体的实现的情况,在下面的源代码中,可以看出具体的实现步骤和细节的处理过程。在试验的编码过程中调试五 源代码:include d:testio16.inc.data counter word 0 flag byte 0 mins word 0 ledtb byte 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh.code start: ;初始化 mov ax,data ;程序开始点 mov ds,ax ;设置ds指向程序数据段的段地址 mov dx,28bh ;8255的初始化 mov al,80H ;8255各口都工作在方式0,都作为输出口 out dx,al mov al,36h ; (00110110定时器0,方式3,二进制计数,初值1000) mov dx,283h out dx,al mov ax,1000 mov dx,280h out dx,al mov al,ah out dx,al mov al,76h ;(01110110定时器1,工作方式3,2进制计数,初值1000) mov dx,283h out dx,al mov ax,1000 mov dx,281h out dx,al mov al,ah mov dx,281h out dx,al ;中断代码 mov ax,350Bh ;获取原中断向量表 int 21h push es push bx cli ;关中断 push ds ;设置新中断向量表 mov ax,seg new0B mov ds,ax mov dx,offset new0B mov ax,250Bh int 21h pop ds in al,21h ;读出IMR push ax ;保存原IMB and al,0f7h ;允许IR3,其他的不变 out 21h,al ;设置新的IMB内容 mov counter,80 ;设置中断的次数初值 mov flag,0 ;设置标志位 mov mins,30 sti ;开中断 circle: ;数码管显示 mov dx,28ah in al,dx ;读取C端口 test al,00100000B ;检测pc5为1否? jnz Begin1 ;为1,转到Begin1,数码管显示 test al,00000100B ;检测PC2为1否? jz Begin2 ;为0,转到Begin2,数码管不显示Begin1: ;cmp mins,0 ;jne s ;mov mins,40 s: mov dx,28ah ;pc1设为1,控制数码管显示 mov al,02h out dx,al mov ax,mins ;数码管十位数字显示 mov bl,10 div bl mov bl,al mov bh,0 mov al,ledtbbx mov dx,288h out dx,al call delay mov dx,28ah;数码管个位的数字显示 mov al,01h out dx,al mov bl,ah mov bh,0 mov al,ledtbbx mov dx,288h out dx,al call delay ;判断led显示状态Begin2: cmp counter,50 ;绿红灯状态30s ja status1 cmp counter,40 ;黄灯闪烁5次,红灯状态,共10s ja status2 cmp counter,10 ;红绿灯状态30s ja status3 cmp counter,0 ja status4 call start status1:call Green_Red jmp endclestatus2: mov ax,counter mov bl,2 div bl cmp ah,0 je first call Yellow_Red mov flag,0 jmp endcle first:call L6_Red mov flag,1 jmp endcle status3:call Red_Green jmp endcle status4:mov ax,counter mov bl,2 div bl cmp ah,0 je second call Red_Yellow mov flag,0 jmp endcle second:call L1_Red mov flag,1 jmp endcle endcle: jmp circle cli ;关中断 pop ax ;恢复IMR out 21h,al pop dx ;恢复中断向量表项 pop ds mov ax,250Bh int 21h sti ;开中断 exit 0Green_Red proc ;南北绿灯亮东西红灯亮 mov dx, 28AH mov al, 00110000B out dx, al call delay retGreen_Red endp L6_Red proc ;南北黄灯闪烁,东西红灯 mov dx, 28AH mov al, 00010000B;黄灯暗 out dx, al call delay ret L6_Red endp Yellow_Red proc mov dx, 28AH mov al, 01010000B;黄灯亮 out dx, al call delay retYellow_Red endp Red_Green proc ;南北红灯,东西绿灯 mov dx, 28AH mov al, 10000100B out dx, al call delay ret Red_Green endp L1_Red proc ;南北红灯,东西黄灯闪烁 mov dx, 28AH mov al, 10000000B;黄灯暗 out dx, al call delay ret L1_Red endp Red_Yellow proc mov dx, 28AH mov al, 10001000B;黄灯亮 out dx, al call delay retRed_Yellow endp ;中断服务程序 new0B proc sti ;开中断 push ax ;保护寄存器 push si push ds mov ax,data ;外部随机产生中断,ds不确定,所以必须设置ds mov ds,ax dec counter ;中断次数减一 dec mins cmp mins,0 jne h mov mins,40 h: mov al,20h out 20h,al ;发出EOI命令 pop ds pop si pop ax iret new0B endp delay proc push bx push cx mov bx,1 d1: xor cx,cx d2: loop d2 dec bx jnz d1 pop cx pop bx retdelay endp end start程序运行结果: 1即东西方向的绿灯和南北方向的红灯同时点亮30S钟; 230S钟后,东西方向的黄灯闪烁5次共10秒钟,。此时南北方向仍维持红灯点亮。 3东西方向的黄灯闪烁5次共10秒钟后,转为东西方向的红灯和南北方向的绿灯同时点亮30秒钟; 430秒钟后,转为南北方向的黄灯闪烁5秒钟,此时东西方向仍维持红灯点亮。 5南北方向的黄灯闪烁5次,共10秒钟后,东西方向的绿灯和南北方向的红灯同时点亮30S钟。如此循环重复。 6. 数码管显示倒计时300。 六、结束语本次课程设计的总结与体会: 微机原理与接口技术是一门很有趣的课程,任何一个计算机系统都是一个复杂的整体,学习计算机原理是要涉及到整体的每一部分。讨论某一部分原理时又要涉及到其它部分的工作原理。这样一来,不仅不能在短时间内较深入理解计算机的工作原理,而且也很难孤立地理解某一部分的工作原理。所以,在循序渐进的课堂教学过程中,我总是处于“学会了一些新知识,弄清了一些原来保留的问题,又出现了一些新问题”的循环中,直到课程结束时,才把保留的问题基本搞清楚。 学习该门课程知识时,其思维方法也和其它课程不同,该课程偏重于工程思维,具体地说,在了解了微处理器各种芯片的功能和外部特性以后,剩下额是如何将它们用于实际系统中,其创造性劳动在于如何用计算机的有关技术和厂家提供的各种芯片,设计实用的电路和系统,再配上相应的应用程序,完成各种实际应用项目。这次实验并不是很难,主要的困难来自对程序的理解。功夫不负有心人,经过多个人的合作和努力,我们最后对实验的原理有了清晰的认识。虽然很多模块单元没有用到,但是就系统功能来说,我觉得我们做的还是不错的。这次课设却让我们对实验芯片有了足够的了解,让我们知道了实验芯片的用法;而且它还让我们对自己动手写程序来控制芯片的运作有了一定的基础。虽然只是一个小型的课程设计,但是通过学习和操作,我们对有关接口的知识将会有一个更广泛的认识,而且它对我们以后的学习也会有帮助的。实验中个人的力量是不及群体的力量的,我们几个人分工合作,做事的效率高了很多。虽然有时候会为了一些细节争论不休,但最后得出的总是最好的结论。而且实验也教会我们在团队中要善于与人相处,与人共事,不要一个人解决所有问题。总之,这次课程设计对于我们有很大的帮助,通过课程设计,我更加深入地理解了,微机原理课程上讲到的各种芯片的功能,以及引脚的作用,同时加深了对于主要芯片的应用的认识,同时在试验室的环境里熟悉了汇编程序的编写过程和运行过程,最后还提高了自己的动手能力。感谢老师的悉心指导。这个设计过程中,我遇到过许多次失败的考验,就比如,自己对实际生活中的交通秩序的不了解给整个设计带来的困扰,真想要就此罢休,然而,就在想要放弃的那一刻,我明白了,原来结果并不那么重要,我们更应该注重的是这一整个过程。于是,我坚持了下来。当然最终,这个设计很成功,主要体现在,这一整个系统,几乎没有参考任何书,程序由自己独立完成,与用8255来制作的交通灯控制系统相比,程序简单易读,结构清楚,最重要的是成本低。在设计一个系统,除了达到所要求的性能指标以外,成本也是很重要的一个指标。成本的高低也决定了产品的适用性。 七、参考文献 1.微机原理与接口技术(第四版),钱晓捷 机械工业出版社20082微机原理与接口技术,洪永强,北京:科学出版社,20043微机原理与接口技术,雷丽文、朱晓华、蔡征宇、缪均达,北京:电子工业出版社1997;4微型计算机系统原理及应用,周明德,北京:清华大学出版社,1998;5微机原理与接口技术(第二版),倪继烈,刘新民主编,电子科技大学出版社,2004;17