当前位置:文档之家› 中南大学微机课程设计报告交通灯课案

中南大学微机课程设计报告交通灯课案

微机课程设计报告目录一、需求分析1、系统设计的意义 (3)2、设计内容 (3)3、设计目的 (3)4、设计要求 (3)5、系统功能 (4)二、总体设计1、交通灯工作过程 (4)三、设计仿真图、设计流程图1、系统仿真图 (5)2、流程图 (6)3、8253、8255A结构及功能 (8)四、系统程序分析 (10)五、总结与体会 (13)六、参考文献 (13)一、需求分析1系统设计的意义:随着社会经济的发展,城市问题越来越引起人们的关注。

人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。

城市交通控制系统是用于城市交通数据检测、交通信号灯控制与交通疏通的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。

随着城市机动车量的不断增加,组多大城市如北京、上海、南京等出现了交通超负荷运行的情况,因此,自80年代后期,这些城市纷纷修建城市高速通道,在高速道路建设完成的初期,它们也曾有效地改善了交通状况。

然而,随着交通量的快速增长和缺乏对高速道路的系统研究和控制,高速道路没有充分发挥出预期的作用。

而城市高速道路在构造上的特点,也决定了城市高速道路的交通状况必然受高速道路与普通道路耦合处交通状况的制约。

所以,如何采用合适的控制方法,最大限度利用好耗费巨资修建的城市高速通道,缓解主干道与匝道、城市同周边地区的交通拥堵状况,越来越成为交通运输管理和城市规划部门亟待解决的主要问题。

十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。

那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。

交通灯的控制方式很多,本系统采用可编程并行I/O接口芯片8255A为中心器件来设计交通灯控制器,实现本系统的各种功能。

同时,本系统实用性强,操作简单。

2、设计内容采用8255A设计交通灯控制的接口方案,根据设计的方案搭建电路,画出程序流程图,并编写程序进行调试3、设计目的综合运用《微机原理与应用》课程知识,利用集成电路设计实现一些中小规模电子电路或者完成一定功能的程序,以复习巩固课堂所学的理论知识,提高程序设计能力及实现系统、绘制系统电路图的能力,为实际应用奠定一定的基础。

针对此次课程设计主要是运用本课程的理论知识进行交通灯控制分析及设计,掌握8255A方式0的使用与编程方法,通从而复习巩固了课堂所学的理论知识,提高了对所学知识的综合应用能力。

4、设计要求:(1)、分别用C语言和汇编语言编程完成硬件接口功能设计;(2)、硬件电路基于80x86微机接口;(3)、程序功能要求:小键盘给定、数码管(屏幕)显示;(4)、同时具备急救车应急响应功能和时间倒计时显示功能。

5、系统功能根据要求,我所设计的系统主要主要是基于普通的十字路口,交通灯的控制分为东西和南北两组,每组用红、黄、绿进行交通管理,除了基本的功能外,还添加了七段译码器时间显示模块和一种紧急情况处理模块,比方说急救车恰好遇到了红灯,可通过控制,让急救车所在的干道尽快变成绿灯而通车。

二、总体设计1、交通灯工作过程考虑普通十字路口,交通灯的控制可分东西向和南北向两组,每组可用红、黄、绿三个灯进行交通管理,所以本方案要点是对12个交通灯进行控制。

由于灯光控制只需要开、关两个状态,所以可以采用开关量实施控制。

开关量的输出可以采用8255A的端口,由于开关量有6位,所以采用8位端口,又因为灯光控制不需要联络信号,所以按照方式0输出即可。

时间显示模块采用七段数字显示器显示,运用共阴极接法,选用8255A的B口输出来控制七段数字显示器,其中低四位来控制个位的显示,高四位来控制十位的显示。

我们知道七段数字显示器的段选是七个信号,用B口的高、低四位分别来控制十位、个位显示器显然是不行的,为了解决这个问题,我设计的是让B口输出的是经DAS指令调整过的压缩的BCD数,让译码器的输出来控制十位、个位显示器,同样B口按照方式0输出即可。

