基于单片机的智能交通灯控制系统设计_第1页
基于单片机的智能交通灯控制系统设计_第2页
基于单片机的智能交通灯控制系统设计_第3页
基于单片机的智能交通灯控制系统设计_第4页
基于单片机的智能交通灯控制系统设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——基于单片机的智能交通灯控制系统设计

基于单片机的智能交通灯控制系统设计

与实现

XXXXXX毕业设计

基于单片机的智能交通灯控制系统设计与实现

摘要

近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。

十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。交通信号灯控制方式好多。本系统采用STC89C52RC单片机以及单片机最小系统和74HC245电路以及外围的按键和数码管显示等部件,设计一个基于单片机的交通灯设计。设计通过两位一体共阴极数码管显示,并能通过按键对定时进行设置。本系统实用性强、操作简单、扩展功能强。

XXXXXX毕业设计

东西绿灯南北红灯南北绿灯南北黄灯0010000111000100东西南北四个交通口都含有红绿灯以及数码管,无论是哪一个交通口,凡是看到红灯的应当阻止通行,看见转了绿灯就可以通过,假使黄灯亮了表示红绿灯状态即将发生变化。各方向的状态以及红绿灯状态如上表2.1。(说明:0表示灭,1表示亮)

3硬件设计

3.1系统硬件总电路构成:

为了满足这次的交通灯设计所需要实现的功能,本人选用了STC89C52RC芯片和外围设备组成的最小系统,代表红、绿、黄三种颜色的led交通灯总共14个,4个2位LED数码管和包括复位键、紧急控制按键等,红外线接受器,驱动电路模块,若干导线、电阻和电容。构成了此次设计的各个模块。其具体的硬件电路总图如图2.3所示。

本系统把单片机最小系统作为关键核心,由各个硬件模块软件为控制主体组成一个处理、智能控制为一体的封闭操控系统。

其中P0用来送显LED数码管的段选和位选,P1用来操控红绿灯的亮暗,12MHz晶振接在单片机芯片引脚的XTAL1和XTAL2上,REST引脚接连接复位电路,P3端口用来实现按钮的控制。

3.2单片机系统及其历史

单片机是一块集成在芯片上的微型计算机,它的内部包括有CPU、存储器,定时/计数器以及中断系统,基本输入/输出(简称I/O)接口电路等。由于它的结构与指令功能都是依照工业控制要求设计的,所以又称作微控制器(简称MCU)。它在各方面都有良好的优势,例如结构简单,控制效果好,可靠性高、体积小、价格低,单片机技术作为计算机技术的一个十分重要的分支,广泛地应用于工业控制、智能化仪器仪表、家用电器、电子玩具等各个不同的领域。

单片机诞生于上世纪70年代,经历了三个阶段:SCM、MCU、SOC。一开始的SCM单片机都是8位或4位的。其中英特尔公司的8051发展迅速。之后的MCS51系列的MCU单片机得到了广泛的应用。现在高端的32位SOC单片机性能已经达到了上世纪90年代中期专用处理器的水平,且价格低廉。所以越来越多的制作业、工业离不开单片机。

单片机的应用系统必需包含硬件部分和软件部分,只有这样才是完整的单片机应用系统。软件部分是指导硬件工作的指令集。没有软件部分,系统将无法正常工作。硬件

7

XXXXXX毕业设计

部分则是交通灯系统的基础。没有硬件系统则没有所谓的交通灯系统。只有将两者结合,才能实现功能齐全的及交通灯系统。

3.3单片机内部组成以及引脚介绍

8052是MCS-52系列单片机的典型芯片,不同型号一般程序存储器结构不同,其余内部结构都是完全一致,引脚也全部兼容。Atmel公司的89系列发展很快,应用也最为广泛,和8052引脚也完全一致,插座也相互兼容。所以用89C52代替8051时,只要封装一致就可以直接代换。

中央处理器(CPU):

