广州城建职业学院
毕业设计
题目_____________交通灯模型_______________
所 在 系____ 信息系___________ _
专业班级___09嵌入式技术班___________
学生姓名 ___ 李源佳____________
学生学号__ 0904120112___________
指导老师 李有兵 _____
广州城建职业学院教务处制
交通灯模型
09嵌入式技术班 李源佳
指导教师:李有兵
摘 要: 对基于单片机的交通灯控制系统进行了设计。系统功能为:以STC-51系列单片机作为控制核心,设计并制作交通灯控制系统,东西南北四个方向,配置两位数显,红绿灯更替过程中黄灯会以一定频率闪动。
在对系统功能分析的基础上,提出了三种设计方案,经比较,选择性能较优的LED 动态循环显示方案进行了设计。设计包括硬件和软件两大部分。硬件部分包括单片机最小系统、时间显示、交通灯显示三部分。选用STC89S52单片机作为控制核心,东西南北四个方向设置了交通灯显示,时间显示采用两位LED 显示器,交通灯显示则采用红绿双色高亮发光二极管来模拟。软件采用了模块化的设计方法,主要分为主程序、定时器中断服务子程序、倒计时显示子程序、交通灯模拟显示子程序四部分。
在实验板上制作了基于单片机的交通灯控制系统样机,对硬件和软件部分分别进行了调试,再进行了软硬件联调,得到的交通灯控制系统样机实物,可圆满地完成毕业设计任务书所要求的功能。
关键词: 单片机、定时器、中断、交通灯、STC-51
目录:
引言................................................................................................................................. 4
1设计方案论证 . ............................................................................................................... 4
1.1系统结构方案论证 .............................................................................................. 4
1.2显示方案论证 ..................................................................................................... 5
2 单片机概述................................................................................................................... 5
3 芯片简介 ...................................................................................................................... 5
3.1 STC89C51芯片简介............................................................................................. 5
3.1.1中央处理器 .............................................................................................. 6
3.1.2数据存储器(RAM)...................................................................................... 6
3.1.3程序存储器(ROM)...................................................................................... 6
3.1.4定时/计数器(ROM) . ................................................................................... 6
3.1.5并行输入输出(I/O)口 .............................................................................. 6
3.1.6全双工串行口 . .......................................................................................... 6
3.1.7中断系统 . ................................................................................................. 6
3.1.8时钟电路 . ................................................................................................. 7
3.1.9红绿灯动态闪动方式代码 ......................................................................... 9
4、定时器延时 . ...............................................................................................................11
4.1 计数器初值计算 . ...............................................................................................11
4.2 定时器硬件最大延时 . ........................................................................................11
4.3 定时1秒的方法 . .............................................................................................. 12
4.4定时器中断代码 . ............................................................................................... 12
5工作方式 . .................................................................................................................... 13
6、工作原理图 . .............................................................................................................. 13
7调试与检测 ................................................................................................................. 14
7.1. 硬件检测.......................................................................................................... 14
7.1.1静态检测 . ............................................................................................... 14
7.1.2动态检测 . ............................................................................................... 14
7.2软件调试 .......................................................................................................... 14
8、结束语 . ..................................................................................................................... 14
参考文献........................................................................................................................ 16
引言
当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。但这一技术在19世纪就已出现了。
1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。这是世界上最早的交通信号灯。1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。它由红绿两以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。
信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。
1设计方案论证
根据设计任务,要求主、次道路绿、黄、红灯亮的时间不同并且时间可以预置和调整,因此采用单片机STC89C51来进行智能控制。由按键输入调整值送入单片机中进行数据处理,然后输出到相应数码管进行显示,同时由不同颜色的发光二极管进行指示。通过对设计功能分解,设计方案论证可以分为:系统结构方案论证,显示方案论证,输入方案论证。
1.1系统结构方案论证
方案一:纯数字电路方式
由秒发生器电路部分产生周期为一秒的矩形脉冲信号,经74LS192分频后可得到周期为两秒的脉冲信号,用此信号作为74LS161的输入控制脉冲,控制74LS161计数,我们电路中用两块74ls161级联,并用异步清零的办法将其做成17进制计数器。用此17位计数器的输出作为译码器74ls138的地址输入,最后将得到的译码信息经过相应的门电路,即可达到控制交通灯的目的。显示部分所需脉冲直接采用555输出的秒脉冲,这样就可以使得显示与灯
的控制在时间上达到同步!
方案二:单片机方式
利用单片机控制相应I/O口,模拟交通灯显示,利用其串口实现数码管显示。利用外部中断功能,设计人机交互接口,完成交通灯主次干道通行时间任意可调。而且移植方便,符合现在的发展趋势
方案一的优点是不需要软件编程控制,缺点是硬件规模庞大且不能实现延时可调。方案二占用硬件资源少、功能齐全、调试过程简单。故本设计采用方案三。
1.2显示方案论证
方案一:采用LED 数码管
LED 数码管由8个发光二极管组成,每只数码管轮流显示各自的字符。由于人眼具有视觉暂留特性,当每只数码管显示的时间间隔小于1/16s时人眼感觉不到闪动,看到的是每只数码管常亮。
方案二:采用LCD 液晶显示器
方案一使用数码管显示编程较易,且显示达到要求,价格便宜。方案二的LED 液晶显示器功率小,效果明显,但价格较高。两种方案综合考虑,选择方案一。
2 单片机概述
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
单片机经过3代的发展,目前单片机正朝着高性能和多品种方向发展,它们的CPU 功能在增强,内部资源在增多,引角的多功能化,以及低电压底功耗。
3 芯片简介
3.1 STC89C51芯片简介
STC89C51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,
下面分别加以说明。
3.1.1中央处理器
中央处理器(CPU)是整个单片机的核心部件,
由运算器和控制器等部件组成。运算器是8位数
据宽度的处理器,能处理8位二进制数据或代码,
CPU 负责控制、指挥和调度整个单元系统协调的工
作,完成运算和控制输入输出功能等操作。控制
[1]
器包括程序计数器、指令寄存器、指令译码器、
振荡器及定时电路等。
3.1.2数据存储器(RAM)
STC89C51内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM 只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。
3.1.3程序存储器(ROM)
STC89C51内程序存储器容量为4KB ,地址从0000H 开始,用于存放用户程序,原始数据或表格。
3.1.4定时/计数器(ROM)
STC89C51有两个16位的可编程定时/计数器,它们都有定时和事件计数功能,可用于定时控制、延时、对外部事件计数和检测等场合。
3.1.5并行输入输出(I/O)口
STC89C51有4个外部交换信息的8位并行接口,即P0~P3。它们都是准双向端口, 每个端口有8条I/O线, 均可输入/输出。
3.1.6全双工串行口
STC89C51内置一个可编程的全双工串行通信口(UART ),用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
3.1.7中断系统
STC89C51具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。
3.1.8时钟电路
STC89C51内置最高频率达12MHz 的时钟电路,用于产生整个单片机运行的脉冲时序,但STC89C51单片机需外置振荡电容。
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。本设计所用的Intel 的MCS-51系列单片机采用的是哈佛结构的形式。
下图是STC89C51单片机的内部结构示意图2。
STC89C51的各引脚对应的功能简要介绍如下[4]:
Vss —— 接地。
Vcc —— 电源端,接+5V。
P0.0~0.7—— P0口是开漏双向口可以写为1使其状态为悬浮用作高阻输入,P0
也可
以在访问外部程序存储器时作地址的低字节,在访问外部数据
存储器时作数据总线,此时通过内部强上拉输出1。P0口每位
可以能驱动4个LS 型TTL 负载。P1.0~1.7 —— P1口是带
内部上拉的双向I/O口,向P1口写入1时P1口被内部上拉为
高电平,可用作输入口。当作为输入脚时被外部拉低的P1口
会因为内部上拉而输出电流。P1口每位可以能驱动P2个LS
型TTL 负载。
P2.0~2.7 —— P2口是带内部上拉的双向I/O口,向P2口写入1时P2口被内部上拉为高电平,可用作输入口。当作为输入脚时,被外部拉低的P2口会因为内部上拉而输出电流。在访问外部程序存储器和外部数据时分别作为地址高位字节和16位地址,此时通过内部强上拉传送1。当使用8位寻址方式访问外部数据存储器时,P2口每位可以能驱动4个LS 型TTL 负载。
P3.0~3.7 —— P3口是带内部上拉的双向I/O口,向P3口写入1时P3口被内部上拉为高电平,可用作输入口。当作为输入脚时被外部拉低的P3口,会因为内部上拉而输出电流。P3口每位可以能驱动4个LS 型TTL 负载。P3 口还具有以下特殊功能:
RxD(p3.0) —— 串行输入口
TxD(P3.1) —— 串行输出口
INT0(P3.2) —— 外部中断0
INT1(P3.3) —— 外部中断
T0(P3.4) —— 定时器0 外部输入
T1(P3.5) —— 定时器1 外部输入
WR(P3.6) —— 外部数据存储器写信号
RD(P3.7) —— 外部数据存储器读信号
RST —— 复位。当晶振在运行中只要复位管脚出现2个机器周期高电平,即可复位内部。有扩散电阻连接到Vss ,仅需要外接一个电容到V CC 即可实现上电复位。
ALE —— 地址锁存使能。在访问外部存储器时,输出脉冲锁存地址的低字节,在正常情况下,ALE 输出信号恒定为1/6 振荡频率并可用作外部时钟或定时。
PSEN —— 程序存储使能。当执行外部程序存储器代码时,PSEN 每个机器周期被激活两次。在访问外部数据存储器时,PSEN 无效。访问内部程序存储器时,PSEN 无效。
EA/Vpp —— 外部寻址使能/编程电压。在访问整个外部程
序存储器时EA 必须外部置低,如果EA 为高时将执行内部程序,除非程序计数器包含大于片内
FLASH 的地址。该引脚在对FLASH 编程时,接5V/12V编程电压(VPP ) ,如果保密位1已
编程,EA 在复位时由内部锁存。
XTAL1 —— 反相振荡放大器输入和内部时钟发生电路输入。
XTAL2 —— 反相振荡放大器输出。
STC89C51的复位方式可以是上电自动复位,也可以是手动复位,此外,RST/Vpd 还是一
复用脚,Vcc 掉电其间,此脚可接上备用电源,以保证单片机内部RAM 的数据不丢失。
XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内
部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
3.1.9红绿灯动态闪动方式代码
因为红绿灯放在不同的方位,并且在不同的时刻有着不同的动态效果,所以其代码也必须要有此种变换效果的功能,其代码如下:
void light()
{
if(deng==0)
{
light1=1; light2=0; light3=0; }
if(deng==1) {
if(t==1) {
light1=0; light2=0; light3=0; }
if(t==2) {
light1=0; light2=0; light3=1; } }
if(deng==2) {
light1=0; light2=1; light3=0; }
if(deng==3)
{ if(t==1) { light1=0; light2=0; light3=0; } if(t==2) { light1=0; light2=0; light3=1; }
}
4、定时器延时
4.1 计数器初值计算
定时器工作时必须给计数器送计数器初值,这个值是送到TH 和TL 中的。它是以加法记数的,并能从全1到全0时自动产生溢出中断请求。因此,我们可以把计数器记满为零所需的计数值设定为C 和计数初值设定为TC 可得到如下计算通式: TC=M-C 式中,M 为计数器模值,该值和计数器工作方式有关。在方式0时M 为2;在方式1时M 的值为2。
4.2 定时器硬件最大延时
因一个机器周期等于12个振荡周期,所以计数频率fcount=1/12osc。如果晶振为12MHz ,则计数周期为:
T=1/(12×106)Hz ×1/12=1μs
很显然可以知道:
方式0 13位定时器最大定时间隔=213×1µS =8.192ms 168
方式1 16位定时器最大定时间隔=2×1µS =65.536ms
方式2 8位定时器最大定时间隔=28×1µS =256µS
显然1秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题.
普通延时方法:
void delay(uint z)
{
}
4.3 定时1秒的方法
我们采用在主程序中设定一个初值为65536的软件计数器和使T0定时50毫秒.这样每当T0到50毫秒时CPU 就响应它的溢出中断请求,进入他的中断服务子程序。在中断服务子程序中,count 自加到20时表示1秒已到可以返回到输出时间显示程序[2]。
4.4定时器中断代码
void dingshi()interrupt 1
{
TH0=(65536-45872)/256; TL0=(65536-45872)/256; num++; san++; if(san==20) { } san=0; t=1; uint t1,y; for(t1=z;t1>0;t1--) for(y=110;y>0;y--); 16
} if(san==10) { } t=2;
在中断之前,必须要将时钟中断1开通
TMOD=0x01;
EA=1; ET0=1; TR0=1;
5工作方式
东南西北四个方位均设有红绿黄三盏灯,并且每次红绿转换时,黄灯会以1HZ 的频率闪动,而主杆道通行时间为60S ,次杆道通行时间为40S ,黄灯闪动时间为8S 。
此处由一两位一体的数码管作显示效果。
6、工作原理图
工作原理图如下:
7调试与检测
7.1. 硬件检测
硬件检测又分为,静态检测和动态检测。
7.1.1静态检测
第一步:目测,检查外部的各种元件或则电路是否有断点;
第二步:用万用表测试。先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象;
第三步:加电检测。给板加电,检测所有的插座或是器件的电源端是否符合要求的值; 第四步:是联机检查。因为只有用单片机开发系统才能完成对用户系统的调试。
7.1.2动态检测
动态检测是在设计工作的情况下发现和排除系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。
首先运用由分到合的调试方法。调试电路时,与该元件无关的器件全部从设计中去掉,这样可以将故障范围限定在某个局部的电路上。当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。由分到合的调试既告完成。
然后运用由近及远的调试方法。将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。
7.2软件调试
1.静态调试
静态调试是指对程序进行人工书面检查。静态调试时要仔细阅读程序及其文档,经过结构分析、功能分析、逻辑分析、接口分析、语法分析以及逐行检查。
(1) 检查语法错误
产生语法错误的原因主要有两个:一是键入错误,此错误如同写文章时的“笔误”;二是由于对语法规则不熟悉,见书后错误信息、各种限制、全局变量与局部变量、先后左右的原则等,这些虽不是系统规定,但也是语法的一部分,应作为专项予以检查。
(2) 跟踪过程
此时的跟踪程序流程,即把自己当作计算机。给定一组输入数据后,顺序执行每条语句,考察所得结果,寻找错误。
2. 动态调试
动态调试是指实际上机运行程序进行调试。源程序上机运行,语言系统及操作系统会在程序有故障时给出信息,常见的故障分为以下几种情况:
(1)
(2)
(3)
(4) 没有通过编译。 没有通过连接编译。 程序的运行过程因故障而停止。 程序只输出部分结果。对这部分结果进行分析,可大致了解程序被执行的逻辑,或程序在什么地方中断。
软件调试通过对拥护程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正。本系统的软件系统不是很大,而且全部采用C 语言编写,除语法与逻辑差错外,当确认程序没问题时,直接下载到单片机仿真调试。采取自下到上的方法,单独调好每一个模块,最后完成一个完整的系统调试。
8、结束语
本次设计利用了STC89C52进行,其功能与51相仿,在设计过程中遇到过不小问题,如代码编译出错,逻辑出错,仿真出错到焊接时候的出错,但设计的本身就是为了在出错中了成长,这让我更加了解最小系统设计的方法。
通过这次毕业设计,使我得到了一次用专业 知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是C 语言)的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。在信息系各位指导教师的大力支持下,我基本完成了这次设计任务。我在这一次毕业设计过程中,很是受益匪浅。通过对自己在大学三年时间里所学的知识的回顾,并充分发挥对所学知识的理解和对毕业设计的思考及书面表达能力,最终完成了。这为自己今后进一步深化学习,积累了一定宝贵的经验。撰写论文的过程也是专业知识的学习过程,它使我运用已有的专业基础知识,对其进行设计,分析和解决一个理论问题或实际问题,把知识转化为能力的实际训练。在同学及指导教师孔老师的一些指点和引导下,真正培养了我运用所学
知识解决实际问题的能力。
通过这次设计我发现,只有理论水平提高了;才能够将课本知识与实践相整合,理论知识服务于教学实践,以增强自己的动手能力。这个设计在现实社会中也存在着一定的价值和意义,从中我获得很深刻的经验。通过这次课程设计,我们知道了理论和实际的距离,也知道了理论和实际想结合的重要性,,也从中得知了很多书本上无法得知的知识。
我们的学习不但要立足于书本,以解决理论和实际教学中的实际问题为目的,还要以实践相结合,理论问题即实践课题,解决问题即课程研究,学生自己就是一个专家,通过自己的手来解决问题比用脑子解决问题更加深刻。学习就应该采取理论与实践结合的方式,理论的问题,也就是实践性的课题。这种做法既有助于完成理论知识的巩固,又有助于带动实践,解决实际问题,加强我们的动手能力和解决问题的关键。
参考文献
1、 郭天祥 新概念51单片机C 语言教程 入门、提高、开发、拓展全攻略 2009.1 78-113
2、 张培仁,等. 基于C 语言编程MCS-51单片机原理及应用 2003.193-209
3、 王守中. 51单片机开发入门与典型实例[M] 2007.86-95
4、 李琳. 用单片机实现交通灯的控制[J]. 科技创业月刊 2008年,11期: 145-146
广州城建职业学院
毕业设计
题目_____________交通灯模型_______________
所 在 系____ 信息系___________ _
专业班级___09嵌入式技术班___________
学生姓名 ___ 李源佳____________
学生学号__ 0904120112___________
指导老师 李有兵 _____
广州城建职业学院教务处制
交通灯模型
09嵌入式技术班 李源佳
指导教师:李有兵
摘 要: 对基于单片机的交通灯控制系统进行了设计。系统功能为:以STC-51系列单片机作为控制核心,设计并制作交通灯控制系统,东西南北四个方向,配置两位数显,红绿灯更替过程中黄灯会以一定频率闪动。
在对系统功能分析的基础上,提出了三种设计方案,经比较,选择性能较优的LED 动态循环显示方案进行了设计。设计包括硬件和软件两大部分。硬件部分包括单片机最小系统、时间显示、交通灯显示三部分。选用STC89S52单片机作为控制核心,东西南北四个方向设置了交通灯显示,时间显示采用两位LED 显示器,交通灯显示则采用红绿双色高亮发光二极管来模拟。软件采用了模块化的设计方法,主要分为主程序、定时器中断服务子程序、倒计时显示子程序、交通灯模拟显示子程序四部分。
在实验板上制作了基于单片机的交通灯控制系统样机,对硬件和软件部分分别进行了调试,再进行了软硬件联调,得到的交通灯控制系统样机实物,可圆满地完成毕业设计任务书所要求的功能。
关键词: 单片机、定时器、中断、交通灯、STC-51
目录:
引言................................................................................................................................. 4
1设计方案论证 . ............................................................................................................... 4
1.1系统结构方案论证 .............................................................................................. 4
1.2显示方案论证 ..................................................................................................... 5
2 单片机概述................................................................................................................... 5
3 芯片简介 ...................................................................................................................... 5
3.1 STC89C51芯片简介............................................................................................. 5
3.1.1中央处理器 .............................................................................................. 6
3.1.2数据存储器(RAM)...................................................................................... 6
3.1.3程序存储器(ROM)...................................................................................... 6
3.1.4定时/计数器(ROM) . ................................................................................... 6
3.1.5并行输入输出(I/O)口 .............................................................................. 6
3.1.6全双工串行口 . .......................................................................................... 6
3.1.7中断系统 . ................................................................................................. 6
3.1.8时钟电路 . ................................................................................................. 7
3.1.9红绿灯动态闪动方式代码 ......................................................................... 9
4、定时器延时 . ...............................................................................................................11
4.1 计数器初值计算 . ...............................................................................................11
4.2 定时器硬件最大延时 . ........................................................................................11
4.3 定时1秒的方法 . .............................................................................................. 12
4.4定时器中断代码 . ............................................................................................... 12
5工作方式 . .................................................................................................................... 13
6、工作原理图 . .............................................................................................................. 13
7调试与检测 ................................................................................................................. 14
7.1. 硬件检测.......................................................................................................... 14
7.1.1静态检测 . ............................................................................................... 14
7.1.2动态检测 . ............................................................................................... 14
7.2软件调试 .......................................................................................................... 14
8、结束语 . ..................................................................................................................... 14
参考文献........................................................................................................................ 16
引言
当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。但这一技术在19世纪就已出现了。
1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。这是世界上最早的交通信号灯。1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。它由红绿两以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。
信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。
1设计方案论证
根据设计任务,要求主、次道路绿、黄、红灯亮的时间不同并且时间可以预置和调整,因此采用单片机STC89C51来进行智能控制。由按键输入调整值送入单片机中进行数据处理,然后输出到相应数码管进行显示,同时由不同颜色的发光二极管进行指示。通过对设计功能分解,设计方案论证可以分为:系统结构方案论证,显示方案论证,输入方案论证。
1.1系统结构方案论证
方案一:纯数字电路方式
由秒发生器电路部分产生周期为一秒的矩形脉冲信号,经74LS192分频后可得到周期为两秒的脉冲信号,用此信号作为74LS161的输入控制脉冲,控制74LS161计数,我们电路中用两块74ls161级联,并用异步清零的办法将其做成17进制计数器。用此17位计数器的输出作为译码器74ls138的地址输入,最后将得到的译码信息经过相应的门电路,即可达到控制交通灯的目的。显示部分所需脉冲直接采用555输出的秒脉冲,这样就可以使得显示与灯
的控制在时间上达到同步!
方案二:单片机方式
利用单片机控制相应I/O口,模拟交通灯显示,利用其串口实现数码管显示。利用外部中断功能,设计人机交互接口,完成交通灯主次干道通行时间任意可调。而且移植方便,符合现在的发展趋势
方案一的优点是不需要软件编程控制,缺点是硬件规模庞大且不能实现延时可调。方案二占用硬件资源少、功能齐全、调试过程简单。故本设计采用方案三。
1.2显示方案论证
方案一:采用LED 数码管
LED 数码管由8个发光二极管组成,每只数码管轮流显示各自的字符。由于人眼具有视觉暂留特性,当每只数码管显示的时间间隔小于1/16s时人眼感觉不到闪动,看到的是每只数码管常亮。
方案二:采用LCD 液晶显示器
方案一使用数码管显示编程较易,且显示达到要求,价格便宜。方案二的LED 液晶显示器功率小,效果明显,但价格较高。两种方案综合考虑,选择方案一。
2 单片机概述
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
单片机经过3代的发展,目前单片机正朝着高性能和多品种方向发展,它们的CPU 功能在增强,内部资源在增多,引角的多功能化,以及低电压底功耗。
3 芯片简介
3.1 STC89C51芯片简介
STC89C51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,
下面分别加以说明。
3.1.1中央处理器
中央处理器(CPU)是整个单片机的核心部件,
由运算器和控制器等部件组成。运算器是8位数
据宽度的处理器,能处理8位二进制数据或代码,
CPU 负责控制、指挥和调度整个单元系统协调的工
作,完成运算和控制输入输出功能等操作。控制
[1]
器包括程序计数器、指令寄存器、指令译码器、
振荡器及定时电路等。
3.1.2数据存储器(RAM)
STC89C51内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM 只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。
3.1.3程序存储器(ROM)
STC89C51内程序存储器容量为4KB ,地址从0000H 开始,用于存放用户程序,原始数据或表格。
3.1.4定时/计数器(ROM)
STC89C51有两个16位的可编程定时/计数器,它们都有定时和事件计数功能,可用于定时控制、延时、对外部事件计数和检测等场合。
3.1.5并行输入输出(I/O)口
STC89C51有4个外部交换信息的8位并行接口,即P0~P3。它们都是准双向端口, 每个端口有8条I/O线, 均可输入/输出。
3.1.6全双工串行口
STC89C51内置一个可编程的全双工串行通信口(UART ),用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
3.1.7中断系统
STC89C51具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。
3.1.8时钟电路
STC89C51内置最高频率达12MHz 的时钟电路,用于产生整个单片机运行的脉冲时序,但STC89C51单片机需外置振荡电容。
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。本设计所用的Intel 的MCS-51系列单片机采用的是哈佛结构的形式。
下图是STC89C51单片机的内部结构示意图2。
STC89C51的各引脚对应的功能简要介绍如下[4]:
Vss —— 接地。
Vcc —— 电源端,接+5V。
P0.0~0.7—— P0口是开漏双向口可以写为1使其状态为悬浮用作高阻输入,P0
也可
以在访问外部程序存储器时作地址的低字节,在访问外部数据
存储器时作数据总线,此时通过内部强上拉输出1。P0口每位
可以能驱动4个LS 型TTL 负载。P1.0~1.7 —— P1口是带
内部上拉的双向I/O口,向P1口写入1时P1口被内部上拉为
高电平,可用作输入口。当作为输入脚时被外部拉低的P1口
会因为内部上拉而输出电流。P1口每位可以能驱动P2个LS
型TTL 负载。
P2.0~2.7 —— P2口是带内部上拉的双向I/O口,向P2口写入1时P2口被内部上拉为高电平,可用作输入口。当作为输入脚时,被外部拉低的P2口会因为内部上拉而输出电流。在访问外部程序存储器和外部数据时分别作为地址高位字节和16位地址,此时通过内部强上拉传送1。当使用8位寻址方式访问外部数据存储器时,P2口每位可以能驱动4个LS 型TTL 负载。
P3.0~3.7 —— P3口是带内部上拉的双向I/O口,向P3口写入1时P3口被内部上拉为高电平,可用作输入口。当作为输入脚时被外部拉低的P3口,会因为内部上拉而输出电流。P3口每位可以能驱动4个LS 型TTL 负载。P3 口还具有以下特殊功能:
RxD(p3.0) —— 串行输入口
TxD(P3.1) —— 串行输出口
INT0(P3.2) —— 外部中断0
INT1(P3.3) —— 外部中断
T0(P3.4) —— 定时器0 外部输入
T1(P3.5) —— 定时器1 外部输入
WR(P3.6) —— 外部数据存储器写信号
RD(P3.7) —— 外部数据存储器读信号
RST —— 复位。当晶振在运行中只要复位管脚出现2个机器周期高电平,即可复位内部。有扩散电阻连接到Vss ,仅需要外接一个电容到V CC 即可实现上电复位。
ALE —— 地址锁存使能。在访问外部存储器时,输出脉冲锁存地址的低字节,在正常情况下,ALE 输出信号恒定为1/6 振荡频率并可用作外部时钟或定时。
PSEN —— 程序存储使能。当执行外部程序存储器代码时,PSEN 每个机器周期被激活两次。在访问外部数据存储器时,PSEN 无效。访问内部程序存储器时,PSEN 无效。
EA/Vpp —— 外部寻址使能/编程电压。在访问整个外部程
序存储器时EA 必须外部置低,如果EA 为高时将执行内部程序,除非程序计数器包含大于片内
FLASH 的地址。该引脚在对FLASH 编程时,接5V/12V编程电压(VPP ) ,如果保密位1已
编程,EA 在复位时由内部锁存。
XTAL1 —— 反相振荡放大器输入和内部时钟发生电路输入。
XTAL2 —— 反相振荡放大器输出。
STC89C51的复位方式可以是上电自动复位,也可以是手动复位,此外,RST/Vpd 还是一
复用脚,Vcc 掉电其间,此脚可接上备用电源,以保证单片机内部RAM 的数据不丢失。
XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内
部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
3.1.9红绿灯动态闪动方式代码
因为红绿灯放在不同的方位,并且在不同的时刻有着不同的动态效果,所以其代码也必须要有此种变换效果的功能,其代码如下:
void light()
{
if(deng==0)
{
light1=1; light2=0; light3=0; }
if(deng==1) {
if(t==1) {
light1=0; light2=0; light3=0; }
if(t==2) {
light1=0; light2=0; light3=1; } }
if(deng==2) {
light1=0; light2=1; light3=0; }
if(deng==3)
{ if(t==1) { light1=0; light2=0; light3=0; } if(t==2) { light1=0; light2=0; light3=1; }
}
4、定时器延时
4.1 计数器初值计算
定时器工作时必须给计数器送计数器初值,这个值是送到TH 和TL 中的。它是以加法记数的,并能从全1到全0时自动产生溢出中断请求。因此,我们可以把计数器记满为零所需的计数值设定为C 和计数初值设定为TC 可得到如下计算通式: TC=M-C 式中,M 为计数器模值,该值和计数器工作方式有关。在方式0时M 为2;在方式1时M 的值为2。
4.2 定时器硬件最大延时
因一个机器周期等于12个振荡周期,所以计数频率fcount=1/12osc。如果晶振为12MHz ,则计数周期为:
T=1/(12×106)Hz ×1/12=1μs
很显然可以知道:
方式0 13位定时器最大定时间隔=213×1µS =8.192ms 168
方式1 16位定时器最大定时间隔=2×1µS =65.536ms
方式2 8位定时器最大定时间隔=28×1µS =256µS
显然1秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题.
普通延时方法:
void delay(uint z)
{
}
4.3 定时1秒的方法
我们采用在主程序中设定一个初值为65536的软件计数器和使T0定时50毫秒.这样每当T0到50毫秒时CPU 就响应它的溢出中断请求,进入他的中断服务子程序。在中断服务子程序中,count 自加到20时表示1秒已到可以返回到输出时间显示程序[2]。
4.4定时器中断代码
void dingshi()interrupt 1
{
TH0=(65536-45872)/256; TL0=(65536-45872)/256; num++; san++; if(san==20) { } san=0; t=1; uint t1,y; for(t1=z;t1>0;t1--) for(y=110;y>0;y--); 16
} if(san==10) { } t=2;
在中断之前,必须要将时钟中断1开通
TMOD=0x01;
EA=1; ET0=1; TR0=1;
5工作方式
东南西北四个方位均设有红绿黄三盏灯,并且每次红绿转换时,黄灯会以1HZ 的频率闪动,而主杆道通行时间为60S ,次杆道通行时间为40S ,黄灯闪动时间为8S 。
此处由一两位一体的数码管作显示效果。
6、工作原理图
工作原理图如下:
7调试与检测
7.1. 硬件检测
硬件检测又分为,静态检测和动态检测。
7.1.1静态检测
第一步:目测,检查外部的各种元件或则电路是否有断点;
第二步:用万用表测试。先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象;
第三步:加电检测。给板加电,检测所有的插座或是器件的电源端是否符合要求的值; 第四步:是联机检查。因为只有用单片机开发系统才能完成对用户系统的调试。
7.1.2动态检测
动态检测是在设计工作的情况下发现和排除系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。
首先运用由分到合的调试方法。调试电路时,与该元件无关的器件全部从设计中去掉,这样可以将故障范围限定在某个局部的电路上。当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。由分到合的调试既告完成。
然后运用由近及远的调试方法。将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。
7.2软件调试
1.静态调试
静态调试是指对程序进行人工书面检查。静态调试时要仔细阅读程序及其文档,经过结构分析、功能分析、逻辑分析、接口分析、语法分析以及逐行检查。
(1) 检查语法错误
产生语法错误的原因主要有两个:一是键入错误,此错误如同写文章时的“笔误”;二是由于对语法规则不熟悉,见书后错误信息、各种限制、全局变量与局部变量、先后左右的原则等,这些虽不是系统规定,但也是语法的一部分,应作为专项予以检查。
(2) 跟踪过程
此时的跟踪程序流程,即把自己当作计算机。给定一组输入数据后,顺序执行每条语句,考察所得结果,寻找错误。
2. 动态调试
动态调试是指实际上机运行程序进行调试。源程序上机运行,语言系统及操作系统会在程序有故障时给出信息,常见的故障分为以下几种情况:
(1)
(2)
(3)
(4) 没有通过编译。 没有通过连接编译。 程序的运行过程因故障而停止。 程序只输出部分结果。对这部分结果进行分析,可大致了解程序被执行的逻辑,或程序在什么地方中断。
软件调试通过对拥护程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正。本系统的软件系统不是很大,而且全部采用C 语言编写,除语法与逻辑差错外,当确认程序没问题时,直接下载到单片机仿真调试。采取自下到上的方法,单独调好每一个模块,最后完成一个完整的系统调试。
8、结束语
本次设计利用了STC89C52进行,其功能与51相仿,在设计过程中遇到过不小问题,如代码编译出错,逻辑出错,仿真出错到焊接时候的出错,但设计的本身就是为了在出错中了成长,这让我更加了解最小系统设计的方法。
通过这次毕业设计,使我得到了一次用专业 知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是C 语言)的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。在信息系各位指导教师的大力支持下,我基本完成了这次设计任务。我在这一次毕业设计过程中,很是受益匪浅。通过对自己在大学三年时间里所学的知识的回顾,并充分发挥对所学知识的理解和对毕业设计的思考及书面表达能力,最终完成了。这为自己今后进一步深化学习,积累了一定宝贵的经验。撰写论文的过程也是专业知识的学习过程,它使我运用已有的专业基础知识,对其进行设计,分析和解决一个理论问题或实际问题,把知识转化为能力的实际训练。在同学及指导教师孔老师的一些指点和引导下,真正培养了我运用所学
知识解决实际问题的能力。
通过这次设计我发现,只有理论水平提高了;才能够将课本知识与实践相整合,理论知识服务于教学实践,以增强自己的动手能力。这个设计在现实社会中也存在着一定的价值和意义,从中我获得很深刻的经验。通过这次课程设计,我们知道了理论和实际的距离,也知道了理论和实际想结合的重要性,,也从中得知了很多书本上无法得知的知识。
我们的学习不但要立足于书本,以解决理论和实际教学中的实际问题为目的,还要以实践相结合,理论问题即实践课题,解决问题即课程研究,学生自己就是一个专家,通过自己的手来解决问题比用脑子解决问题更加深刻。学习就应该采取理论与实践结合的方式,理论的问题,也就是实践性的课题。这种做法既有助于完成理论知识的巩固,又有助于带动实践,解决实际问题,加强我们的动手能力和解决问题的关键。
参考文献
1、 郭天祥 新概念51单片机C 语言教程 入门、提高、开发、拓展全攻略 2009.1 78-113
2、 张培仁,等. 基于C 语言编程MCS-51单片机原理及应用 2003.193-209
3、 王守中. 51单片机开发入门与典型实例[M] 2007.86-95
4、 李琳. 用单片机实现交通灯的控制[J]. 科技创业月刊 2008年,11期: 145-146