资源描述
资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。
《单片机原理与应用》
课程设计报告
题 目: 简单交通灯控制系统
专 业: 计算机科学与技术
班 级: 09计算机1班
学 号: 09070009
姓 名: 陈民厅
天津理工大学中环信息学院
计算机工程系
12月29 日
交通灯控制系统设计
摘 要
设计一个交通灯控制系统, 该控制系统工作后, 交通灯按照下列规律变化: 初始态东南西北均为红灯, 持续时间为2s; 然后转为状态1(10s), 为东西红、 南北绿; 状态2(3s)东西红灯不变、 南北绿灯灭、 黄灯闪烁三次; 状态3(15s), 为东西绿、 南北红; 状态4(3s), 为东西绿灯灭、 黄灯闪烁三次、 南北红灯不变; 最后回到状态1, 依此循环。如遇到特殊情况, 可拨动应急开关, 使各向均为红灯, 特殊车辆不受红灯限制, 待其顺利经过后拨动另一个开关, 系统返回继续运行。同时用LED用倒计时方式显示各路口亮灯时间。
关键词: 单片机, 交通灯, 应急开关, LED
1绪论
1.1设计背景
红绿交通灯自动控制系统在城市十字( 或丁字) 路口有着广泛的应用。随着社会的进步, 人们生活水平的提高, 私家车数量会不断增加, 对城市交通带来前所为有的压力。道路建设也将随之发展, 错综复杂的道路将不段增多。为维持稳定的交通秩序, 红绿灯自动控制系统将得到更为广泛的应用。现在实际应用的红绿灯系统中一般没有倒计时功能, 使司机和行人不知道指示灯还有多久将会改变现有状态。本设计应用基本数字电路知识, 采用LED灯作红、 绿、 黄三交通灯, 用七段数码管作同步倒计时显示。实现两方向通行时间不相等的控制并配有倒计时。
1.2设计目的
熟悉单片机控制系统, 并了解系统设计的一般规律。
掌握8255芯片的结构及编程方法。
熟悉模拟交通灯控制的实现方法。
1.3设计任务及要求
设计一个交通灯控制系统, 该控制系统工作后, 交通灯按照下列规律变化: 初始态东南西北均为红灯, 持续时间为2s; 然后转为状态1(10s), 为东西红、 南北绿; 状态2(3s)东西红灯不变、 南北绿灯灭、 黄灯闪烁三次; 状态3(15s), 为东西绿、 南北红; 状态4(3s), 为东西绿灯灭、 黄灯闪烁三次、 南北红灯不变; 最后回到状态1, 依此循环。如遇到特殊情况, 可拨动应急开关, 使各向均为红灯, 特殊车辆不受红灯限制, 待其顺利经过后拨动另一个开关, 系统返回继续运行。同时用LED用倒计时方式显示各路口亮灯时间。
2 设计使用的仪器和设备
2.1 达爱思教仪
本实验采用达爱思教仪型号是Dais-PG206FD
2.2八段数码管
数码管按段数分为七段数码管和八段数码管, 八段数码管比七段数码管多一个发光二极管单元( 多一个小数点显示) ; 按能显示多少个”8”可分为1位、 2位、 4位等等数码管,
2.3 8255芯片
8255是Intel公司生产的可编程并行I/O接口芯片, 有3个8位并行I/O口。具有3个通道3种工作方式的可编程并行接口芯片( 8255引脚如图1, 8255编程模式如图2) 。其各口功能可由软件选择, 使用灵活, 通用性强。8255可作为单片机与多种外设连接时的中间接口电路。8255作为主机与外设的连接芯片, 必须提供与主机相连的3个总线接口, 即数据线、 地址线、 控制线接口。同时必须具有与外设连接的接口A、 B、 C口。由于8255可编程,因此必须具有逻辑控制部分, 因而8255内部结构分为3个部分: 与CPU连接部分、 与外设连接部 分、 控制部分。
图1 8255引脚
图2 8255编程模式
3系统硬件设计方案
3.1系统硬件方案框图
交通灯系统硬件方案框图如图(3)
键盘控制模块
8255单片机交通灯控制系统
八段管倒计时模块
八段管信息演示模块
接口电路
交通灯演示模块
紧急中断模块
图3交通灯系统硬件方案框图
3.2电路原理图
电路原理图是借鉴外部中断实验( 急救车与交通灯) 修改的如图4, 增加P2.1连接K1和P2.2连接K2。如遇到特殊情况, 可拨动应急开关K1, 使各向均为红灯, 特殊车辆不受红灯限制, 待其顺利经过后拨动另一个开关K2, 系统返回继续运行。
图 4 交通灯与急救车
3.3相关知识及原理介绍
8255是Intel公司生产的可编程并行I/O接口芯片, 有3个8位并行I/O口。具有3个通道3种工作方式的可编程并行接口芯片( 40引脚) 。 其各口功能可由软件选择, 使用灵活, 通用性强。8255可作为单片机与多种外设连接时的中间接口电路。8255特性: (1)一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口.(2)具有24个可编程设置的I/O口,即3组8位的I/O口为PA口,PB口和PC口.它们又可分为两组12位的I/O口,A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3).A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O3种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定.
交通灯控制系统, 该控制系统工作后, 交通灯按照下列规律变化: 初始态东南西北均为红灯, 持续时间为2s; 然后转为状态1(10s), 为东西红、 南北绿; 状态2(3s)东西红灯不变、 南北绿灯灭、 黄灯闪烁三次; 状态3(15s), 为东西绿、 南北红; 状态4(3s), 为东西绿灯灭、 黄灯闪烁三次、 南北红灯不变; 最后回到状态1, 依此循环。如遇到特殊情况, 可拨动应急开关, 使各向均为红灯, 特殊车辆不受红灯限制, 待其顺利经过后拨动另一个开关, 系统返回继续运行。同时用LED用倒计时方式显示各路口亮灯时间。
4系统软件设计方案
4.1工具介绍
汇编语言是一种功能很强的程序设计语言, 也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言, 作为一门语言, 对应于高级语言的编译器, 需要一个”汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASM, TASM等等为我们写汇编程序提供了很多类似于高级语言的特征, 比如结构化、 抽象等。在这样的环境中编写的汇编程序, 有很大一部分是面向汇编器的伪指令, 已经类同于高级语言。现在的汇编环境已经如此高级, 即使全部用汇编语言来编写windows的应用程序也是可行的, 但这不是汇编语言的长处。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。
大多数情况下Linux程序员不需要使用汇编语言, 因为即便是硬件驱动这样的底层程序在Linux操作系统中也能够完全用C语言来实现, 再加上GCC这一优秀的编译器当前已经能够对最终生成的代码进行很好的优化, 的确有足够的理由让我们能够暂时将汇编语言抛在一边了。但实际情况是Linux程序员有时还是需要使用汇编, 或者不得不使用汇编, 理由很简单: 精简、 高效和libc无关性。假设要移植Linux到某一特定的嵌入式硬件环境下, 首先必然面临如何减少系统大小、 提高执行效率等问题, 此时或许只有汇编语言能帮上忙了。
汇编语言源程序的设计步骤:
(1) 拟制设计任务书
(2) 建立数学模型
(3) 确立算法
(4) 绘制程序流程图
(5) 编制汇编语言源程序
(6) 上机调试
单片机是一种集成在电路芯片, 是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、 只读存储器ROM、 多种I/O口和中断系统、 定时器/计时器等功能( 可能还包括显示驱动电路、 脉宽调制电路、 模拟多路转换器、 A/D转换器等电路) 集成到一块硅片上构成的一个小而完善的计算机系统。单片机如图( 5)
图5单片机
4.2程序流程图
交通灯控制系统流程框图如图6, 如遇到特殊情况外部中断子程序框图如图7
开始
开外中断
状态3(15s), 为东西绿、 南北红
状态1(10s), 为东西红、 南北绿
状态2(3s)东西红灯不变、 南北绿灯灭、 黄灯闪烁三次
初始状态东西南北都是红灯(2s)
状态4(3s), 为东西绿灯灭、 黄灯闪烁三次、 南北红灯不变
外部中断入口
保护现场
东西,南北都亮红灯
特殊车辆经过, 拨动开关
恢复现场
中断返回
图6主程序流程框图 图7 外部中断子程序框图
4.3程序源代码及注释
CS8255 EQU 0FFFFh ;8255命令控制口
OUTSEG EQU 0FFFCh ;字形控制口
OUTBIT EQU 0FFFDh ;字位/键扫控制口
SECOND EQU 30H
NUM EQU 31H
TIME EQU 32H
TIME1 EQU 33H
ORG 0000H ;主程序的入口地址
LJMP MAIN ;跳转到主程序的开始处
ORG 0003H ;外部中断0的中断程序入口地址
LJMP INT
ORG 000BH ;定时器0的中断程序入口地址
LJMP T0_INT ;跳转到中断服务程序处
MAIN : MOV SP,#50H
MOV TCON,#01h ;下降沿, IT0
MOV IE,#8FH ;CPU开中断, 允许T0中断, T1中断和外部中断1中断
MOV TMOD,#51H ;设置T1为计数方式,T0为定时方式, 且都工作于模式1
MOV DPTR ,#CS8255
MOV A, #80H ;给8255赋初值, 8255工作于方式0
MOVX @DPTR, A
MOV R3,#5
LCALL DISP
LCALL DELAY
;-------------------------------------------
Na: SETB TR0 ;启动T0计时器
Na0: MOV R3,#02h ;东西方向禁止, 南北方向通行
MOV P1,#0DBH ;置8255A口, 东西南北方向红灯亮
Na2:
CJNE R3,#00H,Na2 ;比较SECOND中的值是否为0, 不为0转到当前指令处执行
;-------------------------------------------
N00: MOV R3,#0ah ;东西方向禁止, 南北方向通行 10s
MOV P1,#0ddH ;置8255A口, 东西方向红灯亮, 南北方向绿灯亮
N02:
CJNE R3,#00H,N02 ;比较SECOND中的值是否为0, 不为0转到当前指令处执行
;------黄灯闪烁3秒程序------
MOV R3,#3
N1: MOV P1,#0DEH ;置P1口, 东西, 南北方向黄灯亮
N11: MOV R4,#00H
N12: CJNE R4,#7DH,$ ;黄灯持续亮0.5秒
N13: MOV P1,#0DFH ; 置P1口, 南北方向黄灯灭
N14: MOV R4,#00H
CJNE R4,#7DH,$ ;黄灯持续灭0.5秒
CJNE R3,#00H,N1 ;闪烁时间达3秒则退出
;------------------------------------------------------------
N2: MOV R7,#00H
MOV R3,#0fh ;东西通行, 南北禁止 15s
MOV P1,#0EBH ; 置P1口, 东西方向绿灯灭, 南北方向红灯亮
N22:
CJNE R3,#00H,N22
;------黄灯闪烁3秒程序------
MOV R3,#03H
N3: MOV P1,#0F3H ;置P1口, 东西, 南北方向黄灯亮
N31: MOV R4,#00H
CJNE R4,#7DH,$ ;黄灯持续亮0.5秒
N32: MOV P1,#0FBH ; 置P1口, 南北方向黄灯灭
N33: MOV R4,#00H
CJNE R4,#7DH,$ ;黄灯持续灭0.5秒
CJNE R3,#00H,N3 ;闪烁时间达3秒则退出
;---------------------------
N41: MOV R7,#00H
MOV R3,#03h ;东西通行, 南北禁止 3s
MOV P1,#0bBH ; 置P1口, 东西方向绿灯灭, 南北方向红灯亮
N42:
CJNE R3,#00H,N42
SJMP N00
;------1秒延时子程序-------
T0_INT:MOV TL0,#9AH ;给定时器T0送定时10ms的初值
MOV TH0,#0F1H
INC R4
INC R5
CJNE R5,#0FAH,T01 ;判断延时是否够一秒, 不够则调用显示子程序
MOV R5,#00H ;R5清零
DEC R3 ;倒计时初值减一
T01: ACALL DISP ;调用显示子程序
RETI ;中断返回
INT: PUSH PSW
MOV TIME1,R3
MOV NUM,P1
MOV P1,#1BH
I1:
;CALL DELAY1
JB P3.1,I1
MOV R3,TIME1
MOV P1,NUM
POP PSW
RETI
;------显示子程序------
DISP:
MOV B,#0AH
MOV A,R3 ;SECOND中值二转十显示转换
DIV AB
MOV R0,A
MOV R2,#00000010b;
Loop:
MOV DPTR,#OUTBIT
CLR A
MOVX @DPTR,A ;关所有八段管
MOV DPTR,# LEDMAP
MOV A,R0
MOVC A,@A+DPTR
MOV DPTR,#OUTSEG
MOVX @DPTR,A
MOV DPTR,#OUTBIT
MOV A,R2
MOVX @DPTR,A ;显示一位八段管
MOV R6,#01
CALL DELAY
MOV A,R2 ;显示下一位
RR A
MOV R2,A
MOV DPTR,# LEDMAP
MOV A,B
MOVC A,@A+DPTR
MOV DPTR,#OUTSEG
MOVX @DPTR,A
MOV DPTR,#OUTBIT
MOV A,R2
MOVX @DPTR,A ;显示一位八段管
MOV R6,#01
CALL DELAY
MOV DPTR,#OUTBIT
CLR A
MOVX @DPTR,A ;关所有八段管
RET
;------延时4MS子程序----------
DELAY: MOV R1,#0AH
LP: MOV R7,#64H
NOP
LP1: DJNZ R7,LP1
DJNZ R1,LP
RET
DELAY1:MOV TIME,#0FH
LP4: MOV R1,#0FFH
LP2: MOV R7,#0FFH
NOP
LP3: DJNZ R7,LP3
DJNZ R1,LP2
DJNZ TIME,LP4
RET
LEDMAP: ;八段管显示码
DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H
DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH
END
5硬件、 软件调试步骤
5.1安装注意事项
首先观察原理图, 根据电气要求进行合理的整体布局, 最大限度的减少叉线和飞线, 降低干扰。自己要形成一个大致的布局和接线方法, 而且要尽量美观。步骤如下:
(1) 用万用表检查万能板的内部结构, 确定其内部的电气连接属性。
(2) 安装前先检查元器件的质量, 安装时注意、 集成芯片的引脚和极性。
5.2调试
(1) 不通电检查电路安装完毕后, 不要急于通电, 应首先认真检查接线是否正确, 包括多线、 少线、 错线等, 特别是电源线不能接错或接反, 以免通电后烧坏电路或元器件。(2) 直观检查连线检查完毕后, 直观检查电源, 元器件接线端之间有无短路, 连线 处有无接触不良。
(3)运行软件观察交通灯运行情况, 出现问题对软件程序进行修改。
5.3调试注意事项
(1) 测试之前要熟悉各种仪器的使用方法, 并仔细加以检查, 避免由于仪器使用不当或出现故障而作出错误判断。
(2) 测试仪器和被测电路应具有良好的共地, 只有使仪器和电路之间建立一个公共地参考点测试的结果才是准确的。
6小结
这次课程设计的主要任务是根据课堂所学知识, 运用8255A进行交通灯控制的设计。按照设计的要求, 我查阅了相关的资料, 先设计出了单元电路, 在此基础上设计出了整个系统的电路图。经过此次课程设计, 我对8255A、 8253的工作方式有了深刻的理解和认识, 更重要的是对微机原理这门课程有了进一步的认识, 加深了理解, 巩固了所学的的知识, 在设计时要考虑到8255A, 经过查阅很多资料, 拓展了知识面, 在这一过程中, 我也学到了很多东西。在设计时, 根据要求选择合适的工作方式显得十分的重要。该次课程设计是利用课堂所学的知识来解决一个实际的问题, 生动有趣, 提到了我们运用知识的能力。经过课程设计, 对于自己使用Protel DXP的技巧是一个很大的提高, 如何让布局合理、 如何让电路简单的设计是一种锻炼, 同时也是一个娱乐的过程。
总之, 课程设计作为一种教学方式, 巩固了我们课堂上所学的知识, 提高了我们对知识学习的热情, 锻炼了我们运用知识解决实际问题的能力, 让我们收获了很多。
7参考资料
[1]. 阎石.《数字电技术基础》.北京: 高等教育出版社,
[2]. 陈大钦.罗杰.《电子技术基础实验》.北京: 高等教育出版社,
[3]. 胡汉才《单片机原理及其接口技术》北京: 清华大学出版社,
[4]. 渠丽岩, 郝芸《单片机原理与应用实验指导书》天津: 天津理工大学中环信息学院,
展开阅读全文