交通灯指挥系统的总体设计报告

更新时间:2023-05-29 08:53:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

硬件课程设计报告

姓 名: 马新军 学 号: 08093678 刘 琪 学 号: 08093677 专 业: 网络工程 班 级: 09-2班 设计题目: 交通灯模拟系统 指导教师: 周世斌

2011年 10 月

目 录

1. 设计任务与要求 ........................................................................... 错误!未定义书签。 1.2课程设计方案 .............................................................................. 错误!未定义书签。 1.2.1设计任务与要求 ....................................................................... 错误!未定义书签。 2. 总体方案与说明 ......................................................................................................... 1 2.1设计模块 ........................................................................................................................ 1 2.2 设计思路 ........................................................................................................................ 1 3. 硬件设计 ..................................................................................................................... 2 3.1 8253芯片介绍 ................................................................................................................ 2 3.1.1 8253芯片引脚 ........................................................................................................ 2 3.1.2 8253的工作方式选择 ............................................................................................ 3 3.1.3 8253的级联和地址分配 ........................................................................................ 3 3.2 8255芯片介绍 ................................................................................................................ 3 3.2.1 8255的内部结构 .................................................................................................... 4 3.2.2 8255的引脚功能 .................................................................................................... 4 3.2.3 8255的读写控制 .................................................................................................... 5 3.3 8279芯片介绍 ................................................................................................................ 5 3.3.1 8279的引脚说明 .................................................................................................... 5 3.3.2 8279的工作方式 .................................................................................................... 6 3.4数码显示 ......................................................................................................................... 7 4. 电路原理与说明 .......................................................................................................... 7 4.1电路设计图 .................................................................................................................... 8 4.2实物连接图 .................................................................................................................... 9 5. 软件主要模块流程图 ................................................................................................. 10 5.1主程序流程图 .............................................................................................................. 10 5.2 倒计时子程序流程图 .................................................................................................. 11 6. 程序设计 ............................................................................................................................. 11 7.问题分析于解决方案 ........................................................................................................... 18 8.结论与体会 ........................................................................................................................... 19 9.参考资料 ............................................................................................................................... 21

1. 设计任务与要求

利用16/32位微机接口技术实验系统设计制作一个交通灯指挥系统。由于硬件条件有限,所以只能实现南北方向和东西方向的交通灯指挥。要求是能够利用实验箱中的数码管显示倒计时,用二极管LED灯来显示交通状况。实现的功能与流程如下:

(1) 南北绿灯,东西红灯同时亮50秒,且数码管60秒倒计时显示。

(2) 当倒计时进行到最后10秒时,南北黄灯亮,持续10秒,同时东西路红灯继

续亮。

(3) 当倒计时结束后,南北路红灯,东西路绿灯同时亮,持续50秒,且数码管

60秒倒计时显示。

(4) 当倒计时进行到最后10秒时,南北路红灯继续亮,同时东西路黄灯亮,持

续10秒。

(5) 停止计时,数码管上的数字停在0秒。

2. 总体方案与说明

2.1设计模块

按照系统设计的功能要求,初步确定该交通指挥系统主要有三个模块组成,一是数码显示倒计时模块,主要用到8279芯片;二是计时模块,主要用到8253芯片和8255芯片;三是灯显示模块,主要用到8255芯片。

2.2设计思路

十字道口的红绿灯是交通法规的无声命令,是司机和行人的行为准则。十字道口的交通红绿灯控制是保证交通安全和道路畅通的关键。本课程设计的背景是实际中的交通灯控制,实际的交通灯布置情况如图1所示。

但由于硬件条件有限,所以我们只能实现南北方向和东西方向,用到了两组红绿黄灯。具体的设计思想是:

开始时,由8253来控制倒计时,8253的OUT1输出周期为2s的方波,然后把该方波输送给8255的PB0端口,初始化8255芯片,判断PB0端口的值,

