雷锋杰定稿 - 图文

更新时间:2024-05-31 18:28:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

中国地质大学江城学院毕业设计(论文)

分类号 密级

U D C

中国地质大学江城学院

毕业设计(论文)

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

姓 名: 雷 锋 杰

专 业: 机械设计制造及其自动化

班 级: 机 械 五 班

学 号: 2500100502

指导教师: 黄 翠 翠

I

中国地质大学江城学院毕业设计(论文)

原创性声明

本人呈交的学位论文,是在导师的指导下,独立进行研究工作所取的的成果,所有数据、图片资料真实可靠。紧握所知,除文中已经注明引用的内容外,本学位论文的研究成果不包含他人享有著作权的内容。对本论文所涉及的研究工作作出贡献的其他个人和集体,均已在文中以明确的方式表明。本学位论文的知识产权归属于培养单位。

本人签名:

II

日期:中国地质大学江城学院毕业设计(论文)

摘 要

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

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

关键词:交通灯 单片机 显示 定时

III

中国地质大学江城学院毕业设计(论文)

ABSTRACT

In recent years along with the rapid development of science and technology, SCM applications are continually deepening, and promote the traditional control detection technology is updated. In real-time detection and automatic control of the microcomputer application system, the microcontroller is often used as a core component, only SCM knowledge is not enough, should be based on specific hardware structure of hardware and software combination, to be perfect.

Crossroads shuttle vehicles, pedestrians bustling, car dealership traffic lane, people walkways, everything in good order and well arranged. So what to rely on to realize it in order? Is the traffic lights on the automatic command system. A lot of traffic signal control. This system uses STC89C51 and74HC245system and the smallest transistor driving circuit and a periphery of the keys and digital tube display and other parts, a design based on the single chip design of traffic lights. Design by two common cathode digital tube display, and can through the button to set the timing.

Key words: Traffic Lights SCM Display Timing

IV

中国地质大学江城学院毕业设计(论文)

目 录

1 引言 .................................................................... 1

1.1 交通灯的背景 ........................................................ 1

1.1.1 交通灯的历史 ................................................... 1 1.1.2 交通灯的出现 ................................................... 1 1.2 交通灯的意义 ........................................................ 2

2 系统方案设计与要求 .................................................... 3

2.1 单片机交通灯控制系统通行方案设计 .................................... 3 2.2 单片机交通控制系统的功能要求 ........................................ 4

2.2.1 显示模块功能 ................................................... 4 2.2.2 按键模块功能 ................................................... 4 2.3 单片机交通控制系统的基本构成及原理 .................................. 5

3 系统硬件电路的设计 .................................................... 7

3.1 系统硬件总电路构成 .................................................. 7 3.2 单片机单片机最小系统 ................................................ 7 3.3 显示系统 .......................................................... 11

3.3.1 LED显示 ...................................................... 11 3.3.2 数码管显示 .................................................... 12 3.4 信号显示驱动电路 ................................................... 12 3.5 键盘输入电路 ....................................................... 13

4 系统软件程序的设计 ................................................... 15

4.1 程序主体设计流程 ................................................... 15 4.2 子程序模块设计 ..................................................... 15 4.3 KEIL51的应用 ....................................................... 17

结束语 .................................................................... 18 致 谢 .................................................................... 19 参考文献 ................................................................. 20 附 录 .................................................................... 21

V

中国地质大学江城学院毕业设计(论文)

1 引言

1.1 交通灯的背景

1.1.1 交通灯的历史

当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。但这一技术在19世纪就已出现了。1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。这是世界上最早的交通信号灯。1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。它由红绿两以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。电气启动的红绿灯出现在美国,这种红绿灯由红绿黄三色圆形的投光器组成,1914年始安装于纽约市5号大街的一座高塔上。红灯亮表示“停止”,绿灯亮表示“通行”。1918年,又出现了带控制的红绿灯和红外线红绿灯。带控制的红绿灯,一种是把压力探测器安在地下,车辆一接近红灯便变为绿灯;另一种是用扩音器来启动红绿灯,司机遇红灯时按一下嗽叭,就使红灯变为绿灯。红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉到有人要过马路。红外光束能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。

1.1.2 交通灯的出现

随着各种交通工具的发展和交通指挥的需要,第一盏名副其实的三色灯(红、黄、绿三种标志)于1918年诞生。它是三色圆形四面投影器,被安装在纽约市五号街的一座高塔上,由于它的诞生,使城市交通大为改善。

? 黄色信号灯的发明者是我国的胡汝鼎,他怀着“科学救国”的抱负到美国深造,在大

发明家爱迪生为董事长的美国通用电器公司任职员。一天,他站在繁华的十字路口等待绿灯信号,当他看到红灯而正要过去时,一辆转弯的汽车呼地一声擦身而过,吓了他一身冷汗。回到宿舍,他反复琢磨,终于想到在红、绿灯中间再加上一个黄色信号灯,提醒人们注意危险。他的建议立即得到有关方面的肯定。于是红、黄、绿三色信号灯即以一个完整的指挥信号家族,遍及全世界陆、海、空交通领域了[1]。

1

中国地质大学江城学院毕业设计(论文)

1.2 交通灯的意义