交通灯系统的控制核心是单片机,而单片机的控制核心是中央处理器。它与计算机的处理器一样分为4字长、8字长、16字长和32字长等处理器,它与单片机的处理数据能力、控制功能、运算速度等性能等性能有关,因此,字长是衡量CPU功能的主要指标。CPU由运算器和控制器组成。各一个8位的算术规律单元(简称ALU)、累加器(简称ACC)、暂存器B和程序状态寄放器(简称PSW)构成了CPU的运算器。所述控制器包括程序计数器(PC),指令寄放器(IR),指令译码器(ID)和一个控制电路等。

内存数据存储器RAM:

单片机89C52芯片内部数据存储器寻常是指低128个单位,可以读也可以写,是分派给用户使用的,在断电后数据会消失。高128个单位则是内部专用寄放器使用的存储单位,用户无法对其进行操作,所以芯片内部一共包含256个RAM单元。

内部程序存储器ROM:

89C52芯片的内部程序存储器使用的是只读存储器,这样有利于系统的可靠及稳定性且能节省成本。它有4KB掩摸ROM,只能读不能写程序将不会在断电后丢失。这样则不会改变程序的原始数据,寻常称为只读程序存储器并行I/O端口:

89C52芯片内部有4个8位并行I/O端口(P0口、P1口、P2口和P3口),通过I/O端口实现数据并行输入输出,是人机交互的接口。串行口:

89C52芯片内部串行实现单片机与外围设备之间的数据通信是通过一个全双工异步串行口。该串行口既可以作为同步移位器使用,扩展外部I/O端口,又可以作为全双工异步通信收发器使用。

定时/计数器:

89C52芯片内部的2个16位定时/计数器可以控制单片机的内部时钟,使单片机依照一定的机器时钟进行状态控制。还可以进行外部定时或计数功能,是芯片的重要组成部分。

中断系统:

8

XXXXXX毕业设计

8052内部共有5个中断源,2个优先级别分别是高优先级和低优先级,在同级的状况下,外部中断0大于定时器T0中断大于外部中断1大于定时器中断T1大于串行口中断。

时钟电路:

89C51芯片单片机内部具有时钟电路,只需要在XTAL1和XTAL2引脚之间接上石英晶体和微调电容就能构成完整的时钟电路。此系统选用的晶振频率为12MHz。相应的机器周期是1us。

引脚介绍:

VCC:STC89C52电源接入端,接+5V。GND:电源接地端。

XTAL1和XTAL2:当需要使用外部时钟时,则连接外部的时钟电路;若要使用内部时钟则连接电容和晶振。本系统所使用的是内部时钟,所以在两引脚间连接了电容和12MHz的晶振。

RESET:STC89C52芯片的重置引脚,当连续输入这个引脚2个机器周期以上的高电平即有效电平日,芯片将进行系统的复位操作,各个寄放器都恢复到最初的状态重新运行程序。

EA:EA的E的英文是External,A的英文是Access,合在一起是外部程序存储器的意思。上面的横线则代表低电平有效。所以这个引脚接高电平则使用内部程序存储器,低电平则使用外部的程序存储器。在此系统中,由于程序下载到内部程序存储器中,因此该引脚与+5V电源相连接。

ALE:ALE是编程脉冲的输入端。它以晶振频率的1/6的固定频率输出,所以也可以作为时钟电路使用。同时这个引脚也是P0口低8位的地址锁存器,将低8位数据与地址相互隔离,用于系统扩展。

PSEN:此为\的缩写,其意为程序储存启用。低电平有效,当引脚输入低电平日实现对外部ROM单元的读操作。在执行指令的取指阶段和从程序存储器中取数据时有效。

P0口(P0.0~P0.7):端口0可以作为通用I/O端口使用和地址/数据线使用。共有8个位,P0.0表示位0,P0.1表示位1,依此类推。一个数据输出D锁存器、两个三态数据输入缓冲器、一个输出控制电路和一个数据输出的驱动电路共同构成了P0口的规律电路。假使EA引脚的电平为低时(即取用片外RAM扩展或数据存储器),P0就以双向口的工作方式提供地址总线(A0~A7)及数据总线(D0~D7)。在此设计中,P0口是作为通用I/O口将各个共阴极数码管相应的段选控制端并联在一起,用驱动器74HC245驱动。

