欢迎来到天天文库
浏览记录
ID:21497616
大小:25.00 KB
页数:5页
时间:2018-10-22
《基于at89c51的交通信号灯控制系统》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、基于AT89C51的交通信号灯控制系统 摘要随着经济的发展我国汽车保有量不断增加,道路交通问题日益凸显。本文主要研究以AT89C51单片机作为控制系统,实现对十字路口交通信号灯的控制。以东西向为例,绿灯亮80秒、黄灯亮3秒、红灯亮60秒、绿灯亮80秒依次循环实现对于东西向车流的控制。采用AT89C51单片机控制交通信号灯具有简单可靠等优点。 【关键词】单片机设计 1AT89C51?纹?机概述 1.1AT89C51单片机简介 AT89C51单片机是ATMEL公司出品的一款与MCS51兼容的一款单片机,属于第三代
2、单片机。AT89C51提供4K的Flash存储器,128字节RAM,4个IO口,2个16位定时器,一个中断系统,一个串行通信口,片内震荡器和时钟电路。AT89C51支持两种软件可选的节电工作模式。空闲模式停止CPU的工作但允许其他功能部件如RAM,中断系统等继续工作,掉电模式保持RAM中的内容不丢失其他所有部件都将停止工作一直到下一个硬件复位。 1.274HC138译码器简介 74HC138译码器是一个高速CMOS器件,具有三个输入端ABC及其3个特有的使能输入端两个低有效(E1和E2)一个高有效(E3)。只有E1
3、,E2置低电平,E3置高电平时译码器才能正常译码。否则译码器输出将全为高电平。74HC138译码器按照输入端三位二进制输入码的条件从8个输出端译出一个低电平输出。 2方案论证 利用单片机设计一个十字路口交通灯控制系统。利用用单片机控制LED灯模拟指示。东西向通行时间为8秒,南北向通行时间为60秒,缓冲时间为3秒。以东西向为例,东西向绿灯亮80秒,黄灯亮3秒,红灯亮60秒,绿灯再亮80秒依次循环。 3设计原理 3.1硬件原理分析 本系统主要由单片机控制系统、译码模块、数码管显示模块、交通灯模块等组成。 单片机
4、控制控制模块:选用AT89C51单片机,外加震荡电路为单片机提供脉冲信号。将51单片机的P3.0,P3.1,P3.2用作普通IO口使用,利用这三个口控制交通信号灯模块。P3.0口输出为高电平绿灯亮,P3.1口输出为高电平黄灯亮,P3.2口输出为高电平红灯亮。利用P1.0,P1.1,P1.2控制译码模块(3-8译码器)。利用P2口与译码模块控制数码管显示,P2口输出值即为译码器选中的当前数码管所显示的值。 译码模块:由一个3-8译码器构成。输出端只利用Y0,Y1,Y2,Y3四个口。输入端由单片机的P1.0,P1.1,P
5、1.2控制。如:当前P1.0输出为高,P1.1输出为高,P1.2输出为低,则Y3输出为低选中最右端数码管显示。P1口不断输出不同值,依次轮流选中四个数码管进行显示,在整个系统运行过程中都要不断地进行选中即进行扫描。 数码管显示模块:由单片机P2口与译码器共同控制。由译码器选中当前的数码管,当前数码管显示P2口传过来的值。 交通灯模块:由红黄绿三个LED灯组成。由单片机的P3.0,P3.1,P3.2控制。P3.0口输出为高电平绿灯亮,P3.1口输出为高电平黄灯亮,P3.2口输出为高电平红灯亮。 3.2软件原理分析
6、 单片机的控制程序主要由条件标志位g的判断模块、绿灯显示模块、黄灯显示模块、红灯显示模块构成。 条件标志位g判断模块:设条件标志位g,若g=0执行绿灯显示程序,若g=1执行黄灯显示程序,若g=2执行红灯显示程序。 绿灯显示模块:首先进行一段时间的延时,然后对f进行判断(f初始值为80)若f>0则直接输出f值,采用不断取余的方式显示f的十位个位。若f<=0则将f重新赋值并修改条件标志位g再输出显示一次f后返回转入黄灯显示程序执行。 黄灯显示模块:基本步骤与绿灯显示模块相同,只是显示所赋f初始值(f初值为3)不同。
7、 红灯显示模块:基本步骤与绿灯显示模块相同,只是显示所赋f初始值(f初值为60)不同。 3.3相应程序代码 //控制程序以绿灯为例 if(g==0) { for(c=0;c<250;c++);//做一个0-250的循环,不执行其他操作,只为延时 for(c=0;c<250;c++); if(++e>250)//做一个延时,时间到将显示内容加1 { e=0;//清零,为下一次延时做准备 if(f<=0) { f=81;//循环结束后初始化 g=1;//标志位置位 } f--; } P2=
8、0;//关一次显示,以免显示出鬼影 if(++d>1)d=0;//先将d加1,然后判断是否大于1,大于1归零 if(d==0)//如果d=0,显示十位 { P1=0x01; P2=LED[(f%100)/10];//将要显示的f的十位提取出来查表后送显示 } else//如果d=1,显示个位 { P1=0x00;
此文档下载收益归作者所有