当前,大量的信号灯电路正向着数字化、小功率、多样化、方便人、车、路三者关系的协调,多值化方向发展随着社会经济的发展,城市交通问题越来越引起人们的关注。这些城市纷纷修建城市高速道路,在高速道路建设完成初期,它们也曾有效地改善了交通状况。然而,随着交通量的快速增长和缺乏对高速道路的系统研究和控制,高速道路没有充分发挥出预期的作用。而城市高速道路在构造上的特点,也决定了城市高速道路的交通状况必然受高速道路与普通道路耦合处交通状况的制约。人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。

城市交通控制系统是用于城市交通数据检测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。

2

中国地质大学江城学院毕业设计(论文)

2 系统方案设计与要求

2.1 单片机交通灯控制系统通行方案设计

设在十字路口,分为东西向和南北向,在任一时刻只有一个方向通行,另一方向禁行,持续一定时间,经过短暂的过渡时间,将通行禁行方向对换[2]。其具体状态如下图所示。说明:黑色表示亮,白色表示灭。交通状态从状态1开始变换,直至状态6然后循环至状1,周而复始,即如图2-1所示。直至状态6然后循环至状态1,通过具体的路口交通灯状态的演示分析我们可以把这四个状态归纳如下:

图2-1交通状态

东西方向红灯灭,同时绿灯亮,南北方向黄灯灭,同时红灯亮,倒计时20秒。此状态下,东西向禁止通行,南北向允许通行。

东西方向绿灯灭,同时黄灯亮,南北方向红灯亮,倒计时5秒。此状态下,除了已经正在通行中的其他所以车辆都需等待状态转换。

南北方向红灯灭,同时绿灯亮,东西方向黄灯灭,同时红灯亮,倒计时30秒。此状态下,东西向允许通行,南北向禁止通行。

南北方向绿灯灭,同时黄灯亮,东西方向红灯亮,倒计时5秒。此状态下,除了已经正在通行中的其他所以车辆都需等待状态转换。

下面我们可以用图表表示灯状态和行止状态的关系如表2-1所示。

3

中国地质大学江城学院毕业设计(论文)

表2-1交通状态及红绿灯状态

东西向 南北向 东西红灯 东西黄灯 东西绿灯 南北红灯 南北绿灯 南北黄灯 状态1 禁行 通行 1 0 0 0 1 0 状态3 等待变换 等待变换 1 0 0 0 0 1 状态4 通行 禁行 0 0 1 1 0 0 状态6 等待变换 等待变换 0 1 0 1 0 0 东西南北四个路口均有红绿黄3灯和数码显示管4个,在任一个路口,遇红灯禁止通行,转绿灯允许通行,之后黄灯亮警告行止状态将变换。状态及红绿灯状态如表2-1所示。说明:0表示灭,1表示亮。

2.2 单片机交通控制系统的功能要求

本设计能模拟基本的交通控制系统,用红绿黄灯表示禁行,通行和等待的信号发生,还能进行倒计时显示。按键可以控制禁行、深夜模式、复位、东西通行、南北通行、时间加、时间减、切换等功能。共四个二位阴极数码管,东南西北各一个显示时间,四个数码管的阴极都接到STC89C51的P1口,阳极接到74HC245芯片上,通过P0口控制74HC245芯片,起到驱动放大作用。共12个发光二极管,四个路口每个路口各有一个红(禁行)、黄(警告)发光二极管,四个路口的二极管接到P2口,按键接P3口。

2.2.1 显示模块功能

显示模块分数码管显示和LED显示,数码管倒计时显示可以提醒驾驶员在信号灯颜色发生改变的时间、在“停止”和“通过”两者间作出合适的选择。驾驶员和行人普遍都愿意选择有倒计时显示的信号控制方式,并且认为有倒计时显示的路口更安全。倒计时显示是用来减少驾驶员在信号灯色改变的关键时刻做出复杂判断的一种方法,它可以提醒驾驶员灯色发生改变的时间,帮助驾驶员在“停止”和“通过”两者间作出合适的选择 。

2.2.2 按键模块功能

4

中国地质大学江城学院毕业设计(论文)

本系统要求的按键控制不多,且I/0口足够,可直接采用独立式。按键可以设置系统的运行状态,禁行状态为数码管均显示“00”,红灯全亮;复位按键可以将整个系统复位;东西通行是东西方向的绿灯亮,南北方向上的红灯亮;南北通行为南北方向上的绿灯亮,东西方向上的红灯亮;时间加减可以设置通行和等待通行的时间;切换按键可以切换加减的方向时间[3]。通过安检模块的控制,使得整个系统具有灵活性,实用性。

2.3 单片机交通控制系统的基本构成及原理

本系统采用STC89C51单片机以及单片机最小系统和74HC245驱动电路以及外围的按键和数码管显示等部件,设计一个基于单片机的交通灯设计。设计通过两位一体共阴极数码管显示,并能通过按键对定时进行设置。本系统实用性强、操作简单、扩展功能强[3]。 在相同的时间里提高通车的质量、效率。并能在高峰期根据实际状况结合方程式控制按钮来调整主次干道的通车时间,降低交通拥挤堵塞现象。

