AT89C52单片机交通灯设计1.docx
《AT89C52单片机交通灯设计1.docx》由会员分享,可在线阅读,更多相关《AT89C52单片机交通灯设计1.docx(11页珍藏版)》请在冰豆网上搜索。
AT89C52单片机交通灯设计1
摘要...................................................................2
1交通信号灯控制系统设计任务和性能指标................................3
1.1设计任务........................................................3
1.2性能指标........................................................3
2交通信号灯控制系统设计方案...........................................3
2.1设计思路......................................................3
2.1.1设计思路...................................................3
2.1.2功能设计...................................................3
2.2总体设计........................................................3
2.2.1通行方案设计...............................................4
2.2.2硬件设计方案...............................................4
2.2.3软件设计方案...............................................5
3交通信号灯控制系统硬件设计..........................................5
3.1系统硬件框图...................................................5
3.2单元电路设计....................................................6
3.2.1单片机最小系统............................................6
3.2.2信号灯显示电路............................................7
3.2.3倒计时显示电路............................................7
3.2.4电路原理图.................................................8
4交通信号灯控制系统程序设计.........................................8
4.1C语言程序编写...................................................8
5个人小结.............................................................12
6参考文献............................................................12
摘要
交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。
交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
本系统采用单片机AT89C52为中心器件来设计交通信号灯控制器,系统实用性强、操作简单、扩展性强。
本设计系统就是由单片机最小系统、交通灯状态显示系统、LED数码显示系统、复位电路和按键操作电路等几大部分组成。
系统除具有基本的交通信号灯功能外,还具有倒计时、时间调整和紧急情况处理等功能,较好的模拟实现了十字路口可能出现的状况。
软件上采用KEILC编程,主要编写了主程序,LED数码管显示程序,中断程序,延时程序等。
经过整机调试,实现了对十字路口交通灯的模拟。
1交通信号灯控制系统设计任务和性能指标
1.1设计任务
利用单片机设计一个十字路口交通信号灯控制系统,该交通信号灯控制器由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,并有倒计时系统显示信号灯转换时间。
用红、绿、黄发光二极管作信号灯,两位八段数码管显示时间来控制交通信号灯的变化。
1.2性能指标
(1)东西和南北方向的车辆交替通行,任意时刻只有一个方向通行,以黄灯闪烁来转换。
(2)系统开始运行时设置每次放行13秒,其中有3秒是黄灯闪烁提醒行人和车辆禁止通行。
2交通信号灯控制系统设计方案
2.1设计思路
2.1.1设计思路
(1)分析目前交通路口的基本控制技术以及各种通行方案,并以此为基础提出自己的交通控制的初步方案。
(2)确定系统交通控制的总体设计,包括,十字路口具体的通行禁行方案设计以及系统应拥有的各项功能。
(3)选择器件,大体分配各个器件及模块的基本功能要求,设计主控电路、显示电路,信号灯状态电路,按键电路等。
(4)进行软件系统的设计,对于本系统,采用C语言编写,深入了解定时器,中断以及延时原理后,完成软件的编写。
2.1.2功能设计
本设计能模拟基本的交通控制系统,用红绿黄灯表示禁行,通行和等待的信号发生,还能进行倒计时显示,通行时间调整和紧急情况处理等功能。
2.2总体设计
单片机设计交通灯控制系统,可用单片机直接控制信号灯的状态变化,基本上可以指挥交通的具体通行,接入LED数码管就可以显示倒计时以提醒行使者,更具人性化。
2.2.1通行方案设计
十字路口分为东西向和南北向,在任一时刻只有一个方向通行,另一方向禁行,持续一定时间,经过短暂的过渡时间,将通行禁行方向对换。
其具体状态如图所示。
说明:
黑色表示亮,白色表示灭。
交通状态从状态1开始变换,直至状态4然后循环至状态1,周而复始。
S1东西通行S2东西禁行过渡状态
S3南北通行S4南北禁行过渡状态
通过对具体的十字路口交通信号灯状态的演示分析,可以把这四个状态归纳如下:
状态S1:
东西方向绿灯亮,允许通行,南北方向红灯亮,禁止通行;
状态S2:
东西方向绿灯转黄灯闪烁,允许通行,南北方向红灯亮,禁止通行;
状态S3:
东西方向红灯亮,禁止通行,南北方向绿灯亮,允许通行;
状态S4:
东西方向红灯亮,禁止通行,南北方向绿灯转黄灯闪烁,允许通行;
依据上述分析,东西的通行时间为状态S1和状态S2的时间之和,南北的通行时间为状态S3和状态S4的时间之和。
2.2.2硬件设计方案
2.2.2.1AT89C52单片机芯片简介
AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。
2.2.2.2AT89C52单片机引脚图
本系统选用Atmel公司的AT系列单片机AT89C52为中心器件设计交通信号灯控制器,实现了红绿灯循环点亮,绿灯变红灯中间为黄灯闪烁警示的功能。
每个方向采用红绿黄三色的LED灯的亮灭来模拟信号灯,采用两位八段共阳数码管,显示十字路口通行或禁止的剩余时间。
2.2.3软件设计方案
设计要求为:
首先南北方向红灯、东西方向绿灯亮,南北方向红灯13秒、东西方向绿灯9秒,相应的数码管显示对应的数字并读秒,同时南北方向红色的二极管和东西方向的绿色二极管接通点亮显示,当东西方向的绿灯时间到,则东西方向的绿灯转为黄灯,同时数码管显示黄灯的时间3秒,东西方向的黄色二极管接通点亮,此时南北方向的红灯不变。
南北方向的红灯和东西方向的黄灯时间同时到,此时南北方向的红灯跳转为绿灯,时间同样为9秒,东西方向有黄灯跳转为红灯,时间为13秒。
当南北方向的绿灯时间到,南北绿灯跳转为黄灯,东西方向的红灯不变,当南北方向的黄灯和东西方向的红灯时间到,南北方向的黄灯跳转为红灯,东西方向的红灯跳转为绿灯。
进入开始的状态,循环执行。
根据设计要求编写C语言程序。
软件采用KEILC语言完成。
3交通信号灯控制系统硬件设计
3.1系统硬件框图
根据设计的要求,单片机选用AT89C52,其内部带有8KB的FLASHROM,设计时无需外接程序存储器,为设计和调试带来极大的方便。
四个方向各采用三个不同色的LED灯和1个两位的数码管显示,来实现该方向的指示灯的点亮时间倒计时。
按键可以根据系统的需要进行操作。
系统硬件框图
3.2单元电路设计
3.2.1单片机最小系统
对51系列单片机来说,单片机要正常工作,必须具有五个基本电路,也称五个工作条件:
1、电源电路,2、时钟电路,3、复位电路,4、程序存储器选择电路,5、外围电路。
因此,单片机最小系统一般应该包括单片机、晶振电路、复位电路、外围电路等。
(1)电源电路设计
单片机芯片的第40脚为正电源引脚VCC,一般外接+5V电压。
第20脚为接地引脚GND,常见电源电路设计如下图所示:
电源设计
(2)时钟电路设计
单片机是一种时序电路,必须要有时钟信号才能正常工作。
单片机芯片的18脚(XTAL2)、19脚(XTAL1)分别为片内反向放大器的输出端和输入端,只要在18脚(XTAL2)和19脚(XTAL1)之间接上一个晶振,再加上2个20PF的瓷片电容即可构成单片机所需的时钟电路,本设计就采用图所示时钟电路。
时钟电路
(3)复位电路设计
单片机芯片的第9脚RST(Reset)是复位信号输入端。
单片机系统在开机时或在工作中因干扰而使程序失控,或工作中程序处于某种死循环状态等情况下都需要复位。
AT89C52单片机的复位靠外部电路实现,信号从RST引脚输入,高电平有效,只要保持RST引脚高电平2个机器周期,单片机就能正常复位。
复位电路
(4)外围电路的设计
外围电路的设计主要依据项目要实现的功能,本项目要实现的功能是用单片机控制交通信号灯。
3.2.2交通信号灯显示电路
本系统采用LED作为信号灯来使用,单片机的I/O口直接与LED连接。
在十字路口的四组红、黄、绿三色交通灯中,东西方向的同色灯连接在一起,南北方向的同色灯也彼此连接,受单片机AT89C52的P1.0—P1.5控制。
12个LED指示灯采用共阳极的连接方式,因此I/O口输出低电平时,与之相连的LED会亮,输出高电平时,LED熄灭。
3.2.3倒计时显示电路
该交通信号灯控制系统在正常工作情况下,为方便提示路上行人及车辆交通灯转换的剩余时间,专门为控制系统提供了一个倒计时的显示装置。
该装置采用2位八段数码管来显示,每个路口需要1个,共4个,在设计电路时,本系统采用用共阳数码管。
3.2.4电路原理图
4交通信号灯控制系统程序设计
4.1C语言程序编写
本系统程序采用KEILC编程,来控制交通信号灯的亮灭及时长。
程序如下:
/*#include*/
#include
#defineucharunsignedchar/*定义字符串类型为无符号型*/
ucharcodea[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
ucharcodeb[4]={0x0D,0x0E,0x07,0x0B};/****P2口,低有效*/
ucharcodec[4]={0xDE,0xDD,0xF3,0xEB};/****P1口,低有效*/
charSN=10,WE=13;
charSN_G=10,WE_G=10,Y=3;
uchari,k=0,count=0;
voiddelay(uchart);/*定义函数*/
voidlight();/*定义函数*/
voidled();/*定义函数*/
/*程序初始化*/
voidinit(void)
{
/*12MHz*/
TMOD=0x01;/**计数器用模式1,为16位计数器*****/
TH1=(65536-50000)/256;/*0x3C*/
TL1=(65536-50000)%256;/*0xB0*//*计50000个数,用时50ms*/
IT0=1;/*外部中断0为边沿触发方式*/
ET0=1;/*允许T0中断*/
TR0=1;/*启动计数器*/
EA=1;/*CPU开放总中断*/
}
/*定时函数*/
voidtime1(void)interrupt1
{
TH0=0x3c;
TL0=0xb0;/*计50000个数,用时50ms*/
count++;/*自增运算*/
if(count>=20)/*当count大于或等于20时,历时1s,执行程序*/
{
SN--;/*自减运算*/
WE--;/*自减运算*/
count=0;/*清零*/
if(SN==0||WE==0)/*当SN=0或者WE=0时,执行程序*/
{
k++;/*自增运算*/
if(k>3)/*当k>3时,执行程序*/
k=0;/*清零*/
switch(k)/*switch语句*/
{
case0:
SN=SN_G,WE=SN_G+Y;break;/*南北方向显示时间为南北方向绿灯通行时间,东西方向显示时间为南北方向绿灯通行时间加黄灯闪亮时间*/
case1:
SN=Y,WE=Y;break;/*东西南北方向显示时间均为黄灯闪亮时间*/
case2:
SN=WE_G+Y,WE=WE_G;break;/*南北方向显示时间为东西方向绿灯通行时间加黄灯闪亮时间,东西方向显示时间为东西方向绿灯通行时间*/
case3:
SN=Y,WE=Y;break;/*东西南北方向显示时间均为黄灯闪亮时间*/
}
}
}
}
/*延时t毫秒*/
voiddelay(uchart)
{
uchari;
for(t;t>0;t--)
{
for(i=2000;i>0;i--)
{}
}
}
/*交通灯函数*/
voidlight()
{
P1=c[k];/*交通灯对应着k的值变化*/
if(P1==c[1]&&count==0)/*当南北方向亮黄灯且count=0时,执行程序*/
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;/*延时50ms*/
P1=0xDF;/*南北方向黄灯熄灭,东西方向亮红灯*/
}
else
if(P1==c[3]&&count==0)/*当东西方向亮黄灯且count=0时,执行程序*/
{
TH1=(65536-300000)/256;
TL1=(65536-300000)%256;/*延时50ms*/
P1=0xFB;/*南北方向亮红灯,东西方向黄灯熄灭*/
}
}
/*数码管函数*/
voidled()
{
P2=b[0],P0=a[SN%10];/*显示南北方向个位*/
delay(5);/*延时*/
P2=b[1],P0=a[SN/10];/*显示南北方向十位*/
delay(5);/*延时*/
P2=b[2],P0=a[WE%10];/*显示东西方向个位*/
delay(5);/*延时*/
P2=b[3],P0=a[WE/10];/*显示东西方向十位*/
delay(5);/*延时*/
}
voidmain(void)
{
init();/*调用程序初始化函数*/
for(;;)/*无条件循环*/
{
light();/*调用交通灯函数*/
led();/*调用数码管函数*/
}
}
5个人小结
这次是很有意义的一次课程设计,从原理图设计到软件仿真,我从中收获了许多。
刚开始设计时,我就在校门口仔细观察交通灯的转换,经过研究思考最终得到了上述的交通灯状态转换表。
在程序编写上,我选择了用KEILC语言进行编程。
在整个程序的编写过程中,采用模块化,编一个子程序仿真一个,通过Keil和proteus两个软件来实现的。
Keil帮助检查程序是否存在语法错误之类的问题,同时可以生成hex文件,供proteus软件仿真使用。
通过一周的课程设计,使我更深入的学习了AT89C52单片机。
6参考文献
[1]张毅坤.单片微型计算机原理及应用,西安电子科技大学出版社1998
[2]夏继强.单片机实验与实践教程.北京:
北京航空航天大学出版社,2001
[3]彭伟.单片机C语言程序设计100例.北京:
电子工业出版社,2009
[5]雷丽文.微机原理与接口技术.北京:
电子工业出版社,2001
[6]于永.51单片机C语言常用模块与综合系统设计.北京:
电子工业出版社,2007
[7]谭浩强.C语言程序设计.北京:
清华大学出版社,2005
[8]于永.51单片机C语言常用模块与综合系统设计.北京:
电子工业出版社,2007