延时模块采用8253来设计,让计数器0、1级联使用,让计数器0的输出OUT0作为计数器1的时钟输入(CLK1),让计数器1的输出信号接到8255A的C 口的0位,让处理器反复的读取PC0的值,当有脉冲进来的时候,也就是设计的时间结束时,才执行下一步,达到延时的目的。

为了满足设计,让8255A的C 口按照方式0输入即可,让计数器0工作在方式2,让计数器1工作在方式0。

当计数器0的CLK采用2Mhz,初值为2000,计数器1初值为500时,计数器1输出一个就是意味着延时0.5秒。

计数器的端口地址为40H~43H,8255A的端口地址为60H~64H。

三、设计仿真图、设计流程图1、系统仿真图2、流程图主函数流程图延时0.5秒子函数流程图 时间显示模块函数流程图 有让东西、南北干道均亮黄灯 DL 保存亮灯的状态AL 中设置延时时间5秒,调用时间显示模块AL 中设置延时时间5秒,调用时间显示模块让东西干道亮绿灯,南北干道亮红灯 DL 保存亮灯的状态AL 中设置延时时间30秒,调用时间显示模块 DL 保存亮灯的状态让东西、南北干道均亮黄灯 AL 中设置延时时间30秒,调用时间显示模块 DL 保存亮灯的状态 开始 初始化8255A ,A 、B 口为方式0输出,C 口输入开机测试,让时间显示器显示00,让两干道均依次亮红黄绿灯各0.5秒(调用延时函数) 让东西干道亮红灯,南北干道亮绿灯 有无关机信号结束是否开始 显示器显示当前剩余时间PUSH AXAX 入栈保存重新让灯灯亮灯熄灭0.5秒 AL>3?延时0.5秒 延时0.5秒是否有紧急信号POP AXAX减1,DAS调整AL>=0?POP AX结束是否是否检测计数器1的OUT 信号AX 入栈保存开始 给计数器0装入初值(2000)设定8253计数器0的工作方式2 给计数器1装入初值(500)设定8253计数器1的工作方式1 是否检测到信号结束POP AX3、8253、8255A结构及功能(1)8255具有两类控制字A、方式选择控制字B、 c口复位/置位控制寄存器(2)8253定时器/计数器的结构及功能A、 8253计数器的结构B、8253定时/计数器的功能可编程定时器芯片可以产生精确的时间间隔,形成各种脉冲序列,灵活性强。

依所需时间间隔,设置计数器的时间常数,在一外部脉冲驱动下进行减1计数,计数值为0时,产生输出信号,供系统使用。

8253的每个通道均可以通过编程选择6种工作方式之一,这6种工作方式是:方式0:计数到零产生中断请求;方式1:硬件可重复触发的单稳态触发器;方式2:分频器;方式3:方波发生器(用得最多的方式);方式4:软件触发选通;方式5:硬件触发选通;C、 8253定时/计数器的实现方法利用CPU执行某一指令需要一定机器周期的原理,在软件编程时循环执行一段指令,从而产生累积的定时。