本单片机控制交通灯系统,可用单片机直接控制信号灯的状态变化,基本上可以指挥交通的具体通行,当然,接入LED数码管就可以显示倒计时以提醒行使者,更具人性化。本系统在此基础上,单片机对此进行具体处理,及时调整控制指挥。如图(图2-2)所示: 键盘设置模块对系统输入模式选择及具体通行时间设置的信号,系统进入正常工作状态,执行交通灯状态显示控制,同时将时间数据倒计时输入到LED数码管上实时显示。在此过程中还要实时捕捉违规检测和紧急按键信号,以达到对异常状态进行实时控制的目的。急停按键和违规检测随时调用中断[4]。

最小系统外围接口

图2-2 系统的总体框图

5

8段LED数码管 复位电路 单片机 单片机 驱动显示 按键控制

红黄绿信号灯

中国地质大学江城学院毕业设计(论文)

据此,本设计系统以单片机为控制核心,连接成最小系统,和按键设置模块等产生输入,信号灯状态模块,LED倒计时模块和接受输出。系统的总体框图2-2所示。

6

中国地质大学江城学院毕业设计(论文)

3 系统硬件电路的设计

3.1 系统硬件总电路构成

实现本设计要求的具体功能,可以选用stc89C51单片机及外围器件构成最小控制系统,12个发光二极管分成4组红绿黄三色灯构成信号灯指示模块,8个LED东西南北各两个构成倒计时显示模块,若干按键组成时间设置和模式选择按钮和紧急按钮等。

本系统以单片机为核心,组成一个处理、自动控制为一身的闭环控制系统。系统硬件电路由单片机、状态灯、LED显示、驱动电路、按键等组成。

3.2 单片机单片机最小系统

单片机主要特点:

(1)有优异的性能价格比。

(2)集成度高、体积小、有很高的可靠性。单片机把各功能部件集成在一块芯片上,内部采用总线结构,减少了各芯片之间的连线,大大提高了单片机的可靠性和抗干扰能力。另外,其体积小,对于强磁场环境易于采取屏蔽措施,适合在恶劣环境下工作。

(3)控制功能强。为了满足工业控制的要求,一般单片机的指令系统中均有极丰富的转移指令、I/O口的逻辑操作以及位处理功能。单片机的逻辑控制功能及运行速度均高于同一档次的微机。

(4)低功耗、低电压,便于生产便携式产品。

(5)外部总线增加了I2C(Inter-Integrated Circuit)及SPI(Serial Peripheral Interface)等串行总线方式,进一步缩小了体积,简化了结构。

(6)单片机的系统扩展和系统配置较典型、规范,容易构成各种规模的应用系统。 优异的性能价格比[5]。

1)集成度高、体积小、有很高的可靠性。

单片机把各功能部件集成在一块芯片上,内部采用总线结构,减少了各芯片之间的连线,大大提高了单片机的可靠性与抗干扰能力。另外,其体积小,对于强磁场环境易于采取屏蔽措施,适合于在恶劣环境下工作。

此外,程序多采取固化形式也可以提高可靠性。 2)控制功能强。

7

中国地质大学江城学院毕业设计(论文)

为了满足工业控制要求,一般单片机的指令系统中均有极丰富的转移指令、I/O口的逻辑操作以及位处理功能。单片机的逻辑控制功能及运行速度均高于同一档次的微机。 3)单片机的系统扩展、系统配置较典型、规范,容易构成各种规模的应用系统。 VCC:STC89C52电源正端输入,接+5V。 GND:电源地端。

XTAL1: 单芯片系统时钟的反相放大器输入端。

XTAL2: 系统时钟的反相放大器输出端,一般在设计上只要在 XTAL1 和 XTAL2 上接上一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间加入一 20PF 的小电容,可以使系统更稳定,避免噪声干扰而死机。

RESET:STC89C52的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。

EA/Vpp:\为英文\的缩写,表示存取外部程序代码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。如果是使用 8751 内部程序空间时,此引脚要接成高电平。此外,在将程序代码烧录至8751内部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。

ALE/PROG:ALE是英文\Latch Enable\的缩写,表示地址锁存器启用信号。STC89C52可以利用这支引脚来触发外部的8位锁存器(如74LS373),将端口0的地址总线(A0~A7)锁进锁存器中,因为STC89C52是以多工的方式送出地址及数据。平时在程序执行时ALE引脚的输出频率约是系统工作频率的1/6,因此可以用来驱动其他周边晶片的时基输入。此外在烧录8751程序代码时,此引脚会被当成程序规划的特殊功能来使用[7]。 PSEN:此为\的缩写,其意为程序储存启用,当8051被设成为读取外部程序代码工作模式时(EA=0),会送出此信号以便取得程序代码,通常这支脚是接到EPROM的OE脚。STC89C52可以利用PSEN及RD引脚分别启用存在外部的RAM与EPROM,使得数据存储器与程序存储器可以合并在一起而共用64K的定址范围[6]。 PORT0(P0.0~P0.7):端口0是一个8位宽的开路汲极(Open Drain)双向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。其他三个I/O端口(P1、P2、P3)则不具有此电路组态,而是内部有一提升电路,P0在当做I/O用时可以推动8个LS的TTL

