基于单片机的交通灯论文.docx
《基于单片机的交通灯论文.docx》由会员分享,可在线阅读,更多相关《基于单片机的交通灯论文.docx(18页珍藏版)》请在冰豆网上搜索。
基于单片机的交通灯论文
基于单片机的交通灯论文
专业:
班级:
学生姓名:
指导教师姓名:
2014年月
摘 要:
十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。
那么靠什么来实现这井然秩序呢?
靠的就是交通信号灯的自动指挥系统。
交通信号灯控制方式很多。
当今时代是一个自动化时代,交通灯控制等很多行业的设备都与计算机密切相关。
因此,一个好的交通灯控制系统,将给道路拥挤、违章控制等方面给予技术革新。
随着大规模集成电路及计算机技术的迅速发展,以及人工智能在控制技术方面的广泛运用,智能设备有了很大的发展,是现代科技发展的主流方向。
本文利用单片机完成对交通灯的模拟,加深对交通灯系统的认识。
关键字:
单片机 交通灯 控制系统智能设备
第一章引言
当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。
但这一技术在19世纪就已出现了。
1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。
这是世界上最早的交通信号灯。
1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。
它由红绿两以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。
1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。
1914年始安装于纽约市5号大街的一座高塔上。
红灯亮表示“停止”,绿灯亮表示“通行”。
信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。
绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。
左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。
红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。
黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。
本文介绍一种以单片机为控制核心的交通灯,利用状态机的思想,通过单片机的定时器产生秒信号,控制十字路口的红绿黄灯交替点亮和熄灭,并且用4只LED数码管显示十字路口两个方向的剩余时间。
第二章硬件部分
1单片机概述
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:
中央处理器、存储器和I/O接口电路等。
因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
单片机经过1、2、3、3代的发展,目前单片机正朝着高性能和多种方向发展,它们的CPU功能在增强,内部资源在增多,引脚多功能化,以及低电压底功耗。
(1)AT89S52芯片简介
AT89S52是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89S52单片机适合于许较为复杂控制应用场合。
AT89S52芯片引脚结构如图1所示:
图1
图1
主要性能参数:
·与MCS—51产品指令和引脚完全兼容
·8k字节可重擦写Flash闪速存储器
·1000次擦写周期
·全静态操作:
0Hz—24MHz
·三级加密程序存储器
·256×8字节内部RAM
·32个可编程I/O口线
·3个16位定时/计数器
·8个中断源
·可编程串行UART通道
·低功耗空闲和掉电模式
功能特性概述:
AT89C52提供以下标准功能:
8k字节Flash闪速存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C52可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
引脚功能说明:
·Vcc:
电源电压
·GND:
地
·P0口:
P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。
作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
·P1口:
P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2EX)。
·P2口:
P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。
·P3口:
P3口是一组带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。
·RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
·ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。
·PSEN:
程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。
在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
·EA/VPP:
外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。
需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。
Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。
·XTAL1:
振荡器反相放大器的及内部时钟发生器的输入端。
·XTAL2:
振荡器反相放大器的输出端。
2数码管
(1)LED数码管
LED数码管(LEDSegmentDisplays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。
LED数码管常用段数一般为7段有的另加一个小数点。
LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。
本文采用共阳数码管,图2是单个数码管的内部结构.
图2
LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数位,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。
A、静态显示驱动:
静态驱动也称直流驱动。
静态驱动是指每个数码管的每一个段码都由一个单片机的I/O埠进行驱动,或者使用如BCD码二-十进位*器*进行驱动。
静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O埠多,如驱动5个数码管静态显示则需要5×8=40根I/O埠来驱动,要知道一个89S52单片机可用的I/O埠才32个呢。
故实际应用时必须增加*驱动器进行驱动,增加了硬体电路的复杂性。
B、动态显示驱动:
数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位元选通控制电路,位元选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码管就不会亮。
透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位元数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O埠,而且功耗更低。
3硬件电路图
4
第三章软件部分
1工作模式
假设南北方向为主干道,通行时间为60秒,东西方向是次干道,通行时间为30秒,黄灯点亮的时间均为4秒,则其工作方式如表1所示循环点亮信号灯。
往南和往北的信号一致,即红灯(绿灯或黄灯)同时亮或同时熄灭。
用两个数码管来显示被点亮的指示灯还将点亮多久。
往东和往西方向的信号一致,其工作方式与南北方向一样,也采用两个数码管来倒计时。
当南北方向为绿灯和黄灯时,东西向的红灯点亮禁止通行;而东西方向为绿灯和黄灯时,南北向的红灯点亮禁止通行。
交通信号灯工作模式
黄灯亮5s
红灯亮50秒
绿灯亮45s秒
红灯亮50秒
黄灯亮5秒
绿灯亮45秒
21每秒钟的设定
1秒的方法我们采用在主程序中设定一个初值为1000的软件计数器和使T0定时1毫秒.这样每当T0到1毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。
在中断服务子程序中,CPU先使软件计数器加1,然后判断它是否为1000。
等于1000表示1秒已到可以返回到输出时间显示程序。
1相应程序代码
(1)主程序
定时器需定时1毫秒,故T0工作于方式1。
voidchushihua(void)
{
TMOD=0X01;
TH0=64536/256;
TL0=64536%256;
TR0=1;
ET0=1;
EA=1;
}
voidmain(void)
{
chushihua();
while
(1){;}
}
(2)中断服务子程序
voidtime0(void)interrupt1
{
TH0=64536/256;
TL0=64536%256;
time1s_count++;
if(time1s_count==1000)
{
time1s_count=0;time1s_flag=1;
}
}
3交通灯状态切换图
原状态
次状态
条件
功能
南北绿灯亮
南北黄灯亮
60秒到
南北绿灯灭,南北黄灯亮,南北红灯灭,东西绿灯灭,东西黄灯灭,东西红灯亮,数码管倒计时4秒
南北黄灯亮
东西绿灯亮
4秒到
南北绿灯灭,南北黄灯灭,南北红灯亮,东西绿灯亮,东西黄灯灭,东西红灯灭,数码管倒计时30秒
东西绿灯亮
东西黄灯亮
30秒到
南北绿灯灭,南北黄灯灭,南北红灯亮,东西绿灯灭,东西黄灯亮,东西红灯灭,数码管倒计时4秒
东西黄灯亮
南北绿灯亮
4秒到
南北绿灯亮,南北黄灯灭,南北红灯灭,东西绿灯灭,东西黄灯灭,东西红灯亮,数码管倒计时30秒
5源程序
#include"at89x51.h"
#defineled_red_1P0_0
#defineled_green_1P0_1
#defineled_yellow_1P0_2
#defineled_red_2P0_3
#defineled_green_2P0_4
#defineled_yellow_2P0_5
#defineport_1P2
#defineport_2P1
unsignedcharcodetable_1[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00};
unsignedchartable_2[]={0x01,0x02,0x04,0x08,
0x10,0x20};
unsignedchardispbuf[]={15,15,16,16,16,16};
unsignedcharcount,second=0;
unsignedinttime1s_count;
unsignedcharmode=3;
bittime1s_flag;
voiddisp(void)
{port_1=table_1[dispbuf[count]];
port_2=table_2[count];
count++;
if(count==3)
count=0;
}
voidtime0(void)interrupt1
{
TH0=64536/256;
TL0=64536%256;
disp();
time1s_count++;
if(time1s_count==1000)
{
time1s_count=0;
time1s_flag=1;
}
}
voidchushihua(void)
{
TMOD=0X01;
TH0=64536/256;
TL0=64536%256;
TR0=1;
ET0=1;
EA=1;
}
voidmain(void)
{
chushihua();
while
(1)
{
if(time1s_flag==1)
{
time1s_flag=0;
switch(mode)
{
case0:
led_red_1=1;
led_green_1=1;
led_yellow_1=0;
led_red_2=0;
led_green_2=1;
led_yellow_2=1;
second--;
if(second==0)
{
second=30;
mode=1;
}
break;
case1:
led_red_1=0;
led_green_1=1;
led_yellow_1=1;
led_red_2=1;
led_green_2=0;
led_yellow_2=1;
second--;
if(second==0)
{
second=4;
mode=2;
}
break;
case2:
led_red_1=0;
led_green_1=1;
led_yellow_1=1;
led_red_2=1;
led_green_2=1;
led_yellow_2=0;
second--;
if(second==0)
{
second=60;
mode=3;
}
break;
case3:
//南北绿灯亮,东西黄灯亮,其余全灭,倒计时60秒
led_red_1=1;
led_green_1=0;
led_yellow_1=1;
led_red_2=0;
led_green_2=1;
led_yellow_2=1;
second--;
if(second==0)
{
second=4;
mode=0;
}
break;
default:
break;
}
}
}
}
6实验小结
(1)现象
将程序输入到单片机中,运行程序,可以观察到现象:
首先是两个路口的红灯全亮,延时3秒之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时10秒后,东西路口绿灯灭,黄灯开始闪烁。
闪烁5次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时10秒后,南北路口的绿灯灭,黄灯开始闪烁。
闪烁5次后,再切换到东西路口方向,重复上述过程。
同时发现数码管闪烁,数据显示混乱。
(2)软件调试
当硬件接好完成后,软件制作也是不可轻视的部分,是实现电路的功能的关键部分,通过本次课程设计,总结经验如下:
(1)先进行人工检查。
写好程序后,不立刻烧入单片机,先对纸面上的程序进行人工检查。
由于采用C语言编程,所以要特别小心地检查语法错误,如括号不配对,漏写分号等,通过仔细的检查,发现并排除这些错误。
(2)人工检查无误后,上机调试。
在编译时给出的语法错误的信息,根据提示的信息具体找出程序中错误之处并改之,从上至下逐一改正。
应当注意的是:
有的提示出错行并不是真正出错的行,如果在提示出错的行上找不到错误的话,则应该到上行再找。
(3)当确认程序无语法错误和逻辑错误时,通过直接下载到单片机来调试。
采用的是自下到上的调试方法,即单独调好每一个模块,然后再连接成一个完整的系统调试。
(4)程序烧入单片机后,观察各个部件的工作是否正常,功能是否实现。
如不能正常工作,则继续检查程序中的相应模块,必要时从上到下重新检查程序。
(3)课程设计的心得与体会
a.通过试验进一步理解和消化了书本知识,分析每个语句的含义,运用所学知识进行简单的程序设计。
了解了在单片机系统中扩展简单I/O接口的方法.定时器中断技术的基本使用方法,掌握了中断处理程序的编程方法。
b.通过在图书馆查阅各种单片机资料,培养了我自学和独立思考的能力。
与同学交流研究,让我懂得了更多以前不明白的知识.
第四章小结
通过这次设计,我对单片机和C语言有了一定的认识,对以前学的数字电路又有了一定的新认识,温习了以前学的知识,就像人们常说的温故而知新嘛。
在这次毕业设计中也使我们的同学关系更进一步了,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。
这是我们第一次用自己的思想来课程设计,可想而之,这是一件多么困难的事情,平常只要是遇到跟设计相关的课题,我们都是由老师来带领着,一步一步的去解开那些百思不得其解的疑难.现在面对设计的要求,虽然也有老师的指导,但是不再是老师带领我们去解答问题,而是我们要依托自己的力量,不依赖老师,去完成自己的设计课题的时候了,这对我们来说是一次挑战,也是一次战胜自我的方式,为此从一开始,我们就卯足了劲儿,为达目标,永不放弃!
课程设计不仅是一项必须完成的作业,也是对于我的一次历练.在设计完成过程中所遇到的艰辛,以及如何一一克服,对于我来说都是印证了自己的每一步的进步!
原先自己在面对困难的时候总是一味的惧怕与退缩,但是现在的自己已经不会那样做了,毕竟已经成长了很多,现在在遇到困难的时候,心里想的只有如何努力的去克服它,而不是逃避!
因为自己已经不是一个小孩子了,而是一个成人,对于一个即将要踏入社会的人来说,势必要遇到许多难以克服的困难,如果连现在的一点点小小的考验都不能承受,那么将来在面对那些更加难以应付的考验该如何是好呢?
所以从现在开始就要努力了呀!
致谢
本设计是在指导老师高大容老师的悉心指导下完成的。
从设计的选题,相关资料的查寻,到论文的撰写这一整个过程中,高老师以其丰富的经验、清晰的思路,自始至终给我以指导,使我能够顺利完成设计,她严谨的治学态度,精益求精的工作作风和孜孜不倦的求学精神令我受益匪浅。
在此设计完成之际,对高老师表示衷心的感谢!
在此要感谢我的指导老师,感谢老师给我这样的机会锻炼。
在整个课程设计过程中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。
而且大大提高了动手的能力,使我充分体会到了在创造过程中的探索的艰难和成功的喜悦。
虽然这个项目还不是很完善,但是在设计过程中所学到的东西是这次毕业设计的最大收获和财富,使我终身受益。
参考文献
潘新民,王燕芳主编:
《微型计算机控制技术》,人民邮电出版社
李朝青主编:
《单片微机原理及应用技术》,南开大学出版社
王卫东,王明秋,艾庆生主编:
《基于单片机的最简连线抢答器的设计与制作》,郧阳师范高等专科学校学报电子技术出版社
黄继昌等编著:
《实用单元电路及其应用》人民邮电出版社
赵淑范主编:
《电子技术实验与课程设计》,清华大学出版社
陈光明主编:
《电子技术课程设计与综合实训》北京航空航天大学出版社
彭介华主编:
《电子技术课程设计》高等教育出版社
曹国清主编:
《数学电路与逻辑设计》中国矿业大学出版社
彭介华主编:
《电子技术课程设计指导》高等教育出版社