P1口(P1.0~P1.7):是89C51单片机唯一的单功能端口,仅仅能用作通用的数据

9

——

XXXXXX毕业设计

输入/输出口。P1口的规律电路与P2口相像,但其内部没有输出控制电路,而且具有上拉电阻。所以其只能作为通用I/O端口使用。在此系统中,P1口是用来控制数码管的公共端,也称作为“位选端〞。

P2口(P2.0~P2.7):端口2也具有2个功能:一个是具有内部提升电路的双向I/O端口,与P0口相像;另一功能也跟P0口相像,P0口的第2功能是作为地址/数据线使用,而P2口是单一的地址线使用。系统扩展时作为高8位的数据线使用。当没有在89C51单片机芯片外扩展ROM和RAM,且P2口高8位地址总线没有全部用到时,P2口的口线就可以全部作为通用I/O口线使用。P2口属于准双向口。在本系统中,P2口用于控制LED信号灯的亮灭。

P3口(P3.0~P3.7):作为通用I/O口,作为输出时,锁存器的状态端(Q)与输出引脚的状态一致;作为输入端口时,为使引脚处于高阻输入状态,需向锁存器输入程序数据“1〞。输入的数据在“读引脚〞信号的作用下,进入内部数据总线。所以,P3口在作为通用I/O口时,也属于准双向口。在本系统,P3口作为其次功能使用,主要利用按键模块实现系统的中断跳转。

P3端口使用其次功能时:其引脚分派如下:

P3.0:RXD,串行通信数据的接收。P3.1:TXD,串行通信数据的发送P3.2:INT0,外部中断0申请。P3.3:INT1,外部中断1申请。P3.4:定时/计时计数器0的外部输入。P3.5:定时/计时计数器1的外部输入。P3.6:WR:外部数据存储器的写入信号。P3.7:RD,外部数据存储器的读取信号。单片机引脚图如图3.1所示:

————

3.4单片机最小系统

上面提到单片机的应用系统可以分为硬件部分和软件部分。软件部分指挥各个硬件执行烧录进单片机内的程序,假使没有程序那么它显然是无法工作的的。但假使它仅仅只是烧录了程序,它还是同样无法工作。原因是除了单片机和软件部分外,要使单片机能够正常工作,还需要时钟电路和复位电路。芯片加上时钟和复位电路,这样才是完整的最小单片机系统。在XTAL1引脚和XTAL2引脚间跨接一定频率的晶振构成时钟电路为单片机的正常工作提供基本时钟,机器周期则由晶振频率决定。复位电路则将系统恢复初始化。就宛如此系统中,将系统恢复至东西通行,南北阻止的刚启动系统的状态。

10

XXXXXX毕业设计

图3.1单片机电路引脚图

为了实现单片机的同步工作,系统必需有唯一的时钟信号,并在这个时钟信号下严格的按时序进行状态转换和工作。这个时钟信号可以外部时钟也可以芯片自带的时钟信号。这种时钟信号由时钟电路提供。在本系统中,在STC89C51单片机XTAL1和XTAL2之间接的是晶振频率为12MHz的晶振。机器周期是晶振频率的十二分频,所以机器周期为1us。适当编写程序,则可以定时1ms或者1s的时间。

单片机与计算机一致,都有可能会出现故障死机或断电的状况,这时候则需要和计算机一样有一个复位键将系统重启,单片机的复位电路也是使CPU和系统中的其他功能部件都恢复到一个确定的初始状态。实现复位的条件就是RST引脚输入持续2次机器周期的高电平。复位后PC=0000H,即是从新从程序存储器的第1个单元取指令进行译码。若持续高电平则会循环复位。

按键复位和上电自动复位是复位电路经常采用的两种不同的方式。本系统所使用的是按键复位。按键在其余4个按键的中间,接芯片的RST引脚。按键瞬间RST引脚端电位与Vcc一致,随着电容C1的充电,充电电流的减少,导致RST引脚的高电位下降。只要RST引脚的高电位能够保证在2个机器周期以上,单片机就会进行复位操作,使系统复位。上电复位则要求接上电源之后能够自动实现系统的复位,原理一致,不再赘述。单片机最小系统原理图如图3.2所示:

11

XXXXXX毕业设计

图3.2单片机最小系统原理图

3.5LED显示

发光二极管简称为LED。它是一种半导体二极管。它的可见光是由空穴和电子结合时辐射而出的,因此它可以把电能转化为光能。主要由镓(Ga)与砷(As)、磷(P)、氮(N)、铟(In)等化合物制成这种半导体二极管。三极管具有2个PN结,而发光二极管是由一个PN结组成的,它具有单向导电性。正向压降低,反向压降则要相对高得多。它改变了白炽灯钨丝发光与节能灯三基色粉发光的原理,而采用电场发光。因此它也是十分有发展前景的绿色照明光源。它的功耗低,寿命长,辐射低的特点使其得到了广泛的应用。不仅如此,它的光效率高,亮度大,同时可以回收利用的优点也使它成为十分受瞩目的新一代光源。它的运用简单,信号稳定,所以选择发光二极管作为我们

12

XXXXXX毕业设计

系统十分关键的模拟交通灯灯源。本系统所选用的是普通单色发光二极管。它具有体积小、工作电压低、工作电流小、发光均匀稳定、响应速度快、寿命长且价格低廉等优点,十分适合单片机交通灯系统的模拟交通灯。连接时也要注意LED灯的单相导电性,接反将会导致交通灯无法正常使用。模拟交通灯利用发光二极管来显示不同颜色的信号指示灯。LED灯如图3.3所示:

图3.3LED灯显示电路

3.6数码管显示

数码管是一种半导体发光器件,在单片机系统中运用广泛,可以显示单片机的工作状态。就宛如本系统中的数码管用来显示红绿黄灯状态的持续时间和跳转时间,是人机对话十分重要的输出设备。其基本单元是发光二极管。

数码管显示是分段实现的,通过点亮不同段来显示不同的数字。其中按段数分为七段LED数码管和八段LED数码管,其中八段LED数码管比七段LED数码管多了一个LED灯在右下角作为数字的小数点。

数码管按结构还可分为共阴极数码管和共阳极数码管。在此系统中所采用的则是八段共阳极数码管结构。八个LED灯构成的共阳极数码管是将所有LED灯的阳极连接在一起接在高电平上作为公共控制端。阴极作为“段〞的控制端,当其中一“段〞的控制端接低电平日,该段对应的发光二极管就会点亮。通过点亮不同的段从而显示出各种数字。本系统的共阳极数码管的公共控制端接到+5V高电平上。共阴数码管是指将LED灯的阴

13

XXXXXX毕业设计

极接到一起形成公共阴极(COM)的数码管,与阳极不同的是要接在低电平阴极上。而阳极作为段选端,要点亮某段时则需要输入高电平。

LED数码管的显示方式可以分为静、动态显示两种。虽然静态显示相对于动态显示用较小的电流就能使数码管的亮度加强、CPU运算时间少,编程也更简便,节省存储空间且显示便于检测和控制。但其占用的I/O口太多,只适合少位数码管使用。不适合此系统,所以选用动态显示,下面重点介绍数码管的动态显示。

此系统用动态显示方式点亮4个2位数码管,各个共阳极数码管相应的段选控制端并联在一起由P0口控制,并用驱动器驱动。各位数码管的公共端,也称为“位选端〞由单片机的P1口控制。数码管显示如图3.4所示:

图3.4数码管显示

14

XXXXXX毕业设计

3.7信号显示驱动电路

74HC245译码器可接受3位二进制加权地址输入(A0,A1和A2),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。74HC245特有3个使能输入端:两个低有效(E1和E2)和一个高有效(E3)。除非E1和E2置低且E3置高,否则74HC138将保持所有输出为高。利用这种复合使能特性,仅需4片74HC245芯片和1个反相器,即可轻松实现并行扩展,组合成为一个1-32(5线到32线)译码器。任选一个低有效使能输入端作为数据输入,而把其余的使能输入端作为选通端,则74HC245亦可充当一个8输出多路分派器,未使用的使能输入端必需保持绑定在各自适合的高有效或低有效状态。

74HC245作用原理于高性能的存贮译码或要求传输延迟时间短的数据传输系统,在高性能存贮器系统中,用这种译码器可以提高译码系统的效率。将快速赋能电路用于高速存贮器时,译码器的延迟时间和存贮器的赋能时间寻常小于存贮器的典型存取时间,这就是说由肖特基钳位的系统译码器所引起的有效系统延迟可以忽略不计。HC138依照三位二进制输入码和赋能输入条件,从8个输出端中译出一个低电平输出。两个低电平有效的赋能输入端和一个高电平有效的赋能输入端减少了扩展所需要的外接门或倒相器,扩展成24线译码器不需外接门;扩展成32线译码器,只需要接一个外接倒相器。在解调器应用中,赋能输入端可用作数据输入端。74HC245电路图如图3.5所示:

图3.574HC245电路图

3.8键盘输入电路

单片机键盘有独立键盘和矩阵式键盘两种:独立键盘每一个I/O口上只接一个按键,按键的另一端接电源或接地(一般接地),这种接法程序比较简单且系统更加稳定;而矩阵式键盘式接法程序比较繁杂,但是占用的I/O少。根据本设计的需要这里选用了

15

XXXXXX毕业设计

独立式键盘接法。

独立式键盘的实现方法是利用单片机I/O口读取口的电平高低来判断是否有键按下。将常开按键的一端接地,另一端接一个I/O口,程序开始时将此I/O口置于高电平,平日无键按下时I/O口保护高电平。当有键按下时,此I/O口与地短路迫使I/O口为低电平。按键释放后,单片机内部的上拉电阻使I/O口依旧保持高电平。我们所要做的就是在程序中查寻此I/O口的电平状态就可以了解我们是否有按键动作了。

在用单片机对键盘处理的时候涉及到了一个重要的过程,那就是键盘的去抖动。这里说的抖动是机械的抖动,是当键盘在未按到按下的临界区产生的电平不稳定正常现象,并不是我们在按键时通过注意可以避免的。这种抖动一般10~200毫秒之间,这种不稳定电平的抖动时间对于人来说太快了,而对于时钟是微秒的单片机而言则是慢长的。硬件去抖动就是用部分电路对抖动部分加之处理,软件去抖动不是去掉抖动,而是避抖动部分的时间,等键盘稳定了再对其处理。所以这里选择了软件去抖动,实现法是先查寻按键当有低电平出现时马上延时10~200毫秒以避开抖动(经典值为20毫秒),延时终止后再读一次I/O口的值,这一次的值假使为1表示低电平的时间不到10~200毫秒,视为干扰信号。当读出的值是0时则表示有按键按下,调用相应的处理程序。键盘控制电路图如图3.6所示:

图3.6键盘控制电路图

3.9红外接收原理

红外线接收头的运作原理:它里面的有一个接收管,作用是把红外线发射装置所发射出去的光信号转变成较弱的电信号,这个电信号再通过IC里面的放大器处理,把信号增大,紧接着经过一系列的自动增益控制、带通滤波、解调变、波形整形后转化为遥控器发射出来的原始编码,再经过接收头的信号输出脚输入到电器上的编码识别电路。红外接收图如图3.7所示:

16

XXXXXX毕业设计

图3.8红外接收电路图

4软件设计

跟C语言比起来,汇编语言所编写的代码生成的速率很快,但是程序看起来会十分繁杂,很难读懂,然后用C语言所编写的代码在速率方面跟汇编语言差不多,但是却比汇编简单更简单读懂,可移植性也很强,不仅如此,在编写高时效性的代码的时候,C语言还能够嵌入汇编语言来完成。在开发周期的方面,假使一般中大型的软件,编写都是用C语言来实现,由于它的开发周期比汇编语言的要少大量。综上所述,本人在这次的毕业设计当中选了C语言作为程序编程语言。