看是否经过了1s。此时数码管也开始显示倒计时,用到了8279芯片。与此同时,把8255的A口作为输出,控制交通灯的亮灭。8253每输出一个脉冲,8255的PB0端口就收到一个脉冲,表明已经经过了1s,然后倒计时减1,在数码管上显示出来。当倒计时计时到10s时,再赋值给8255的A口,使黄灯亮起来。倒计时结束后,方向变一下,再进行一次循环,最后倒计时停留在0s。

3. 硬件框图与说明

系统所需硬件

设计所需芯片:8255A、8279、8253

所需设备:6个LED灯(两组红黄绿灯)、八位数码管显示器

将8255A的A口与LED灯相连,对8255A进行初始化编程,控制LED灯的亮灭。

对8279编程,显示60秒倒计时。

用8253对交通灯进行计时,南北方向50s,黄灯10s,东西方向50s,黄灯10s,这样循环两次。

3.1 8253芯片原理简介

8253的引脚图如下所示:

8253在本实验中工作于方式2和方式3。 方式2——比率发生器

对某一计数通道写入控制字,选定工作方式2时,OUT端输出高电平。如果GATE为高电平,则在写入计数值后的下一个时钟脉冲时,将计数值装入执行部件。此后。计数器随着时钟脉冲的输入而递减计数。当计数值减为1时,OUT端由高电平变为低电平,待计数器的值减为0时,OUT端引脚又回到高电平,与此同时,还将计数初值重新装入计数器,开始一个新的计数过程,并由些周而

复始地计数。如果装入计数器的初值为n,那么在OUT引脚上,每隔n个周期就产生一个负脉冲,其宽度与时钟脉冲的周期相同,频率为输入时钟脉冲频率的n分之一。所以,这实际上是一种分频工作方式。

在操作过程中,任何时候都可由CPU重新写入新的计数值,它不会影响当前计数过程的进行。比如说,原来的计数值N=4,在计数过程中计数值回零前,又写入新的计数值N=3,8253仍按N=4进行计数。当计数值减为0时,一个计数周期结束,8253将按新写入的计数值N=3进行计数。

当需要产生连续的负脉冲序列信号时,可使8253工作于方式2。在本实验当中,就是让0通道工作在方式2下。

方式3——方波发生器

对于方式3来说,它的工作方式与方式2有着很多相似的地方,然而,又不能等同。因为它们各自有着不同的特点。使用的时候就要加以区别。

我们可以从输出的波形上看出它们的一些不同之处。因为方式3输出的不是序列负脉冲,而是对称的方波或基本对称的矩形波。当然,无论是方式2,还是方式3,都要将GATE端置为高电平才可实现它的功能。

8253有一些它的特点。如果写入计数器的初值为偶数,则当8253进行计数时,每输入一个时钟脉冲,均使计数值减2。计数值减为0时,OUT输出引脚由高电平变成低电平,同时自动重新装入计数初值,继续进行计数。当计数值减为0时,OUT引脚又回到高电平,同时再一次将计数初值装入计数器,开始下一轮循环计数;如果写入的计数初值为奇数,则当输出端OUT为高电平时,第一个时钟脉冲使计数器减1,以后每来一个时钟脉冲,都使计数器减2,当计数值减为0时,输出端OUT由高电平变成低电平,同时重新装入计数初值,继续进行计数。这时第一个时钟脉冲使计数器减3,以后每个时钟脉冲都使计数器减2,计数值减为0时,OUT引脚又回到高电平,并重新装入计数初值后,开始下一轮循环计数。这两种情况下,从OUT端输出的方波频率都等于时钟脉冲的频率除以计数初值。但要注意,当写入的计数初值为偶数时,输出完全对称的方波,写入计数初值为奇数时,其输出波形的高电平宽度比低电平多一个时钟周期。

如果希望改变输出方波的速率,CPU可在任何时候重新装入新的计数初值,在下一个计数周期就可按新的计数初值计数,从而改变方波的速率。

8253的级联和地址分配

8353采用级联方式。此实验中使用8253的0通道和1通道以实现级联。 通道0的工作在实验中起到的作用是在OUT0端输出一个比较合适的时钟频率,然后用通道1进行时间的控制。通道1在控制灯闪烁的时候采用的工作方式是方式3,这样可以让8255的A端口检测到输出端的方波信号。

