课程名称:微型计算机系统
设计题目:基于单片机的交通灯控制系统设计
系统要求:
可用红、黄、绿三种颜色发光二极管和两位LED数码管模拟交通灯的变化规律:
硬件设计:
软件设计:
1)主程序设计
2)各功能子程序设计
其他要求:
(1)报告书封面
(2)课程设计任务书
(3)系统设计方案的提出、分析
(4)系统中典型电路的分析
(5)系统软件结构框图
(6)系统电路原理图
(7)源程序
(8)课设字数不少于3000字
成绩 | |
评语: |
基于单片机的交通灯控制系统设计
摘要:
当你路过一个十字路口时,你是否注意到各个方向车辆和信任有条不紊的通过十字路口。这样井然有序的情景靠什么来实现呢?靠的是交通灯控制系统。在论文中我使用STC89C51作为主控单元。通过单片机芯片的P1口和P2口分别控制东西方向和南北方向红黄绿灯的点亮。通过单片机芯片STC89C51的RXD和TXD控制数码管的显示时间。采用发光二极管来实现交通灯的点亮,由数码管实现时间的显示。该系统不仅仅具有交通等的基本功能还有倒计时,还可以通过按键在紧急事件中四个方向都设置为红灯紧急模式。当然也可以通过按键来设置倒计时时间,使系统更加符合实际交通情况。
我设计的交通灯控制系统可以较好的模拟十字路口出现的交通状况,使行人和车辆能有序的通行。
关键词:交通控制系统 单片机 AT89C51 数码管 按键 LED
内容
1系统方案论证
1.1设计方案
方案一:控制系统主要控制东西方向和南北方向交通状况,系统以单片机芯片STC89C51为主控单元,通过控制三种颜色LED灯的亮灭来指导个车道通行,上电时复位系统使系统进入运行状态。总体框图如下:(见51hei附件)
1.2功能概述
在东西方向和南北方向的十字路口分别设立红黄绿交通指示灯,用数码管倒计时显示。正常情况下两个主干线上的红黄绿灯进行交换。红灯亮表示禁止通行,绿灯亮表示可以通行,每次绿灯变红灯之前,黄灯亮五秒,方便那些未能及时通过十字路口的车辆能继续通过。十字路口设立数码管有倒计时功能,方便人们直关把握通过时间。本设计也考虑紧急情况,当按下紧急模式按键后,四个方向红灯都会常亮。对于夜晚车辆比较少,本设计设计了夜晚模式,按下按键后四个方向黄灯会常亮。
2系统硬件设计
2.1交通信号灯控制系统的组成
2.1.1 ATC89C51芯片
选用的ATC89C51与同系列AT89C51在功能上有明显的提高,最突出的是可以实现在线编程。用于系统的总控制。其主要功能列举如下:
单片机引脚图如下:
2.1.2交通灯控制系统构成
芯片ATC89C51一片,2段共阴极数码管四个,红黄绿发光二极管各四个,电阻若干,晶振一个,电容若干,按键若干。
交通灯控制系统结构框图:(见51黑附件)
系统各部分工作原理:采用单片机的I/O口P0口通过上拉电阻和交通灯相连接,P3.0、P3.1口接到数码管控制位上,控制数码管的显示,程序放在ATC89C51单片机的ROM中来设置初始时间,在十字路口的四组红、黄、绿交通灯中,由单片机的P1.5—P1.7、P1.0—P1.2、P2.5—P2.7、P2.0—P2.2分别控制东西南北方向的三色灯。由于交通灯为发光二极管并且阳极通过限流电阻与电源正极相连,因此I/O口输出电平时,与之相连的指示灯才会点亮,然后通过数码管倒计时时间。I/O口输出高电平时,相应指示灯会灭。由于ATC89C51本身集成了看门狗指令,当系统出现异常时看门狗会发出溢出中断。通过专用的端口输出,引起RESET复位信号复位系统。
2.2各单元电路模块功能
2.2.1时钟电路模块
本时钟电路由一个晶体振荡器12MHz和两个30pF的瓷片电容组成。时钟电路用于产生单片机工作所需的时钟信号,而是需所研究的是指令执行中各信号之
间的相互关系。单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格的工作。其电路图所示:
2.2.2复位电路模块
电容在上接高电平,电阻在下接低电平,中间为RST。这种复位电路为高电平复位。其工作原理是:通电时,电容两端相当于是短路,于是RST引脚上为高电平,然后电源通过电容对电阻充电,RST端电压慢慢下降,降到一定程度,即为低电平,单片机开始正常工作。其电路如下:
2.2.3信号灯输出控制模块
路口交通灯指示采用红、黄、绿发光二极管进行提示。其电路如下:
2.2.4时间显示电路模块
本系统使用数码管完成倒计时显示功能。以东西方向为例,数码管显示的数值从绿灯的设置时间最大值往下减,每秒钟减1,一直减到零。然后又从红灯的设置时间最大值往下减,一直减到零。接下来又显示绿灯时间,如此循环。系统共有4个两位LED数码管,分别放在模拟交通灯的上方。路口通行剩余时间采用红色7段数码管显示,采用共阴极数码管,如用单机IP0口加上拉电阻驱动,P3.0/P3.1口来控制数码管的位。其显示电路如下:
2.2.5按键输入模块
由于该系统具有夜间模式,紧急情况模式和交通灯倒计时时间设定功能,所有需要加上这些功能键,如下图所示:
3系统软件设计
3.2延时的设定
3.2.1 计数器初值计算
定时器工作时必须给计数器送初值,这个值是送到TH和TL中的。他是以加法记数的,并能从全1到全0自动产生溢出中断请求。因此,可以把计数器记满为零所需的计数值设定为C和计数初值设定为TC可得到如下计算公式:
TC=M-C
式中,M为计数器模值,该值与计数器工作方式有关。在方式0时M为
2^13;在方式1时M的值为2^16;在方式2和3中为2^8。
算法公式:T=(M-TC)T(计数)或TC=M-T/T(计数)
T(计数)是单片机时钟周期T(clk)的12倍;TC为定时的初值
如果单片机的主脉冲频率为T(clk)12MHz,经过12分频
方式0 TMAX=2^13*1微妙=8.192毫秒
方式1 TMAX=2^16*1微妙=65.536毫秒
实现1秒钟方法:
采用在主程序中设定一个初值为20的软件计数器和使T1定时50毫秒。
这样每当T1到50毫秒时CPU就响应他的溢出中断请求,进入他的中断服务子程序。在中断服务子程序中,CPU先使软件计数器减1,然后判断他是否为零。为0表示1秒已到可以返回到输出时间显示程序。
定时器需定时50毫秒,故T1工作于方式1。
初值计算:TC=M-T/T(计数)=2^16-50ms/1us=15536=3CB0H
延时程序:
START:MOV TMOD,#10H ;令TO为定时器方式1
MOV TH0,#3CH ;装入定时器初值
MOV TL0,#0B0H
SETB EA ;打开总中断
SETB ET1 ;开T1中断
SETB ER ;启动T1计数器
CLR FLAG1
CLR FLAG2
CLR FLAG3
MOV R3,#20H ;软件计数器赋初值
ORG 001BH
LJMP DSD
ORG 0300H
DSD:INC R3
MOV TH0,#3CH ;重装定时器初值
MOV TL0,#B0H
CJNE R3,#20,FH
DEC R0
DEC R1
MOV R3,#00H
FH: RETI
程序的软件延时:
单片机的工作频率为12MHz。机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/12M)=1us。可以知道具体每条指令的周期数,这样就可以通过指令的执行条数来确定1秒的时间。
具体的延时程序分析:
DELY: MOV R4,#80H ;延时一秒主程序
DE2: LCALL DELAY1
DJNE R4,DE2
RET
DELAY1: MOV R4,#00H ;延时125us子程序
D1: MOV R5,DL2
DJNE R4,D1
RET
DELAY1为一个双重循环,循环次数为256*256=65536次,所以延时时间=65536*2=131072us约为125ms。
DELY R4设置为初值8,主延时程序循环8次,所以125ms*8=1s
用于四个数码管的倒计时显示,代码如下:
sbit smg1=P3^0; //定义南北方向数码管低位
sbit smg2=P3^1; //定义南北方向数码管高位
sbit smg1=P3^2; //定义东西方向数码管低位
sbit smg2=P3^3; //定义东西方向数码管高位
void djsxs()
{
int b1=0,b2=0;
b1=djs/10; //将倒计时时间的高位赋予b1
b2=djs%10; //将倒计时时间的低位赋予b2
P0=table[b1];
smg1=0;
delayms(3);
smg1=1; //显示b1
P0=table[b2];
smg2=0;
delayms(3);
smg2=1; //显示b2
P0=table[b1];
smg3=0;
delayms(3);
smg3=1; //显示b1
P0=table[b2];
smg4=0;
delayms(3);
smg4=1; //显示b2
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |