基于单片机的交通灯设计Word下载.docx
- 文档编号:21461969
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:15
- 大小:141.47KB
基于单片机的交通灯设计Word下载.docx
《基于单片机的交通灯设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的交通灯设计Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
摘要:
自从1858年英国人,发明了原始的机械扳手交通灯之后,随后的一百多年里,交通灯改变了交通路况,也在人们日常生活中占据了重要地位,随着人们社会活动日益增加,经济发展,汽车数量急剧增加,城市道路日渐拥挤,交通灯更加显示出了它的功能,使得交通得到有效管制,对于交通疏导,提高道路导通能力,减少交通事故有显著的效果。
近年来,随着科技的飞速发展,电子器件也随之广泛应用,其中单片机也不断深入人民的生活当中。
本模拟交通灯系统利用单片机AT89S51作为核心元件,实现了通过信号灯对路面状况的智能控制。
从一定程度上解决了交通路口堵塞、车辆停车等待时间不合理、急车强通等问题。
系统具有结构简单、可靠性高、成本低、实时性好、安装维护方便等优点,有广泛的应用前景。
本模拟系统有单片机硬/软件系统,8位8段数码管显示系统。
和复位电路控制电路等组成,较好的模拟了交通路面的控制。
设计思路
(1):
分析目前交通路口的基本控制技术以及各种通行方案,并以此为基础提出自己的交通控制的初步方案。
(2):
确定系统交通控制的总体设计,包括,十字路口具体的通行禁行方案设计以及系统应拥有的各项功能,在这里,本设计除了有信号灯状态控制能实现基本的交通功能,还有倒计时显示提示、紧急情况下,全面禁行、黄绿红灯及左转周期随时可调这三项项特特殊功能。
(3)进行显示电路,按键电路的设计和对各器件的选择及连接,大体分配各个器件及模块的基本功能要求。
(4)进行软件系统的设计,对于本系统,本人采用单片机C语言编写,对单片机内部结构和工作情况做了充足的研究,了解中断以及延时原理,总体上完成了软件的编写。
然后在开发板上进行硬件调试。
单片机交通控制系统方案
2.1电源的供电方案
为使模块稳定的工作,必须有可靠的电源。
同时由于我们此次设计是基于开发板的,其内部已经将电源供电模块安装好,为了方便节省时间,我们采用开发板上的电源模块。
2.2显示界面设计
该系统要求完成倒计时功能,又由于所买开发板的限制,我们无法同时分别控制使用开发板上的LED灯和八段数码显示管,因此我们采取用最右边的两个数码管显示时间,其余六个数码管分别代表南北、东西方的红黄绿灯及左转信号。
2.3输入方式
受限于开发板,我们采用4x4矩阵键盘输入,其中10个作为0-9数字键,4个作为输入选择键,两个弃用。
单片机的交通控制系统的总体设计
3.1单片机交通控制系统的通行方案设计
设在十字路口,分为东西向和南北向,在任一时刻只有一个方向通行,另一方向禁行,持续一定时间,经过短暂的过渡时间,将通行禁行方向对换。
其具体状态如下:
(1)南北、东西方向黄灯都亮3秒,其他灯灭(为了方便演示,我们把初始时间设得较短,进入程序后,可根据需求用键盘把黄灯时间设定为0-9秒中的任意值)
(2)南北方向黄灯灭,同时绿灯亮,东西方向红灯亮,同时黄灯灭,倒计时2秒(为了方便演示,我们把初始时间设得较短,进入程序后,可根据需求用键盘把黄灯时间设定为0-99秒中的任意值)。
此状态下,东西向禁止通行,南北向允许通行。
(3)重复
(1)
(4)南北方向红灯亮,同时黄灯灭,东西方向绿灯亮,同时红灯灭,倒计时4秒(为了方便演示,我们把初始时间设得较短,进入程序后,可根据需求用键盘把黄灯时间设定为0-99秒中的任意值)。
此状态下,东西向允许通行,南北向禁止通行。
(5)步骤
(1)-(4)循环N次后(默认为1,运行后可设置为0-9任一值),选择相间执行(6)或(7)
(6)南北方红灯,东西方黄灯+绿灯,时长为南北向红灯时间。
此时,南北向禁行,东西向可前行和左转。
南北向黄灯,东西方红灯,时长为黄灯时长。
回到
(1)重新循环。
(7)南北向黄灯,东西向黄灯,时长为黄灯时长。
接着是南北向黄灯+绿灯,东西向红灯,时长为红灯时长。
此时,南北向可前行和左转。
由于开发板中灯与数码管的端口是同一端口,所以我们决定用剩余的数码管来显示红绿灯的状态。
某个管全亮,代表这个管所代表的灯亮,黄绿灯齐亮表示可左转。
3.2单片机交通控制系统的功能要求
本设计能模拟基本的交通控制系统,用红绿黄灯表示禁行,通行和等待的
信号发生,还能进行倒计时显示,通行时间调整功能和紧急情况全面禁行。
(1)倒计时显示
倒计时显示可以提醒驾驶员在信号灯灯色发生改变的时间、在“停止”和“通过”两者间作出合适的选择。
驾驶员和行人普遍都愿意选择有倒计时显示的信号控制方式,并且认为有倒计时显示的路口更安全。
倒计时显示是用来减少驾驶员在信号灯色改变的关键时刻做出复杂判断的1种方法,它可以提醒驾驶员灯色发生改变的时间,帮助驾驶员在“停止”和“通过”两者间作出合适的选择。
(2)时间的设置
本设计中可通过键盘对时间进行手动设置,为了体现人性化,我们的设计可满足人们对红黄绿灯三种时间的随时设定,还可以设定循环多少次后才左转。
进行设置时,只需先按下时间设置键,再按下红黄绿N四键之一,选择需更改的项目,再通过数字键依次输入时长的十位个位即可;
再按四件之一,又可以设置别的项目;
为了简化程序以及根据实际情况,我们把黄灯时长和循环次数设定都限定在0-9,十位输入非0值时系统还是按十位为0处理;
红绿灯时长可设定为0-99。
同时,为了防止按键抖动错读输入,以及防止一次按键多次读入,我们分别采取了延时3.33ms和1.116s。
整个键盘程序设计使操作简单方便,以便此设计可适应各种路况,增加了人为的可控性,避免自动故障和意外发生。
3.3单片机交通控制系统的基本构成及原理
单片机设计交通灯控制系统,可用单片机直接控制信号灯的状态变化,基本上可以指挥交通的具体通行,当然,接入LED数码管就可以显示倒计时以提醒行使者,更具人性化。
本系统在此基础上,加入了时间调整功能。
据此,本设计系统以单片机为控制核心,由按键设置模块产生输入,4个八段数码管灯组成的倒计时模块接受输出。
系统的总体框图如下所示。
单片机上电后,系统进入正常工作状态,执行交通灯状态显示控制,同时将时间数据倒计时输入到LED数码管上实时显示。
在此过程中随时调用时间调节中断和紧急情况中断。
智能交通灯的硬件设计
4.1AT89S51的内部构造如下图所示。
VCC:
电源电压
GND:
接地
P0口:
P0口是一组8位双向I/0口。
P0口即可作地址/数据总线使用,又可以作为通用的I/O口使用。
当CPU访问片外存储器时,P0口分时先作低8位地址总线,后作双向数据总线,此时,P0口就不能再作I/O口使用了。
在访问期间激活要使用上拉电阻。
P1口:
Pl是一个带内部上拉电阻的8准位双向I/O口,P1作为通用的I/O口使用。
P2口:
P2是一个带有内部上拉电阻的8位准双向I/O口,P2即可作为通用的I/O口使用,也可以作为片外存储器的高8位地址总线,与P0口配合,组成16位片外存储器单元地址。
P3口:
P3口是一组带有内部上拉电阻的8位准双向I/0口。
P3口除了作为通用的I/O口使用之外,每个引脚还具有第二功能,具体分配如表2。
表2具有第二功能的P3口引脚
端口引脚
第二功能:
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
/INT0(外中断0)
P3.3
/INT1(外中断1)
P3.4
T0(定时/计数器0外部输入)
P3.5
T1(定时/计数器1外部输入)
P3.6
/WR(外部数据存储器写选通)
P3.7
/RD外部数据存储器读选通)
89S51的引脚图
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
WDT溢出将使该引脚输出高电平,设置SFRAUXR的DISRT0位(地址8EH)可打开或关闭该功能。
DISRT0位缺省为RESET输出高电平打开状态。
ALE/
:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对F1ash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只有一条M0VX和M0VC指令ALE才会被激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。
程序储存允许(
)输出是外部程序存储器的读选通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次
有效,即输出两个脉冲。
当访问外部数据存储器,没有两次有效的
信号。
/VPP:
外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。
需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。
F1ash存储器编程时,该引脚加上+12V的编程电压Vcc。
·
XTAL1:
振荡器反相放大器及内部时钟发生器的输入端。
4.4系统硬件总电路构成和工作原理
4.4.1其中P0用于送显4片LED数码管,P1用于键盘输入,XTAL1和XTAL2接入晶振时钟电路,REST引脚接上复位电路,p2.0,p2.1,p2.2对数码管进行片选,P3.2即INT0接时间调整中断按键,P3.3即INT1接紧急情况中断按键。
4.4.2系统工作原理
系统上电或手动复位之后,系统依次分别用3.33ms显示时间值的个位和十位以及要点亮的数码管灯,在1s时间内重复这些操作,到达1s后根据变换设定继续进行各项操作。
当然,在进入程序后两个外部中断都开启了,一旦紧急情况或时间设定按钮按下,使中断信号有效时进入中断服务子程序,处理紧急情况或对时间进行设置。
紧急情况中断(按S18键)相对简单,只是使所有灯都亮,对此不再详述。
对于时间设定,按下时间设置键(S19)后,需说明的是————用户需先选择对哪个项目进行输入,否则输入数据不但无效,反而会影响系统读入十位个位的顺序(系统默认先读入十位,再度个位)。
当对某项设定输入一个两位数后,若需更改在没选择进入别的项目时,可继续输入一个两位数进行更改,若已进入别的项目的设定,则需再按想要更改的项目的选择按键一下,方可更改。
在紧急情况处理或时间设定完成后,按下退出键(S17)中断结束返回。
单片机系统的总体框图
4.5其它硬件介绍及连接
4.5.1八段LED数码管
LED显示屏作为大型显示设备的一种,具有亮度高、价格低、寿命长、维护简便等优点。
LED数码管的结构简单,分为七段和八段两种形式,也有共阳和共阴之分。
以八段共阳管为例,它有8个发光二极管(比七段多一个发光二极管,用来显示dP,即点),每个发光二极管的阳极连在一起,如下图所示。
这样,一个LED数码管就有I根位选线和8根段选线,要想显示一个数值,就要分别对它们的高低电平来加以控制。
为方便起见,本文主要讨论共阳八段LED数码显示管,其他类形的显示管与其类似。
注:
我们用的开发板数码管为共阴,因此数值段码与共阳的为取反关系。
图6LED数码管
LED灯的显示原理:
通过同名管脚上所加电平的高低来控制发光二极管是否点亮而显示不同的字形,如dp,g,f,e,d,c,b,a全亮显示为8,
硬件电路连接图
程序设计
#include<
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
//定义全局变量
uchara=0;
//东西显示时间的缓存变量
ucharb=0;
//南北显示时间的缓存变量
uchartime=0;
//记录循环单位的位置
ucharint_time=0;
//记录中断的次数
ucharclock_a_red=90;
//东西定时器初值
ucharclock_a_green=85;
ucharclock_a_yellow=5;
ucharclock_b_red=90;
//南北计时器初值
ucharclock_b_green=85;
ucharclock_b_yellow=5;
ucharcodetable[]={//共阴数码管显示编码
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
//延时模块
voiddelay(uintaa)
{
uinti,j;
for(i=aa;
i>
0;
i--)
for(j=110;
j>
j--);
}
//主函数模块
voidmain()
{
TMOD=0X01;
//设置定时器0为工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
//开总中断
ET0=1;
//开定时/计数器0
TR0=1;
EX0=1;
IT0=0;
EX1=1;
IT1=0;
P2=0xff;
//初始化P2口
P1=0x00;
//初始化P1口
while
(1)
/*数码管显示模块*/
P2=0xfe;
P1=table[a/10];
//东西道取十位
delay(3);
P2=0xfd;
P1=table[a%10];
//东西道取个位
P2=0xfb;
P1=table[b/10];
//南北道取十位
P2=0xf7;
P1=table[b%10];
//南北道取个位
}
voidkey0()interrupt0//南北道亮黄灯
EX0=0;
delay(20);
P0=0x35;
voidkey1()interrupt2//东西道亮黄灯
EX1=0;
P0=0x2e;
//中断服务模块
voidtime0()interrupt1
int_time++;
if(int_time>
=20)
int_time=0;
time++;
if(time>
=0&
&
time<
85)
{
P0=0xde;
a=clock_a_red--;
b=clock_b_green--;
}
elseif(time>
=85&
90)
P0=0xee;
clock_b_green=85;
b=clock_b_yellow--;
=90&
175)
P0=0xf3;
clock_a_red=90;
clock_b_yellow=5;
a=clock_a_green--;
b=clock_b_red--;
=175&
180)
P0=0xf5;
clock_a_green=85;
a=clock_a_yellow--;
else
time=0;
clock_a_yellow=5;
clock_b_red=90;
集成开发环境KEIL
KEILIDEVision2集成开发环境主要由以下部分组成:
1:
uVision2IDE。
ision2IDE包括:
一个工程管理器,一个功能丰富并有交互式错误提示的编辑器选项设置生成工具,以及在线帮助。
使用vision2创建源文件并组成应用工程加以管理。
vision2可以自动完成编译汇编链接程序的操作;
2:
C51编译器和A51汇编器。
Vision2IDE创建的源文件可以被C51编译器或A51汇编器处理生成可重定位的object文件。
KEILC51编译器遵照ANSIC语言标准支持C语言的所有标准特性,另外还增加了几个可以直接支持80C51结构的特性。
KEILA51宏汇编器支持80C51及其派生系列的所有指令集;
3:
LIB51库管理器。
B51库管理器可以从由汇编器和编译器创建的目标文件建立目标库,这些库是按规定格式排列的目标模块,可在以后被链接器所使用当链接器处理一个库时仅仅使用了库中程序使用了的目标模块而不是全部加以引用;
4:
BL51链接器定位器。
L51链接器使用从库中提取出来的目标模块和由编译器汇编器生成的目标模块创建一个绝对地址目标模块,绝对地址目标文件或模块包括不可重定位的代码和数据所有的代码和数据都被固定在具体的存储器单元中。
利用KEIL开发和调试系统软件流程大致如下:
5:
启动Vision2,进入KEIL软件的集成开发环境;
6:
利用KEIL内置的文本编辑器进行程序源文件的编辑,因为KEIL集成的文本编辑器对中文支持不是很好,可以选择其他的编辑器(本文使用的文本编辑器是Ultraedit—32),Vision2能够自动识别外部改变了的源文件;
7:
建立工程,指定针对哪种单片机进行开发,指定对源程序的编译、链接参数,指定调试方式(本文采用外部硬件仿真器仿真调试的方式,即使TKS仿真器仿真),然后对工程进行相关设置;
8:
设置好工程后即可进行编译、链接。
连接仿真器对软件进行调试。
也可以生成下载到单片机存储器上的HEX文件。
设计心得
两周的时间匆匆而过,由于各种考试、实验都集中在这几周,总的来说时间很是仓促。
不过经过两周的努力工作,终于完成了自己的单片机课程设计。
虽说忙碌了点,有时还因为处理程序更改设计而熬夜,但看到自己的劳动成果时,所产生的喜悦,把一切疲劳都赶走,那种成就感,是无法言语的。
这几天,感觉很充实,当然,也获益匪浅
参考文献
[1]张毅刚.单片机原理及应用高等教育出版社
[2]单片机新手入门实例详解之三_4×
4矩阵键盘的工作原理与编程XX文库
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 交通灯 设计