8253的地址是如何安排的呢?它的三个通道是怎样分配地址的端口的呢?我们在这个实验当中采用的端口的起始的地址是208H,所以就有这样的分配:通道0的地址端口为208H,通道1的地址端口为209H,通道2的地址端口为20AH,8253的控制端口的地址为20BH。这就是它们的地址端口的分配。

3.2 8255芯片原理简介

8255的内部结构

8255 是Intel公司生产的可编程输入输出接口芯片,它是具有3个8位的并行

I/O端口,具有三种工作方式,被广泛地使用于单片机的并行I/O端口。 ● 工作方式0:基本输入输出方式 ● 工作方式1:选通输入输出方式 ● 工作方式2:双向传送方式

8255引脚功能说明:

RESET:复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。

PA0~PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入锁存器。

PB0~PB7:端口B输入输出线,一个8位的I/O锁存器, 一个8位的输入输出缓冲器。

PC0~PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。

CS:片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。

RD:读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。 WR:写入信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写8255。 D0~D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据

总线传送。

8255的读写控制:

8255的读/写控制逻辑电路接受CPU 发来的控制口号RD、WR、RESET和地址信号A1~A0。然后根据命令端口,控制信号的要求,将端口的数据读出选信CPU或者将CPU 送来的数据写入端口,各端口的工作状态。如表所示。 通过用输出指令对8255A的控制字寄存器编程,写入设定工作方式的控制字,可以让3个数据口以不同的方式工作,端口A可工作于3种方式的任一种,端口B只能工作于方式0和方式1,端口C除了用于输入输出端口外,还能配合A口和B口工作,为这两个端口的输入输出操作提供联系信号。

在本次设计中,8255的B 口用于输入,A口用于输出,地址线接200H-203H。

3.3 8279芯片原理简介

8279 是可编程的键盘、显示接口芯片。它既具有按键处理功能,又具有自动显示功能,在单片机系统中应用很广泛。8279内部有键盘 FIFO (先进先出堆栈) /传感器, 双重功能的 8*8=64B RAM,键盘控制部分可控制 8*8=64 个按键或 8*8 阵列方式的传感器。该芯片能自动消抖并具有双键锁定保护功能。显示 RAM容量为 16*8,即显示器最大配置可达 16 位 LED数码显示。 其引脚图如下所示:

8279引脚说明: (1) 数据线

DB0→DB7 是双向三态数据总线,在接口电路中与系统数据

总线相连,用以传送 CPU 和8279 之间的数据和命令。

(2)地址线

CS=0 选中8279,当 A0=1 时,为命令字及状态字地址;当 A0=0 时,为片内数据地址,故 8279芯片占用 2个端口地址。

(3)控制线

CLK:8279 的时钟输入线。

IRQ:中断请求输出线,高电平有效。 /RD、/WR:读、写输入控制线。

SL0---SL3:扫描输出线,用来作为扫描键盘和显示的代码输出或直接输出线。

RL0---RL7:回复输入线,它们是键盘或传感器矩阵的信号输入线。 SHIFT:来自外部键盘或传感器矩阵的输入信号,它是 8279 键盘数据的次高位即 D6 位的状态,该位状态控制键盘上/下档功能。在传感器方式和选通方式中,该引脚无用。

CNTL/S:控制/选通输入线,高电平有效。键盘方式时,键盘数据最高位(D7)的信号输入到该引脚,以扩充键功能;选通方式时,当该引脚信号上升沿到时,把 RL0---RL7 的数据存入 FIFO RAM 中。

OUTA0---OUTA3:通常作为显示信号的高 4 位输出线。 OUTB0---OUTB3:通常作为显示信号的低 4 位输出线。

/BD:显示熄灭输出线,低电平有效。当/BD=0 时将显示全熄灭。

8279的工作方式 :

8279 有三种工作方式:键盘方式、显示方式和传感器方式。 (1)键盘工作方式