四、系统程序分析.MODEL SMALL.8086.STACK.CODE.STARTUPSTART: MOV DX,0206HMOV AL,89HOUT DX,AL ;A、B口方式0输出,C口输入MOV DX,0202HMOV AL,88H ;让显示器显示00DASOUT DX,ALMOV DX,0200HMOV AL,11H ;让两干道均依次亮红黄绿灯0.5秒OUT DX,ALCALL DELAYCALL DELAYMOV DX,0200HMOV AL,22HOUT DX,ALCALL DELAYCALL DELAYMOV DX,0200HMOV AL,44HOUT DX,ALCALL DELAYCALL DELAYSTEP1: MOV DX,0200HMOV AL,41H ;设置亮灯情况(14H)MOV AH,AL ;保存亮灯状态OUT DX,AL ;东西干道亮红灯、南北干道亮绿灯MOV AL,30H ;设置亮灯时间为30秒CALL DISPLAY1 ;调用时间显示模块函数STEP2: MOV DX,0200HMOV AL,21H ;设置亮灯情况(22H)MOV AH,AL ;保存亮灯状态OUT DX,AL ;东西、南北干道均亮黄灯MOV AL,5H ;设置亮灯时间为5秒CALL DISPLAY1 ;调用时间显示模块函数STEP3: MOV DX,0200HMOV AL,14H ;设置亮灯情况(41H)MOV AH,AL ;保存亮灯状态OUT DX,AL ;东西干道亮绿灯、南北干道亮红灯MOV AL,30H ;设置亮灯时间为30秒CALL DISPLAY1 ;调用时间显示模块函数STEP4: MOV DX,0200HMOV AL,12H ;设置亮灯情况(22H)MOV AH,AL ;保存亮灯状态OUT DX,AL ;东西、南北干道均亮黄灯MOV AL,5H ;设置亮灯时间为5秒CALL DISPLAY1 ;调用时间显示模块函数JMP STEP1;延时0.5秒子函数DELAY PROCPUSH AX ;将当前AX入栈保存MOV DX,0406HMOV AL,34H ;设定8253计数器0的工作方式2OUT DX,ALMOV DX,0400HMOV AX,2000 ;给计数器0装入初值(2000)OUT DX,ALMOV AL,AHOUT DX,ALMOV DX,0406HMOV AL,70H ;设定8253计数器1的工作方式0OUT DX,ALMOV DX,0402HMOV AX,250 ;给计数器1装入初值(500)OUT DX,ALMOV AL,AHOUT DX,ALAGAIN1: MOV DX,0204HIN AL,DX ;检测计数器1的输出信号AND AL,1JZ AGAIN1 ;信号没来继续检测,否则结束POP AXRETDELAY ENDPDISPLAY1 PROCPUSH AX ;AX入栈保存AGAIN2: MOV DX,0202HOUT DX,AL ;显示器显示当前剩余时间PUSH AX ;AX入栈保存CMP AL,3 ;剩余时间是否多余3秒JG D1 ;高于3秒,跳转到D1;低于3秒,灯开始闪烁MOV DX,0200HMOV AL,0 ;低于三秒,灯熄0.5秒OUT DX,ALMOV DX,0204HIN AL,DX ;检测是否有紧急信号AND AL,2JNZ EXIT ;有紧急信号则跳出子函数CALL DELAY ;熄灯延时0.5秒MOV DX,0204HIN AL,DX ;检测是否有紧急信号AND AL,2JNZ EXIT ;有紧急信号则跳出子函数MOV AL,AH ;灯亮0.5秒MOV DX,0200HOUT DX,ALJMP D2D1: MOV DX,0204HIN AL,DX ;检测是否有紧急信号AND AL,2JNZ EXIT ;有紧急信号则跳出子函数CALL DELAY ;延时0.5秒MOV DX,0204HIN AL,DX ;检测是否有紧急信号AND AL,2JNZ EXIT ;有紧急信号则跳出子函数D2: CALL DELAY ;延时0.5秒MOV DX,0204HIN AL,DX ;检测是否有紧急信号AND AL,2JNZ EXIT ;有紧急信号则跳出子函数POP AX ;恢复AXDEC AL ;把剩余时间减1秒DAS ;调整ALCMP AL,0 ;剩余时间不小于0就继续显示JNL AGAIN2 ;否则就结束该子函数EXIT: POP AXD3: MOV DX,0200HMOV AL,11H ;让两干道均依次亮红黄绿灯0.5秒OUT DX,ALMOV DX,0202HMOV AL,0 ;让显示器显示00DASOUT DX,ALMOV DX,0204HIN AL,DX ;检测是否有紧急信号AND AL,2JNZ D3 ;有紧急信号则跳出子函数RETDISPLAY1 ENDPEND五、总结与体会这次课程设计的主要任务是根据课堂所学知识,运用8255A进行交通灯控制的设计。

相关主题