交通灯控制器设计讲解Word文件下载.docx
- 文档编号:16416443
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:16
- 大小:332.22KB
交通灯控制器设计讲解Word文件下载.docx
《交通灯控制器设计讲解Word文件下载.docx》由会员分享,可在线阅读,更多相关《交通灯控制器设计讲解Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
教研室审核意见:
教研室主任签字:
教学系审核意见:
主任签字:
年月日
摘要
近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。
那么靠什么来实现这井然秩序呢?
靠的就是交通信号灯的自动指挥系统。
交通信号灯控制方式很多。
本系统采用MSC-51系列单片机STC89C52和可编程并行I/O接口芯片8255A为中心器件来设计交通灯控制器,实现了能根据实际车流量通过8051芯片的P1口设置红、绿灯燃亮时间的功能;
红绿灯循环点亮,倒计时剩5秒时灯闪烁警示(交通灯信号通过PA口输出,显示时间直接通过8255的PB口输出至双位数码管),遇紧急情况可手动控制交通灯进入特殊状态。
本系统实用性强、操作简单、扩展功能强。
关键词:
STC89C52;
I/O扩展芯片8255;
数码显示管;
LED显示
3.38255片………………………………………………………………………………...3
4.5系统主要程序的设计理…………………………………………………….7
4.5.1初始化程序……………………………………………………………………..7
4.5.2主程序…………………………………………………………………………..8
4.5.3外中断0中断服务程序……………………………………………….8
4.5.4定时服务中断程序...............................................8
4.5.5交通灯18s显示原理………………………………………………….9
5详细仪器清单………………………………………………………………………….........9
6总结与思考及致谢…………………………………………………………...9
基于STC89C52的交通灯控制器设计
1设计要求
本课题以单片机为核心,设计交通灯控制器,具有以下功能:
1、东西方向为红灯时,南北方向为绿灯;
东西方向为绿灯时,南北方向为红灯。
2、每个方向的通车时间为20S。
3、当倒计时至5S时,灯开始闪烁。
4、外部有一个按键可以控制交通灯进入特殊状态10S,及10S灯全亮的状态,10S后恢复正常运行。
2方案论证与对比
2.1方案一:
为了实现LED数码管的数字显示,采用静态扫描实现,此方法操作复杂,并且一个端口只能对应一个数码管。
2.2方案二:
采用动态扫描实现LED数码管的数字显示,能有效的节省端口资源,并且操作也相对简单。
2.3方案对比与选择:
根据以上方案的介绍与对比,显然选择方案二。
3系统硬件电路的设计
3.1芯片的选择
STC89C52是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用STC公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构。
STC89C52RC具有如下特点:
40个引脚(引脚图如图1所示),4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,STC89C52RC设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其他功能直至外中断激活或硬件复位。
图1STC89C52芯片引脚图
3.2STC89C52引脚功能
VCC(40):
+5V。
GND(20):
接地。
P0口(39-32):
P0口为8位漏极开路双向I/O口,每引脚可吸收8个TTL门电流。
P1口(1-8):
P1口是从内部提供上拉电阻器的8位双向I/O口,P1口缓冲器能接收和输出4个TTL门电流。
P2口(21-28):
P2口为内部上拉电阻器的8位双向I/O口,P2口缓冲器可接收和输出4个TTL门电流。
P3口(10-17):
P3口是8个带内部上拉电阻器的双向I/O口,可接收和输出4个TTL门电流,P3口也可作为AT89C51的特殊功能口。
RST(9):
复位输入。
当振荡器复位时,要保持RST引脚2个机器周期的高电平时间。
ALE/PROG(30):
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节,在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6,它可用作对外部输出的脉冲或用于定时目的,要注意的是,每当访问外部数据存储器时,将跳过1个ALE脉冲。
PSEN(29):
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期2次PSEN有效,但在访问外部数据存储器时,这2次有效的PSEN信号将不出现。
EA/VPP(31):
当EA保持低电平时,外部程序存储器地址为(0000H-FFFFH)不管是否有内部程序存储器。
FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1(19):
反向振荡器放大器的输入及内部时钟工作电路的输入。
XTAL2(18):
来自反向振荡器的输出。
3.38255芯片
单片机系统里常用的8255芯片如图2是一个典型的可编程通用并行接口芯片,用来扩展单片机的端口,它具有三个8位的并行口,有三种工作方式,可作为单片机与各种外部设备连接的接口电路。
图28255芯片引脚图
3.48255芯片引脚功能
RESET:
复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。
CS:
芯片选择信号线,当这个输入引脚为低电平时,即/CS=0时,表示芯片被选中,允许8255与CPU进行通讯;
/CS=1时,8255无法与CPU做数据传输.
RD:
读信号线,当这个输入引脚为低电平时,即/RD=0且/CS=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。
WR:
写入信号,当这个输入引脚为低电平时,即/WR=0且/CS=0时,允许CPU将数据或控制字写入8255。
D0~D7:
三态双向数据总线,8255与CPU数据传送的通道,当CPU执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。
PA0~PA7:
端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。
PB0~PB7:
端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。
PC0~PC7:
端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。
端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。
A0,A1:
地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器。
当A0=0,A1=0时,PA口被选择。
当A0=0,A1=1时,PB口被选择。
当A0=1,A1=0时,PC口被选择。
当A0=1.A1=1时,控制寄存器被选择。
3.5复位电路
MCS-51单片机的复位是由外部的复位电路来实现的。
复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。
上电复位:
上电复位电路是—种简单的复位电路,只要在RST复位引脚接一个电容到VCC,接一个电阻到地就可以了。
上电复位是指在给系统上电时,复位电路通过电容加到RST复位引脚一个短暂的高电平信号,这个复位信号随着VCC对电容的充电过程而回落,所以RST引脚复位的高电平维持时间取决于电容的充电时间。
为了保证系统安全可靠的复位,RST引脚的高电平信号必须维持足够长的时间。
上电自动复位电路图如图3所示:
图3上电自动复位图
上电自动复位是通过外部复位电路的电容充电来实现的。
只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。
3.6数码管显示电路
显示电路采用6个LED数码管。
单片机通过8255芯片的扩展端口驱动LED数码管(STC89C52输出口能吸收20mA电流),用动态扫描法实现LED显示。
数码管显示器成本低,配置灵活在单片机应用系统中广泛应用。
数码管电路图如图4所示:
图4数码管电路图
4系统软件的程序设计
4.1软件程序内容
本设计的软件程序包括主程序、中断子程序、键盘处理程序和时钟显示子程序等。
4.2主程序流程图
此设计的主程序流程图如图5所示:
图5主程序流程图
4.3定时程序设计
单片机的定时功能也是通过计数器的计数来实现的,此时的计数脉冲来自单片机的内部,即每个机器周期产生一个计数脉冲,也就是每经过1个机器周期的时间,计数器加1。
如果MCS-51采用的11.092MHz晶体,则计数频率为1MHz,即每过1us的时间计数器加1。
这样可以根据计数值计算出定时时间,也可以根据定时时间的要求计算出计数器的初值。
MCS-51单片机的定时器/计数器具有4种工作方式,其控制字均在相应的特殊功能寄存器中,通过对特殊功能寄存器的编程,可以方便的选择定时器/计数器两种工作模式和4种工作方式。
定时器/计数器工作在方式0时,为13位的计数器,由TLX(X=0、1)的低5位和THX的高8位所构成。
TLX低5位溢出则向THX进位,THX计数溢出则置位TCON中的溢出标志位TFX。
当定时器/计数器工作于方式1,为16位的计数器。
本设计单片机多功能定时器,所以MCS-51内部的定时器/计数器被选定为定时器工作模式,计数输入信号是内部时钟脉冲,每个机器周期产生一个脉冲使计数器增1。
4.4实时时钟程序设计步骤
1、选择工作方式,计算初值;
2、采用中断方式进行溢出次数累计,溢出一次为50ms,20次为1s;
3、从18秒倒计时是通过溢出次数累加和数值比较实现的;
4、主程序:
主要进行定时器/计数器的初始化编程,然后反复调用显示子程序的方法等待中断的到来;
5、中断服务程序:
进行计时操作;
4.5系统主要程序的设计原理
4.5.1初始化程序
初始化程序主要完成内存划,定时器的工作模式、中断方式等的设定。
由于子程序调用较多,因此初始化时。
定时器T0设为16位定时器模式,即定时器设置为工作方式1,定时时间位50ms,为秒计时用。
分别给定时器的高八位和低八位赋初值,使定时器记满一次的时间为50ms。
如下所示式子:
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
子程序如下:
voidinit()
{
TMOD=0X01;
TH0=(65536-50000)/256;
EA=1;
ET0=1;
TR0=1;
}
4.5.2主程序
主程序要负责总体程序管理功能,实现人机交换设定。
由于采用动态扫描方式显示时间,因此主程序大部分时间要调用扫描显示程序。
当P1=0x99时,南北亮红灯,东西为绿灯;
当P1=0x66时,南北亮绿灯,东西亮红灯。
4.5.3外中断0中断服务程序
外部中断程序用于发生紧急情况时,使东西南北各个方向的灯全亮。
按外部中断INT0键,四个方向的发光二极管全亮,待12s以后恢复正常工作。
程序如下:
int0()interrupt0
{
j=1;
while(j)
{
P1=0x00;
delay(12000);
j=0;
}
4.5.4定时服务中断程序
分别给定时器的高八位和低八位赋初值,使定时器没记忆次数的时间为50ms。
TL0=(65536-50000)%256;
4.5.5交通灯18s显示原理
设置num为T0累计溢出的次数,当num<
=360时,即计时时间t在前18秒之内,交通灯南北亮绿灯,东西亮红灯;
当(num>
360)&
(num<
=720)时,即计时时间t在下一个18秒之内,交通灯南北亮红灯,东西亮绿灯;
当num=720时,通过软件将num置0。
5详细仪器清单
表格1元器件种类及数量
元件名称
数量
PCB板
1
22UF电容
30PF电容
2
发光二极管
3位数码管
三极管9015
8
11.0592晶振
轻触开关
16
1K电阻
22
STC89C52芯片
8255芯片
1
220电阻
10
6总结与思考及致谢
我们进行了为期两周的课程设计。
通过这次课程设计,我拓宽了知识面,锻炼了能力,综合素质得到较大提高,尤其是观察、分析和解决问题的实际工作能力。
作为整个学习体系的有机组成部分,课程设计虽然安排在两周进行,但并不具有绝对独立的意义。
它的一个重要功能,在于运用学习成果,检验学习成果。
运用学习成果,把课堂上学到的系统化的理论知识,尝试性地应用于实际设计工作,并从理论的高度对设计工作的现代化提出一些有针对性的建议和设想。
检验学习成果,看一看课堂学习与实际工作到底有多大距离,并通过综合分析,找出学习中存在的不足,以便为完善学习计划,改变学习内容与方法提供实践依据。
对我们通信专业的本科生来说,实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。
这也是一次预演和准备毕业设计工作。
通过课程设计,让我们找出自身状况与实际需要的差距,并在以后的学习期间及时补充相关知识,为求职与正式工作做好充分的知识、能力准备,从而缩短从校园走向社会的心理转型期。
课程设计促进了我系人才培养计划的完善和课程设置的调整。
近年来,我系为适应学生的实践需要陆续增设与调整了一系列课程,受到同学的欢迎,其中这次的设计很受同学们的喜欢。
课程设计达到了专业学习的预期目的。
在两个星期的课程设计之后,我们普遍感到不仅实际动手能力有所提高,更重要的是通过对软件开发流程的了解,进一步激发了我们对专业知识的兴趣,并能够结合实际存在的问题在专业领域内进行更深入的学习。
并且在这次课程设计的过程中,我真正接触到了硬件,经历从对硬件方面知识的欠缺到熟悉的过程,通过这次实验,第一次觉得原来硬件并不像我想象中的那样难,相反地,它是一门很有意思的课程,那么多不同的小小的芯片组合在一起竟然可以实现你想象不到的效果,真的是很神奇!
以前只是觉得软件里的程序很神奇,因为就是那些密密麻麻的代码组合在一起也可以实现很特别的功能,现在看来硬件也蛮有意思的,总的说来,计算机真的是一门很神奇的课程,不管在哪些方面,都起着举足轻重的作用,想想现在的各行各业,哪个不用到微型机,对于学习通信专业的我来说,这应该是个警示,在剩下的大学生活里,我应该好好珍惜,好好学习各方面的知识,这样以后在工作中也不至于落下笑话,至少要让别人觉得自己确实是学通信工程专业出去的。
至少在单片机方面也是了解了一些些,我相信这次课程设计会对我以后的工作会有很大程度的益处,在此还要谢谢谭老师和田老师两位的用心指导!
参考文献
[1]张鑫,华臻,陈书谦.单片机原理及应用(A).北京电子工业出版社,2005.
[2]朱定华,戴汝平.单片微机原理与应用.(M)北京:
清华大学出版社.,2003.
[3]楼然苗,李光飞.单片机课程设计指导.(B).北京航空航天大学出版社,2007.
[4]康华光.电子技术基础数字部分(第五版).北京.华中科技电子技术组,2007.
[5]严天峰.单片机应用系统设计与仿真调试.北京:
北京航空航天大学出版社,2002.
附录一原理图
附录二程序清单
#include<
reg52.h>
#include<
absacc.h>
#defineuintunsignedint
#defineucharunsignedchar
#definea8255_PAXBYTE[0xD1FF]/*PA口地址*/
#definea8255_PBXBYTE[0xD2FF]/*PB口地址*/
#definea8255_CONXBYTE[0xDEFF]
uintnum,j;
uchara;
uinttable[]={0x80,0x9B,0x42,0x0A,0x19,0x0C,0x04,0x9A,0x00,0x08};
voiddelay(uintz)
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
delay1()
{uinty;
for(y=110;
display(a)
ucharge,shi;
ge=a%10;
shi=a/10;
a8255_PA=0xdf;
a8255_PB=table[ge];
delay1();
a8255_PA=0xef;
a8255_PB=table[shi];
}
{a8255_CON=0X80;
IT0=1;
EX0=1;
voidmain()
init();
while
(1)
{
while(num<
=360)
a=(18-num/20);
display(a);
P1=0x99;
if(num>
220)
P1=0xff;
delay(50);
P1=0x99;
while((num>
=720))
{a=(18-(num-360)/20);
P1=0x66;
580)
delay(50);
}
if(num=720)
num=0;
}
voidtime()interrupt1
num++;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯 控制器 设计 讲解