而这次的毕业设计的程序用KeilμVision2.0这款软件进行编写。由于这个编程软件不但支持各种公司的芯片,还具有编译、编辑以及仿真等功能,不仅是C语言,它还支持PLM、汇编这两种语言的编写和设计,界面十分简单,让人简单上手。在程序的调试和软件的仿真这两个方面都很优秀。所以这次的编程的软件本人选的是KeilμVision。系统总的流程图如图4.1所示:

宏定义I/O初始化定义共阴极字型编码表定义函数变量并初始化定时器0初始化调用Buzzer()函数进入主函数main()定义状态数组初始化外部中断设置字型码和字位码,完成显示定义字位码函数进入while(1)循环返回while(1)函数调用显示控制函数voiddisplay()图4.1系统总的流程图17

XXXXXX毕业设计

4.1定时器的设置

定时器的工作方式可以分为4种,工作方式0是13位的定时计数器;16位的定时计数器可以用工作方式1来实现;工作方式2是8位的定时计数器;工作方式3状况较繁杂,定时计数器T0才可以在此工作方式下工作,T0被分解成独立的两个8位定时计数器。而在此系统的程序,所采用的是工作方式1。具体用代码TMOD=0x11来设置2个定时计数器T0,T1都工作在工作方式1下。

4.2中断程序的设置

在中断状况下,本系统的程序中断思路流程图如图4.2所示,采用外部中断0进入只允许东西通行的特别状况;采用外部中断1进入只允许南北通行的特别状况;在自然状况下,外部中断0的优先级高于外部中断1,系统无特别要求可不设置外部中断的优先级。

图4.2程序中断思路流程图

本系统的设计所用的定时中断程序是十分重要的,定时计数器启动之后,它就开始在初始值上的加1计数,程序设定给TL0和TH0装载适合的初值,假设需要设定系统定时50ms,计50000个数后,定时计数器将会溢出,此时的时间就是50ms并且会进入中断系统,当需要设定系统时间1s时,程序设计时只要设置20次50ms的定时中断就是1s,这样便可确切控制定时时间同时利用中断系统完成数码管输出数据刷新和处理不同状态的切换。定时中断系统的程序流程图具体状况如图4.3所示。

中断返回特别状况(紧急状况)中断响应关定时器5调试

5.1断电调试

以保安全,避免硬件被烧坏,本人一开始先进行的是断电测试。首先用万能表检查

18

XXXXXX毕业设计

启动定时器中断设置字型码和字位码,完成数码管倒计时显示定时中断入口定义1s初始化定时器0关闭定时器0

计数变量自加1

图4.3定时中断流程图

电路是不是有短路的状况出现,然后看看设计的原理是不是对的,每一个线路电压有没有出现错误。经过检查,断电测试没有问题。

5.2通电调试

A、插入电源后,按了开关,发现电路没有反应,经过一系列的测试排除后发现输入电压最少应当为6.5V,经过处理,换了一个9V的电源,问题终究得到了解决。

B、测试系统的时钟是不是正确的,本人的方法是用万能表来测试。把万能表调到直流电压档这个档位,然后把两线分别接在XTAL1与AXTAL2之间,显示出来的数字是2.4,没有问题。

C、复位电路经过检测没有出现问题。

D、数码管显示有时显示不正常,经过一系列排查处理之后,恢复正常。LED灯表现也正常。

5.3功能部分的测试

A、接上电源后,交通灯开始运作,运作正常。运行1分钟,按复位键,恢复到了开始状态,表现正常。

B、按紧急中止按键,四个红灯一起亮了,再按一次,退出该模式,表现正常。C、按显示车流量按键,数码管显示倒计时中止,红外线每检测到一个信号,计数加1,再按一次,退出该模式,表现正常。

D、按单向通行按键,按一次为东西通行,按两次为南北通行,按第三次退出该模式,表现正常。

E、按夜间模式按键,按一次路口全为黄灯,按其次次退出该模式,表现正常。F、按调时按键,调理东西方向的红灯和绿灯时长,按一次为调理红灯时长,按两

19

XXXXXX毕业设计

次为调理绿灯时长,再按时间加减两个按键,时间依照按键的次数加减,再按一次,退出该模式,表现正常。

6结论

