单片机控制交通灯Word下载.docx
《单片机控制交通灯Word下载.docx》由会员分享,可在线阅读,更多相关《单片机控制交通灯Word下载.docx(27页珍藏版)》请在冰豆网上搜索。
![单片机控制交通灯Word下载.docx](https://file1.bdocx.com/fileroot1/2023-1/24/2abb23c2-ba58-43b3-b045-fecaa8915bbc/2abb23c2-ba58-43b3-b045-fecaa8915bbc1.gif)
4.3程序运行后状态表19
第5章调试与检测20
5.1硬件检测20
5.1.1静态检测20
5.1.2动态检测20
5.2软件调试20
第6章实验平台21
6.1keil软件介绍21
6.2proteus软件介绍21
6.2protel软件介绍22
结论23
参考文献24
致谢25
第1章引言
今天,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。
但这一技术在19世纪就已出现了。
1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的扳手式信号灯,用以指挥马车通行。
这是世界上最早的交通信号灯。
1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。
它由红绿两块以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。
1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。
1914年,电气启动的红绿灯出现在美国。
这种红绿灯由红绿黄三色圆形的投光器组成,安装在纽约市5号大街的一座高塔上。
红灯亮表示“停止”,绿灯亮表示“通行”。
1918年,又出现了带控制的红绿灯和红外线红绿灯。
带控制的红绿灯,一种是把压力探测器安在地下,当车辆接近时,红灯便变为绿灯;
另一种是用扩音器来启动红绿灯,司机遇红灯时按一下喇叭,就使红灯变为绿灯。
红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉到有人要过马路。
红外光束能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。
信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。
绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。
左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。
红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。
黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。
随着经济的发展,交通运输中出现了一些传统方法难以解决的问题。
道路拥挤现象日趋严重,造成的经济损失越来越大,并一直保持大比例的增长。
现在交通系统已不能满足经济发展的需求。
由于生活水平的提高,人们对交通运输的安全性及服务水平提出了更高的要求。
在交通中管理引入单片机交通灯控制代替交管人员在交叉路口服务,有助于提高交通运输的安全性、提高交通管理的服务质量。
并在一定程度上尽可能的降低由道路拥挤造成的经济损失,同时也减小了工作人员的劳动强度。
中国车辆数量不断增加,交通控制在未来的交通管理中起着越来越重要的作用。
智能交通灯的管理比重修一条马路无论在经济、交通运行速率上都有很好的效益、更加节约资源。
使交管人员有更多的精力投入到管理整个城市交通控制,带来更大的经济和社会效益,为创造美好的城市交通形象发挥更多的作用。
第2章交通管理设计流程
2.1设计任务
东西(A)、南北(B)两干道交于一个十字路口,各干道有一组红、左转绿、绿三个指示灯,指挥车辆和行人安全通行。
红灯亮禁止通行,绿灯亮允许通行。
红灯的设计时间为25秒,绿灯20秒后开始闪烁警示,倒计时剩2秒时绿灯灭黄灯亮。
设A道和B道的车流量相同。
2.2流程介绍
本论文主要的工作就是通过一个交通信号灯系统的硬件、软件的设计来实现红绿灯的正常工作,具体工作安排大概描述为:
一是根据系统控制要求设计硬件电路,这里是用PROTEUS软件来完成;
二是根据硬件电路编写相应的程序流程图,然后编写相关程序,这里程序的编制主要是用KeilC51软件来完成;
三是在KEIL上用已经编好的程序生成.hex文件载入到PROTEUS中,实现PROTEUS与KEIL的联调,完成调试和仿真,观察调试结果是否满足设计要求,若不满足需要继续检查程序和其他情况直至实现正确的仿真为止。
四是按成功仿真的原理购买电子元件进行硬件实物焊制,完成整个系统设计。
交通信号控制器设计的具体流程图如图2-1所示:
图2-1交通信号控制器设计的具体流程图
第3章交通灯系统硬件设计
3.1单片机概述
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器
单片机是由运算器、控制器、存储器、输入设备以及输出设备共五个基本部分组成的。
单片机是把包括运算器、控制器、少量的存储器、最基本的输入输出口电路、串行口电路、中断和定时电路等都集成在一个尺寸有限的芯片上。
通常,单片机由单个集成电路芯片构成,内部包含有计算机的基本功能部件:
中央处理器、存储器和I/O接口电路等。
因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
单片机经过1、2、3、3代的发展,目前单片机正朝着高性能和多品种方向发展,它们的CPU功能在增强,内部资源在增多,引脚的多功能化,以及低电压、低功耗。
可以说,二十一世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
不过,这种电脑,通常是指个人计算机,简称PC机。
它由主机、键盘、显示器等组成。
还有一类计算机,大多数人却不怎么熟悉。
这种计算机就是把智能赋予各种机械的单片机。
顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。
因为它体积小,通常都藏在被控机械的“肚子”里。
它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。
现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。
各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。
现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。
究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
更不用说自动控制领域的机器人、智能仪表、医疗器械了。
它主要是作为控制部分的核心部件。
因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
3.2系统构成
电路板一块,AT89C51单片机一片,74LS164芯片两片,七段数码管两个。
74LS04反向器一片,发光二极管12个(红、黄、绿各四个),5伏电源一个,一条数据下载线。
系统工作流程:
(1)程序设置初始时间,通过AT89C51单片机内部相应寄存器来实现。
(2)由AT89C51单片机的定时器每秒钟通过P3.0口向74LS164的数据端口送信息,由74LS164的输出口显示红、绿、黄灯的燃亮时间情况;
由AT89C51的P1.0、P1.1、P1.2、P1.3口显示每个灯的燃亮情况。
(3)AT89C51通过程序设置各个信号灯的燃亮时间,通过程序设置黄、绿、红时间依次为2秒、20秒、25秒循环,由AT89C51的P3口向74LS164的数据口输出。
(4)通过AT89C51单片机的P3口来控制系统是工作。
(5)74LS164的A、B口用于串行输出时间位,经过串并转换送到七段数码管的八的引脚。
而P1口用于输出控制信号.而通过74LS04反向器实现控制各个灯的情况.它采用5V的直流电来驱动二极管。
(6)AT89C51本身集成了看门狗指令,当系统出现异常看门狗将发出溢出中断。
通过专用端口输出,引起RESET复位信号复位系统。
3.3芯片选择与介绍
3.3.1AT89C51芯片
AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,内含4kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用各种控制领域。
主要特性:
·
与MCS-51兼容·
4K字节可编程闪烁存储器
寿命:
1000写/擦循环·
数据保留时间:
10年
全静态工作:
0Hz-24Hz·
三级程序存储器锁定
128*8位内部RAM·
32可编程I/O线
两个16位定时器/计数器·
5个中断源
可编程串行通道·
低功耗的闲置和掉电模式
片内振荡器和时钟电路
图3-1AT89C51引脚结构
引脚功能说明:
VCC:
供电电压。
·
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如表3-1所示。
表3-1特殊功能口
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;
当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3.3.274LS164芯片简介
74LS164为串行输入、并行输出移位寄存器,74LS164为单向总线驱动器。
在串行口为方式0状态,即工作在移位寄存器方式,波特率为振荡频率的十二分之一。
器件执行任何一条将SBUF作为目的寄存器的命令时,数据便开始从RXD端发送。
在写信号有效时,相隔一个机器周期后发送控制端SEND有效,即允许RXD发送数据,同时,允许从TXD端输出移位脉冲。
第一帧(8位)数据发送完毕时,各控制信号均恢复原状态,只有TI保持高电平,呈中断申请状态。
第一个74HC164把第一帧数据并行输出,LED1显示该数据。
然后,用软件将TI清0,发送第二帧数据。
第二帧数据发送完毕,LED1显示第二帧数据,第一帧数据串行输入给第二个74HC164,LED2显示第一帧数据。
依此类推,直到把数据区内所有数据发送出去。
应该注意,数据全部发送完后,第一帧数据在最后一个LED显示。
由于TXD端最多可以驱动8个TTL门。
注意:
当LED显示器超过8个时,我们采用74HC244芯片驱动。
每个74HC244有8路驱动,每一路可驱动8个LED,即每增加一个74HC244,可增加64个LED驱动。
七段数码管,用于显示0—9的数字。
3.3.374LS04输出信号与信号灯
要使行人能看见信号灯的情况,必须把P1口输出的信号进行放大,这里我们用74LS04反向器,当极性为高电平时晶闸管导通,该支路指示灯亮;
当极性为低电平时关断,该支路指示灯灭。
LED灯的显示原理:
通过同名管脚上所加电平的高低来控制发光二极管是否点亮。
如下图:
而七段数码管的显示及与74HC164的连接显示不同的字形如SP,g,f,e,d,c,b,a管角上加上0FEH,所以SP上为0伏,不亮其余为TTL高电平,全亮则显示为8。
采用共阴极连接:
表3-2驱动代码表
显示数值
abcdefgdop
驱动代码(16进制)
11111111
0FCH
1
00000110
60H
2
11011010
0DAH
3
11110010
0F2H
4
01100110
66H
5
10110110
0B6H
6
10111110
0BEH
7
11100000
0E0H
8
11111110
0FEH
9
11110110
0F6H
74LS04(6反向器)主要对信号起了反向作用。
3.3.4AT89C51单片机的复位电路和时钟振荡电路
复位是使单片机或系统中的其他部件处于某种确定的初始状态。
单片机的工作就是从复位开始的。
8051的复位引脚(RST)是第9脚,当此引脚连接高电平超过2个机器周期(一个机器周期为6个时钟脉冲),即可产生复位的动作。
当在80C51单片机引脚引入高电平并保持2个机器周期时,单片机内部就执行复位操作(如果RST引脚继续保持高电平,单片机就处于循环复位状态)。
复位操作有两种基本形式:
一种是上电复位,另一种是上电与按键均有效的复位。
如图3-2所示。
图3-2单片机复位电路
AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路参见图3-3、3-4。
图3-3单片机晶振内部振荡电路
图3-4单片机晶振外部振荡电路
3.3.5交通灯控制线路图
图3-5系统线路图
(1)开关键盘输入交通灯初始时间,通过C51单片机P1输入到系统
(2)由C51单片机的定时器每秒钟通过P0口向8255的数据口送信息,由8255的PA口显示红、绿、黄灯的燃亮情况;
由C55的PC口显示每个灯的燃亮时间。
(3)C51通过设置各个信号等的燃亮时间、通过8031设置,绿、红时间分别为60秒、80秒循环由8051的P0口向8255的数据口输出。
(4)通过C51单片机的P3.0位来控制系统是工作或设置初值,当牌位0就对系统进行初始化,为1系统就开始工作。
(5)红灯倒计时时间,当有车辆闯红灯时,启动蜂鸣器进行报警,3S后然后恢复正常。
(6)增加每次绿灯时间车流量检测的功能,并且通过查询P2.0端口的电平是否为低,开关按下为低电平,双位数码管显示车流量,直到下一次绿灯时间重新记入。
(7)绿灯时间倒计时完毕,重新循环
第4章交通灯软件设计
4.1交通信号灯模拟控制系统设计程序流程图
开始
图4-1程序流程图
4.2.交通信号灯控制程序代码
编程提示:
(1)通过74LS164控制发光二极管,以模拟交通灯的控制。
(2)程序中设定好计数初值,开始倒数。
(3)各发光二极管共阴极,使其点亮应使对应的端口输出高电平。
;
====================交通灯控制器==========================
SECOND1EQU30H;
东西路口计时寄存器
SECOND2EQU31H;
南北路口计时寄存器
DBUFEQU40H;
显示码缓冲区1
TEMPEQU44H;
显示码缓冲区2
LED_G1BITP2.1;
东西路口绿灯
LED_Y1BITP2.2;
东西路口黄灯
LED_R1BITP2.3;
东西路口红灯
LED_G2BITP2.4;
南北路口绿灯
LED_Y2BITP2.5;
南北路口黄灯
LED_R2BITP2.6;
南北路口红灯
ORG0000H
LJMPSTART
ORG0100H
START:
MOVTMOD,#01H;
置T0为工作方式1
MOVTH0,#3CH;
置T0定时初值50ms
MOVTL0,#0B0H
CLRTF0
SETBTR0;
启动T0
CLRA
MOVP1,A;
关闭不相关的LED
;
***************************************************
LOOP:
MOVR2,#20;
置1s计数初值,50ms*20=1s
MOVR3,#20;
红灯亮20s
MOVSECOND1,#25;
东西路口计时显示初值25s
MOVSECOND2,#25;
南北路口计时显示初值25s
LCALLDISPLAY
LCALLSTATE1;
调用状态1
WAIT1:
JNBTF0,WAIT1;
查询50ms到否
CLRTF0
恢复T0定时初值50ms
MOVTL0,#0B0H
DJNZR2,WAIT1;
判断1s到否?
未到继续状态1
MOVR2,#20;
置50ms计数初值
DECSECOND1;
东西路口显示时间减1s
DECSECOND2;
南北路口显示时间减1s
DJNZR3,WAIT1;
状态1维持20s
*******************************************
MOVR2,#5;
置50ms计数初值5*4=20
MOVR3,#3;
绿灯闪3s
MOVR4,#4;
闪烁间隔200ms
MOVSECOND1,#5;
东西路口计时显示初值5s
MOVSECOND2,#5;
南北路口计时显示初值5s
WAIT2:
LCALLSTATE2;
调用状态2
JNBTF0,WAIT2;
DJNZR4,WAIT2;
判断200ms到否?
未到继续状态2
CPLLED_G1;
东西绿灯闪
DJNZR2,WAIT2;
判1s到否?
置50ms计数初值
DJNZR3,WAIT2;
状态2维持3s
****************************************
MOVR3,#2;
黄灯闪2s
MOVSECOND1,#2;
东西路口计时显示初值2s
MOVSECOND2,#2;
南北路口计时显示初值2s
WAIT3:
LCALLSTATE3;
调用状态3
JNBTF0,WAIT3;
查询100ms到否
恢复T0定时初值100ms
MOVTL0