交通灯设计.docx
《交通灯设计.docx》由会员分享,可在线阅读,更多相关《交通灯设计.docx(32页珍藏版)》请在冰豆网上搜索。
交通灯设计
硬件课程设计实践报告
题目:
交通信号灯设计
班级:
计算机09-1班
学号:
0809333908093342
姓名:
王玉祥姚伟
指导教师:
王凯
中国矿业大学计算机学院
2011年10月
目录
1.开发背景……………………………………………………02
2.小组成员分工协作情况…………………………………….02
3.电路设计及主要功能………………………………………03
3.1功能简介………………………………………………………03
3.2原理简介………………………………………………………04
3.2.1.8253原理及接线图……………………………………………04
3.2.2.8255原理及接线图……………………………………………05
3.2.3.8279原理及接线图……………………………………………07
3.3电路原理图与说明……………………………………………09
3.4硬件接线图……………………………………………………10
3.5系统运行过程的详细分析………………………………………10
3.5.1说明………………………………………………………………11
4.系统软件实现…………………………………………13
4.1交通灯流程图…………………………………………………13
4.2各模块流程图………………………………………………13
4.2.18255初始化…………………………………………………13
4.2.28253初始化…………………………………………………14
4.2.38279初始化…………………………………………………14
4.2.4关键流程图…………………………………………………15
4.2.4紧急键处理…………………………………………………16
4.调试结果图…………………………………………16
5.参考文献…………………………………………16
6.总结及收获…………………………………………17
7.附录…………………………………………18
7.1个人报告(两份)……………………………………………18
7.2实验程序……………………………………………19
开发背景
随着社会经济的发展,城市交通问题越来越引起人们的关注。
人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。
城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控系统中最重要的组成部分。
如何采用合适的控制方法,最大限度利用好耗费巨资修建的城市道路,缓解城市道路压力,越来越成为交通运输管理和城市规划部门亟待解决的主要问题。
交通量的持续增长是造成这种状况的最根本原因,而传统的解决途径主要有两个:
一是加大交通基础设施建设的投入,但资金、土地等稀缺资源的有限性又是不可回避的问题,道路基础设施是不可能无限扩展的;另一个就是限制交通流量,主要是通过法律和行政的手段实现。
这又分两个方面:
一是控制车辆出行,如按车牌单、双号分别行驶,或是鼓励和发展公共交通,减少私家车的使用,美国等西方国家早在很多年前已在一些交通繁忙路段实施鼓励两人以上的车辆优先行驶的规定;再就是控制汽车保有量,以高额的税、费甚至控制上牌等来限制汽车数量的发展。
这些方法短期可以奏效,但有失公平、合理。
如何更有效地使用现有交通运输网络就是人们试图寻找更好地解决上述问题的重要途径之一。
人们希望通过增加技术含量的方法提高现有道路的利用率,提高道路交通的安全程度和道路使用的舒适性,所以对智能交通灯的设计和采纳做了相当多的研究与建模。
交通灯在安全行车过程中起着十分重要的作用,现在交通灯一般设在十字路口,在醒目位置用红、绿、黄三种颜色的指示灯,上一个倒计时的显示计时器来控制行车,对于一般情况下的安全行车、车辆分流发挥着作用,根据行车过程中出现的实际情况,如何全面有效地利用交通灯指示交通情况,我们尝试用8253、8255来控制交通灯,在软、硬件方面采取一些改进措施,交通灯在控制中灵活而有效。
小组成员分工协作情况
流项
程目
任务
分工
王玉祥
姚伟
第一阶段
开发背景
到交通路口实地观察
上网查阅相关资料
第二阶段
电路设计
根据设计目标绘制总体电路图
查阅相关书籍了解实验中用到的各个芯片的功能
第三阶段
概要设计
总体流程的编制
各个芯片流程图的编制
第四阶段
程序设计
主程序的设计
8253,8255,8279的初始化。
第五阶段
系统软件实现
程序的调试
电路连接
电路设计及主要功能
一、功能简介
下面是一个典型的十字路口,交通灯一共分四种状态如图:
我们把交通灯工作过程分为状态0、状态1、状态2以及状态3,外加一个特殊功能,以方便发生特殊情况时,让所有路口的车辆让道。
初始态:
1,为东西路口的红灯亮,南北路口的绿灯亮。
延时10S
2,10S后,东西路口的依旧红灯亮,南北路口的黄灯亮。
延时3S
3,3S后,东西路口的绿灯亮,南北路口的红灯亮。
延时10S
4,10S后,东西路口的黄灯亮,南北路口的依旧红灯亮。
延时3S之后,重复上述过程。
二、原理理介
在交通灯的硬件课程设计中我们主要使用了8253A、8255A、8279、74LS138等芯片。
这里我们主要介绍8253A、8255A和8279芯片的硬件结构。
1、8253A并行接口芯片:
(1)8253芯片的内部结构及引脚
8253是NMOS工艺制成的可编程计数器/定时器,有几种芯片型号,外形引脚及功能都是兼容的,只是工作的最高计数速率有所差异。
8253内部有三个计数器,分别成为计数器0、计数器1和计数器2,他们的机构完全相同。
每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。
每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。
每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。
8253中各通道可有6种可供选择的工作方式,以完成定时、计数或脉冲发生器等多种功能。
8253的各种工作方式如下:
1.方式0:
计数结束则中断
2.方式1:
单脉冲发生器
3.方式2:
速率波发生器
4.方式3:
方波发生器
5.方式4:
软件触发方式计数
6.方式5:
硬件触发方式计数
(2)8253内部框图
(3)8253的芯片图
各引脚功能如下:
D7~D0—与CPU侧连接的八条双向数据线;
WR(低电平有效)—写输入信号;
RD(低电平有效)—读输入信号;
CS(低电平有效)—片选输入信号;A0、A1片内寄存器选择输入信号;PA7~PA0—A口外设双向数据线;PB7~PB0—B口外设双向数据线;PC7~PC0—C口外设双向数据线;RESET——复位输入信号
D7~D0是数据线引脚,
RD和WD分别是读写控制引脚,
CS是片选信号,
A1,A0是片内地址选择引脚,
CLK0、CLK1、CLK2输入引脚
GATE0、GATE1、GATE2输入引脚,
OUT0、OUT1、OUT2输出引脚
(4)8253端口地址
端口
地址
控制口
203H
(5)8253控制字
2、8255A并行接口芯片
(1)8255片的内部结构及引脚
8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种工作方式下工作:
方式0—基本输入/输出方式
方式1—选通输入/输出方式
方式2—双向选通输入/输出方式
(2)8255内部框图
(3)8255的芯片图
各引脚功能如下:
D7~D0—与CPU侧连接的八条双向数据线;
WR(低电平有效)—写输入信号;
RD(低电平有效)—读输入信号;
CS(低电平有效)—片选输入信号;
A0、A1片内寄存器选择输入信号;
PA7~PA0—A口外设双向数据线;
PB7~PB0—B口外设双向数据线;
PC7~PC0—C口外设双向数据线;
RESET——复位输入信号
(4)8255端口地址
端口
地址
控制口
20BH
(5)8255控制字
3、8279芯片
(1)8279的介绍
8279采用单±5V电源供电,40脚封装。
DB0~DB7:
双向数据总线,用来传送8279与CPU之间的数据和命令。
CLK:
时钟输入线,用以产生内部定时的时钟脉冲。
RESET:
复位输入线,8279复位后被置为字符显示左端输入,二键闭锁的触点回弹型式,程序
时钟前置分频器被置为31,RESET信号为高电平有效。
CS:
片选输入线,低电平有效,单片机在CS端为低时可以对8279读/写操作。
A0:
缓冲器低位地址,当A0为高电平时,表示数据总线上为命令或状态,当为低电平时,
表示数据总线上为命令或状态,当为低电平时,表示数据总线上为数据。
RD:
读信号输入线,低电平有效,将缓冲器读出,数据送往外部总线。
WR:
写信号输入线,低电平有效,将缓立器读出,将数据从外部数据总线写入8279的缓冲器。
(2)8279的内部框图
(3)8279的芯片图
(4)显示部分
该部分可完成8个或16个(编程决定)八段LED显示器的扫描控制。
OUTA0~OUTA3以及OUTB0~OUTB3是8279的段码输出口(高电平有效),经驱动后接至八段LED显示器各段。
SL0~SL3经4-16译码器产生16个八段LED显示器的扫描控制信号,接16个LED的COM端。
OUTA0~OUTA3以及OUTB0~OUTB3输出的段码(存贮在16X8显示用RAM中,16个显示用RAM的地址编号为0000B~1111B)与8279的扫描输出SL0~SL3同步,即SL0一SL3为0000B时,输出0000B单元中存贮的段码,……,SL0~SL3为1111B时,输出1111B单元中存贮的段码。
三、电路原理图与说明
1、设计原理:
本系统设计的交通灯控制是以脉冲发生器产生1MHZ的脉冲,然后将产生的脉冲接到8253A的CLK0口,通过8253编译产生周期1秒的脉冲,将8253AOUT1连接到8255PC0,通过8255A来判断脉冲来控制交通灯亮灯的时间和颜色,将8255APB0、PB1、PB2、PB3连接四个LED双色灯用作人行道的显示,8279控制端连接74S138的编译地址来显示交通灯的亮灯时间。
设计原理如图所示:
2、系统设计电路:
四、硬件接线图
1M脉冲——8253clk0
5V电压——8253gate0、1两个
8253out0——clk1
8253out1——8255pc2
8253cs——地址208-20F
8255cs——地址200-207
8279cs——地址210-217
8255pb2、pb3、pb4、pb5、pb6、pb7——led双色灯
五、系统运行过程的详细分析
1.交通信号灯的控制:
(1)通过8255A并口来控制LED发光二极管的亮灭。
(2)B口控制两个方向的交通灯。
(3)输出为0则亮,输出为1则灭。
(4)用8253定时来控制变换时间。
要求:
设有一个十字路口,1、3为南,北方向,2、4为东西方向,初始态为4个路口的红灯全亮。
之后,1、3路口的绿灯亮,2、4路口的红灯亮,1、3路口方向通车。
延迟10秒后,1、3路口的绿灯熄灭,而1,3路口的黄灯开始闪烁(1HZ)。
闪烁3次后,1、3路口的红灯亮,同时2、4路口的绿灯亮,2、4路口方向开始通车。
延迟10秒时间后,2、4路口的绿灯熄灭,而黄灯开始闪烁。
闪烁3次后,再切换到1、3路口方向。
之后,重复上述过程。
2.说明:
A、用8255的B端口的高六位控制6个LED发光二极管的,发光二极管输入为“0”时,点亮;为“1”时熄灭。
8255A的B口应工作于模式0。
输出状态。
B、用8253计时,因实验中的加到CLK0上的脉冲为1MHZ(周期为1us),则OUT0的输出脉冲周期最大只有1us*65536=65.536ms,达不到10s和3s的要求,为此,需要几个通道级联的方案解决这个问题。
于是我将OUT0的输入信号接到CLK1,作为它的输入脉冲。
这样就可以达到预期的要求。
C、倒计时和紧急键由8279控制显示和生成。
D、地址分配:
8255A:
200-207H
8253:
208-20FH
8279:
210-217H
3、交通灯的控制图表:
路口说明
东西路口
南北路口
延时
交通灯颜色
红
黄
绿
红
黄
绿
对应8255A管脚
B7
B6
B5
B4
B3
B2
对应LED管脚
L7
L6
L5
L4
L3
L2
常规交通灯控制
1
0
0
0
0
1
10S
1
0
0
0
1
0
3S
0
0
1
1
0
0
10S
0
1
0
1
0
0
3S
手动控制分为三种
在小键盘上选择按键1
1
0
0
0
0
1
手动设置时间
在小键盘上选择按键2
0
0
1
1
0
0
手动设置时间
在小键盘上选择按键3
1
0
0
1
0
0
手动恢复
注释:
A、“1”代表灯亮;“0”代表灯不亮
如“100001”->东西红灯,南北绿灯,南北可行,东西不可行
“100010”->东西红灯,南北黄灯,南北路口已过线的可行,其余均不可行
“001100”->东西绿灯,南北红灯,东西可行,南北不可行
“010100”->东西黄灯,南北红灯,东西路口已过线的可行,其余均不可行
B、手动设置交通灯
1)设置一条路为绿灯,另一条为红灯
需要设置小键盘三次
A、先按B暂停
B、再按1或2选择道路(1-东西路2-南北路)
C、再按0
D、接着按自己想设置的时间(只可以设置0-99s之间)
倒计时完自己已设置的时间,会自动返回源程序循环
2)设置全红
当出现交通事故等,需让所有的车辆停,即两路口全为红灯
A、先按B暂停
B、再按3则全红
按6返回正常循环
系统软件实现
1、交通灯流程图
2、各模块流程图:
A、8255初始化:
B、8253初始化:
C、8279初始化;
D、关键流程
E、紧急键处理:
调试结果图
参考文献
[1]微型计算机原理与接口技术(第四版)周荷琴吴秀清编著
[2]计算机硬件课程设计指导书
[3]网络资料:
8279功能及用法
总结及收获
我们用8279完成数码管对交通灯倒计时计时时,由于对8279不太熟悉,在网上找了许多相关资料进行了简单学习,最终初步掌握了8279初始化及一些应用的技巧。
在整个硬件课程设计的过程中,我们学到了很多很多东西,刚开始很迷茫,根本不知道该如何着手,但在老师的指点下,我们有很大的进展。
例如掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程、构造工具及其相关的技术,对课本上的知识有了更深的理解,课本上的知识是机械的,表面的。
通过把该算法的内容,算法的执行顺序在计算机上实现,把原来以为很深奥的书本知识变的更为简单,对实验原理有更深的理解。
这个课程中,不但要求我们对整个实验进行整体设计,还要我们掌握一些芯片的使用以及比较强的汇编能力。
虽然整个过程中遇到了许多困难,有时候也想放弃,但是还是坚持了下来,通过自己的努力以及老师的指点,我们顺利得完成了实验,心情还是比较激动的。
附录
一.个人报告
个人报告(王玉祥)
1.子程序……………………………………………………………
2.分析与测试…………………………………………………………
3.结论与体会
参考文献………………………………………………………………………
个人报告(姚伟)
1.子程序……………………………………………………………
2.分析与测试…………………………………………………………
3.结论与体会
参考文献………………………………………………………………………
注:
以上两份报告内容另外提交)
二.实验程序
子程序
PORT_A8255EQU200H;8255A端口地址
PORT_B8255EQU201H;8255B端口地址
PORT_C8255EQU202H;8255C端口地址
PORT_CS8255EQU203H;8255控制端口地址
ControlMode8255EQU10001001b;A口方式0,输出,B口方式0,输出,C口低4位输入,高4位输入
PORT_A8253EQU208H;8253计时器0端口地址
PORT_B8253EQU209H;8253计时器1端口地址
PORT_C8253EQU20AH;8253计时器2端口地址
PORT_CS8253EQU20BH;8253计时器控制端口地址
Clock0ModeEQU00110100b;计时器0的工作模式,0通道,先读写低字节后读写高字节,方式2,2进制计数
Clock0CountEQU62500;计时器0的计数值
Clock1ModeEQU01110000b;计时器1的工作模式,1通道,先读写低字节后读写高字节,方式0,2进制计数
Clock1CountEQU16;计时器1的计数值
Data_KEQU10;10进制
Z8279equ212h;8279命令字地址
D8279equ210h;8279数据端口地址
LEDMODequ00h;左边输入,8位显示,外部译码8位
LEDFEQequ38h;扫描频率
Clock1Endequ04h;截获8255C口第三位输入信息用于检测CLOCK1是否计时完毕
codesegment
;主函数
mainprocfar
assumecs:
codeds:
code
start:
pushcs
popds
callInit8255;初始化8255
movcx,0
MainLoop:
pushcx
leabx,Light
addbx,cx
moval,[bx]
movah,00h
movdx,PORT_B8255
outdx,al
LittleLoop:
callInitClock0;初始化计时器0
callInitClock1;初始化计时器1
callCheckClock0Over;检测定时器1是否定时1秒结束
leabx,Time;
popcx
cmpcx,00h
jeinc0
cmpcx,01h
jeInc1
cmpcx,02h
jeinc0
cmpcx,03h
jeInc1
jmpMainDeal
inc0:
jmpMainDeal
Inc1:
addbx,1
MainDeal:
pushcx
moval,[bx]
movah,00h
pushbx
pushax
callDisplay
popax
decax
popbx
mov[bx],al
cmpax,00h
jlResetData
jmpLittleLoop
ResetData:
popcx
inccx
cmpcx,00h
jeResetData2
cmpcx,01h
jeResetData1
cmpcx,02h
jeResetData2
cmpcx,03h
jeResetData1
jmpResetData2
ResetData1:
movax,3
leabx,Time
addbx,1
jmpResetData3
ResetData2:
cmpcx,3
jaOtherDeal
movax,10
leabx,Time
ResetData3:
pushcx
mov[bx],al
popcx
jmpMainLoop
OtherDeal:
movcx,00h
leabx,Time
movax,10
mov[bx],al
addbx,1
movax,3
mov[bx],al
jmpMainLoop
mainendp
;检测定时器1是否定时1秒结束
CheckClock0Overprocnear
Compare:
callCheckKeyDown
movdx,PORT_C8255;8255C口地址
inal,dx
andal,Clock1End;检测计数器1是否工作结束(通过与运算截获第三位)
cmpal,00h;比较该位是否为低电平
jeCompare
ret
CheckClock0Overendp
CheckKeyDownprocnear
movcx,00h
WAIIT:
MOVDX,Z8279
INAL,DX
MOVBL,AL
ANDAL,80H
CMPAL,80H
JEWAIIT;FIFO正在清除期间则跳转等待
MOVAL,BL
ANDAL,0FH
CMPAL,00H
JEEndCheckKeyDown;无键按下则退出
MOVAL,40H;写读FIFORAM命令字
OUTDX,AL
MOVDX,D8279;读入FIFORAM内容
inal,dx
cmpal,29h
jeLoopWrite
MOVDX,Z8279
MOVAL,0C2H
OUTDX,AL;置空FIFO寄存器
jmpEndCheckKeyDown
LoopWrite:
MOVDX,Z8279
MOVAL,0C2H
OUTDX,AL;置空FIFO寄存器
WAIIT1:
INAL,DX
MOVBL,AL
ANDAL,80H
CMPAL,80H
JEWAIIT1;FIFO正在清除期间则跳转等待
MOVAL,BL
ANDAL,0FH
CMPAL,00H
JEWAIIT1;无键按下则等待
MOVAL,40H;写读FIFORAM命令字
OUTDX,AL
MOVDX,D8279;读入FIFORAM内容
INAL,DX
movah,00h
leabx,KEY
addbx,al
moval,[bx]
leabx,KeyDown
addbx,cx
inccx
mov[bx],al
cmpcx,4
jeTr