基于51的交通灯设计报告带左转Word格式文档下载.docx
《基于51的交通灯设计报告带左转Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于51的交通灯设计报告带左转Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的会议大厦前的广场上,安装了世界上最早的煤气红绿灯。
它由红绿两以旋转方式玻璃提灯组成,红色表示“停止”,绿色表示“注意”。
1869年1月2日,煤气灯爆炸,是警察受伤,遂被取消!
电气启动的红绿灯出现在美国,这种红绿灯由红黄绿三色圆形的投光器组成,1914年始装于纽约市5号大街的一座高塔上。
红灯亮表示“停止”,绿灯亮表示“通行”。
信号灯的出现,使得交通得以有效的管理,对于疏导交通流量、提高道路通行能力、减少交通事故有明显效果。
1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。
绿灯时通行信号灯,面对绿灯的车辆可以直行,左转弯和右转弯,除非两一种标志禁止某一种转向。
左右转弯车辆必需让合法的正在路口行驶的车辆和过人行横线的行人优先通行。
红灯是禁行信号灯,面对红灯的车辆必需在交叉路口的停车线后停车。
黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已经十分接近停车线而不能安全停车的可以进入交叉路口!
二、概要设计
2.1设计思路
利用单片机实现交通灯的控制,该任务分以下几个方面:
a实现红、绿、黄灯的循环控制,并且交通灯系统带有左转信号灯。
要实现此功能需要表示三种不同颜色的共16个LED灯,每两个一组分别接在51单片机的不同管脚,用软件实现控制。
b用数码管显示倒计时。
采用2个两位共阳极数码管,利用动态显示,通过单片机IO口控制位选,段选动态显示时间情况。
C实现急通车。
这需要人工实现,编程时利用到中断才能带到目的,只要有按钮按下,那么四个方向全部显示红灯,禁止以诶车辆通行。
当情况解除,让时间回到只能隔断处继续进行。
2.2设计的主要容和要求
交通灯处在十字路口上。
它有红﹑黄﹑绿三种颜色的灯组成。
红灯亮时道路上的车辆停止运行;
黄灯是一种过渡用的信号灯,当它亮时,表示道路上的红绿色信号灯即将进行转换。
下面拿东西南北四个方向来说明。
当东西方向允许行车(或者左转)的时候,南北方向就禁止行车,即此时东西方向的绿灯亮红灯灭,而南北方向的绿灯灭红灯亮。
反之当南北方向允许行车(或者左转)的时候,东西方向就禁止行车,即此时南北方向的绿灯亮红灯灭,而东西方向的绿灯灭红灯亮。
交通灯配置示意图如图1所示。
同时当有特殊的情况发生时,能手动控制各个方向的信号灯。
设计任务就是将这一电路用单片机来实现具体的控制。
图1十字路口交通灯配置示意图
2.3总体设计框图
见图2:
三、硬件设计
3.1LED循环电路设计
89C52单片机概述
MCS-51单片机部结构:
89C52是MCS-51系列单片机的典型产品,现在以这一代表性的机型进行系统的讲解。
89C52单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等极大单元与数据总线、地址总线和控制总线等三大总线。
89C52主要功能特性:
·
标准MCS-51核和指令系统
片8kROM(可扩充64kB外部存储器)
32个双向I/O口
256x8bit部RAM(可扩充64kB外部存储器)
3个16位可编程定时/计数器
时钟频率3.5-12/24/33MHz
向上或向下定时计数器
改进型快速编程脉冲算法
6个中断源
5.0V工作电压
全双工串行通信口
布尔处理器
—帧错误侦测
4层优先级中断结构
—自动地址识别
兼容TTL和CMOS逻辑电平
空闲和掉电节省模式
PDIP(40)和PLCC(44)封装形式
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。
MCS-51系统的引脚说明:
MCS-51系列单片机中的8031、8051与8751均采用40Pin封装的双列直接DIP结构,图3是它们的引脚配置,40个引脚中,正电源和底线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
图3
89C51的复位方式可以自动复位,也可以是手动复位,见下图。
除此之外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可以接上没用电源,以保证单片机部RAM的数据不丢失。
在编程时,EA/Vpp脚还需加上21V的编程电压。
3.2LED循环说明
为了便于说明,不妨将东西方向允许直行命名为状态1,东西方向允许左转命名为状态2,东西方向行车到南北方向行车的转换阶段命名为状态3,将南北方向允许直行命名为状态4,南北方向允许左转命名为状态5,南北方向行车到东西方向方向行车的转换阶段命名为状态6。
假定左转绿灯点亮的时间为25s,直行绿灯点亮的时间为20s,黄灯点亮的时间为5s,则对方红灯的点亮时间为50秒。
黄灯每隔500ms亮一次,之后灭500ms(亮灭一次叫作闪烁一次),一共闪烁5次,持续5s。
各个状态之间的变换情况如下:
状态1状态2状态3状态4状态5状态6状态1
具体显示周期如下:
25s
20s
5s
50s
状态1
状态2
状态3
状态4
状态5
状态6
东西路口
直行
绿灯亮
左转
黄灯亮
缓行
红灯亮禁行
南北路口
图4
3.3单片机I/O口控制交通灯电路
protel电路原理图:
LED灯采用共阳极接法,所有的LED灯阳极都接在5V电压一端,加上限流电阻,阴极接单片机的IO口,当IO口输出低电平时LED亮,通过设置不同的输出来改变LED的亮灭,实现交通灯的控制。
上图为51单片机的最小系统,包括51的晶振电路和上电复位电路。
3.4倒计时显示电路
Protel电路原理图:
数码管采用共阳极数码管,位选端口直接接在IO口上,段码端口通过8个上拉电阻接在IO口上,通过IO口控制数码管显示时间。
3.4紧急情况按钮电路
为了实现此功能,利用单片机中断达到目的。
利用一个手动开关接至单片机外部中断0,同时在软件设计时将其设为最高优先级。
当开关闭合,四方全为红灯。
当开关打开,回到原来的位置继续执行,电路图如下图。
3.5整体电路图
上图是利用protel99se做出的整体设计原理图
Protel电路原理图的PCB图:
上图是利用protel99se做出的51交通灯的印制电路板PCB图。
印制电路板3D效果图:
上图是利用AltiumDesigner09打开PCB图做出的印制电路板3D效果图。
Proteus仿真电路图:
上图是利用proteus7.5搭建的51交通灯仿真电路,截图状态为仿真运行开始状态。
四软件按设计
4.1程序流程图:
4.2LED红绿灯显示
当P1端口输出高电平,即P1各端口=1时,根据发光二极管的单向导电性可知,这是发光二极管熄灭;
当P1个端口输出低电平,即P1各端口=0时,发光二极管亮。
通过设置P1口不同时段输出电平的不同来控制发光二极管模拟交通灯的各种状态。
4.3倒计时显示
数码管的显示采用共阳极数码管的动态显示,通过P2口的P2.0至P2.3分别控制东西南北方向的数码管位选信号,然后通过P0口作为数码管的段选信号,通过位选信号的分时选择来控制数码管的个位,十位分别显示,又由于这期间的时间间隔很短,所以我们看起来数码管的个位十位是同时亮的。
然后利用定时器倒计时,通过数码管显示出来。
4.4急通车控制
将一按钮接到单片机外部中断0端口。
另一端接地,通过在程序里设置外部中断0为最高优先级。
当检测到有按钮按下时,产生中断,停止刚才的程序,转向中断执行。
4.5程序代码
见附录。
五总结
单片机是一门强调实践的课程,在学习单片机理论课时候就感觉到容很多,知识点很杂,分繁琐。
虽然老师的课上得不错,但是对于单片机部结构还不是很理解。
不过单片机综合设计这门课程给了我们一次实践的机会。
通过这次设计逐渐了解了单片机的部构造和工作原理,以与接外部电路的情况。
通过实际动手去实践。
真正把课堂上所学的用到日常生活中,理论联系实际,做出实物模型。
这次单片机实习,我选的是交通灯设计,从代码的编写,做仿真到画电路原理图,PCB图,到最后的做实物,都是通过查阅资料,自己动手做。
做完之后,感觉真正在这门课上学到了东西。
动手能力得到了提高,对单片机的认识也加深了。
这次实习,在编程的时候会有困难,也可能不一定成功,所以要经过多次调试,分析,改正,反复去做。
经历了多次失败的洗礼,我明白在以后学习和实践中,我要努力掌握知识,多动手,多思考,以免在以后的学习工作中犯同样的错误。
附录:
/*****************************************************
十字路口交通灯控制C程序
******************************************************/
#defineucharunsignedchar
#defineuintunsignedint
#include<
reg52.h>
/*****定义控制位**********************/
sbitEW_LED2=P2^3;
//东西数码管个位
sbitEW_LED1=P2^2;
//东西数码管十位
sbitSN_LED2=P2^1;
//南北数码管个位
sbitSN_LED1=P2^0;
//南北数码管十位_
sbitSN_Yellow=P1^6;
//南北黄灯
sbitEW_Yellow=P1^2;
//东西黄灯
sbitEW_Red=P1^3;
//东西红灯
sbitSN_Red=P1^7;
//南北红灯
//sbitBusy_Btton=P3^2;
bitFlag_SN_Yellow;
//南北黄灯标志位
bitFlag_EW_Yellow;
//东西黄灯标志位
charTime_EW;
//东西方向倒计时单元
charTime_SN;
//南北方向倒计时单元
ucharEW=50,SN=25,EWL=20,SNL=20;
//程序初始化赋值,正常模式
ucharEW1=50,SN1=25,EWL1=20,SNL1=20;
//用于存放修改值的变量
//ucharcodetable[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//1~~~~9段选码
ucharcode