8

中国地质大学江城学院毕业设计(论文)

负载。如果当EA引脚为低电平时(即取用外部程序代码或数据存储器),P0就以多工方式提供地址总线(A0~A7)及数据总线(D0~D7)。设计者必须外加一锁存器将端口0送出的地址栓锁住成为A0~A7,再配合端口2所送出的A8~A15合成一完整的16位地址总线,而定址到64K的外部存储器空间。

PORT2(P2.0~P2.7):端口2是具有内部提升电路的双向I/O端口,每一个引脚可以推动4个LS的TTL负载,若将端口2的输出设为高电平时,此端口便能当成输入端口来使用。P2除了当做一般I/O端口使用外,若是在STC89C52扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8~A15,这个时候P2便不能当做I/O来使用了。 PORT1(P1.0~P1.7):端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LS TTL负载,同样地若将端口1的输出设为高电平,便是由此端口来输入数据。如果是使用8052或是8032的话,P1.0又当做定时器2的外部脉冲输入脚,而P1.1可以有T2EX功能,可以做外部中断输入的触发脚位。

PORT3(P3.0~P3.7):端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能[7]。 其引脚分配如下:

P3.0:RXD,串行通信输入。 P3.1:TXD,串行通信输出。 P3.2:INT0,外部中断0输入。 P3.3:INT1,外部中断1输入。 P3.4:T0,计时计数器0输入。 P3.5:T1,计时计数器1输入。

P3.6:WR:外部数据存储器的写入信号。 P3.7:RD,外部数据存储器的读取信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才

9

中国地质大学江城学院毕业设计(论文)

起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效[7]。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP) 单片机引脚图如3-1所示。

1234567891011121314151617181920U1P10P11P12P13P14P15P16P17RESETP30/RXDP31/TXDP32/INT0P33/INT1P34/T0P35/T1P36WRP37/RDX2X1GNDSTC89C52VCCP00P01P02P03P04P05P06P07EA/VPALE/PPSENP27P26P25P24P23P22P21P204039383736353433323130292827262524232221 图3-1 单片机引脚图

单片机芯片内还有一项主要内容就是并行I/O口。STC89C51共有4个8位的并行I/O口,分别记作P0、P1、P2、P3。每个口都包含一个锁存器、一个输出驱动器和输入缓冲器。实际上,它们已被归入专用寄存器之列,并且具有字节寻址和位寻址功能。在访问片外扩展存储器时,低8位地址和数据由P0口分时传送,高8位地址由P2口传送。在无片外扩展存储器的系统中,这4个口的每一位均可作为双向的I/O端口使用。

单片机的4个I/O口都是8位双向口,这些口在结构和特性上是基本相同的,但又各具特点。

STC89C51单片机的时钟信号通常有两种方式产生:一是内部时钟方式,二是外部时钟方式[9]。在单片机内部有一振荡电路,只要在单片机的XTAL1和XTAL2引脚外接石英晶体(简称晶振),就构成了自激振荡器并在单片机内部产生时钟脉冲信号。图中电容C1和C2的作用是稳定频率和快速起振,电容值在5-30pF,典型值为30pF。晶振CYS的振荡频率范围在1.2-12MHz间选择,典型值为12MHz和11.0592MHz。

当在STC89C51单片机的RST引脚引入高电平并保持2个机器周期时,单片机内部就执行复位操作[15](若该引脚持续保持高电平,单片机就处于循环复位状态)。

10

中国地质大学江城学院毕业设计(论文)

复位电路通常采用上电自动复位和按钮复位两种方式。最简单的上电自动复位电路中上电自动复位是通过外部复位电路的电容充电来实现的。只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。时钟频率用6MHZ时C取22uF,R取1KΩ。除了上电复位外,有时还需要按键手动复位。本设计就是用的按键手动复位。按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST端经过电阻与电源Vcc接通而实现的[8]。系统图如图3-2所示。

VCCK013RESET+C110uF241234567891011121314151617181920P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RSTP3.0(RXD)P3.1(TXD)P3.2(INT0)P3.3(INT1)P3.4(T0)P3.5(T1)P3.6(WR)P3.7(RD)XTAL2XTAL1GND89C52VCC(AD0)P0.0(AD1)P0.1(AD2)P0.2(AD3)P0.3(AD4)P0.4(AD5)P0.5(AD6)P0.6(AD7)P0.7EA/VPPALE/PROGPSEN(A15)P2.7(A14)P2.6(A13)P2.5(A12)P2.4(A11)P2.3(A10)P2.2(A9)P2.1(A8)P2.04039383736353433323130292827262524232221VCCC211.0592MHzR710K30Y1C330图3-2 单片机最小系统原理图

3.3 显示系统

3.3.1 LED显示

LED:发光二极管,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光;它改变了白炽灯钨丝发光与节能灯三基色粉发光的原理,而采用电场发光。据分析,LED的特点非常明显,寿命长、光效高、辐射低与功耗低。作为目前全球最受瞩目的新一代光源,LED因其高亮度、低热量、长寿命、无毒、可回收再利用等优点, 交通灯利用发光二极管来显示不同颜色的信号指示灯。

11

中国地质大学江城学院毕业设计(论文)