8279 在键盘工作方式时,可设置为双键互锁方式和 N 键循回方式。 双键互锁方式:若有两个或多个键同时按下时,不管按键先后顺序如何,只能识别最后一个被释放的键,并把该键值送入 FIFO RAM中。

N 键循回方式: 一次按下任意个键均可被识别, 按键值按扫描次序被送入 FIFO RAM 中。

(2)显示方式

8279 的显示方式又可分为左端入口和右端入口方式。 显示数据只要写入显示 RAM,则可由显示器显示出来,因此显示数据写入显示 RAM的顺序,决定了显示的次序。

左端入口方式即显示位置从显示器最左端 1 位(最高位)开始,以后显示的字符逐个向右顺序排列;右端入口方式即显示位置从显示器最右端 1 位(最低位)开始,已显示的字符逐个向左移位。但无论左右入口,后输入的总是显示在最右边。

(3)传感器方式

传感器方式是把传感器的开关状态送入传感器 RAM 中。当 CPU 对传感器阵列扫描时, 一旦发现传感器状态发生变化就发出中断请求 (IRQ 置1) , 中断响应后转入中断处理程序。

本实验中8279的工作方式采用显示方式。8279的数据端口是210H,控制线连接212H.

3.4 数码管显示电路

在本实验中,采用两位数码管对倒计时结果显示。显示完一个数字后,需要对8279编程,清除FIFO缓存,并清屏,这样就可以在视觉上感觉只有“两个数码管在亮”。

在数码管中当对应的值为1是数码管亮,从0到9的十六进制表示为 数字 :0 1 2 3 4 5 6 7 8 9

对应:3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH

4 电路原理图与说明

8279地址接210H~212H,8253地址接208H~20BH,8255地址接200H~203H。 8253采用级联的方式,用到通道0和通道1;CLK0接1M脉冲,GATE1,GATE2接+5V,OUT0接CLK1,OUT1接8255的PB0端口。

8255是用作选择输出,显示红绿黄灯的,PA0,PA1接两个红灯,PA2,PA3接两个绿灯,PA4,PA5接两个黄灯。

4.1 硬件电路设计图如下:

8 / 23

4.2 实物连接图

5 软件主要模块流程图

5.1主程序流程图

5.1倒计时显示子程序流程图

6 源程序清单与注释

Z8279 EQU 212H D8279 EQU 210H

Z8253 EQU 20BH ;8253端口地址 COUNT0 EQU 208H

COUNT1 EQU 209H COUNT2 EQU 20AH Z8255 EQU 203H D8255A EQU 200H D8255B EQU 201H D8255C EQU 202H DATA SEGMENT SEC DB 1 DUP(?) SIGN1 DB 1 DUP(?) DATA ENDS

CODE SEGMENT ASSUME CS:CODE START:

;8255初始化

MOV DX,Z8255 ;控制端口8255 MOV AL,10000010B ;B口输入,A口输出 OUT DX,AL

MOV DX,D8255A

MOV AL,0FFH ;清零 OUT DX,AL ;8253初始化

MOV AL, 00110101B ; 计数器0,先读/写低字节,后高字节,方式2,BCD

MOV DX, Z8253 OUT DX, AL

MOV Al, 00H MOV DX, COUNT0

OUT DX, AL ; 计数器低字节 MOV AL, 50H

OUT DX, AL ; 计数器高字节

MOV AL, 01110111B ; 计数器1,先读/写低字节,后高字节,方式3,BCD

MOV DX, Z8253 OUT DX, AL MOV AL, 00H

MOV DX, COUNT1

OUT DX, AL ; 计数器低字节 MOV AL, 04H OUT DX, AL MOV DX,Z8279

MOV AL,00H ;设置8279的工作方式,8个字符显示,右入口 OUT DX,AL

MOV AL,38H ;写显示命令 OUT DX,AL

CALL CLEAR_LED ;清除显示RAM,数码管熄灭

WORK:

CALL WORK1 JMP WORK

WORK1 PROC NEAR SHOW1:

MOV AL,11111001B ;1绿2红 MOV DX,D8255A OUT DX,AL

