单片机交通灯论文.docx
- 文档编号:27480170
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:23
- 大小:309.72KB
单片机交通灯论文.docx
《单片机交通灯论文.docx》由会员分享,可在线阅读,更多相关《单片机交通灯论文.docx(23页珍藏版)》请在冰豆网上搜索。
单片机交通灯论文
交通灯管理系统设计
【摘要】“交通灯管理系统”是在微型计算机科学与技术的指导下,结合单片机的特点,采用硬件设计与软件控制相结合的开发模式,运用开发简单、移植性好的C语言开发而成的一款实用性强的系统。
本系统采用单片机STC89C52为中心器件来设计交通灯控制器,以KeiluVision3为主要开发工具,并结合proteussp2仿真软件设计实现了能根据实际交通状况调整红、绿、黄灯点亮时间,LED倒计时显示的功能;本系统实用性强、操作简单、扩展功能方便。
论文主要介绍系统详细设计过程,并对显示、按键控制、T0定时等主要模块进行了详细描述,最后说明了本系统存在的问题和该领域的发展前景。
【关键词】单片机;AT89S51;KeiluVision3;proteuss
【正文】
一、系统开发目的
随着社会经济的发展,城市交通问题越来越引起人们的关注。
人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。
设计一种简便的改进型交通灯控制系统就显得很有必要,这种交通灯控制系统可以让交通管理人员根据实际道路行人、车流量的情况,及时调整行人、车流的通行时间,从而解决上述情况的发生,减少不必要的时间浪费。
二、系统开发设计思路
该系统在十字路口的主道路上分别采用三色发光二极管模拟红绿黄指示灯,并采用7段LED数码管显示倒计时时间,时间到后相应路口的指示灯点亮,同时在四个路口的人行道旁都设计有红绿指示灯,方便行人通行。
用户可以根据实际需要调整系统倒计时时间;各个路口的指示灯按照设定的时间显示;LED倒计时显示。
三、系统开发工具
本系统的开发设计主要用到的软件有KeiluVision3调试编译软件和ProteusSP2电路设计仿真软件等。
四、系统的可行性研究
1.系统的功能介绍:
上电或复位以后,就进入默认的设置状态,即东西方向主干道路,南北方向主干道路开始时间倒计时同时,东西南北四个方向上都配合有LED数码管倒计时显示牌;东西倒计时到后绿灯熄灭,黄灯开始闪烁并进入5秒倒计时状态,倒计时为0时,东西红灯点亮、黄灯熄灭进入倒计时状态,南北方向倒计时到,红灯熄灭、绿灯点亮,然后依次循环显示。
五、系统的需求分析
1.解决的主要问题
(1)选择合适的芯片;
(2)单片机功能扩展系统设计;
(3)具体硬件电路图设计;
(4)显示系统设计;
(5)人机交互通道设计;
(6)实现功能要求的软件程序设计;
(7)硬件电路焊接;
(8)系统调试与测试;
2.功能需求概述
(1)用户可以根据实际需要调整系统倒计时时间;
(2)各个路口的指示灯按照设定的时间显示;
(3)LED倒计时显示;
六、系统的总体设计
根据设计要求,本系统选用STC89C52芯片,利用该芯片自带的的程序存储器就基本上可以满足实际需要;在接口方面,LED数码管采用共阳数码管,交通指示灯采用普通的发光二极管,整个系统采用12MHZ晶振作为基准时钟信号。
1.系统硬件电路设计
(1)单片机接口电路如下图所示:
(2)智能交通灯控制系统的完整硬件电路图如下所示,采用STC89C52单片机最小化应用设计,每个路口设置两个LED数码显示器,并配合有相应的指示灯。
其中:
通过P0口向LED送出段码,P2.4-P2.7接东西路口LED位码用于控制东西路口的显示,P2.0-P2.3接南北路口LED位码用于控制南北路口的显示;P1口用于控制发光二极管(P1.6、P1.7、P3.2、P3.3、P3.4、P3.4控制东西路口指示灯,P1.3-P1.5控制南北路口指示灯,P1.0-P1.5分别控制东西人行道红绿灯,P3.0、P3.1、P3.6、P3.7分别接按键控制电路。
2.系统软件设计
根据系统功能需求的要求,智能交通灯控制系统总体主功能模块如下图所示:
其中采用定时器T0和T1分别定时50mS,其中T0产生的定时用于系统计时,而T1产生的定时用于在设定时间时闪烁显示。
(1)LED显示子程序
数码管显示的数据存放在数据段的Date[0]-Date[7]中,依次为东南西北的个位和十位数据。
由于采用动态扫描方式,显示时,先取出Date[0]-Date[7]中的某一数据,然后查得对应的显示段码从P0口输出,P2口将输出对应的位码。
LED显示子程序的流程如下图4.4所示:
(2)键盘扫描子程序
在该子程序中,首先判断是哪个按键被按下,然后延时20ms左右,进行键盘消抖处理,再进行判断该键是否真的被按下,如果是,进行下述处理,否则,返回继续扫描。
如果是P3.1被按下,则进行加一,如果是P3.6被按下,则进行减一处理。
七、系统的详细设计
系统代码见附录1
八、系统的调试与实现
1.软件调试
(1)在Proteussp2中根据系统要求设计出硬件电路图;
(2)在KeilC51编译器中编辑好源程序,对程序进行编译、调试,根据错误提示找出应的错误并改正。
在编译通过后,将生成的Hex文件;
(3)将生成的Hex文件添加到Proteussp2中CPU芯片中,进行仿真测试,并观察结果是否与设计吻合,若还有问题,需对源程序进行修改,只道满意为止。
经过上述步骤方法的修改,最终得出的在Proteussp2中仿真出的结果如下图所示;
2.硬件调试
根据电路原理图,焊接出实际电路后,分四步进行硬件电路测试:
(1)先对东西南北四个方向上的LED数码管测试,发现南北方向数码管个位a段码上电后始终点亮,经过仔细检查连线,发现其与5V电源连线相接触,经修改后测试恢复正常显示。
(2)再对各个方向的二极管指示灯测试,发现连线正常。
(3)对按键测试,除了加一按键不起作用外,其他按键正常,经检查发现按键是坏的,换了一个后,再次检测,该按键正常工作。
(4)将上述软件编译出的.Hex烧写到STC89C52芯片中,接上硬件电路测试,经过多次测试、修改后,系统能正常工作。
3.功能实现
按照设计要求和编程思路,系统接上5V电源后即开始工作,刚开始上电后系统运行状况为:
东西方向绿灯点亮,南北方向红灯点亮,LED开始倒计时显示。
东西方向倒计时为零后,黄灯开始倒计时闪烁显示,倒计时为零后,东西方向红灯点亮,LED开始红灯倒计时显示,人南北方向绿灯点亮,然后依次循环。
当按下调时键时,,按下加一、减一键可以对其进行相关的加一、减一操作。
经过反复测试,系统LED显示、发光二极管指示灯及按键均能正常工作,基本上到达了设计要求与目的。
九、产品使用说明
1.使用USB在系统接上5V的电源;
2.蓝色的按键(如下图所示)是电源的开关按下电源打开,弹起电源关闭;
3.四个黑色按键(如下图所示)的功能是:
(从左到右)
(1)第一个黑色按键是开始/暂停;
(2)第二个黑色按键是时间增加按键(时间是以秒为单位增加);
(3)第三个黑色按键是时间减少按键(时间是以秒为单位减少);
(4)第四个黑色按键是夜间模式(中间的灯闪烁);
附录1:
源程序代码
/***************51单片机交通灯设计*******************/
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharnight_flag=0;//深夜标志位
uchartime_cl=0;//定义时间控制标志位取0
ucharflag=0;//方向通行标志位
ucharB_N_D_flag=1;//定义北南通灯行标志位
ucharX_D_D_flag=1;//定义西东通灯行标志位
uchari,j;//定义变量i
uchart=3;//数码管动态扫描延时时间基数
ucharnum=0;//时间基数初始化为0
//ucharnum_night=0;//深夜模式时间基数为0
uchartime=90;//time初始化定为30秒
intbei,nan,xi,dong;//定义北南西东
ucharcodeData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF};
//定义数组数码管0123456789-
/***************定义红黄绿灯**************/
#defineB_RP1_0//北面红灯
#defineB_YP1_1//北面黄灯
#defineB_GP1_2//北面绿灯
#defineN_RP1_3//南面红灯
#defineN_YP1_4//南面黄灯
#defineN_GP1_5//南面绿灯
#defineX_RP1_6//西面红灯
#defineX_YP1_7//西面黄灯
#defineX_GP3_2//西面绿灯
#defineD_RP3_3//东面红灯
#defineD_YP3_4//东面黄灯
#defineD_GP3_5//东面绿灯
/***************定义数码管*****************/
#defineSMG_XSP0//数码管数据显示
#defineSMG_KZP2//数码管控制显示
voiddelay(uinttime)//扫描延时函数
{
uintx,y;
for(x=time;x>0;x--)
for(y=110;y>0;y--);
}
voiddisp_init()//显示初始化
{
for(i=0;i<3;i++)
{
SMG_XS=Data[10];//数码管显示"--------"
SMG_KZ=0x00;//允许数码管显示
P1=0x00;//北,南,西,东红黄绿灯亮
P3=0x00;
delay(300);//延时
SMG_KZ=0xff;//关闭数码管显示
P1=0xff;//关闭北,南,西,东红黄绿灯
P3=0xff;
delay(300);//延时
}
}
voiddisp(bei,nan,xi,dong)//显示(北南西东)时间函数
{
SMG_XS=Data[bei/10];//显示北的十位
SMG_KZ=0xfd;//允许北十位显示
delay(t);//小延时一下,使数码管显示更清楚
SMG_KZ=0xff;//关闭数码管显示(消隐)
SMG_XS=Data[bei%10];//显示北的个位
SMG_KZ=0xfe;//允许北个位显示
delay(t);//小延时一下,使数码管显示更清楚
SMG_KZ=0xff;//关闭数码管显示(消隐)
SMG_XS=Data[nan/10];//显示南的十位
SMG_KZ=0xf7;//允许南十位显示
delay(t);//小延时一下,使数码管显示更清楚
SMG_KZ=0xff;//关闭数码管显示(消隐)
SMG_XS=Data[nan%10];//显示南的个位
SMG_KZ=0xfb;//允许南个位显示
delay(t);//小延时一下,使数码管显示更清楚
SMG_KZ=0xff;//关闭数码管显示(消隐)
SMG_XS=Data[xi/10];//显示西的十位
SMG_KZ=0xdf;//允许西十位显示
delay(t);//小延时一下,使数码管显示更清楚
SMG_KZ=0xff;//关闭数码管显示(消隐)
SMG_XS=Data[xi%10];//显示西的个位
SMG_KZ=0xef;//允许西个位显示
delay(t);//小延时一下,使数码管显示更清楚
SMG_KZ=0xff;//关闭数码管显示(消隐)
SMG_XS=Data[dong/10];//显示东的十位
SMG_KZ=0x7f;//允许东十位显示
delay(t);//小延时一下,使数码管显示更清楚
SMG_KZ=0xff;//关闭数码管显示(消隐)
SMG_XS=Data[dong%10];//显示东的个位
SMG_KZ=0xbf;//允许东个位显示
delay(t);//小延时一下,使数码管显示更清楚
SMG_KZ=0xff;//关闭数码管显示(消隐)
}
voidTime0_init()//定时器0初始化函数
{
TMOD=0x01;//定时器0为方式1
TL0=(65536-50000)%256;
TH0=(65536-50000)/256;//12M晶振定时时间50ms
ET0=1;//开定时器0中断
EA=1;//开总中断
TR0=1;//启动定时器0
}
voidnight_mode()//深夜模式
{
B_R=1;
B_Y=~B_Y;//北黄灯取反
B_G=1;
N_R=1;
N_Y=~N_Y;//南黄灯取反
N_G=1;
X_R=1;
X_Y=~X_Y;//西黄灯取反
X_G=1;
D_R=1;
D_Y=~D_Y;//东黄灯取反
D_G=1;
}
voidB_N_G()//北南通(绿灯)西东(红灯)
{
B_G=0;//北绿灯亮
N_G=0;//南绿灯亮
B_R=1;
B_Y=1;
N_R=1;
N_Y=1;
X_R=0;//西红灯亮
D_R=0;//东红灯亮
X_Y=1;
X_G=1;
D_Y=1;
D_G=1;
}
voidX_D_G()//西东通(绿灯)北南(红灯)
{
B_G=1;
N_G=1;
B_R=0;//北红灯亮
B_Y=1;
N_R=0;//南红灯亮
N_Y=1;
X_R=1;
D_R=1;
X_Y=1;
X_G=0;//西绿灯亮
D_Y=1;
D_G=0;//东绿灯亮
}
voidB_N_tong()//北南通行
{
if(B_N_D_flag==1)//当北南通灯行标志位为1
{
B_N_G();//北南通(绿灯)西东(红灯)
B_N_D_flag=0;//北南通灯行标志位置0
}
while(num==20)//当1s时间到
{
num=0;//num清0
bei--;//北时间减1
nan--;//南时间减1
xi--;//西时间减1
dong--;//东时间减1
if(bei<=6&&bei>=0||nan<=6&&nan>=0)//当北和南时间在0到6秒之间
{
if(bei<=6&&bei>3||nan<=6&&nan>3)//进一步判断北和南时间是否在3到6秒之间
{
B_G=~B_G;//北绿灯取反
N_G=~N_G;//南绿灯取反
}
if(bei<=3&&nan<=3)//进一步判断北和南时间是否在3秒以内
{
B_G=1;//北绿灯不亮
N_G=1;//南绿灯不亮
B_Y=0;//北黄灯亮
N_Y=0;//南黄灯亮
}
}
else//否则(即北和南时间不在0到6秒之间)
{
B_G=0;//北绿灯亮
N_G=0;//南绿灯亮
B_Y=1;//北黄灯不亮
N_Y=1;//南黄灯不亮
}
}
}
voidX_D_tong()//西东通行
{
if(X_D_D_flag==1)//当西东通灯行标志位为1
{
X_D_G();//西东通(绿灯)北南(红灯)
X_D_D_flag=0;//西东通灯行标志位置0
}
while(num==20)//当1s时间到
{
num=0;//num清0
bei--;//北时间减1
nan--;//南时间减1
xi--;//西时间减1
dong--;//东时间减1
if(xi<=6&&xi>=0||dong<=6&&xi>=0)//当西和东时间在0到6秒之间
{
if(xi<=6&&xi>3||dong<=6&&dong>3)//进一步判断西和东时间是否在3到6秒之间
{
X_G=~X_G;//西绿灯取反
D_G=~D_G;//东绿灯取反
}
if(xi<=3&&dong<=3)//进一步判断西和东时间是否在3秒以内
{
X_G=1;//西绿灯不亮
D_G=1;//东绿灯不亮
X_Y=0;//西黄灯亮
D_Y=0;//东黄灯亮
}
}
else//否则(即西和东时间不在0到6秒之间)
{
X_G=0;//西绿灯亮
D_G=0;//东绿灯亮
X_Y=1;//西黄灯不亮
D_Y=1;//东黄灯不亮
}
}
}
voidTime0()interrupt1//定时器0中断服务函数
{
TH0=(65536-50000)/256;//重新载装初值,设置50ms中断一次
TL0=(65536-50000)%256;
num++;//时间基数加1
}
voidmain()//主函数入口
{
bei=nan=xi=dong=time;//把time值赋给北南西东
disp_init();//显示初始化
Time0_init();//定时器0初始化函数
while
(1)//无限循环
{
if(P3_0==0)//当P3.0按下(调整时间允许键)
{
delay(5);//延时去抖
SMG_KZ=0xff;//关闭数码管显示
if(P3_0==0)//再次确定按键是否按下
{
time_cl=~time_cl;//时间控制标志位取反(开/关时间控制标志位)
if(time_cl==0)//如果时间控制标志位为0
{
TL0=(65536-50000)%256;
TH0=(65536-50000)/256;//12M晶振定时时间50ms
TR0=1;//开启定时器0
num=0;//num初始化为0
}
}
while(P3_0==0);//等待按键松开
}
if(P3_7==0)//当P3.7按下(开/关深夜模式)
{
delay(5);//延时去抖
SMG_KZ=0xff;//关闭数码管显示
if(P3_7==0)
{
night_flag=~night_flag;//深夜标志位取反(开/关深夜模式),1表示开,0表示关
if(night_flag==1)//如果深夜模式开
{
TR0=0;//关闭定时器0
num=0;//时间基数清0
TL0=(65536-50000)%256;
TH0=(65536-50000)/256;//12M晶振定时时间50ms
TR0=1;//开启定时器0
SMG_KZ=0xff;//关闭数码管显示
}
else//否则night_flag=0表示深夜模式关(红绿灯正常运行)
{
TR0=0;//关闭定时器0
num=0;//时间基数清0
TL0=(65536-50000)%256;
TH0=(65536-50000)/256;//12M晶振定时时间50ms
TR0=1;//开启定时器0
B_N_D_flag=1;//定义北南通灯行标志位
X_D_D_flag=1;//定义西东通灯行标志位
if(bei<=3&&nan<=3)//判断北和南时间是否在3秒以内
{
B_Y=1;
N_Y=1;
}
if(xi<=3&&dong<=3)//判断西和东时间是否在3秒以内
{
X_Y=1;
D_Y=1;
}
}
}
while(P3_7==0);
}
if(night_flag==0)//如果深夜标志位为0,表示关闭深夜模式,红绿灯正常运行
{
if(time_cl==0)//如果time_cl=0(不允许调整时间),即红绿灯正常运行
{
if(flag==0)//flag=0表示北南通行允许
{
B_N_tong();//北南通行
if(bei==0)//北南通行时间到
{
flag=~flag;//西东通行允许
B_N_D_flag=1;//北南通灯行标志位置1
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 交通灯 论文