D1YD2GD3R

图3-3 LED灯

3.3.2 数码管显示

数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管:按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。电路如图3-4所示。

10S3S2GpdG12A3FS445 图3-4 数码管显示

3.4 信号显示驱动电路

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

12

AFS1BCED9876BCED中国地质大学江城学院毕业设计(论文)

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

A0B0C0D0E0F0G023456789191A0A1A2A3A4A5A6A7EDIR74HC245B0B1B2B3B4B5B6B71817161514131211ABCDEFGVCC 图3-5 74HC245电路图

设计中将1脚接VCC,19脚接地,整个芯片是输入端输入高则输出端输出高,输入端

输入低则输出端输出地,只是相当于驱动作用。

3.5 键盘输入电路

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

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

在用单片机对键盘处理的时候涉及到了一个重要的过程,那就是键盘的去抖动。这里

13

中国地质大学江城学院毕业设计(论文)

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

K113stop2413dxK22413nbK32413okK72413K5add2413K6dec2413qiehuanK424 图3-6 键盘控制电路图

14

中国地质大学江城学院毕业设计(论文)

4 系统软件程序的设计

4.1 程序主体设计流程

全部控制程序实际上分为若干模块:键盘设置处理程序,状态灯控制程序,LED显示程序,消抖动延时程序,次状态判断及处理程序,紧停或违规判断程序,中断服务子程序,车流量计数程序,红绿灯时间调整程序等[10]。

整个软件程序方面主要分两大部分:按键处理程序和50ms扫描程序。流程图如图4-1所示。

宏定义 I/O初始化 定义共阴极字型 编码表 定 义函数变量并初始化

定时器0初始化 调用Buzzer()函数 定义状态数组 初始化外部中断 设置字型码和字位码,完成显示 定义字位码函数 进入while(1)循环 返回while(1)函数 进入主函数main() 调用显示控制函数void display()

图4-1系统总的流程图

4.2 子程序模块设计

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

15

中国地质大学江城学院毕业设计(论文) 保持中断 东西绿灯亮 南北红灯亮 东西绿灯亮 南北红灯亮 南北通行 INT0 INT1 东西通行 保持中断

中断返回 中断返回 图4-2 中断子程序

定时中断子程序是本设计的重点,定时器一但启动,它便在原来的数值上开始加1计

数,若在程序开始时,我们没有设置TH0和TL0,它们的默认值都是0,假设时钟频率为12MHz,12个时钟周期为一个机器周期,那么此时机器周期为1us,记满TH0和TL0就需要216 -1个数,再来一个脉冲计数器溢出,随即向CPU申请中断。因此溢出一次共需65536us,约等于65.6ms,如果我们要定时50ms的话,那么就需要先给TH0和TL0装一个初值,在这个初值的基础上记50000个数后,定时器溢出,此时刚好就是50ms中断一次,当需要定时1s时,我们写程序时当产生20次50ms的定时器中断后便认为是1s,这样便可精确控制定时时间啦负责完成数码管输出数据刷新和各个状态的处理切换。中断子程序包括数码管输出数据刷新程序和各状态处理程序[11]。中断程序的流程图如图4-3所示。 启动定时器中断 设置字型码和字位码,完成数码管倒计时显示 定时中断入口 定义1s 初始化定时器0

计数变量自加1

关闭定时器0 图4-3 定时中断流程图 16

中国地质大学江城学院毕业设计(论文)

交通灯程序见附录一。

4.3 KEIL51的应用

硬件与软件的设计一般都要分别借助一些软件,如我们通常用作电路设计与制版的Protel,MCS-51程序开发工具KEIL等。

Keil C51 uVision2集成开发环境是基于80C51内核的软件开发平台,支持工程建立、程序的编译与链接、软件仿真、硬件仿真、目标代码的生成等功能。Keil C51编译器在产生代码的准确性和效率方面达到了较高的水平[12]。

与大多数集成开发环境类似,Keil C51集成开发环境也是用工程的方法来管理文件,在一个工程文件中源程序(C51程序、汇编程序)、头文件等都可以进行统一管理。

安装运行KEIL51,使用KEIL的开发工具进行项目开发过程,与其他软件开发项目的过程基本上相同[13]:

创建C 语言或汇编语言的源程序。 编译或汇编源文件。 纠正源文件中的错误。

从编译器和汇编器连接目标文件。 测试连接的应用程序。

17

中国地质大学江城学院毕业设计(论文)

结束语

本次设计的硬件电路主要由单片机STC89C51组成,在调试电路的过程中也碰到了一些问题。

问题一:单片机无法正常下载程序。 调试步骤:

(1)检查单片机和串口电路是否连接错。 (2)检查焊接电路是否有虚焊和漏焊。 问题二:数码管显示不正常。 调试步骤:

检查数码管的型和位是否接的正确。

故障原因:焊接时过于马虎,由于数码管较多,数码管的管脚焊接错误。 解决方案:检查电路重新焊接错的那一部分。

经过这次毕业设计,我觉得自己学到了不少东西。归纳起来,主要有以下几点: (1)通过这次毕业设计,我能将以前所学到的专业知识与实践相联系,将所学到的知识充分运用到本次设计中。同时,我也认识到自己知识上不足的地方,体会到了所学理论知识的重要性,知识掌握得越多,设计得就更全面、更顺利、更好。