通过这次毕业设计,我学到了许多的东西。总结有以下几条:

(1)首先,学习到最明显的就是word的运用。在这次毕业设计以前,除了几次基本的文字编辑之外,其它的功能根本就没有用过。通过这篇论文的修改,我学会了好多功能的运用,包括段落、页面、页眉、等各种编辑功能。虽然我知道word的功能远远不止这些,但是这次起码让我学习到了我以前不会的东西,这就是一种进步的表现。

(2)通过复习大学期间学过的有关知识,我将此充分运用到了这次的毕业设计当中,跟实践相联合。同时,我也发现自己有好多知识不明白,都是通过问老师,查资料自学来把握,我相信经过我的努力,可以完美的完成这次毕业设计。

(3)在这次毕业设计中,我对单片机有了更深的理解,学习到了更多关于单片机的知识。通过深入的研究和思考,在程序编写方面也有自己独特的一套思路,编写的时候更加熟练,灵敏。

(4)加强了查阅资料和自学的能力。在这次毕业设计当中,我遇到了好多不会的问题,然后我就开始自己上网探寻,查找或者翻阅书本查找,经过自学之后,假使还是不懂,我就会问同学和老师,最终通过自己的理解逐渐的把问题解决了。这让我体会到了什么叫学无止境,知识是无限的,我们只有通过不断的学习,提升自己的知识面,才能更好的运用到实际当中,使生活更加美好,思想境界更加广阔。

20

XXXXXX毕业设计

XXXXXX毕业设计

谢辞

在即将终止本文,完成毕业设计的时刻,我要向所有在我毕业设计阶段乃至我大学帮助过我的老师和同学致以深深的谢意,感谢他们在学习和生活上给我的帮助。.

通过本次毕业设计,我在指导老师的精心指导和严格要求下,获得了丰富的理论知识,极大地提高了实践能力,并对当前电子领域的研究状况和发展方向有了一定的了解,单片机领域这对我今后进一步学习计算机方面的知识有极大的帮助。在设计中遇到了好多编程问题,最终在老师的辛勤指导下,在同学的热心帮助下,终究迎刃而解。同时,在老师的身上我学到好多实用的知识,在此我表示感谢!最终,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!

还有许多给予我学业上勉励和帮助的朋友,在此无法一一列举,在此也一并表示忠心地感谢!

22

XXXXXX毕业设计

附录

附录1

程序源代码

#include\#include\#include\

#defineSMG_DATAP0

sbitbotton1=P1^6;sbitbotton2=P1^7;sbitbotton3=P3^4;sbitbotton4=P3^5;sbitbotton5=P3^6;sbitbotton6=P3^7;

sbitS1=P2^7;

u8timebreak0=0;

u8i=0;//定时器计数变量

u16dx_redtime=14,dx_gretime=20,nb_redtime,nb_gretime,yeltime=5;//红绿灯时间设置

s16count_time=0;//时间调理量u16num_stop=0,flag_stop=0;//是否需要紧急暂停u8count_settime=0;//调时键模式计数u8count_oneway=0;//单向通行键模式计数u8breakflag=0;//是否有异常状况的出现u16break_count=0;//计数变量u8car_time=0;//车流量计时u8car_number=0;

voidinitled();//初始化交通灯ledvoidinitnumber();//初始化数码管voidinitcross();//初始化路口交通灯voidstop();//紧急中断路口为红灯voiddisplaycount();//显示车流量voidautsettime();//自动调时voidoneway();//单向通行

23

XXXXXX毕业设计

voidnight();//夜间模式voidaddtime();//时间加voidcuttime();//时间减voidsettime();//路口调时

voidbreakfunction();//异常状况处理