CALL WORK2 ;倒数50秒,并显示60~10

MOV DX,D8255A

MOV AL,11111101B ;1绿灭 OUT DX,AL

YELLOW1: MOV DX,D8255A

MOV AL,11101101B ;1黄2红 OUT DX,AL CALL WORK3

MOV DX,D8255A

MOV AL,11111101B ;1号黄灯灭 OUT DX,AL

;2号线(东西)通车

MOV AL,11110110B ;2绿1红 MOV DX,D8255A OUT DX,AL

CALL WORK2

MOV DX,D8255A

MOV AL,11111110B ;2绿灭 OUT DX,AL

YELLOW2: MOV DX,D8255A

MOV AL,11011110B ;2黄1红 OUT DX,AL CALL WORK3

MOV DX,D8255A

MOV AL,11111110B ;2号黄灯灭 OUT DX,AL

MOV AH,06H

MOV DL,0FFH ;判断是否有键按下,有则转ppp

JZ PPP

JMP SHOW1

PPP: MOV AX,4C00H INT 21H RET

WORK1 ENDP

WORK2 PROC NEAR MOV SEC,60 push cx mov cl,01 SHOW2:

CALL DELAY1

CALL CLEAR_LED ;清空RAM call show CMP SEC,10 JNZ CONTINUE MOV SEC,60 dec cl cmp cl,00 jE over

CONTINUE: DEC SEC JMP SHOW2

over:

pop cx

RET

WORK2 ENDP

WORK3 PROC NEAR MOV SEC,10 push cx mov cl,01 SHOW3:

CALL DELAY1

CALL CLEAR_LED ;清空RAM call show CMP SEC,00

JNZ CONTINUE3 MOV SEC,10 dec cl cmp cl,00 jE over

CONTINUE3: DEC SEC JMP SHOW3 over3: pop cx RET

WORK3 ENDP

show proc near mov al,sec mov ah,0 mov dl,10 div dl

mov bl,ah;将余数(即秒的个位)放在BL中 mov bh,al;将商(即秒的十位)放在BH中 call trans;调用8279显示秒的个位 NOP

mov bl,bh

call trans;调用8279显示秒的十位 NOP ret

show endp

TRANS PROC NEAR ;数码管显示程序

CASE0: cmp bl,0 jnz CASE1 mov al,3FH JMP SHW

CASE1: cmp bl,1 jnz CASE2 mov al,06H JMP SHW

CASE2: cmp bl,2 jnz CASE3 mov al,5BH JMP SHW

CASE3: cmp bl,3 jnz CASE4 mov al,4FH JMP SHW

CASE4: cmp bl,4 jnz CASE5 mov al,66H JMP SHW

CASE5: cmp bl,5 jnz CASE6 mov al,6DH JMP SHW

CASE6: cmp bl,6 jnz CASE7 mov al,7DH JMP SHW

CASE7:

cmp bl,7 jnz CASE8 mov al,07H JMP SHW

CASE8: cmp bl,8 jnz CASE9 mov al,7FH JMP SHW

CASE9: cmp bl,9 jnz SHW

MOV AL,6FH

SHW:

MOV DX,D8279 OUT DX,AL RET

TRANS ENDP

DELAY1 PROC NEAR PUSH DX PUSH Ax jshi:

MOV DX,D8255B IN AL,DX

AND AL,00000001B CMP AL,SIGN1 JZ jshi

MOV SIGN1,AL

POP Ax POP DX

RET

DELAY1 ENDP

DELAY10 PROC NEAR PUSH AX PUSH CX

检测PB0 时钟信号,是否到一秒了 ;

MOV CX,0025H UUU: CALL DELAY1 LOOP UUU POP CX POP AX RET DELAY10 ENDP

CLEAR_LED PROC NEAR ;清除RAM值,并清屏 PUSH AX PUSH DX

MOV DX,Z8279 MOV AL,0D2H OUT DX,AL

WAIT_CLEAR_LED: NOP

IN AL,DX AND AL,80H

JNZ WAIT_CLEAR_LED POP DX POP AX RET