(2)进一步熟悉了单片机的知识。通过本次设计,我对单片机的基本原理、内部结构、各引脚功能、定时器和中断的应用都有了更深刻的理解。并且,能够以单片机为基础元件设计一个简单的系统。

(3)通过本次设计,熟悉了设计一个项目所必经的几个阶段。本次设计从理论研究到硬件原理图设计,从元器件的选择到板的制作,从软件编程到最后的调试过程都由我独立完成。这不仅锻炼了我独立完成设计工作的能力,更重要的是了解了一个电子产品的设计流程,为将来投入工作增加了宝贵的经验,奠定了坚实的基础。

(4)提高了自己查找资料的能力。在设计过程中,我碰到了一些暂时无法解决的问题,于是我通过上网查阅和图书馆借阅资料,或是通过与老师同学交流一步步地解决了。从中我懂得了我们这个专业的知识面相当广泛,我们需要不断通过各种途径更新自己的知识,不断充实自己,同时要懂得与他人交流意见,懂得不断学习的重要性。

18

中国地质大学江城学院毕业设计(论文)

致 谢

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

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

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

19

中国地质大学江城学院毕业设计(论文)

参考文献

[1]荆便顺.道路交通控制工程,人民交通出版社.2007 p1,2

[2蒋辉平. 基于Proteus的单片机系统设计与仿真实例.机械工业出版社.2009 P3-5 [3]陈炳权.曾庆六.EDA技术实用教程.湘潭大学出版社.2010 P5 [4]张鑫,陈书谦.单片机原理及应用 电子工业出版社.2008 P5,6

[5]李群芳.单片机微型计算机与接口技术 电子工业出版社.2008 P7-10

[6]Howard Johnso.Martin Graham.Hihh-Speed Digign Publishing House of Electronics industry,2005 P8 [7]曹天汉 单片机原理与接口技术 电子工业出版社. 2009 P8-10

[8]StevenF.Barrett,DanieL.Pack.Embedded System 电子工业出版社 2006 P11 [9]郭磊.电能质量实时监测装置的研究与设计.西安科技大学. 2008 P11-13

[10]李海苪.片春媛 单片机技术课程设计与项目实例 中国电力出版社.2008 P11,15 [11]徐红霞. 数字钟电路的设计. 广东技术师范学院学报. 2008 15,16 [12]王静霞 单片机应用技术 电子工业出版社. 2009 P6,17

[13]边海龙,孙永奎.单片机开发与典型工程项目实例详解. 电子工业出版社. 2008 P17 [14]熊年禄.低频模拟电路,清华大学出版社.2008 P14,21

[15楼然苗.单片机课程设计指导。北京航空航天大学出版社.2007 P7,23-31

20

中国地质大学江城学院毕业设计(论文)

附 录

1 系统原理图

S1B109S2B C8E7D6CEDS1LEDDR G Y D4D5D6D9D8D7 YGR S1FAdpG1G GdpAF23A4F5S2 LEDB GAFS4 G1dp2A3F4S15 D12S2BCED 109876S3BCED LEDBDECBS3 D6E7C8B9S210 54321 S4FAG S2FA5432D11D10 RGYY G 1GS1FAdpGR 6D1D2D3 DECBS2LEDD78910DECBVCCS1Q19012SPEAKER 2K4LS 4qiehuan 12

34K6R5 2.2K 1dec P30102RP2 R8R79R68R57R46R35R24R13COM21 VCC ABCDEFG1817161514131211 RP110K(A8)P2.0(A9)P2.1(A10)P2.2(A11)P2.321(A12)P2.4G122(A13)P2.5Y123(A14)P2.6R124(A15)P2.7G225Y226ALE/PROGR2PSEN2728EA/VPP(AD7)P0.729(AD6)P0.630(AD5)P0.5VCC31R8(AD4)P0.432R79(AD3)P0.3G033R68(AD2)P0.2F034R57(AD1)P0.1E035R46(AD0)P0.0D036R35C037R24B038COMR13A0VCC392401VCC VCC74HC24512MHzGNDXTAL1XTAL2P3.7(RD)20P3.6(WR)19 C322 addK5AT89C51U1 642 18P3.5(T1)17P3.4(T0)P3.3(INT1)16P3.2(INT0)15P3.1(TXD)14P3.0(RXD)131211RST10P1.7P1.69P1.58P1.47P1.36P1.25P1.14P1.0321 2 34Y1 12C222 34okK7 12 P30 K3 34nbS4S3S2S1 2 12 34dx553311S12 B0B1B2B3B4B5B6B7A0A1A2A3A4A5A6A7DIRE3456789A0B0C0D0E0F0G0191 642K0 4SY2 4K2 12 P11 POWER 1 VCCR 1C4+ 23 3 310uF 34stopR2 10KK1 1 3

21

中国地质大学江城学院毕业设计(论文)

2 实物图

22

中国地质大学江城学院毕业设计(论文)

3 程序

#include

#define uchar unsigned char #define uint unsigned int

uchar data buf[4];

uchar data sec_dx=20; //东西数默认 uchar data sec_nb=30; //南北默认值

uchar data set_timedx=20; //设置东西方向的时间 uchar data set_timenb=30; //设置南北方向的时间 int n;

uchar data countt0;//定时器0中断次数 //定义5组开关

sbit k4=P3^7; //切换方向 sbit k1=P3^5; //时间加 sbit k2=P3^6; //时间减 sbit k3=P3^4; //确认 sbit k5=P3^1; //禁止 sbit k6=P1^5; //夜间模式

// P3^2 //只允许东西方向通行,中断0 // P3^3 //只允许南北方向通行,中断1

sbit Red_nb=P2^6; //南北红灯标志 sbit Yellow_nb=P2^5; //南北黄灯标志 sbit Green_nb=P2^4; //南北绿灯标志

sbit Red_dx=P2^3; //东西红灯标志 sbit Yellow_dx=P2^2; //东西黄灯标志 sbit Green_dx=P2^1; //东西绿灯标志

sbit Buzz=P3^0; bit Buzzer_Indicate;

bit set=0; //调时方向切换键标志 =1时,南北,=0时,东西 bit dx_nb=0; //东西南北控制位 bit shanruo=0;

uchar code table[11]={ //共阴极字型码 0x3f, //--0 0x06, //--1 0x5b, //--2 0x4f, //--3 0x66, //--4 0x6d, //--5 0x7d, //--6 0x07, //--7

23

中国地质大学江城学院毕业设计(论文)

0x7f, //--8 0x6f, //--9

0x00 //--NULL };

//函数的声明部分

void delay(int ms); //延时子程序 void key(); //按键扫描子程序 void key_to1(); //键处理子程序 void key_to2(); void key_to3();

void display(); //显示子程序 void logo(); //开机LOGO void Buzzer(); //主程序 void main() {

TMOD=0X11; //定时器设置

TH0=0X3C; //定时器0置初值 0.05S TL0=0XB0;

EA=1; //开总中断

ET0=1; //定时器0中断开启 TR0=1; //启动定时0 EX0=1; //开外部中断0 EX1=1; //开外部中断1 logo();

P2=0Xc3; // 开始默认状态,东西绿灯,南北黄灯 sec_nb=sec_dx+5; //默认南北通行时间比东西多5秒 while(1) {

key(); //调用按键扫描程序 display(); //调用显示程序 Buzzer(); } }

//函数的定义部分

void key(void) //按键扫描子程序 {

if(k1!=1) //当K1(时间加)按下时 {

display(); //调用显示,用于延时消抖 if(k1!=1) {

TR0=0; //关定时器 shanruo=0;

24

中国地质大学江城学院毕业设计(论文)

P2=0x00; if(set==0)

set_timedx++; //南北加1S else

set_timenb++; //东西加1S if(set_timenb==100) set_timenb=1;

if( set_timedx==100)

set_timedx=1; //加到100置1

sec_nb=set_timenb ; //设置的数值赋给东西南北 sec_dx=set_timedx; // do {

display(); }

while(k1!=1); } }