/*第一排左边第一个按键为复位按键,

其次个按键为紧急中止按键,按一次为路口红灯四方向中止通行,按两次退出该模式;

其次排左边第一个按键为显示车流量按键,按一次显示车流量,按两次退出;

其次个按键为单向通行按键,按一次为东西通行,按两次为南北通行,按三次退出;第三个按键为夜间模式按键,按一次路口全为黄灯,按两次退出夜间模式;

第四个按键为调时按键,调理东西方向的红灯和绿灯时长,按一次为调理红灯时长,按两次为调理绿灯时长;

第五个按键为加时按键,按一下时间增加一秒;第六个按键为减时按键,按一下时间减少一秒*/voidmain(){

S1=0;

//初始化时间

nb_redtime=dx_gretime+yeltime;nb_gretime=dx_redtime-yeltime;

//设置中断TMOD=0X01;

TH0=(65536-50000)/256;TH0=(65536-50000)%6;EA=1;EX0=1;EX1=1;IT0=1;IT1=1;ET0=1;TR0=1;

while(1){

initcross();

i=dx_redtime;while(i>0){

24

XXXXXX毕业设计

breakfunction();//异常状况的处理

if(breakflag)//假使有异常状况,恢复时重新启动{

breakflag=0;i=dx_redtime;}

//正常路口通行(东西红灯)

dx_red=0;//东西红灯display_2(DONG,i-1);display_2(XI,i-1);

if(i>yeltime+3)//南北绿灯{

nb_gre=0;

display_2(NAN,i-yeltime-1);display_2(BEI,i-yeltime-1);}

elseif(i>yeltime)//南北绿灯闪烁{

display_2(NAN,i-yeltime-1);display_2(BEI,i-yeltime-1);if(timebreak00){

25

XXXXXX毕业设计}

}

breakfunction();if(breakflag){

breakflag=0;i=nb_redtime;}

//正常路口通行(南北红灯)

nb_red=0;//南北红灯display_2(NAN,i-1);display_2(BEI,i-1);

if(i>yeltime+3)//东西绿灯{

dx_gre=0;

display_2(DONG,i-yeltime-1);display_2(XI,i-yeltime-1);}

elseif(i>yeltime)//东西绿灯闪烁{

display_2(DONG,i-yeltime-1);display_2(XI,i-yeltime-1);if(timebreak0XXXXXX毕业设计

//定时器中断

voidtime0()interrupt1{

TH0=(65536-50000)/256;TL0=(65536-50000)%6;timebreak0++;

if(timebreak0==20)//一秒定时{

i--;

car_time++;timebreak0=0;}

if(car_time==300)//5分钟记录一次车流量{

car_number=break_count;break_count=0;car_time=0;}}

//紧急中断

voidExit_0()interrupt0{

initcross();num_stop++;

if(num_stop%2){

flag_stop=1;//第一次中断为阻止通行TR0=0;

timebreak0=0;breakflag=1;}

else//其次次中断为恢复正常通行{

flag_stop=0;TR0=1;dx_red=1;nb_red=1;}}

//紧急中断路口为红灯voidstop()

27

XXXXXX毕业设计

{

if(flag_stop){

initled();}

while(flag_stop){

dx_red=0;nb_red=0;initnumber();}}

//计数器

voidcountfunction()interrupt2{

break_count++;}

//显示车流量

voiddisplaycount(){

if(botton1==0){

delay_ms(10);if(botton1==0){

u8flag=1;while(!botton1);TR0=0;

break_count=break_count%100;while(flag){

display_2(DONG,break_count);display_2(XI,break_count);display_2(NAN,break_count);display_2(BEI,break_count);

if(botton1==0){

delay_ms(10);if(botton1==0){

28

XXXXXX毕业设计

flag=0;

while(!botton1);}}}

initcross();TR0=1;

breakflag=1;}}}

//根据车流量自动调时voidautsettime(){

TR0=0;

if(car_number>=0

dx_gretime=20;

nb_redtime=dx_gretime+yeltime;nb_gretime=dx_redtime-yeltime;}

elseif(car_number>20

dx_gretime=50;

nb_redtime=dx_gretime+yeltime;nb_gretime=dx_redtime-yeltime;}else{

dx_redtime=20;

dx_gretime=70;

nb_redtime=dx_gretime+yeltime;nb_gretime=dx_redtime-yeltime;}

TR0=1;}

//初始化交通灯ledvoidinitled()

29

分钟内车流量不同,时//5XXXXXX毕业设计

{

dx_red=1;dx_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论