基于单片机的十字路口交通灯控制系统设计讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
长沙航空职业技术学院毕业设计(论文)
题目:基于单片机的十字路口
交通灯控制系统设计
学生姓名
系别航空电子电气工程系
专业应用电子技术专业
学号
指导教师
职称
目录
摘要 (2)
前言 (4)
第一章绪论 (5)
1.1背景 (5)
1.2 设计的目的及意义 (5)
1.3 交通灯控制系统设计的任务与要求 (5)
1.4 设计实现的主要功能 (6)
第二章交通灯的总体方案设计与论证 (7)
2.1 显示界面方案 (7)
2.2 输入方案 (7)
第三章交通灯原理分析 (8)
3.1 交通灯显示时序的理论分析 (8)
3.2 交通灯显示的理论分析 (9)
3.2.1倒计时显示的理论分析 (9)
3.2.2状态灯显示的理论分析 (10)
第四章交通灯系统硬件设计 (11)
4.1 交通灯系统设计芯片选择 (11)
4.2.1系统构成: (12)
4.2.2七段数码管介绍: (12)
第五章交通灯系统软件设计 (14)
5.1程序设计流程图 (14)
5.2 交通灯系统编程信息 (16)
第六章交通灯的仿真及调试 (17)
6.1 Proteus软件仿真 (17)
6.2功能调试 (18)
6.3 交通灯实物调试 (19)
结论 (21)
致谢 (22)
参考文献 (23)
附录 A(源程序) (24)
附录 B(电路原理图) (27)
附录 C(PCB图) (28)
摘要
近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。
那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。
交通信号灯控制方式很多。
本系统采用MCS-51系列单片机AT89C51为中心器件来设计交通灯控制器,实现了能根据实际车流量通过8051芯片的P1口设置红、绿、黄灯燃亮时间的功能;红绿灯循环点亮,倒计时剩3秒时黄灯警示,显示时间通过P2口输出至双位数码管。
本系统设计周期短、可靠性高、实用性强、操作简单、维护方便、扩展功能强。
关键词:单片机;交通灯;AT89C51
Abstract
In recent years, with the rapid development of science and technology, the application of SCM is going deep, driving the traditional detection techniques to renew day by day. In the real-time examination and in the automatic control monolithic integrated circuit application system, the monolithic integrated circuit often took a core part uses. The monolithic integrated circuit aspect knowledge is only insufficient, but should also act according to the concrete hardware architecture software and hardware union, to be improved.
The intersection vehicles shuttle, the pedestrian is bustling, car dealership traffic lane, person sidewalk, methodical. Then depending on what to realizes this orderly order? the traffic lights on the automatic control system. There are great number kinds of modes to control the traffic lights. The system uses a series of MCS-51 as the center AT89C51 single-chip device designed to control the traffic lights, so as to realize the function of setting red, green light time by 8051 chip’s P1 port according to the actual traffic flows, lighting the red-light , green-light and yellow-light by turn and lighting the yellow-light to show while 3 seconds left,outpuing the time by P2 and showing the time on double-digits nixie tube. Short of the design cycle, high reliability, practical, simple operation, easy maintenance, the expansion of powerful is this system.
Key words: SCM; MCU; traffic light; AT89C51
前言
不同的城市有不同城市的问题,但共性就是混合交通流问题。
在交叉口如何解决混合交通流中的互相影响或彼此的互相影响,就是解决问题的关键!随着我国城市化建设的发展,越来越多的新兴城市的出现,使得城市的交通成为了一个主要的问题。
同时随着我国经济的稳步发展,人民的生活水平日渐提高,越来越多的汽车进入寻常百姓的家庭,再加上政府大力发展的公交、出租车,车辆越来越多了。
这不仅要求道路越来越宽阔,而且要求有新的交通管理模式的出台。
旧有的交通控制系统的弊病和人们越来越高的要求激化了矛盾,使原来不太突出的交通问题被提上了日程。
现有关部门愈来愈多的注重在交通管理中引进自动化、智能化技术,比如“电子警察”、自适应交通信号灯以及耗资巨大的交通指挥控制系统等。
随着经济的发展和社会的进步,道路交通愈来愈成为社会活动的重要组成部分。
对交通的管控能力,也就从一个侧面体现了这个国家对整个社会的管理控制能力,因此各国都是很重视用各种高科技手段来清华对交通的管控能力。
现在次提出用单片机空盒子的简易交通红绿灯系统,借以解决单主干道的常规交通问题。
第一章绪论
1.1背景
由于我国经济的快速发展从而导致了汽车数量的猛增,大中型城市的城市交通,正面临着严峻的考验,从而导致交通问题日益严重,其主要表现如下:交通事故频发,对人类生命安全造成极大威胁;交通拥堵严重,导致出行时间增加,能源消耗加大;空气污染和噪声污染程度日益加深等。
日常的交通堵塞成为人们司空见惯而又不得不忍受的问题,在这种背景下,结合我国城市道路交通的实际情况,开发出真正适合我们自身特点的智能信号灯控制系统已经成为当前的主
要任务。
随着电子技术的发展,利用单片机技术对交通灯进行智能化管理,已成为目前广泛采用的方法。
1.2 设计的目的及意义
单片机具有性价比高、集成度高、可靠性好、抗干扰性强等特点,广泛运用于各种智能仪器中。
基于新型规则的可编程交通控制系统,可以实现对车辆、行人的控制,使的交通便于管理。
所以,采用单片机自动控制交通灯有现实的社会意义。
1.3 交通灯控制系统设计的任务与要求
1.以单片机为核心芯片,通过控制三色LED的亮灭来控制各干道的通行。
2. 电源:220VAC±10%,50Hz±10%,用数码管显示时间。
3. 每次绿灯变红灯时,要求黄灯先亮3秒钟。
主干道每次放行45秒;支干道每次放行30秒。
4. 用计算机辅助设计软件Protel设计电路原理图及PCB图
1.4 设计实现的主要功能
本系统需要采用MSC-51系列单片机AT89C51作为中心器件来设计交通灯控制器,实现以下功能:
1.初始东西(支干道)绿灯亮,南北(主干道)红灯亮,东西方向通车。
2.延时27s,东西路口绿灯熄灭,黄灯延时3秒。
(支干道放行30s)
3.黄灯闪烁后,东西路口红灯亮同时南北路口绿灯亮,南北方向开始通车。
4.延时42s,南北方向绿灯灭,黄灯延时3秒,(主干道放行45s)然后又切换成东西方向通车,如此重复。
第二章交通灯的总体方案设计与论证
2.1 显示界面方案
倒计时显示:
该系统要求完成倒计时的功能。
因只需显示数字,基于上述原因,完全采用数码管显示,四个路口分别采用一个二位阴极数码管即可。
状态灯显示:
按照要求,各个路口都只有一种直行通行方式,这是最简单的交通路口通行方式。
所以,一个路口3种灯都只有一种显示方式。
状态灯在绿灯变红灯前,先亮3秒。
2.2 输入方案
8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。
本设计将P1口设置红、绿、黄灯的燃亮;红绿灯循环点亮,倒计时剩3秒时黄灯警示,显示时间通过P2口输出至双位数码管。
该方案的优点是:使用灵活,并且可提供较多I/O口,节省了AT89C51的中断口资源。
第三章 交通灯原理分析
3.1 交通灯显示时序的理论分析
下图所示为一种红绿灯规则的状态图。
共两种状态,分别设定为S1、S2,交通灯以这两种状态为一个周期,循环执行如下图所示:
依据上述车辆行驶的状态图,可以列出各个路口灯的逻辑表如下表所示(其中逻辑值“1”代表直行通行,逻辑值“0”代表禁止通行):
图3.1 状态S1东西直行通行
图3.2 状态S2南北直接通行
图
3.3 交通灯状态循环图
图3.4 东西支干道通行
图3.5南北主干道通行
程序就是在上述两种状态下循环转化的。
一个周期两个状态,整个周期下共花费75s。
3.2 交通灯显示的理论分析
3.2.1倒计时显示的理论分析
利用定时器中断,设置TH0=(65536-50000)/256,TL0=(65536-50000)%256,即每0.05秒中断一次。
每到第20次中断即过了20*0.05秒=1秒时,使时间的计数值减1,便实现了倒计时的功能。
3.2.2状态灯显示的理论分析
AT89C51芯片的P1口分配:
P1^0南北方向红灯, P1^1南北方向绿灯
P1^2南北方向黄灯, P1^5东西方向红灯
P1^6东西方向绿灯, P1^7东西方向黄灯
这里黄灯只要求亮,所以更为简单。
如果要求将黄灯设置为闪烁,则同样可以利用定时器中断,只要将黄灯标志位反置,每到第10次中断即过了10*0.05秒=0.5秒时,即可让黄灯1秒闪烁一次。
第四章交通灯系统硬件设计4.1 交通灯系统设计芯片选择
AT89C51是美国ATMEL公司生产的低电
压,高性能CMOS 8位单片机,有40个引脚,
32个外部双向输入/输出(I/O)端口,同时
内含2个外中断口,3个16位可编程定时计
数器,2个全双工串行通信口,2个读写口线,
片内含8k bytes的可反复擦写的Flash只读
程序存储器和256 bytes的随机存取数据存储
器(RAM),器件采用ATMEL公司的高密度、非
易失性存储技术生产,与标准MCS-51指令系
统及8051产品引脚兼容,片内置通用8位中
央处理器(CPU)和Flash存储单元,可以按
照常规方法对其进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在
一起,特别是可反复擦写的Flash存储器可有
效地降低开发成本。
4.2交通灯显示电路设计图4.1 89C51引脚图
整体连接电路图
4.2.1系统构成:
电路板一块,AT89C51单片机一片,七段数码管两个,发光二极管13个(12个用于交通控制,一个用于标识电源),一个按键,一个数据下载线。
4.2.2七段数码管介绍:
在单片机系统中,常用的显示器有:发光二极管显示器,简称LED;液晶显示器,简称LCD;荧光管显示器。
而发光二极管显示又分为固定段显示和可以拼装的大型字段显示,此外还有共阳极和共阴极之分等。
LED段显示器结构与原理
LED显示器是由发光二极管显示字段组成的显示块,有7段和“米”字段之分。
这种显示块有共阳极和共阴极两种。
此外,显示块中还有一个圆点型发光二极管(在图中以dP表示)用于显示小数点。
通过发光二极管亮、暗的不同组,可以显示多中数字、字母以及其他符号。
LED显示块中的发光二极管共有两种连接方法:
(1)共阳极接法
发光二极管的阳极连在一起构成公共阳极。
使用时公共阳极接+5V,这样,阴极端输入低电平的段的发光二极管被点亮,相应的段被显示;而输入高电平的段则不点亮。
(2)共阴极接法
发光二极管的阴极连在一起构成公共阴极。
使用时公共阴极接地,这样,阳极端输入高电平的段的发光二极管被点亮,相应的段被显示;而输入低电平的段则不点亮。
图4.2 数码管引脚图
共阴和共阳结构的LED显示器各笔划段名和安排位置是相同的。
当二极管导通时,相应的笔划段发亮,由发亮的笔划段组合而显示的各种字符。
8个笔划段dP、g、f、e、d、c、b、a对应于一个字节(8位)的D7、D6、D5、D4、D3、D2、D1、D0,于是用8位二进制码就可以表示欲显示字符的字形代码。
例如,对于共阴LED显示器,当公共阴极接地(为零电平),而阳极dP、g、f、e、d、c、b、a各段为0111011时,显示器显示"P"字符,即对于共阴极LED显示器,“P”字符的字形码是73H。
如果是共阳LED显示器,公共阳极接高电平,显示“P”字符的字形代码应为10001100(8CH)。
用LED显示器显示十进制转换成十六进制数的字形代码在表4.3中列出。
表 4.3LED十六进制的数字代码表
第五章交通灯系统软件设计5.1程序设计流程图
图5.1 主程序流程图
图5.2中断程序
中断程序实现定时与计数的功能,上面已经分析过,TH0=(65536-50000)/256,TL0=(65536-50000)%256,即每0.05秒中断一次。
每到第20次中断即过了20*0.05秒=1秒时,使时间的计数值减1,即实现了倒计时功能。
5.2 交通灯系统编程信息
定时器的中断设置
在单片机中,中断技术主要用于实时控制。
所谓实时控制,就是要求计算机能及时地响应被控对象提出的分析、计算和控制等请求,使被控对象保持在最佳工作状态,以达到预定的控制效果。
由于这些控制参量的请求都是随机发出的,而且要求单片机必须做出快速响应并及时处理,对此,只有靠中断技术才能实现。
相应中断服务子程序
void T0_init()
{
TMOD|=0x01; //定时器0设置为16位定时器TH0=(65536-50000)/256; //定时器0赋初值
TL0=(65536-50000)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //定时器打开
}
if(aa == 20)
{
aa = 0;
value ++; //value单位为秒,
nbnum --;
dxnum --;
}
void time_t0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++; //aa等于20,,20*50000大概是1秒}
第六章交通灯的仿真及调试
6.1 Proteus软件仿真
根据系统设计要求,进行Keil和Proteus系统仿真,不断调试程序,直到符合功能要求。
Proteus总体仿真图如下。
图6.1 Proteus仿真图
6.2功能调试
调试步骤
1. 在Proteus 仿真软件中打开目标电路图。
2. 将在Keil 编程软件中生成的hex 文件导入到电路图中。
3. 点击开始按钮进行仿真测试。
图6.2 东西支干道通行
图6.3 东西支干道黄灯警示
测试结果: 发光二极管,数码管都能按要求显示,符合要求。
6.3 交通灯实物调试
调试步骤
1. 对照电路图连接实物板,再接上电源。
2. 打开电源开关,电路板的发光二极管,数码管开始运作,进行多次循环调试,确认无误后得出结论。
图6.4 南北主干道通行
图6.5 东西支干道通行
图6.6 东西支干道黄灯警示
图6.7 南北主干道通行
调试结果:发光二极管,数码管都能按要求显示,各功能都能实现,符合要求。
结论
本系统采用MSC-51系列单片机AT89C51为中心器件来设计交通灯控制器,芯片的P1口设置红、绿、黄灯燃亮,P2口输出至数码管实现倒计时的功能。
经过仿真和实物调试,发光二极管正常显示,数码管能按要求实现倒计时且能够和二极管同步。
基本功能都能实现,符合设计要求。
通过这次毕业设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。
使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。
致谢
我在指导老师老师的精心指导和严格要求下,经过自己的努力,终于完成了这次毕业设计。
同时获得了丰富的理论知识,极大地提高了实践能力,并对当前电子领域的研究状况和发展方向有了一定的了解,尤其在单片机及其接口技术方面,这对我今后进一步学习应用电子方面的知识有极大的帮助。
通过大量阅读资料,我拓宽了自己的知识面,并懂得将所学知识融会贯通到实践中去。
在获得知识的同时,我也认识到了自己还需要学习的东西很多,理论需要很好的结合实践,全面分析并解决问题的能力有待提高。
另外,此次毕业设计还获得了各位领导和老师的大力支持。
在此,我衷心感谢各位老师的指导和支持。
在未来的工作和学习中,我将以更好的成绩来回报各位领导和老师,同时,在毕业设计过程中,同宿舍的舍友和同学给了我很多的帮助,我非常的感谢他们给我的帮助。
谢谢你们!
参考文献
[1] 清源计算机工作室.Protel 99 SE原理图与PCB 及仿真[M].北京:机械工业出版社.
[2] 赵晶.电路设计与制版Protel 99高级应用[M].北京:人民邮电出版社.
[3] 曾峰.印刷电路板(PCB)设计与制作[M].北京:电子工业出版社.
[4] 王俊峰,薛鸿德.理工科学生怎样搞毕业设计[M].北京:电子工业出版社.
[5]
[6] 陈学平等.Protel2004电路设计与电路仿真[M].北京:清华大学出版社.
[7] 李建中.单片机原理及应用[M].西安:西安电子科技大学出版社.
[8] 朱定华.单片机原理及接口技术实验[M].北京:北方交通大学出版社.
[9] 王松武,于鑫,武思军.电子创新设计与实践[M].北京:国防工业出版社.
[10]马忠梅.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社.
附录 A(源程序)
#include<reg52.h>
sbit Nred = P1^0; //南北方向红灯
sbit Ngre = P1^1; //南北方向绿灯
sbit Nyer = P1^2; //南北方向黄灯
sbit Ered = P1^5; //东西方向红灯
sbit Egre = P1^6; //东西方向绿灯
sbit Eyer = P1^7; //东西方向黄灯
sbit zuo1 =P2^0;//十位,
sbit zuo2 =P2^1;//左边四位数码管,左两位灯亮,个位
sbit you1 =P2^6;//十位
sbit you2 =P2^7;//右边四位数码管,右两位灯亮,个位
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P25=P2^5;
unsigned char aa;//aa表示中断次数,20次
unsigned char value;//value单位为秒,后面将用做定时值
unsigned char nbnum;//nbnum表示南北干道的时间值
unsigned char dxnum;//dxnum表示东西干道的时间值
/***************段码********************/
unsigned char code led_duan[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};//共阴段码/**********函数功能:简单延时********/
/**********入口参数:z***************/
/**********出口参数:无**************/
void delay(unsigned int z)
{
while(z--);
}
/**********函数名称:T0_init***********/
/**********函数功能:T0初始化**********/
/**********入口参数:无****************/
/**********出口参数:无***************/
void T0_init()
{
TMOD|=0x01; //定时器0设置为16位定时器
TH0=(65536-50000)/256; //定时器0赋初值
TL0=(65536-50000)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //定时器打开
}
/**********函数名称:display***********/
/**********函数功能:显示程序**********/
/**********入口参数:无****************/
/**********出口参数:无***************/
void display()
{
zuo1=0;
P22=1;
P23=1;
P24=1;
P25=1;
P0=led_duan[dxnum/10];//数码管右边的表示东西干道的时间值,显示十位delay(500);
P2=0xff;
zuo2=0;
P22=1;
P23=1;
P24=1;
P25=1;
P0=led_duan[dxnum%10];//显示个位
delay(500);
P2=0xff;
you1=0;
P22=1;
P23=1;
P24=1;
P25=1;
P0=led_duan[nbnum/10];//数码管左边的表示南北干道的时间值,显示十位delay(500);
P2=0xff;
you2=0;
P22=1;
P23=1;
P24=1;
P25=1;
P0=led_duan[nbnum%10];//显示个位
delay(500);
P2=0xff;
}
void main()
{
P1 = 0xff;//清显
T0_init();//定时初始化
while(1)
{
if(aa == 20)
{
aa = 0;
value ++;//value单位为秒,
nbnum --;
dxnum --;
}
if(value == 0)
{
Nyer = 1;
Ered = 1;
Nred = 0;//低电平,灯才亮
Egre = 0;//一开始东西支干道绿灯将亮27秒
nbnum = 30;//开始30秒倒计时
dxnum = 30;
}
if(value == 27)
{
Egre = 1;//第27秒东西干道的绿灯开始关闭
Eyer = 0;//第27秒东西干道的黄灯开始亮
}
if(value == 30)
{
Nred = 1;//第30秒南北主干道的红灯关闭,开始通行
Ngre = 0;//第30秒南北主干道的绿灯将开始亮,绿灯显示42秒
Eyer = 1;//第30秒东西支干道的黄灯关闭
Ered = 0;//第30秒东西干道的红灯将亮,禁止通行
nbnum = 45;//东西和南北干道开始重新45秒计数
dxnum = 45;
}
if(value == 72)
{
Ngre = 1;//南北主干道的绿灯又开始关闭
Nyer = 0;//南北主干道的黄灯将要亮起3秒
}
if(value == 75) value = 0;//开始循环
/**********************黄灯延时************************/
if(((value>=27)&&(value<30))&&(aa == 0)) Eyer = 0;//东西干道黄灯亮3秒(可以改为闪烁)
if(((value>=27)&&(value<30))&&(aa == 3)) Eyer = 0;
if(((value>=27)&&(value<30))&&(aa == 6)) Eyer = 0;
if(((value>=27)&&(value<30))&&(aa == 9)) Eyer = 0;
if(((value>=27)&&(value<30))&&(aa == 12)) Eyer =0;
if(((value>=27)&&(value<30))&&(aa == 15)) Eyer = 0;
if(((value>=72)&&(value<75))&&(aa == 0)) Nyer = 0; //南北干道的黄灯亮3秒(可以改为闪烁)
if(((value>=72)&&(value<75))&&(aa == 3)) Nyer = 0;
if(((value>=72)&&(value<75))&&(aa == 6)) Nyer = 0;
if(((value>=72)&&(value<75))&&(aa == 9)) Nyer = 0;
if(((value>=72)&&(value<75))&&(aa == 12)) Nyer = 0;
if(((value>=72)&&(value<75))&&(aa == 15)) Nyer = 0;
display();//引用显示程序
}
}
/***************定时器中断*****************/
void time_t0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;//aa等于20,,20*50000大概是1秒
}
附录 B(电路原理图)
附录 C(PCB图)。