基于89C51单片机交通灯课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要
近年来,随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,正在不断的应用到实际生活中,并且根据具体硬件结构软硬件结合,加以完善。
十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。
那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。
交通信号灯控制方式很多。
本系统采用MCS-51系列单片机STC89C51为中心器件来设计交通灯控制器,实现了通过信号灯对路面状况的智能控制。
从一定程度上解决了交通路口堵塞、车辆停车等待时间不合理、急车强通等问题。
系统具有结构简单、可靠性高、成本低、实时性好、安装维护方便等优点,有广泛的应用前景。
关键词:交通灯单片机数码管
一 .总体设计思路
1.1设计目的及思路
设计目的
了解交通灯管理的基本工作原理,熟练掌握STC89C51的工作原理和应用编程,熟悉STC89C51单片机并行接口的各种工作方式和应用,并了解计数器/定时器的工作方式和应用编程外部中断的方法,掌握多位LED显示问题的解决。
设计思路
(1)分析目前交通路口的基本控制技术,提出自己的交通控制的初步方案。
(2)确定系统交通控制的总体设计,增加了倒计时显示提示。
(3)进行显示电路。
(4)进行软件系统的设计。
1.2 实际交通灯显示时序及状态转换的理论分析
图1所示为红绿灯转换的状态图。
S1 S2
图1 红绿灯状态转换图 表1 十字路口指示灯燃亮方案
说明:
(1)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;南北道为绿灯,此道车辆通过,行人禁止通行。
时间为60秒。
(2)黄灯闪烁5秒,警示车辆和行人红、绿灯的状态即将切换。
(3)当东西方向为绿灯,此道车辆通行;南北方向为红灯,南北道车辆禁止通过,行人通行。
时间为80秒。
东西方向车流大 通行时间长。
(4)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。
(5)此表可根据车流量动态设定红绿灯初始值。
共四种状态,分别设定为S1、S2、S3、S4,交通灯以这四种状态为一个周期,循环执行如下图所示:
状态 S1 S2 S3 S4 时间 30s 5s 30s 5s 东西道 红灯亮 红灯亮 绿灯亮 黄灯亮 南北道
绿灯亮
黄灯亮
红灯亮
红灯亮
S4
S3
图2 交通灯状态循环图
程序就是在上述四种状态下循环转化的。
一个周期四个状态,在正常模式下共花费1分10秒。
二.具体设计方案
2.1方案要求:
本设计要求与交通信号实际控制一致,采用LED模拟信号灯,信号灯分东西、南北二组,分别有红、黄、绿三色。
其工作状态由程序控制,启动、停止按钮分别控制信号灯的启动与停止。
白天/黑夜转换开关可对信号进行控制转换。
并且要求能用两位数码管(或者一位数码管)来显示红灯或者绿灯等待的时间,在黄灯的时候数码管不显示。
信号灯的控制要求如下:
⑴假设东西方向交通繁忙为主干道,车流量为南北交通的两倍。
因此东西方向的绿灯通行时间为是南北方向上的两倍。
⑵开始时东西方向绿灯先亮,南北为红灯。
⑶按下启动按钮开始工作,,按下停止按钮,停止工作。
白天/黑夜转换开关闭合时为黑夜工作状态,这时只有黄灯来回闪烁,断开为白天工作状态。
白天工作状态要求:东西方向绿灯亮40s,然后黄灯闪三下(1下/秒,共5秒),然后红灯亮20s,而南北方向为红灯亮40s然后绿灯亮20s,然后黄灯也闪三下;如此周期循环下去。
示意图
2.2方案分析
根据十字路口交通灯的要求,可将本系统分为三个模块,第一模块是控制模块,主要负责整个系统的控制和运算,从而使各模块正常工作,第二个模块式显示模块包括LED灯和数码管;第三是电源模块,给各模块提供电源,让各模块工作。
其系统设计结构如图:
图3.系统设计结构图
2.3 89C51单片机引脚功能说明
89C51外部引脚图:(可以直接拷入ASM程序文件中,作注释使用,十分方便)
┏━┓┏━┓
P1.0 ┫1 ┗┛40┣ Vcc
P1.1 ┫2 39┣ P0.0
P1.2 ┫3 38┣ P0.1
P1.3 ┫4 37┣ P0.2
P1.4 ┫5 36┣ P0.3
P1.5 ┫6 35┣ P0.4
P1.6 ┫7 34┣ P0.5
P1.7 ┫8 33┣ P0.6
RST/Vpd ┫9 32┣ P0.7
RXD P3.0 ┫10 31┣ -EA/Vpp(内1/外0 程序地址选择)
TXD P3.1 ┫11 30┣ ALE/-P (地址锁存输出)
-INT0 P3.2 ┫12 29┣ -PSEN (外部程序读选通输出)
-INT1 P3.3 ┫13 28┣ P2.7
T0 P3.4 ┫14 27┣ P2.6
T1 P3.5 ┫15 26┣ P2.5
-WR P3.6 ┫16 25┣ P2.4
-RD P3.7 ┫17 24┣ P2.3
X2 ┫18 23┣ P2.2
X1 ┫19 22┣ P2.1
GND ┫20 21┣ P2.0
┗━━━━┛
引脚说明:
①电源引脚
Vcc(40脚):典型值+5V。
Vss(20脚):接低电平。
②外部晶振
X1、X2分别与晶体两端相连接。
当采用外部时钟信号时,X2接振荡信号,X1接地
③输入输出口引脚:
P0口:I/O双向口。
作输入口时,应先软件置“ 1”。
P1口:I/O双向口。
作输入口时,应先软件置“ 1”。
P2口:I/O双向口。
作输入口时,应先软件置“ 1”。
P3口:I/O双向口。
作输入口时,应先软件置“ 1”。
④控制引脚:
RST/Vpd、ALE/-PROG、-PSEN、-EA/Vpp组成了MSC-51的控制总线。
RST/Vpd(9脚):复位信号输入端(高电平有效)。
第二功能:加+5V备用电源,可以实现掉电保护RAM信息不丢失。
ALE/-PROG(30脚):地址锁存信号输出端。
第二功能:编程脉冲输入。
-PSEN(29脚):外部程序存储器读选通信号。
-EA/Vpp(31脚):外部程序存储器使能端。
第二功能:编程电压输入端(+21V)。
图6. 单片机8051的内部结构
2.4单片机最小系统
时钟电路
图7. 时钟电路
XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。
内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。
晶振的频率可以在1MHz-24MHz内选择。
电容取30PF左右。
系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。
AT89单片机内部有一个用于构成振荡器的高增益反相放大器。
引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。
这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。
外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。
对外接电容的值虽然没有严格的要求,但电容的大小会
影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。
因此,此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为22μF。
在焊接刷电路板时,
晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证震荡器稳定和可靠地工作。
复位电路
在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。
复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。
当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序。
复位是由外部的复位电路来实现的。
片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。
复位电路通常采用上电自动复位和按钮复位两种方式,此电路系统采用的是上电与按钮复位电路。
当时钟频率选用6MHz时,C取22μF,Rs约为200Ω,Rk约为1K。
复位操作不会对内部RAM有所影响。
常用的复位电路如下图所示:
图8. 复位电路图
显示电路
显示器普遍地用于直观地显示数字系统的运行状态和工作数据,按照材料及产品工艺,单片机应用系统中常用的显示器有:发光二极管LED显示器、液晶LCD显示器、CRT显示器等。
LED数码管是现在最常用的显示器之一。
发光二极管(LED)由特殊的半导体材料砷化镓、磷砷化镓等制成,可以单独使用,也可以组装成分段式或点阵式LED显示器件(半导体显示器)。
分段式显示器(LED 数码管)由7条线段围成8字型,每一段包含一个发光二极管。
外加正向电压时二极管导通,发出清晰的光。
只要按规律控制各发光段亮、灭,就可以显示各种字形或号。
LED数码管有共阳、共阴之分。
本系统采用的是两位共阴极数码管
三.电路图和程序
图10. 交通灯电路图具体程序:
#include <REG51.H>
#define uchar unsigned char
#define uint unsigned int
uint num,shi,ge;
sbit red=P1^0;
sbit yel=P1^1;
sbit gre=P1^2;
void delay()
{
uint a;
for(a=500;a>0;a--);
}
uchar code arry_duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void initial()
{
EA=1;
ET0=1;
TMOD=0x01;
TH0=0x4c;
TL0=0xd0;
}
void display(int Y)
{
shi=Y/10;
ge=Y%10;
TR0=1;
while(shi|ge!=0)
{
P2=0xfe;
P3=arry_duan[shi];
delay();
P2=0xfd;
P3= arry_duan[ge];
delay();
}
TR0=0;
}
void timer0() interrupt 1
{
TH0=0x4c;
TL0=0xd0;
num++;
if(num==20) {
num=0;
ge--;
if(ge==-1) {
ge=9;
shi--;
}
}
}
main()
{
initial(); while(1) {
red=0;
yel=0;
gre=1; display(40); red=0;
yel=1;
gre=0; display(3); red=1;
yel=0;
gre=0; display(20); red=0;
yel=1;
gre=0;
display(3);
}
}
程序编译和.hex文件创建截图
仿真截图
四.实验心得体会
通过本次试验我复习了单片机程序的编写,电路的连接以及程序的调试仿真,更加深刻的感受到了单片机的强大功能,通过实验也加强了动手操作的能力,和同学一起更加懂得了相互合作的重要性,以后我会更加努力的把本专业知识学好学精,争取为国家做到属于自己应做的奉献。
五.课程设计参考资料
1.《电子系统综合设计》郭勇北京大学出版社
2.《数字电子技术基础》阎石高教出版社3.《模拟电子技术基础》童诗白高教出版社
4. 《单片机原理及应用》张毅刚高等教育出版社。