if(k2!=1) //当K2(时间减)按键按下时 {

display(); //调用显示,用于延时消抖 if(k2!=1) {

TR0=0; //关定时器 shanruo=0; P2=0x00; if(set==0)

set_timedx--; //南北减1S else

set_timenb--; //东西减1S if(set_timenb==0) set_timenb=99; if( set_timedx==0 )

set_timedx=99; //减到1重置99

sec_nb=set_timenb ; //设置的数值赋给东西南北 sec_dx=set_timedx; do {

display(); //调用显示,用于延时 }

while(k2!=1); } }

25

中国地质大学江城学院毕业设计(论文)

if(k3!=1) //当K3(确认)键按下时 {

display(); //调用显示,用于延时消抖 if(k3!=1) {

TR0=1; //启动定时器 Buzzer_Indicate=0;

sec_nb=set_timenb; //从中断回复,仍显示设置过的数值 sec_dx=set_timedx; //显示设置过的时间 if(set==0) //时间倒时到0时 {

P2=0X00; //东西绿灯,南北红灯 Green_dx=1; Red_nb=1;

sec_nb=sec_dx+5; //回到初值 } else {

P2=0x00; //南北绿灯,东西红灯 Green_nb=1; Red_dx=1;

sec_dx=sec_nb+5; } } }

if(k4!=1) //当K4(切换)键按下 {

display(); //调用显示,用于延时消抖 if(k4!=1) {

TR0=0;

set=!set; //取反set标志位,以切换调节方向dx_nb=set; do {

display(); }

while(k4!=1); } }

if(k5!=1) //当K5(禁止)键按下时 {

display(); //调用显示,用于延时消抖

26

中国地质大学江城学院毕业设计(论文)

if(k5!=1) {

TR0=0; //关定时器 P2=0x00; Red_dx=1;

Red_nb=1; //全部置红灯

sec_dx=00; //四个方向的时间都为00 sec_nb=00;

Buzzer_Indicate=1; do {

display(); }

while(k5!=1); } }

if(k6!=1) //当K6(夜间模式)按下 {

display(); //调用显示,用于延时消抖 if(k6!=1) {

