本科生毕业设计单片机模拟交通灯的设计 精品.docx
《本科生毕业设计单片机模拟交通灯的设计 精品.docx》由会员分享,可在线阅读,更多相关《本科生毕业设计单片机模拟交通灯的设计 精品.docx(37页珍藏版)》请在冰点文库上搜索。
本科生毕业设计单片机模拟交通灯的设计精品
单片机模拟交通灯的设计
2011年5月
独创性声明
本人郑重声明:
所呈交的毕业设计是本人在指导老师指导下取得的研究成果。
除了文中特别加以注释和致谢的地方外,设计中不包含其他人已经发表或撰写的研究成果。
与本研究成果相关的所有人所做出的任何贡献均已在设计中作了明确的说明并表示了谢意。
签名:
年 月 日
授权声明
本人完全了解许昌学院有关保留、使用本科生毕业设计的规定,即:
有权保留并向国家有关部门或机构送交毕业设计的复印件和磁盘,允许毕业设计被查阅和借阅。
本人授权许昌学院可以将毕业设计的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编设计。
本人设计中有原创性数据需要保密的部分为(如没有,请填写“无”):
签名:
年 月 日
指导教师签名:
年 月 日
摘要
本设计是依据数字集成电路、单片机技术为基础,采用MCS-51系列单片机AT89C51为控制器件结合LED数码显示电路、发光二极管指示电路组成交通灯硬件电路,利用单片机内部定时中断溢出产生1s实现倒计时。
系统能够完成25s倒计时显示,在倒计时到5s时绿灯开始闪烁以提醒过往的车辆及行人安全通行,倒计时到2s时黄灯亮。
关键词:
单片机;AT89C51;交通灯
ABSTRACT
Thisdesignisbasedondigitalintegratedcircuits,microcontrollertechnology,theuseofMCS-51seriesmicrocontrollerAT89C51devicesforthecontrolcircuitwithLEDdigitaldisplay,LEDtrafficlightsindicatinghardwarecircuit,theuseofinternalmicrocontrollertimerinterruptoverflow1sachievedcountdown.Systemcanaccomplishthe25scountdown,thecountdowntowhenthegreenlightstartsflashing5stoalertpassingvehiclesandpedestrianssafepassage,thecountdowntowhentheyellowlight2s.
Keywords:
SCM;AT89C51;Trafficlights
1绪论
1.1研究背景
当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。
但这一技术在19世纪就已出现了。
1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。
这是世界上最早的交通信号灯。
1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。
它由红绿两以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。
1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。
电气启动的红绿灯出现在美国,这种红绿灯由红绿黄三色圆形的投光器组成,1914年始安装于纽约市5号大街的一座高塔上。
红灯亮表示“停止”,绿灯亮表示“通行”。
1918年,又出现了带控制的红绿灯和红外线红绿灯。
带控制的红绿灯,一种是把压力探测器安在地下,车辆一接近红灯便变为绿灯;另一种是用扩音器来启动红绿灯,司机遇红灯时按一下嗽叭,就使红灯变为绿灯。
红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉到有人要过马路。
红外光束能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。
交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
一般的交通灯系统采用固定周期换灯的控制方式,路口的交通灯大多只有红绿黄指示灯,行人在过路口时,会出现走到路中央绿灯跳变为红灯的情况。
为符合以人为本的设计理念,我们可在路口安装与信号灯同步的倒记时显示器,行人和自行车可根据绿灯结束的时间决定是否过路口。
设计中我们用AT89C51单片机的并行口接发光二极管,模拟交通灯的变化规律。
8个数码管用来显示秒值,东、西、南、北各两个。
12个发光二极管,东、西、南、北各三个,分为红、绿、黄三种颜色。
1.2单片机的概述
单片机指集成在一个芯片上的微型计算机,也就是把组成微型计算机的各种功能部件,包括CPU(CentralProcessingUnit)、随机存取存储器RAM(RandomAccessMemory)、只读存储器ROM(Read-OnlyMemory)、基本输入/输出(Input/Output)接口电路、定时器/计数器等部件都制作在一块集成芯片上,构成一个完整的微型计算机,从而实现微型计算机的基本功能。
1.3单片机的应用
(1)智能仪器仪表
现代仪器仪表采用单片机,不仅提高了仪器仪表使用功能和精度,使仪器仪表智能化而且简化了其结构,减小了体积,降低了成本。
(2)工业控制
单片机还可以用于工业控制器对各种物理量的采集及控制。
例如,电流、温度、电压、流量等等物理参数的采集和控制都可以利用单片机实现,从而提高生产效率和产品质量。
(3)家用电器
现在家用电器都向智能化发展,单片机是家用电器智能化的大脑和心脏。
例如洗衣机、空调、电冰箱、电视机等。
(4)信息和通信产品
信息和通信产品的自动化和智能化也离不开单片机的参与。
典型产品如:
打印机、传真机、考勤机、电话机等。
1.4单片机的发展史
单片机技术的发展十分迅速,大致可分为4个阶段:
第一阶段(1976~1978):
低性能单片机的探索阶段。
以Intel公司的MCS-48为代表,采用了单片结构,即在一块芯片内含有8位CPU、定时器/计数器、并行I/O、RAM和ROM等。
主要用于工业领域。
第二阶段(1978~1982):
高性能单片机阶段。
这一类单片机带有串行I/O口,8位数据线、16位地址线可以寻址的范围达到64KB,有控制总线、较丰富的指令系统等。
这类单片机的应用范围较广,并在不断地改进和发展。
第三阶段(1982~1990):
16位单片机阶段。
16位单片机除CPU为16位外,片内RAM和ROM容量进一步增大,实时处理能力更强,体现了微控制器的特征。
第四阶段(1990~):
微控制器的全面发展的阶段。
各公司的产品在尽量兼容的同时向高速、强运算能力、寻址范围大以及小型廉价方面发展。
2系统硬件设计
2.1系统原理
本设计主要采用AT89C51单片机为核心结合电源电路、时钟电路、复位电路构成单片机最小系统,并与外围倒计时显示电路和指示电路共同构成单片机模拟交通灯系统。
其系统整体框图如下图2-1所示。
图2-1系统整体框图
图2-2系统原理图
2.2AT89C51的介绍
图2-3单片机内部总体结构图
设计采用的是Atmel公司的89C51是MCS-51系列单片机的典型产品,其主要结构包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:
(1)中央处理器(CPU)
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
(2)内部数据存储器
内部数据存储器包括RAM(128*8)和RAM地址寄存器,用于存放可读/写的数据。
实际其几个内部共有256个RAM单元,但其中后128个单元为专用寄存器,能作为普通RAM存储器供用户使用的只是前128个单元。
因此,通常所说的内部数据存储器是指前128个单元,简称“内部RAM”。
(3)内部程序存储器
内部程序存储器包括ROM(4K*8)和程序地址寄存器等。
AT89C51共有4KB掩膜ROM,用于存放程序和原始数据,因此称之为程序存储器,简称“内部ROM”
(4)定时器/计数器
由于控制应用的需要,89C51内部共有两个16位的定时器/计数器,用定时器/计数器0和定时器/计数器1表示,用于实现定时或计数功能,并以其定时或计数结果对单片机进行控制。
(5)并行I/O口
89C51共有4个8位I/O口(P0、P1、P2和P3),以实现数据的并行输入/输出。
(6)串行口
89C51单片机有一个全双工串行口,以实现单片机和其他数据设备之间的串行数据传送。
该串行口功能较强,既可作为全双工异步通信收发器使用,也可作为同步移位器使用。
(7)中断控制电路
89C51的中断功能较强,以满足控制应用的需要。
共有5个中断源,即外中断2个,定时/计数中断2个,串行中断1个。
全部中断分为高级和低级共两个优先级别。
(8)时钟电路
89C51芯片内部有时钟电路,但石英晶体和微调电容需外接。
时钟电路为单片机产生时钟脉冲序列。
2.3AT89C51的引脚说明
图2-4AT89C51的引脚图
按其功能可分为电源、时钟、控制和I/O接口四大部分:
(1)电源引脚Vcc:
电源端,接+5V;Vss:
接地端。
(2)时钟引脚XTAL1和XTAL2:
当使用芯片内部时钟时,XTAL1和XTAL2用于外接石英晶体谐振器和微调电容;当使用外部时钟时,用于接入外部时钟脉冲信号。
(3)控制引脚
RST/VPD:
复位/掉电保护信号输入端。
RST为复位信号输入。
Vcc掉电后,此引脚(VPD)可接备用电源,低功耗条件下保证内部RAM中的数据。
ALE/
:
地址锁存控制信号/编程脉冲输入端
ALE为地址锁存允许。
当单片机访问外部存储器时,该引脚的输出信号ALE用于锁存P0端口的低8位地址。
ALE输出的频率为时钟振荡频率的1/6。
对8751单片机片内EPROM编程时,编程脉冲由此引脚接入。
:
片外程序存储器读选通有效信号
取指令操作期间,
的频率为振荡频率的1/6;但若此期间有访问外部数据存储器的操作时,则有一个机器周期中的
信号将不会出现。
/VPP:
访问程序存储器控制信号/编程电源输入端
当
=0时单片机只访问外部程序存储器。
对于8031单片机此引脚必须接地。
=1,单片机访问内部程序存储器。
对于内部有程序存储器的8xx51单片机,此引脚应接高电平,但若地址超过4KB范围(0FFFH),单片机将自动访问外部程序存储器。
在8751单片机片内EPROM编程期间,此引脚接入21V编程电源Vpp。
(4)I/O引脚
P0.0—P0.7:
P0口数据/低8位地址复用总线端口。
P1.0—P1.7:
P1口静态通用端口。
P2.0—P2.7:
P2口高八位地址总线动态端口。
P3.0—P3.7:
双功能静态端口,具有第二功能。
表2-1P3口线的第二功能说明
口线
第二功能信号
第二功能信号名称
P3.0
RXD
串行数据接收
P3.1
TXD
串行数据发送
P3.2
INT0
外部中断0申请
P3.3
INT1
外部中断1申请
P3.4
T0
定时器/计数器0计数输入
P3.5
T1
定时器/计数器0计数输入
P3.6
外部RAM写选通
P3.7
外部RAM读选通
2.4时钟电路
本设计采用AT89C51单片机的内部时钟方式,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就产生自激振荡。
定时元件通常石英晶体和电容组成的并联谐振回路,晶体振荡器选择12MHz,电容采用30pF。
图2-5时钟电路
2.5复位电路
单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作,例如复位后PC=0000H,使单片机从第—个单元取指令。
无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位,所以我们必须弄清楚MCS-51型单片机复位的条件、复位电路和复位后状态。
单片机复位的条件是:
必须使RST/VPD或RST引脚加上持续两个机器周期(即24个振荡周期)的高电平。
例如,若时钟频率为12MHz,每机器周期为1us,则只需2us以上时间的高电平,在RST引脚出现高电平后的第二个机器周期执行复位。
本设计所用的复位电路如图2-5所示:
RST
图2-6复位电路
2.6单片机的最小系统构成
单片机控制系统是由单片机和外围电路组成的,用最少的元件组成的单片机系统被称为单片机最小系统。
即主要有电源电路、晶振电路、复位电路构成。
图2-7单片机最小系统构成
2.77405TTL集电极开路六反相器
7045为六路反相器其内部由6个与非门组成,在设计中7405反相器的输入端与单片机的P2.1~P2.6相连,输出端与LED发光二极管的负极相连,以实现对不同的状态下的LED进行控制。
例如当单片机的I/O口输出高电平时,经过7405反相器输出低电平使该路的LED点亮。
图2-87405一路反相
2.8指示电路
本设计中采用红、绿、黄三种颜色的发光二极管各4个通过7405反相器与单片机的P2口的相应引脚相连,在不同状态下点亮不同的二极管实现对道路的控制。
发光二极管是半导体二极管的一种,可以把电能转化成光能,简写为LED。
发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。
当给发光二极管加上正向电压后,从P区注入到N区的空穴和由N区注入到P区的电子,在PN结附近数微米内分别与N区的电子和P区的空穴复合,产生自发辐射的荧光。
不同的半导体材料中电子和空穴所处的能量状态不同。
当电子和空穴复合时释放出的能量多少不同,释放出的能量越多,则发出的光的波长越短。
图2-9红、绿、蓝三种颜色的发光二极管
2.9LED数码显示器
LED是LightEmitingDiode(发光二极管)的缩写,发光二极管是能将电信号转换为光信号的发光器件。
由条形发光二极管组成“8”字形的显示器,也称数码管。
通过数码管中发光二级管的亮暗组合,可以显示多种数字、字母以及其他符号。
数码管在单片机应用系统中主要用于显示单片机的输出数据和状态等。
LED显示器为发光二极管构成的显示器件。
常用的LED显示器有两种供应状态,既共阴极LED与共阳极LED。
图2-10LED数码管结构图
LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数位,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。
静态显示驱动:
静态驱动也称直流驱动。
静态驱动是指每个数码管的每一个段码都由一个单片机的I/O口进行驱动,或者使用如BCD码二—十进位器进行驱动。
动态显示驱动:
动态驱动是将所有数码管的8位段码"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开被选中的数码管就会显示字符,没有选通的数码管就不会亮。
在设计中我们采用静态显示方式,利用8个数码管每个方向各两个与AT89C51的P1口和P3口相连用来显示倒计时的十位和个位。
3系统软件设计
3.1系统整体程序流程图
图3-1系统整体程序流程图
3.2设置定时,显示初始化
在单片机应用系统中,实现定时的方法一般有以下三种:
(1)软件定时:
让计算机执行一段程序来进行事件延时。
这个程序段本身没有安排其他的执行目的,只是利用该程序段执行花费的一个固定时间。
通过适当的选择指令和安排循环次数,可调节这段程序执行所需花费的时间的长短。
其特点是定时时间精确,不需外加硬件电路,但占用CPU时间。
因此软件定时的时间不宜过长。
(2)硬件定时:
利用硬件电路实现定时。
其特点是不占用CPU时间,通过改变电路元器件参数来调节定时,但使用不够灵活方便。
对于时间较长的定时,常用硬件电路来实现。
(3)可编程定时器:
通过专用的定时计数器芯片来实现。
其特点是通过对系统时钟脉冲进行计数实现定时,定时的时间可通过程序的设定的方法改变,使用灵活方便。
也可实现对外部脉冲的计数功能。
当定时计数器设置为计数工作方式时,计数器对来自输入引脚T0和T1的外部信号计数,外部信号的下降沿将触发计数。
最高检测频率为振荡频率的二十四分之一。
计数器对外部输入信号的占空比没有特别的限制,但必须保证输入信号的高电平与低电平的持续时间在一个机器周期以上。
当设置了定时器的工作方式并启动定时器工作后,定时器就按照设定的工作方式独立工作,不再占用CPU的操作时间,只有在计数器计满溢出时才能中断CPU当前的操作。
延时方法可以有两种,一种是利用MCS-51内部定时器产生溢出中断来确定1秒的时间,另一种是采用软延时的方法。
定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的。
它是以加法记数的,并能从全1到全0时自动产生溢出中断请求。
因此,我们可以把计数器记满为零所需的计数值设定为C和计数初值设定为TC可得到如下计算通式:
TC=M–C(4–1)
式中,M为计数器模值,该值和计数器工作方式有关。
在方式0时M为8196;在方式1时M的值为65536;在方式2和3为256。
T=(M-TC)*
或TC=M-C/
(4–2)
是单片机时钟周期
的12倍;TC为定时初值
如单片机的主脉冲频率
=12MHz,经过12分频
方式0
(4–3)
方式1
(4–4)我们在这里采用的是方式1,则初始值TC=65536-50000
TH0=(65536-50000)/256TL0=(65536-50000)%256(4–5)
显然1秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题。
我们采用在主程序中设定一个初值为1的软件计数器和使T0定时50毫秒.这样每当T0到50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。
在中断服务子程序中,CPU先使软件计数器加1,然后判断它是否为20。
为20表示1秒已到可以返回到输出时间显示程序。
设置定时程序:
START:
MOVTMOD,#01H;置T0工作方式1
MOVTH0,#3CH;置T0定时初值50ms
MOVTL0,#0B0H
CLRTF0
SETBTR0;启动T0
CLRA
3.3处理状态、倒计时显示
图3-2状态处理流程图
当处理到相应的状态时调用所对应的状态子程序和显示子程序来点亮该状态下的发光二极管来表示是否允许通过并利用LED数码管显示倒计时间。
通过比较R3寄存器中的值来判断是否要进行下一个状态,当所有状态都已显示程序跳转到初始状态进行循环。
初始化后处理状态1的程序:
LOOP:
MOVR2,#20;置1s计数初值
MOVR3,#20;红灯亮20s
MOVSECOND1,#25;计时显示初值25s
LCALLDISPLAY
LCALLSTATE1;调用状态1
WAIT1:
JNBTF0,WAIT1;查询50ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值50ms
MOVTL0,#0B0H
DJNZR2,WAIT1;判断1s到否?
未到继续状态1
MOVR2,#20;置50ms计数初值
DECSECOND1;显示时间减1
LCALLDISPLAY;调用显示子程序
DJNZR3,WAIT1
3.4路口红绿灯状态子程序
通过设置各发光二极管所对应管脚的高低电平来满足该状态下的显示效果,由于各发光二极管的正极接高电平、负极经过7405反相器接单片机的引脚。
例如在状态1下东西方向的绿灯亮、南北方向的红灯亮,将单片机的P2.1和P2.6置高电平经7405反相后为低电平来点亮与之相连的发光二极管。
状态1下的子程序:
STATE1:
SETBLED_G1;状态1
CLRLED_Y1;东西路口绿灯亮
CLRLED_R1
CLRLED_G2
CLRLED_Y2
SETBLED_R2;南北路口红灯亮
RET
3.5LED显示子程序
LED计时每1秒都要刷新1次,那么计时满1秒时就要将存储时间的计时寄存器SECOND1减1,然后送入LED显示程序中显示。
下面要将时间数据R4的十位,个位分开送显P1,P0端口,首先将R4除以10,整数即十位放在A中,余数即个位放在B中,设置7段LED显示数据的数据表,用数据指针寄存器DPTR指向数据表的首地址,再加上A中的偏移量,就可以指向十位数字,然后送显即可,个位显示同理。
显示子程序:
DISPLAY:
MOVA,SECOND1;取计时值作为被除数送入累加器A
MOVB,#10;把10作为除数
DIVAB;两者相除,商存A,余数存B
MOVDPTR,#LEDMAP;取数据表的首地址
MOVCA,@A+DPTR
MOVP1,A;显示十位
MOVA,B
MOVCA,@A+DPTR
MOVP3,A;显示个位
RET
LEDMAP:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
4系统仿真
4.1仿真平台介绍
4.1.1Keil软件介绍
单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。
机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
KeilSoftware8051开发工具,提供编译源程序,汇编源程序,连接和重定位目标文件和库文件,创建.hex文件调试目标程序。
下面简单介绍一下使用过程。
图4-1Keil软件的使用流程图
Keil软件的工作界面图如下图:
图4-2Keil软件的工作界面图
4.1.2Proteus仿真软件介绍
Proteus软件是LabcenterElectronics公司的一款电路设计与仿真软件,它主要包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的布图与仿真。
Proteus的软件仿真基于VSM技术,它能把微处理器软件作用