CLEAR_LED ENDP RET

CODE ENDS END START

7 问题分析与解决方案

马新军

我们首先分析交通灯的几种状态应该怎样跳转和它们各需的时间。然后我们就是想延时问题,开始我们就是想用软件延时,因为我们认为只要我们准确的计算出延时函数的次数,软件延时也有较高的准确度。算好延时后我们就想着延时的实现,我们开始想利用宏定义,但是在应用中遇到了许多问题,之后我们有利用了程序调用,实现这一步后,我们的全自动就很快的实现了。

在这次设计中我负责的是8255控制LED灯亮,8253计时的编程和实现。我们最初的设想是用8253完成50s延时的同时,对8279进行编程显示倒计时,实现两个芯片的同步。但是这样做实现起来非常困难。后来经过老师的指点,我们用调用8279的方法实现50s延时,仅用8253做黄灯时的10s延时。这样实现起来容易多了。

刘琪

当时刚开始做这个实验时,我首先想的是用哪些芯片和元器件。根据交通灯的设计要求,必须要有红绿灯,我首先想到的是LED灯。要控制LED灯的亮灭,

这样就肯定要用到8255芯片。第二点就是,交通指挥系统肯定要计时,这样免不了要用8253芯片。最后一点就是倒计时的显示,老师要求用8279芯片,通过8279来控制数码管的显示。

初步确定方案之后,接下来就是具体的实现问题了。遇到的第一个问题就是:如何使8个数码管只显示其中的两个。从网上找到的资料,以及实验机上自带的程序,最后实现的效果都是从左往右依次显示8个数字,给人的感觉错位了,很不舒服。后来向其他同学请教,再上网查了很多关于8279芯片的资料,渐渐有了一点思路。8279芯片有一个控制字可以清除RAM值,并且能清屏。这样的话,每次显示完一个数字之后,重新清除8279里的RAM值,清除数码管上的显示。过了1s后重新从最左边开始显示下一个数字,这样从视觉感觉来看,就感觉“只有最左边两个数码管在显示了”。

第二个问题是:如何用8253来实现倒计时的功能?开始,我一直搞不懂,给8253连续的脉冲,如何使它只输出1s的脉冲?这个问题困扰了我很长时间。后来问其他同学和老师,才发觉我一开始的思路想法就是错误的。经过同学的提醒,我想到了把8253的输出连接到8255的PB0端口,然后判断PB0端口的值,如果等于1,则表明经过了1s,接着控制8279显示下一个数字。要求从输出周期为2s的方波,这样肯定要用到级联,所以要用到8253的两个通道。问题二也解决了。

第三个问题是:如何显示两位数?我一直在想,可以使两位数同时显示出来(就是个位和十位的显示没有时间差)。后来想想,这是不可能的,数码管的显示本来就是从左往右一个一个显示的。所以解决的方案是,每得到一个倒计时的数字,就把它除以10,商就是十位数,余数就是个位数。通过8279控制,使个位和十位依次显示,这样就可以显示两位数了。

8 结论与体会

马新军

结论:

我们的设计很好的完成了以下各种功能。 一般情况下的交通灯:

(1)南北绿灯,东西红灯同时亮50秒,且数码管50秒倒计时显示。

(2)南北黄灯闪烁10秒,同时东西路红灯继续亮,且数码管10秒倒计时显示。

(3)南北路红灯,东西路绿灯同时亮50秒,且数码管50秒倒计时显示。 (4)南北路红灯继续亮,同时东西路黄灯亮10秒。

体会:

在选定了“交通灯指挥系统”这个题目后,通过上网查找资料以及在图书馆借阅相关书籍和相关参考资料,我们对目前城市常见的交通等指挥系统的工作过程有了较清楚的了解。在此基础上,我们把这个大的设计课题分成一个具体的方案来实现:

方案:一般情况下正常的交通灯,东西、南北两方向各50秒,数码管显示倒计时,红绿灯转换的时候,原来绿灯的方向会出现10s的黄灯,另外一个方向

本文来源:https://www.bwwdw.com/article/9xp4.html

Top