交通灯控制 单片机.docx
《交通灯控制 单片机.docx》由会员分享,可在线阅读,更多相关《交通灯控制 单片机.docx(40页珍藏版)》请在冰豆网上搜索。
交通灯控制单片机
80c51单片机实现
交通灯控制
更多资料请加QQ:
1634189238
作者姓名:
刘伟
专业班级:
核技术与自动化专业
指导教师:
李晓丽(老师)
摘要
本系统由单片机系统、键盘、LED显示、交通灯演示系统组成。
系统包括人行道、左转、右转、以及基本的交通灯的功能。
系统除基本交通灯功能外,还具有倒计时、时间设置、紧急情况处理、分时段调整信号灯的点亮时间、违规车辆检测以及根据具体情况手动控制等功能。
关键词:
AT89S51,交通规则,LED
Abstract
Thissystemismadeupofsingle-chipmicrocomputer,keyboard,leddisplayingmoduleandTrafficlightssystem.Thesystemincludespavement,leftturning,rightturning,andthebasictrafficlightsfunction.Exceptingthebasictrafficlightsfunction,italsoincludescounting,timeinstalling,emergencydisposing,speechcluing,LCDinformationdisplaying,adjustingthelightingtimeoflightsbasedondifferenttimeandcontrollingwithhandinaccordancewithcircumstancesandsoon.
KeyWords:
AT89S51,Trafficregular,LED
目录
第一章序言……………………………………………………………………4
1.1交通灯的形成……………………………………………………………………………4
1.2芯片简介……………………………………………………………………………………5
1.3论文研究内容与章节安排…………………………………………………………………6
第二章方案比较、设计与论证………………………………………………………7
2.1电源提供案……………………………………………………………………………7
2.2显示界面方案……………………………………………………………………………7
2.3输入方案…………………………………………………………………………………8
第三章理论分析与计算……………………………………………………………9
3.1交通灯显示时序的理论分析与计算………………………………………………………9
3.2交通灯显示时间的理论分析与计算……………………………………………………12
第四章电路图及设计文件…………………………………………………………13
4.1灯控制电路设计…………………………………………………………………………13
4.2倒计时显示电路设计………………………………………………………………………13
4.3违规车辆检测电路设计…………………………………………………………………15
第五章程序设计思路与流程图………………………………………………………17
5.1主程序流程图……………………………………………………………………………17
5.2.按键子程序流程图………………………………………………………………………20
第六章测试、数据及结果分析……………………………………………………24
6.1状态灯显示测试……………………………………………………………………………24
6.2数码管的测试……………………………………………………………………………24
6.3整体电路测试……………………………………………………………………………24
总结……………………………………………………………………………………………………25
附录:
…………………………………………………………………………………………………26
第一章序言
1.1交通灯的形成
当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。
但这一技术在19世纪就已出现了。
1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。
这是世界上最早的交通信号灯。
1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。
它由红绿两色旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。
1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。
电气启动的红绿灯出现在美国,这种红绿灯由红绿黄三色圆形的投光器组成,1914年始安装于纽约市5号大街的一座高塔上。
红灯亮表示“停止”,绿灯亮表示“通行”。
1918年,又出现了带控制的红绿灯和红外线红绿灯。
带控制的红绿灯,一种是把压力探测器安在地下,车辆一接近红灯便变为绿灯;另一种是用扩音器来启动红绿灯,司机遇红灯时按一下嗽叭,就使红灯变为绿灯。
红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉到有人要过马路。
红外光束能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。
信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。
绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。
左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。
红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。
黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。
我们设计的单片机控制交通灯就是基于信号灯。
1.2芯片简介:
MSC-51芯片简介
8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。
8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:
中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
数据存储器(RAM):
8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。
程序存储器(ROM):
8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。
定时/计数器(ROM):
8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
并行输入输出(I/O)口:
8051共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。
全双工串行口:
8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
中断系统:
8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。
时钟电路:
8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。
INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。
1.3论文研究内容与章节安排
本文首先通过序言介绍了交通的由来,以及单片机芯片相关知识,然后通过实际交通灯的考察,运用单片机的知识加以实现。
章节安排如下:
第一章介绍交通灯的由来,以及单片机芯片相关知识
第二章通过比较法,选出我们用到的方案
第三章理论分析和计算出相关参数
第四章电路图设计
第五章程序设计与流程图
第六章总结与致谢
第二章方案比较、设计与论证
2.1电源提供方案
为使模块稳定工作,须有可靠电源。
我们考虑了两种电源方案:
方案一:
采用独立的稳压电源。
此方案的优点是稳定可靠,且有各种成熟电路可供选用;缺点是各模块都采用独立电源,会使系统复杂,且可能影响电路电平。
方案二:
采用单片机控制模块提供电源。
本方案的优点是系统简明扼要,节约成本;缺点是输出功率不高。
综上所述,我们选择第二种方案,如图[2-1]。
图2-1电源电路
2.2显示界面方案:
该系统要求完成倒计时、状态灯等功能。
基于上述原因,我们考虑了三种方案:
方案一:
完全采用数码管显示。
这种方案只显示有限的符号和数码字符,无法胜任题目要求。
方案二:
完全采用点阵式LED显示。
这种方案实现复杂,且须完成大量的软件工作;但功能强大,可方便的显示各种英文字符,汉字,图形等。
方案三:
采用数码管与点阵LED相结合的方法因为设计既要求倒计时数字输出,又要求有状态灯输出等,为方便观看并考虑到现实情况,用数码管与LED灯分别显示时间与提示信息。
这种方案既满足系统功能要求,又减少了系统实现的复杂度。
权衡利弊,第三种方案可互补一二方案的优缺,我们决定采用方案三以实现系统的显示功能。
2.3输入方案:
题目要求系统能手动设灯亮时间、紧急情况处理,我们讨论了两种方案:
方案一:
采用8155扩展I/O口及键盘,显示等。
该方案的优点是:
使用灵活可编程,并且有RAM,及计数器。
若用该方案,可提供较多I/O口,但操作起来稍显复杂。
方案二:
直接在IO口线上接上按键开关。
因为设计时精简和优化了电路,所以剩余的口资源还比较多,我们使用四个按键,分别是K1、K2、K3、K4。
由于该系统对于交通灯及数码管的控制,只用单片机本身的I/O口就可实现,且本身的计数器及RAM已经够用,故选择方案二。
第三章理论分析与计算
3.1交通灯显示时序的理论分析与计算
对于一个交通路口来说,能在最短的时间内达到最大的车流量,就算是达到了最佳的性能,我们称在单位时间内多能达到的最大车流为车流量,用公式:
车流量=车流/时间来表示。
图3-1标号设定
3—2规则状态图
说明:
此图为直方图,上边为北路口灯,右边为东路口灯,下边为南路口灯,左边为西路口灯。
图[3-2]所示为一种红绿灯规则的状态图,分别设定为S1、S2、S3、S4,交通灯以这四种状态为一个周期,循环执行见图[3-3]。
图3-3a车辆行驶状态S1图3-3b车辆行驶状态S2
图3-3c车辆行驶状态S3图3-3d车辆行驶状态S4
3-3交通灯四种状态
请注意图[3-1b]和图[3-1d],它们在一个时间段中四个方向都可以通车,这种状态能在一定的时间内达到较大的车流量,效率特别高。
依据上述的车辆行驶的状态图,可以列出各个路口灯的逻辑表,由于相向的灯的状态图是一样的,所以只需写出相邻路口的灯的逻辑表;根据图[3-3]可以看出,相邻路口的灯它们的状态在相位上相差180°。
因此最终只需写出一组S1、S2、S3、S4的逻辑状态表。
如表[3-1]所示:
外圈是北方为前进方向的状态循环,内圈是东方为前进方向的状态循环
S1的状态
A
B
C
D
E
F
G
H
逻辑值
显示时间
从40秒到0秒
S2的状态
A
B
C
D
E
F
G
H
逻辑值
显示时间
从30秒到0秒
S3的状态
A
B
C
D
E
F
G
H
逻辑值
显示时间
从70秒到30秒
S4的状态
A
B
C
D
E
F
G
H
逻辑值
显示时间
从30秒到0秒
表3-1交通灯的循环逻辑表
表中的“×”代表是红灯亮(也代表逻辑上的0),“√”是代表绿灯亮(也代表逻辑上的1),依上表,就可以向相应的端口送逻辑值。
3.2交通灯显示时间的理论分析与计算
东西和南北方向的放行时间的长短是依据路口的各个方向平时的车流量来设定,并且S1、S2、S3、S4各个状态保持的时间之有严格的对应关系,其公式如下所示:
T-S1+T-S2=T-S3
T-S2=T-S4
T-S1=T-S3
我们可以依据上述的标准来改变车辆的放行时间。
按照一般的规则,一个十字路口可分为主干道和次干道,主干道的放行时间大于次干道的放行时间,我们设定值时也应以此为参考。
第四章电路图及设计文件
4.1灯控制电路设计
红绿灯的显示采用普通的发光二极管,每个方向上设置红绿黄灯及行人灯各一个,共四组,如图[4-1]所示。
如果东西方向红灯亮那南北方向就是绿灯,反之亦然,所以在硬件连接图上也成对称分布。
图4-1LED控制电路
4.2倒计时显示电路设计
8段LED是一种常用的数码显示屏。
这种数码管的每个线段都是一个发光二极管,因而把它叫做LED数码管。
由于在数码管的右下角增加了一个小数点,形成了所谓的8段数码管。
E10501是属于共阴极类型的数码管,只要公共端接地,其他端送上高电平就能点亮。
E10501不仅具有工作电压低,体积小,寿命长,可靠性高等优点,而且响应时间短(一般不超过0.1微秒),亮度也比较高。
缺点是工作电流比较高,一般工作电流都在10毫安左右。
E10501的外形图和等效电路图如图[4-2-1]所示。
图4-2-1E10501外形图
图4-2-2E10501等效电路图
LED段显示数码管的设置为每个方位上一对2位显示器。
四个方位上总共有8个LED接在单片机的I/O口上。
显示时我们不需要小数点,所以每个LED的10根管脚只用了9根。
连接后的时间显示电路,如图[4-2-2]所示,虽然路口不一样,但是显示的时间在数字上是一样的,所以两边连接的I/O口是对称的,原理图如图[4-2-3]。
图4-2-3数码管显示
4.3违规车辆检测电路设计
在红灯和黄灯期间,车辆是禁止通行的.为了对那些违反规则的车辆进行检测,受条件限制,本系统设计中只使用了普通光敏二极管。
基本设计思路如下:
将光敏二极管放在停车线上,当车辆通过的时候,因光敏二极管给遮住,二极管就不导通,单片机检测到这一信号后就执行报警操作。
但是,显然在实际中,使用发光二极管无法实现。
违规车辆检测电路除了使用光敏二极管,还使用了三极管,型号为9031。
由于普通的光敏二极管的开关性能不是很好,所以在设计中加个三极管做开关。
由于普通光敏二极管在导通的情况下的电阻能达到0.5—1k,所以在设计中将光敏二极管直接接上了电源。
同时三极管还可以起到一定的隔离作用。
当光敏二极管关断时,三极管的基极为低电平,基极与发射极之间电压为零,三极管关断,检测口的电压为高电平;同理,当光敏二极管导通时,三极管的基极电压为高电平,基极与发射极之间的电压为高,三极管导通,检测口的电压为低电平。
基于此就可以检测是否有车辆违章,其原理图如图[4-3]。
图4-3违规检测电路
第五章程序设计思路与流程图
5.1主程序流程图
主程序开始是运用定时器0来定时,达到准确记时,在往下走就走到程序的死循环部分,分别判断是哪一个状态,当是状态S1时,就用软件的方法启动S1,运行S1,及南北通行,东西禁止。
后面S2、S3、S4与S1一样,在这过程中,如果遇到突发事件,则要进行突发事件的按键处理,当突发事件处理完后,在回到主程序,其流程图如图[5-1]所示。
图5-1主程序流程图
部分主程序如下:
////////////////////////////主函数//////////////////////////
Voidmain()
{
t=5;
TIME_Init();//定时器初始化
sec=COUNT_DOWN;//定时初值
while
(1)
{
key_scan();//按键扫描
switch(key_flag)
{
case0:
t++;if(t>=30)t=5;break;//设置时间
case1:
TR2=1;break;//恢复
case2:
EW_ON;P1=LED[4];TR2=0;break;//南北禁行,定时器停止
case3:
SN_ON;P1=LED[4];TR2=0;break;//东西禁行,定时器停止
}
//==========状态S1========
if((aspect_flag==0)&(interim_flag==0)&(key_flag==0))
{
EW_ON;
P1=LED[0];
P2=LED7Code[(sec-INTERIM)/10];//东西方向绿灯,少5秒
Delay1Ms
(1);
P2=0XFF;
P1=LED[1];
P2=LED7Code[(sec-INTERIM)%10];
Delay1Ms
(1);
P1=LED[2];
P2=LED7Code[sec/10];//南北方向红灯
Delay1Ms
(1);
P2=0XFF;
P1=LED[3];
P2=LED7Code[sec%10];
Delay1Ms
(1);
}
//==========状态S2========
if((aspect_flag==0)&(interim_flag==1)&(key_flag==0))
{
if(half_sec%2==1)EW_Y_ON;
elseEW_Y_OFF;
P1=LED[0];
P2=LED7Code[sec/10];//东西方向黄灯
Delay1Ms
(1);
P2=0XFF;
P1=LED[1];
P2=LED7Code[sec%10];
Delay1Ms
(1);
P1=LED[2];
P2=LED7Code[sec/10];//南北方向红灯
Delay1Ms
(1);
P2=0XFF;
P1=LED[3];
P2=LED7Code[sec%10];
Delay1Ms
(1);
}
//==========状态S3========
if((aspect_flag==1)&(interim_flag==0)&(key_flag==0))
{
SN_ON;
P1=LED[0];
P2=LED7Code[sec/10];//东西方向红灯
Delay1Ms
(1);
P2=0XFF;
P1=LED[1];
P2=LED7Code[sec%10];
Delay1Ms
(1);
P1=LED[2];
P2=LED7Code[(sec-INTERIM)/10];//南北方向绿灯,少5秒
Delay1Ms
(1);
P2=0XFF;
P1=LED[3];
P2=LED7Code[(sec-INTERIM)%10];
Delay1Ms
(1);
}
//==========状态S4========
if((aspect_flag==1)&(interim_flag==1)&(key_flag==0))
{
if(half_sec%2==1)SN_Y_ON;
elseSN_Y_OFF;
P1=LED[0];
P2=LED7Code[sec/10];
Delay1Ms
(1);
P2=0XFF;
P1=LED[1];
P2=LED7Code[sec%10];
Delay1Ms
(1);
P1=LED[2];
P2=LED7Code[sec/10];
Delay1Ms
(1);
P2=0XFF;
P1=LED[3];
P2=LED7Code[sec%10];
Delay1Ms
(1);
}
}
}
5.2.按键子程序流程图
它包含倒计时调整和紧急状态两个状态。
主程序中放了一个按键的判断指令,当有按键按下的时候,程序就自动的跳转到按键子程序处理。
当检测到K2键按下的时候就自动返回到主程序。
当出现紧急的情况的时候,按下K3或者K4就切换到紧急状态,当紧急事件处理完毕的时候,按下K2,就可以返回正常状态,流程图如图[5-2]。
图5-2按键子程序流程图
图5-3按键设置
键盘分编码键盘和非编码键盘。
键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘.而靠软件编程来识别的称为非编码键盘;在单片机组成的各种系统中,用的最多的是非编码键盘。
也有用到编码键盘的。
非编码键盘有分为:
独立键盘和行列式(又称为矩阵式)键盘。
其图如图[5-4],而我们用的是独立式键盘,如上图[5-3]。
图5-4矩阵键盘的原理图
按键在编写程序时,应注意问题,如消颤,一般有物理消颤和软件消颤,我们这使用软件消颤。
具体操作是,当按键按下,用软件延时一段时间,再次扫描按键情况,如果确实有按键按下,就进入相应的操作。
当操作完后要做一个按键是否断开的判断,其依据如图[5-5]:
图5-5键闭合和断开时的电压抖动
按键程序:
voidkey_scan()
{
if(KEY1==0)
{
Delay1Ms(10);//按下延时消颤
if(KEY1==0)
{
if(key_flag==1)
key_flag=0;//取消
else
key_flag=1;//确定
}
while(KEY1==0);
Delay1Ms(5);//弹起延时消颤
while(KEY1==0);
}
if(KEY2==0)
{
Delay1Ms(10);//按下延时消颤
if(KEY2==0)
{
if(key_flag==2)
key_flag=0;//取消
else
key_flag=2;//确定
}
while(KEY2==0);
Delay1Ms(5);//弹起延时消颤
while(KEY2==0);
}
if(KEY3==0)
{
Delay1Ms(10);//按下延时消颤
if(KEY3==0)
{
if(key_