TR0=0; //关定时器 P2=0x00; Yellow_dx=1;

Yellow_nb=1; //全部置黄灯

sec_dx=00; //四个方向的时间都为00 sec_nb=00;

Buzzer_Indicate=1; do {

display(); }

while(k6!=1); } } }

void display(void) //显示子程序 {

buf[1]=sec_nb/10; //第1位 东西秒十位 buf[2]=sec_nb; //第2位 东西秒个位 buf[3]=sec_dx/10; //第3位 南北秒十位 buf[0]=sec_dx; //第4位 南北秒个位 P1=0xff; // 初始灯为灭的 P0=0x00;

P1=0xfe; //片选LED1

27

中国地质大学江城学院毕业设计(论文)

P0=table[buf[1]]; //送东西时间十位的数码管编码 delay(1); //延时 P1=0xff; //关显示 P0=0x00;

P1=0xfd; //片选LED2 P0=table[buf[2]]; delay(1); P1=0xff; P0=0x00;

P1=0Xfb; //片选LED3 P0=table[buf[3]]; delay(1); P1=0xff; P0=0x00; P1=0Xf7;

P0=table[buf[0]]; //片选LED4 delay(1); }

void time0(void) interrupt 1 using 1 //定时中断子程序 {

TH0=0X3C; //重赋初值 TL0=0XB0;

TR0=1; //重新启动定时器 countt0++; //软件计数加1 if(countt0==10) {

if((sec_nb<=5)&&(dx_nb==0)&&(shanruo==1)) //东西黄灯闪 {

Green_dx=0; Yellow_dx=0; Buzz=0; }

if((sec_dx<=5)&&(dx_nb==1)&&(shanruo==1)) //南北黄灯闪 {

Green_nb=0; Yellow_nb=0; Buzz=0; } }

if(countt0==20) // 定时器中断次数=20时(即1秒时) { countt0=0; //清零计数器 sec_dx--; //东西时间减1

28

中国地质大学江城学院毕业设计(论文)

sec_nb--; //南北时间减1

if((sec_nb<=5)&&(dx_nb==0)&&(shanruo==1)) //东西黄灯闪 {

Green_dx=0; Yellow_dx=1; Buzz=1; }

if((sec_dx<=5)&&(dx_nb==1)&&(shanruo==1)) //南北黄灯闪 {

Green_nb=0; Yellow_nb=1; Buzz=1; }

if(sec_dx==0&&sec_nb==5) //当东西倒计时到0时,重置5秒,用于黄灯闪烁时间 {

sec_dx=5; shanruo=1; }

if(sec_nb==0&&sec_dx==5) //当南北倒计时到0时,重置5秒,用于黄灯闪烁时间 {

sec_nb=5; shanruo=1; }

if(dx_nb==0&&sec_nb==0) //当黄灯闪烁时间倒计时到0时, {

Buzz=1;

P2=0x00; //重置东西南背方向的红绿灯 Green_nb=1; Red_dx=1; dx_nb=!dx_nb; shanruo=0;

sec_nb=set_timenb; //重赋南北方向的起始值 sec_dx=set_timenb+5; //重赋东西方向的起始值 }

if(dx_nb==1&&sec_dx==0) //当黄灯闪烁时间到 {

P2=0X00; //重置东西南北的红绿灯状态 Green_dx=1; Red_nb=1; dx_nb=!dx_nb; shanruo=0;

sec_dx=set_timedx; //重赋东西方向的起始值 sec_nb=set_timedx+5; //重赋南北方向的起始值 }

29

中国地质大学江城学院毕业设计(论文)

} }

//外部中断0

void int0(void) interrupt 0 using 1 //只允许东西通行 {

TR0=0; //关定时器 P2=0x00;

Green_dx=1; //东西方向置绿灯 Red_nb=1; //南北方向为红灯 Buzzer_Indicate=0;

sec_dx=00; //四个方向的时间都为00 sec_nb=00; }

//外部中断1

void int1(void) interrupt 2 using 1 //只允许南北通行 {

TR0=0; //关定时器 P2=0x00;

Green_nb=1; //置南北方向为绿灯 Red_dx=1; //东西方向为红灯 Buzzer_Indicate=0;

sec_nb=00; //四个方向的时间都为00 sec_dx=00; }

void logo()//开机的Logo \{

for(n=0;n<50;n++) {

P0=0x40; P1=0xfe; delay(1); P1=0xfd; delay(1); P1=0Xfb; delay(1); P1=0Xf7; delay(1); P1 = 0xff; } }

void Buzzer()

30

中国地质大学江城学院毕业设计(论文)

{

if(Buzzer_Indicate==1) Buzz=!Buzz; else Buzz=1; }

void delay(int ms) //延时子程序 {

uint j,k;

for(j=0;j

for(k=0;k<124;k++); //大约1毫秒的延时}

31

中国地质大学江城学院毕业设计(论文)

{

if(Buzzer_Indicate==1) Buzz=!Buzz; else Buzz=1; }

void delay(int ms) //延时子程序 {

uint j,k;

for(j=0;j

for(k=0;k<124;k++); //大约1毫秒的延时}

31

本文来源:https://www.bwwdw.com/article/tks6.html

Top