城市交通灯模拟系统(哈尔滨工程大学学士学位论文) - 图文

更新时间:2024-05-01 10:49:01 阅读量: 综合文库 文档下载

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

学 号 2010041127 密 级____________

哈尔滨工程大学本科生毕业论文

城市交通灯模拟与控制系统设计

院(系) 名 称: 自动化学院

专 业 名 称: 自动化 学 生 姓 名: 支茂峰 指 导 教 师: 吕淑平 教授 孙 伟 讲师

哈尔滨工程大学

2014年6月

城市交通灯模拟与系统设计 支茂峰 哈尔滨工程大学

学 号 2010041127 密 级___________

城市交通灯模拟与控制系统设计

Simulation and control system design of city traffic

lights

学 生 姓 名:支茂峰 所 在 学 院:自动化学院 所 在 专 业:自动化 指 导 教 师:吕淑平,孙伟 职 称:教授,讲师 所 在 单 位:哈尔滨工程大学 论文提交日期:2014年6月14日 论文答辩日期:2014年6月22日 学位授予单位:哈尔滨工程大学

摘 要

本论文的主要任务是设计一个基于单片机的城市交通灯模拟与控制系统。整体思想是采用STC89C52单片机最小系统作为控制部分,控制数码管显示各个路口的通行或禁止通行剩余时间数,同时用发光二极管显示每个路口的通行状态,通过按键使整个系统工作在三种工作状态,夜间模式状态,禁行模式状态以及正常通行模式状态。

本设计结合了多种控制技术,通过对不同方案的比较、分析,确定了采用STC89C52单片机为控制器的整体设计方案。本系统的硬件模块主要包括:STC89C52单片机最小系统模块,按键电路模块,数码管显示电路模块以及发光二极管电路模块。根据硬件设计编写了相应软件模块。软件模块主要包括:系统初始化模块,开机LOGO模块,数据处理模块,按键扫描模块,数码管显示模块,二极管点亮模块。

本系统具体完成了对城市交通灯的模拟与控制,再现了实际城市交通灯的工作流程。该设计硬件电路简单,软件编写简单易懂,容易修改。在传统红绿灯的基础上增加了夜间模式,禁行模式使交通灯更加人性化。通过对系统进行多次测试,得出系统稳定,软硬件工作正常,本系统符合设计要求。

关键词:STC89C52单片机;工作状态;城市交通灯

ABSTRACT

The main task of this paper is to design a microcontroller-based urban traffic light simulation and control system. The whole idea is to use the smallest STC89C52 SCM system as a control part, control the digital tube to display the allow passage remaining time or the no thoroughfare remaining time. Simultaneously with the light-emitting diode displays the status of each intersection traffic. Button to make the whole system work by the three working state, night mode state, the state of the forbidden line mode and normal traffic patterns state.

The design incorporates a variety of control techniques by comparing the different programs, analysis, determined using STC89C52 microcontroller overall design of the controller. The system's hardware modules include: STC89C52 SCM minimum system module, key circuit module, the digital display circuit module and a light emitting diode circuit module. According to the hardware design of the preparation of the corresponding software modules. Software modules include: system initialization module, boot LOGO module, data processing module, key scan module, LED display module, LED light module.

The specific design of the system is completed the city simulation and control of

traffic lights, traffic lights to reproduce the actual city of workflows. The design of the hardware circuit is simple, software development, easy to understand, easy to modify. On the basis of the traditional traffic light on the increase in night mode, the forbidden line mode enables traffic lights more humane. The system through several tests, draw system stability, hardware and software to work properly, the system meets the design requirements.

第1章 绪论

目 录

第1章 绪论(2101)+600 ······································································ 3 1.1 城市交通灯的背景 ······················································································· 1 1.2 城市交通灯的发展与现状 ··········································································· 3 1.3 基于单片机的城市交通灯模拟与控制系统简介 ······································ 4

1.4 论文主要工作(400)

第2章 系统总体设计及核心器件介绍(5000) ········································ 3 2.1总体设计(959) ························································································· 6 2.1.1 交通灯总框图 ····················································· 错误!未定义书签。

2.1.2 系统工作原理 错误!未定义书签。

2.2 单片机STC89C52(2011) ·········································································· 9

2.2.1 单片机STC89C52的内部结构 2.2.2 单片机STC89C52的外部引脚

2.3 锁存器74HC573简介(580) ··································· 错误!未定义书签。 2.4 程序编写语言(1000) ············································· 错误!未定义书签。

2.5 串口pl2303简介 2.5 本章小结

第3章 系统硬件电路设计(4000) ··························· 错误!未定义书签。 3.1 系统硬件电路设计概述(150) ······························· 错误!未定义书签。 3.2 单片机最小系统电路(50)( 800) ······················ 错误!未定义书签。

3.2.1 stc89c52最小系统简介 (150)

3.2.2 复位电路设计(400) 3.2.3 晶振电路设计(300) 3.2.3 单片机的工作电源(50)

3.3 按键电路设计(50) ················································· 错误!未定义书签。 3.4 数码管显示电路设计(2000) ································· 错误!未定义书签。 3.5 发光二极管电路设计(1000) ································· 错误!未定义书签。 3.6 本章小结(200) ······················································· 错误!未定义书签。 第4章 系统软件程序设计(3500) ··························· 错误!未定义书签。 4.1 系统软件总体设计 ····················································· 错误!未定义书签。

4.2 系统初始化

4.3 开机LOGO程序 ·························································· 错误!未定义书签。

1

4.4 数据处理函数

4.5 键盘扫描程序 ····························································· 错误!未定义书签。 4.6 数码管显示程序 ························································· 错误!未定义书签。 4.7 二极管点亮程序 ························································· 错误!未定义书签。

4.8 延时子程序

4.9 本章小结 ····································································· 错误!未定义书签。 第5章 系统软硬件调试(3000) ······························· 错误!未定义书签。 5.1 系统调试过程中的问题与注意事项 ························· 错误!未定义书签。 5.1.1 硬件电路调试 ····················································· 错误!未定义书签。 5.1.2 软件程序调试 ······················································ 错误!未定义书签。 5.1.3 系统联调 ······························································ 错误!未定义书签。 5.2 本章小结 ····································································· 错误!未定义书签。 结 论(800) ························································· 错误!未定义书签。 参考文献 ·································································· 错误!未定义书签。 致 谢 ····································································· 错误!未定义书签。 附 录 ····································································· 错误!未定义书签。 附录A 系统电路原理图 ······················································ 错误!未定义书签。

2

第1章 绪论

第1章 绪论

1.1 课题的研究背景及意义(说明从哪引用摘抄的)

随着经济的发展,越来越多的家庭拥有了自己的小汽车,车辆数目的增加直接导致的问题是交通日益拥堵,现代社会人们的生活已经不能离开交通信号灯。城市交通信号灯是指红、黄、绿三种颜色为一组对交通进行指挥的信号灯。最早的城市交通灯出现于1868年英国伦敦议会大厦的广场上。当时的交通信号灯只有红、绿两种颜色。随着工业水平的发展,车辆的种类越来越多,红、绿两种颜色的信号灯已经不能满足日益繁重的交通需要,随之而来的是红、黄、绿三种颜色的交通信号灯。三色交通信号灯最早出现在纽约市的一座高塔上,由于三色信号灯的使用,交通压力得到了极大的缓解。2011年中国的机动车保有量为2.17亿辆左右,2014年中国机动车保有量数次突破2.5亿辆。从上面的数据可以看出中国的机动车数量非常之多,而且有继续增长的趋势。机动车里有很大一部分是民用小汽车,也就是常说的私家车。以前私家车主要集中在大中型城市。由于经济的发展,人民生活水平日益提高,工业水平的不断提高,汽车的制造成本越来越低,直接导致的结果就是现代生活越来越多的人拥有了自己的小汽车,在县级城市也经常出现交通拥堵的现象。交通问题的广泛化,严重化就迫使人们去想解决的方案。城市交通信号灯的价值倍受关注,研发更实用,更可靠的城市交通信号灯也就越来越重要。

1.2 城市交通灯的发展与现状(说明从哪引用摘抄的)

城市交通信号灯的发展经历了一个相当长的时期。历史上第一个负责交通的信号灯是在1868年诞生于英国的伦敦的。它是用来指挥火车的运行的,只有红绿两种颜色构成,只是在晚上使用。随后美国的纽约出现了三种颜色的红绿灯,由红黄绿三种颜色代表三种颜色来指挥交通,这是最早的三色红绿灯,也是现在红绿灯的雏形。随着时间的

3

推移现在的城市交通灯再也不是以前那种控制方式了,以前用煤油灯,用手推的方式来切换不同的灯亮。现在的城市交通灯各种各样,根据路口的不同,有三路口交通灯,四路口交通灯,单车道交通信号灯以及比较复杂的8车道城市信号交通灯。本系统就是用来模拟与控制8车道城市交通信号灯。

由于各地交通规则的不同。例如在中国行驶的车辆一律右侧通行,而在一些国家,如日本、英国等则是左侧通行。这就导致不同地方的城市交通灯的点亮顺序与控制逻辑有所不同。不管是左侧通行还是右侧通行,总的控制方式还是不变的。截止到目前,世界上现实使用中的控制城市交通信号灯的系统最具有代表性使用最多的有SCOOT交通控制系统和SCATS控制系统。前者在英国被广泛使用,后者在澳大利亚使用比较多。SCATS系统使用的控制结构是分层递阶式的。其控制中心由两台电脑设备构成,一台是监控计算机另一台是管理计算机。两台计算机通过串行通信技术连接。某一地区各个路口的信息连续的被监控计算机监控,监控计算机将监控得来的数据持续不断的发给管理计算机,然后管理计算机根据各路口的车流量信息来实时的控制各个交通路口的信号灯。这种系统充分发挥了计算机处理数据大的优势,也体现出了网络技术的重要性。其特点是结构可以根据情况改变,对信息的实时响应高,控制方案灵活。SCOOT系统不同与SCATS系统,其广泛应用与英国的街头。该系统可以根据车辆检测装置对不同位置的车流量进行实时跟踪,然后由电脑将这些数据传给一个交通模型,通过一个预先设置的算法输入各地的车辆实时信息,可以给出一个最优的交通信号灯的配置。国内在城市交通灯这方面研究和应用的起步都比较晚。在这方面我国主要采取的策略是引进新技术然后消化吸收,最后建立了一套自己的城市交通灯模拟与控制系统。

1.3 基于单片机的城市交通灯模拟与控制系统简介

单片机控制的城市交通灯模拟与控制系统是指由单片机作为控制系统的交通信号灯模型。它可以真实的模拟现实生活中的城市交通灯。单片机是用来完成特定控制任务的一种电路集成芯片,也可以称其为微型计算机,由输入输出端口、控制器、存储器和运算器构成。单片机的种类非常多,常见的有STC单片机,STC单片机是新一代增强型单片机,它是在8051内核的基础上发展起来的,具有和51单片机完全兼容的特性,其ID号全球唯一,具有抗干扰能力强,加密性好的有点。PIC单片机是MICROCHIP公司生产的,具有功耗低,体积小,可靠性强等优点。EMC单片机生产于台湾义隆公司,优点是价格便宜,缺点是抗干扰能力差。ATMEL单片机是ATMEL公司的产品,它具有高集成度,低成本,低功耗的特点,满足多方面的设计工程的需要。在现实生活中使用最广泛,学习资料最全面的是atmel公司的51系列单片机。它具有价格便宜,体积小,容易学

4

第1章 绪论

习等特点,被广泛用于工业设备,同时也倍受初学者的喜欢。配合晶振、电源、复位电路以及串口输入设备可以构成单片机最小系统。本系统就是由STC89C52单片机构成的单片机最小系统来完成系统的控制部分。根据实际的交通灯用发光二极管代替交通信号灯,用数码管来代替倒计时装置,将其焊接在一块电路板上。然后根据预先的设计思路画出电路图,通过导线与单片机最小系统连接。然后再根据设计的硬件系统来编写相应的

软件程序,最后通过串口装置将程序下载给单片机。通过系统联调即可实现对交通灯的模拟。

1.4 本文主要工作

分析比较了多种设计方案,最后确定了采用STC89C52单片机作为控制部分的设计

方案。根据STC89C52单片机的工作原理以及课题要求,设计了硬件部分。硬件部分设计主要是根据实际的器件功能及引脚画出电路图,然后根据电路图在面包板上搭建电路。最后的硬件模块分为:STC89C52单片机最小系统模块,按键电路模块,数码管显示电路模块以及发光二极管电路模块。根据硬件设计编写了相应软件模块。软件模块主要包括:系统初始化模块,开机LOGO模块,数据处理模块,按键扫描模块,数码管显示模块,二极管点亮模块。设计好软硬件模块之后,要对其进行调试。首先是软硬件分模块调试,先将一个软件模块下载给单片机,然后针对该模块的软硬件进行调试,记录调试中出现的问题并修改软硬件模块,在对剩余的模块分别调试。其次是系统联调,系统联通是在确保各软硬件模块无误的情况下,将系统软件模块拼接在一起,硬件模块拼接在一起,进行整体调试,记录出现的错误并修改,直至系统能正常工作。

5

第2章 系统总体设计

2.1 总体设计

城市交通灯模拟与控制系统具有如下功能:

(1)能够真实的模拟再现现实的交通控制情景; (2)通过按键可以改变系统的工作模式;

(3)通过按键可以改变各路口的通行时间,当通行时间不合逻辑时,能提示管理者;

(4)二极管可以配合数码管工作,来正确显示各种通行状态; 2.1.1 交通灯总框图

所需设备:AT89C52单片机芯片一块,74HC573锁存器六片,共阳极两位数码管LG5621CH四块,发光二极管红、黄、绿各16个,常开按键开关4个,PL2303串口装置一块。系统框图如图2.1所示:

按键单片机最小系统电脑串口装置锁存器数码管显示二极管发光 图2.1 系统总框图

6

电容式智能液位测量仪设计

2.1.2系统工作原理

(1)在电脑上用C语言编写相应程序;

(2)通过串口装置将程序下载给STC89C52单片机搭建的最小系统; (3)最小系统的输出接口接上74HC573锁存器,将输出信号锁存在锁存器中; (4)锁存器将电压保持在有效电平,并且传递给数码管以点亮数码管显示数据,传递给发光二极管以点亮发光二极管显示通行状态,正常工作时候程序会进入大循环中,所以红绿灯会周而复始的被点亮,熄灭,从而来模拟实际的交通灯。

2.2 交通规则设计

本系统为多车道城市交通灯模拟与控制系统,是用不同颜色的发光二极管与数码管配合来控制东、西、南、北四个方向的车辆以及行人的通行。在这里规定西侧干道为路口1,北侧干道为路口2,东侧干道为路口3,南侧干道为路口4,。各干道又分为左、中、右双车道,然后干道口停止线后为斑马线,即为该路口的人行道。每个路口有十二个发光二极管来说明该路口为通行状态,或者等待状态。其中红色发光二极管代表禁止通行,黄色发光二极管代表等一等,绿色发光二极管代表可以通行。每个路口有一个数码管,数码管可以用来显示该路口直行以及左转通行或者等待时间。实际的交通规则模拟图如下,即如图2.2所示:

7

图2.2 交通模拟图

1S表示路口1直行, 1L表示路口1左转弯, 1R表示路口1右转弯, 1P表示路口1人行道; 2S表示路口2直行, 2L表示路口2左转弯, 2R表示路口2右转弯, 2P表示路口2人行道; 3S表示路口3直行, 3L表示路口3左转弯, 3R表示路口3右转弯,

8

电容式智能液位测量仪设计

3P表示路口三人行道; 4S表示路口4直行, 4L表示路口4左转弯, 4R表示路口4右转弯, 4P表示路口4人行道。

结合图2.1,有现实交通规则通行状态(绿灯)按如图2.3:

图2.3 通行顺序图

2.3 单片机STC89C52

2.3.1 单片机STC89C52的内部结构

STC89C52是STC公司生产的一种功耗低性能高的微型控制器,flash存储空间为8k,其内核为MCS-51。由于STC公司针对该种芯片做了很多改进,所以虽然该芯片用的仍然是经典的MCS-51内核,但是它具有了很多传统51单片机所没有的功能。由于该种单片机的CPU为8位,而且拥有系统可编程的Flash,RAM存储空间为512字节,输入/输出接口有32个,拥有内置4K字节的EEPROM,拥有16位计数器/定时器3个,还有四个外部中断,全双工串行口。强大的功能,低廉的价格,可靠的性能使其使用范围极为广泛。简单的说,单片机STC89C52包括程序存储器(ROM)、中央处理器、数据存储器(RAM)、定时/计数器、串行接口、并行接口和中断系统等几个部分。其三大总线是由地址总线、控制总线、数据总线构成。(1)中央处理器

单片机的核心器件即为中央处理器,也就是CPU,它是一个能处理8位二进制代码或者数据的处理器。中央处理器的主要任务的控制、调度和指挥系统单元的工作,使系统更加协调的工作,它能完成一些相应的运算而且具有输入输出的功能。 (2)存储器

存储器可以分为两大类,一类是程序存储器用来存放常数和固定的程序,简称ROM;一类是数据存储器用来存放可能变动的随机数据,简称RAM。STC89C52有512字节的数据存储

9

器。

(3) 定时/计数器

单片机正常工作时不仅要完成运算工作,而且还要完成控制工作,这就使得单片机的在正常工作时离不开定时和计数。STC89C52有3个16位的计数器/定时器。 (4)输入/输出接口

STC89C52有32个输入/输出(I/O)接口,分为4组,每组8个。它可以用来与外界进行并行的数据传输。 (5)中断系统

STC89C52拥有外部中断、定时器中断、计数器中断和串口中断等几种中断形式。各种中断都有其特定的用途,以满足不同系统的设计要求。 2.2.2 单片机STC89C52的外部引脚

STC89C52有40个外部引脚,在这40个外部引脚中,有8个为一组的输入输出引脚4组,正电源引脚1个,地线引脚1个,外部振荡器的时钟引脚2个,控制引脚3个,复位线路引脚一个。

10

电容式智能液位测量仪设计

(1)电源和地线引脚各1个

Vcc:电源正极引脚,序号为40,接电源正极,5V电压(可小幅度波动)。 Vss:电源负极引脚,序号为20,接电源负极。 (2)时钟引脚

XTAL1:XTAL1时钟引脚,序号为19,接片内震荡电路的输入端。 XTAL2:XTAL2时钟引脚,序号为18,接片内震荡电路的输出端。 时钟电路在STC89C52单片机中具有非常重要的作用。像人的心脏一样,心脏只有不停的跳动,人才能完成相应的动作。时钟电路能给单片机提供统一的时间脉冲,STC89C52的各种功能的实现,数据的处理与运算,系统的控制都需要在一个统一的脉冲之下才能顺利的进行。单片机有两种产生时钟的方式。一种方式是片内时钟震荡方式,另一种是片外时钟震荡方式。前者需要将18引脚和19引脚接震荡电容和石英晶体,后者是直接将外部脉冲信号输送给单片机,即直接连接19引脚和外部脉冲信号发生器同时将18引脚悬空。

(3)复位引脚

RST:复位信号引脚,序号为9.

复位电路能够使系统复位,也就是如果复位信号起作用后,程序将会从程序存储器的0000H单元重新开始运行,同时将一些专业寄存器的值变为复位状态值。在单片机正常运行时,只有在序号为9的引脚上出现2个或2个以上的连续时钟周期的有效电平才能使单片机进入复位状态。复位电路设计将在下一章有专门介绍。

(4)控制引脚

PSEN:对外部程序存储器进行读取的选通信号引脚,序号为29.当该引脚为负电平脉冲信号时,系统开始读取外部程序存储器中的程序。

ALE/PROG:地址锁存允许信号引脚,序号为30.在访问外部存储器的时候,P0扩展的地址低8位地址信号由ALE来锁存;当系统不访问外部存储器数据的时候,ALE引脚会输出固定的脉冲频率(时钟震荡频率的六分之一),该脉冲可以用于定时器或者其它方面。此外,在编写程序时,该引脚还可以用在输入编程脉冲,是一个复用引脚。

11

EA/Vpp:内外程序存储器选择控制引脚,序号为31.在该引脚接低电平的时候,STC89C52取指令的位置是外部程序存储器;在该引脚接高电平的时候,STC89C52取指令的位置是内部程序存储器,只有当程序的长度超过了一定值(Flash ROM的容量)时,单片机就会开始取外部程序存储器中的指令。

(5)输入/输出(I/O)引脚。

1) P0口有P0.0到P0.7八个引脚,序号为39到32。 P0口是一个的双向的漏极开路的8位I/O口,为使其正常工作,需要接上拉电阻。每个引脚都可以单独的作为输入或者输出引脚,然是当作为输入引脚时,应先将要使用的引脚置1.P0口的第二个功能就是作为地址/数据总线。当P0口作为地址引线时,它的八个端口输出的是一个8位地址;当P0口作为数据总线时,它的八个端口可以输入一个8位数据。

2) P1口有P0.0到P0.7八个引脚,序号为1到8。P1组引脚由于已经内置了上拉电阻,所以正常工作时不需要外接上拉电阻。它的八个端口也可以单独的作为输入输出接口使用,在作为输入接口时,要先将其置1。另外P1.0和P1.1具有第二功能,前者可以作为定时/计数器2的外部输入,后者可以作为定时/计数器2捕获/重载触发信号和方向控制引脚。

3)P2口有P2.0到P2.7八个引脚,序号为21到28.P2组引脚也已经内置了上拉电阻,所以正常工作时不需要外接上拉电阻。它的八个端口可以单独的作为输入输出端口,在作为输入端口时,要先将其置1.另外P2口具有第二功能,当访问外部存储器的时候,地址的高8位是由该口送出的。

4)P3口有P3.0到P3.7八个引脚,序号为10到17.该端口已经内置上拉电阻,正常工作时不需要外加上拉电阻。它的八个端口可以单独作为输入输出端口工作,但是作为输入接口时,要先将其置1.另外P3口还具有如表2.4所示的第2功能。

表2.1 P3口引脚第二功能

2.3.2 锁存器74HC573简介

锁存器的种类繁多,但所要完成的任务大致都是一样的,即都是为了使数据

12

电容式智能液位测量仪设计

得以保持。在有锁存器的情况下,可以解决慢速的外部设备和快速的控制器不同步的问题。如果给锁存器通入合适的控制电压,锁存器还能解决驱动问题,这时就省去了驱动装置,可以简化系统结构,使系统功能更容易实现。它也能解决一个输入输出接口既可以作为输出端口又可以作为输入端口的问题。在有锁存信号时,输入的状态才能被保持下来,一旦该信号改变后,数据就不能被保持下来。锁存信号只有两个值1和0。典型锁存器的逻辑电路是D触发器。由若干个D触发器所构成的单次可以保持多位二进制数的时序逻辑电路称为锁存器。74HC573一次能锁存8位二进制数据,属于8位锁存器。

74HC573的主要应用场合。在一些运算电路中,锁存器可以作为暂存器使用。锁存器之所以称为锁存器,是因为其输出端的输出信号可以被保存即输出信号可以保持不变,只有在锁存信号改变时新的数据才能被输出,直到下一次锁存信号到来之前输出信号都会保持在前一个数据。在某些电路中,锁存器可以和单片机的输出接口连接起来,在这种电路中锁存器可以连接外电路,从而实现单片机对外部电路的分时控制,若锁存器连在多位数码管上,即可实现数码管的动态扫描。如果外部线路不太复杂,外部设备不多且所需功率不高时,可以省去锁存器直接将外设连接控制装置如单片机。74HC573有20个引脚,其引脚图2.5,使用逻辑图如图2.4 。

图2.4 74HC573引脚 表2.2 使用逻辑表

2.4 程序编写语言

STC89C52单片机是城市交通灯模拟与控制系统的核心,数码管的数字显示,

二极管的正确发光,通信装置的正确通信,都依赖于单片机。而单片机能正常工作的必要前提是单片机内要有正确的程序。所以选择合适的语言给单片机编程显得尤为重要。

目前来说,单片机主要语言有汇编语言,BASIC语言,C语言等。这些语言各有优缺点。汇编语言是面向机器的程序设计语言。工作人员所编写的汇编语言并不能被机器直接识别,必须经过一个程序将其翻译成机器所认识的语言。汇编语言具有容易读写,容易调试和容易修改的优点,但是汇编语言也有明显的局限

13

性,例如汇编语言必须依赖具体的机器型号,通用性差。C语言是一种结构化语言。它具有书写层次清晰,易于模块化编写组织程序,易于维护和调试等优点。C语言的处理能力和表现能力极强,它不仅可以直接对指定内存物理地址的数据进行相应位操作,它还具有丰富的数据类型和运算符,可以方便的实现各类数据的运算。由于C语言是一种集低级语言与高级语言为一体的工程开发语言,它可移植性好,效率高,非常适用于单片机的开发与编程。STC89C52采用C语言有以下好处。

(1)使用灵活、方便,语言简单。

C语言是现有程序设计语言中规模最小的语言之一,其关键词少,ANSI C标准一共只有32个关键字,9种控制语句,压缩了一切不必要的成分。C语言的书写形式比较自由,表达方法简单,使用一些简单的方法就可以构造出相当复杂的数据类型和程序结构。同时,当前几乎所有单片机都有相应的C语言级别的仿真调试系统,调试十分方便。 (2)代码编译效率极高。

当前,较好的C语言编译系统编译出来的代码效率只比直接使用汇编语言低20%左右,如果使用优化编译选项甚至可以更低。况且,随着单片机计数的发展,ROM空间不断提高,51系列单片机中,片上ROM空间做到32KB、64KB的比比皆是,代码所差的百分之二十已经不再是一个十分严重的问题。 (3)无需深入理解单片机的内部结构

采用汇编语言进行编程时,编程者必须对单片机的内部结构及寄存器的使用方法十分清楚。在编程时,一般还要进行RAM分配,稍不小心,就会发生变量地址的重复和冲突。采用C语言进行设计,则不必对单片机硬件结构有深入的了解,编译器可以自动完成变量存储单元的分配,编程者可以专注于应用软件的部分设计,大大加快了软件的开发速度。 (4)可以模块化开发

C语言以函数作为程序设计的基本单元,其程序中的函数相当于汇编语言中的子程序。各种C语言编译器都会提供一个函数库,此外,C语言还具有自定义函数的功能。用户可以根据自己的需要编制满足某种特殊需要的自定义函数(程序模块),这些程序模块可不经修改,直接被其他项目所用。因此,采用C语言编程,可以最大程度的实现资源共享。 (5)可移植性好

14

电容式智能液位测量仪设计

对于汇编语言而言,即使是功能完全相同的一段程序,对于不同的单片机,必须采用不同的汇编语言来编写。这时因为汇编语言完全依赖于单片机硬件。C语言是通过编译来得到可执行代码的,本身不依赖机器硬件系统,用C语言编写的程序基本上不用修改或者进行简单的修改,既可方便的一直到另一种结构类型的单片机上。

C语言具有直接访问单片机物理地址的能力,可以直接访问片内或者片外存储器,还可以进行各种操作。

总之,用C语言进行单片机程序设计师单片机开发与应用的必然趋势,我们一旦学会使用C语言之后,就会对它爱不释手,尤其是进行大型单片机应用程序开发,C语言几乎是唯一的选择。 2.5 PL2303简介

STC89C52型号的单片机和编写程序的计算机允许通过串口装置来进行通信。所谓串口通信是指计算机和外部设备之间,通过控制线、信号线、地线按位来进行数据输送的数据交换方式。此通信方式具有使用数据线少,节省成本,便于远距离传输数据,缺点是传输速度低。在本系统设计中采用的是PL2303串口转换装置,其功能是实现计算机与单片机的串口通信。图2.5所示为PL2303串口转换装置。

图2.5 PL2303串口转换装置

2.5 本章小结

本章系统的介绍了城市交通灯模拟与控制系统的组成及需要的器件以及对编程语言的选择等等。主要介绍的是STC89C52单片机的内部结构以及外部引脚的功能。对锁存器72HC573的介绍主要是其功能,外部引脚以及使用逻辑。该章对为什么选用C语言作为编程语言做了详细的介绍。对PL2303串口转换装置主要介绍的是其使用方法和功能。

第3章 系统硬件电路设计

3.1 系统硬件电路设计简介

系统的硬件电路模块包括:单片机最小系统模块,按键模块,数码管模块和

发光二极管模块。其中单片机最小系统模块又具体细分为复位电路子模块和晶振电路子模块。这些电路模块均是根据自身所要完成的功能以及彼此之间的联系方式所设计的。单片机最小系统模块就是为了完成程序下达的指令,给后续电路提

15

+5V按键模块式为了根据不同的情况设置不同的状态使系统更加供相应的电平信号,40协调的工作,数码管模块式就是为了显示所需要显示的数据,二极管模块可以根Vcc3130pF19据指令完成相应二极管的点亮与熄灭。整个系统的硬件能够完成城市交通灯模拟与控制系统的硬件要求。 C1XTAL1Y130pF3.2 STC89C52单片机最小系统电路 18EAXTAL2C2 能让单片机正常工作所需要连接最少器件的电路称为单片机最小系统电路。STC89C52单片机能够正常工作所必须的外部电路有,5V电源电路,由晶振、电

+5V容、电阻组成的单片机时钟电路、由电阻和常开开关组成的单片机复位电路。 复位3.2.1 STC89C52单片机最小系统简介 C310μF9 STC89C52单片机最小系统是指以RSTSTC89C52单片机为核心,连接复位电按键路,时钟电路,和电源电路,能按照已经下载的程序指令正常工作的单片机最小R110KΩ系统。其原理结构图如图3.1所示。 20VssSTC89C52

图3.1 STC89C52最小系统

3.2.2 复位电路设计

单片机的初始化操作即为复位,复位的主要功能是使控制装置从头也就是0000H单元重新读取并执行程序,这个过程相当于电脑的重启。除了在系统正常工作的时候可以使用,当程序运行出现错误或者由于操作上的原因导致系统不能正常工作,例如程序跑飞或者程序停走,这时候都可以用复位来使系统恢复零初始状态。STC89C52单片机的复位电路如图3.2所示。

图3.2 复位电路图

STC89C52的第RST引脚是复位引脚,即第9引脚是复位引脚,复位信号从该引脚输入。复位信号时高电平有效,只有当RST引脚即第9引脚处于高电平的时间连续超过两个机器周期也就是24个脉冲振荡周期之后,才能使系统复位。正常情况下,为了能够保证系统复位,复位电路的设计应该能使RST引脚保持至少0.01S的高电平。在STC89C52单片机的第9引脚一直处与高电平状态时,系统就会一直处于复位状态。当RST引脚的高电平信号消失时,STC89C52会推出复位状态,重新读取程序存储器的0000H的数据,即从头执行程序。

复位操作有两种方式,一种是上电复位,一种是手动复位。

16

电容式智能液位测量仪设计

由图2.9知道,此复位电路所用电的电阻式10KΩ,所用到的电容式10μF。根据计算公式可以计数得出电容在充电过程中电压升至电源电压的百分之七十(STC89C52单片机的电源供电电压时5V,通过计算可得出此时电容的充电电压为3.5V),所需要的时间为0.1S。这就是说在单片机从刚开始供电到供电到0.1

10μF*10kΩ=0.1S

这个过程中,电容两侧电压从0V逐渐升至3.5V,由于电容两侧的电压值和电阻两侧的电压值之和等于5V,所以在这个过程中电阻两侧的电压从5V逐渐降至1.5V。对于STC89C52型号单片机来说,其判断各端口是高电平还是低电平的标准是:该引脚目前的电压值是否大于1.5V。结合上面的计算可以得出,在单片机的开机上电过程,STC89C52的第九引脚相当于接受了一个时常0.1秒的高电平,这个时间足以使单片机进入复位状态,这就是所谓的上电复位。简单的说上电复位就是在系统加电的过程中,复位电路通过电容的特性,给第9引脚加了一个时长为0.1秒的高电平信号,使系统复位。RST端的高电平时间是由电容大小决定的,这时因为电容的大小决定了充放电时间,电容越大充放电时间越短,电容越小充放电时间约长。

手动复位需要人为在复位输入端RST上加入一个高电平。一般采用的办法是在RST端和正电源Vcc之间加一个常开的复位开关,当按下该按钮时,电阻的电压会瞬间升至+5V,此时RST引脚的电压为+5V,保持一段时间搞电平即可完成复位。由于是人在按复位按钮开关,所以即使按下按钮的动作很快,也会使按钮保持接通时间超过10mS30pF,即能够满足复位动作的时间要求。

3.2.3 晶振电路设计

C1Y119XTAL1 晶振电路又叫时钟电路,其功能是产生时钟信号,STC89C52型号单片机就30pF18XTAL2其本质来说,可以称其为一个相对比较复杂的时序同步的电路,为了保证单片机C2能够正常工作,STC89C52单片机最小系统必不可少的要有时钟电路,即晶振电路。晶振电流如图3.3所示。

图3.3 晶振电路图

在STC89C52单片机内部有一个输入端与单片机引脚XTAL1相连接的高增益反相放大器,其输出引脚与XTAL2相连接。单片机的外部通过这两个引脚外界

STC89C5217

一个晶振还有两个对称电容,形成一个闭合回路,这个闭合回路就称为自己振荡器也就是晶振电路。在这个电路中对电容的要求不是太苛刻,正常情况下,如果选用的晶振为高质的晶振,那么无论所选用晶振的频率为多少,一般都会选用大小为30pF的一对电容。针对于正常的单片机最小系统来说,选用晶振的频率越高,系统程序运行越快,消耗功率也就随之越大。针对于城市交通灯模拟与控制系统,所选用的STC89C52单片机最小系统晶振频率为11.0592MHz。

在本系统中采用的晶振为石英晶体振荡器。所谓石英晶体振荡器是指具有高稳定性和高精度的一种振荡器,它的使用范围非常广泛小到计算机、遥控器大到火车、轮船都离不开这种晶体振荡器。在通信系统中它所起主要是频率发生器的作为,在数据处理设备中它主要起的是为设备产生时钟信号和基准信号的作用。石英晶振是一种谐振器件,它是利用二氧化硅结晶体即石英晶体的压电效应制成的。它的制作制作过程并不复杂,简单的说就是从一块二氧化硅晶体上按照一定的规则切下来一个薄片,此薄片又称晶片,可以是矩形,圆形,正方形等,然后在它的两个对立面镀上一层银,然后再分别接一根导线,封装加上外壳即可。

本系统中所使用的晶振如图3.4所示。

图3.4 石英晶振

3.23 单片机的工作电源 STC89C52单片机的第20引脚要接地,第40引脚要接5V电压,这样单片机才P0.0k1能正常工作。STC89C52单片机内部有存储程序的存储器,所以,要使其正常工作还应使单片机的第31引脚接k25V电源。 3.3 按键电路设计

STC89C52P0.1P0.2单片k3机 本系统是城市交通灯模拟与控制系统,系统设计要求能够实现时间调节和P0.3模式转换。时间调节和模式转换就需要用到按键电路的介入,因此在本系统中根k4据设计要求设计了有四个按键的按键电路。具体电路图如图3.5所示。

图3.5按键电路原理图

由图2.12以看出P0.0接的是k1,P0.1接的是k2,P0.2接的是k3,P0.3接的是k4。要实现时间调节,就必须有一个时间加按键和一个时间减按键,在本系统中所设计的k1为时间加按键,每按一次k1,时间会加1秒,设计的时间减按键式k2,每按一次k2,时间会减1秒。进入时间调节的按键式k3,当系统正常工作时,程

18

电容式智能液位测量仪设计

序没运行一次都会扫描一次k3,如果k3被按下会进入时间调节状态。按一次切换一个路口,按路口1,路口2,路口3,路口4进行切换。工作模式切换按键为k4,本系统设计了夜间模式,紧急情况模式。夜间模式是根据实际的交通情况,一般夜间车流量比较少,可以没有红绿灯,全黄灯对驾驶员进行路口提醒即可,按一下k4按键系统便可自动进入夜间模式状态。紧急情况状态为,如果出现大雾,或者发生突发事件情况,需要将路口封闭时,可以让交通灯工作在全红状态,以此告诉司机此时为紧急情况,要停车,紧急情况模式是在夜间模式的基础上再按一下k4键即可调节成紧急模式。再按一下k4键即可跳出紧急模式工作在正常红绿灯倒计时状态。 3.4 数码管显示电路设计

数码管显示电路模块为城市交通灯模拟与控制系统的一个核心硬件模块。数码管在该系统中起的是时间指示的作用。它可以显示两类数据,第一种是正常的倒计时剩余时间,还有就是在调节时间的时候可以显示出该路口的绿灯通行时间。和真实的城市交通灯数据显示装置相比,城市交通灯模拟与控制系统的数码管显示装置只是在大小上不及真实的大,但是功能都是一样的。 3.4.1 数码管选定

agfebc 本系统采用的LED数码管是共阴极的双位显示数码管。LED是发光二极管的简称,其PN结是用某些特殊的半导体材料(如磷砷化镓)做成的。当外加正向电压时,可以将电能转换成光能,从而发出清晰悦目的光线。如果将多个LED管排列好并封装在一起,就成为LED数码管。本系统所使用的LED数码管结构示意图如图3.6所示。

hd图3.6 数码管结构示意图

由图可以看出,LED数码管内部只有8个发光二极管a,b,c,d,e,f,g,h。它们是发光二极管的段位。除了h被做成了圆形,其它的7个发光二极管都是条形的,被做成了上图所示的形状用来显示数据。每个发光二极管都有一根电极引导外部引脚上,而另外的一根电极全部连接在一起,引到外引脚,称为公共端(COM)。LED数码管分为共阴极和共阳极两种,共阳极就是把LED数码管的各个发光二极管的阳极都连接在一起,从COM端引出,阴极分别从其他8根引脚引出。使用时,公共极接+5V电压,这样,阴极端输入低电平的发光二极管就会被导通点亮,而输入高电平的数码管则不会点亮。共阴极LED数码管是把各

19

a

bcdefgh个发光二极管的阴极都连载一起,从COM端引出,阳极分别从其他8根引脚引出,使用时,公共阴极接地,这样,阳极端输入高电平的发光二极管就导通点亮,而输入低电平的段则不能点亮。本系统中使用的数码管原理如图3.7所示。

COM(接地)

图3.7 共阴极数码管原理图

在本系统中使用的数码管为。。。。。。。双位共阴极数码管。如图3.8所示:

图3.8 双位共阴极数码管

3.4.2 显示模块设计

在本系统中由于在数字显示部分所选用的是双位共阴极数码管,根据实际情12345678十个况,有四个路口需要显示数字,故需要四组这样的数码管,分别用来显示路口1,

abcdefgh74HC573路口2,路口3,路口4四个路口的通行或者禁止通行剩余时间。由于本系统采用的是动态扫描的方式显示数据,74HC573程序运行一次要点亮数码管和代表红绿灯的二极管,故系统每次运行一次程序所能点亮数码管的时间会非常短,通常使用的方法1234567874HC573a1abcdfgh是减小电阻的阻值使通过数码管的电流变大,但是一味的增大数码管的通电电流12345678b1c1十个会烧坏数码管。由于本系统所采用的是一片STC89C52单片机,它共有40个引脚,d1abcdefghp0e1其中输入/输出即十个 f1I/O引脚共有32个。其中有四个引脚用来检测键盘按钮,还剩g128个引脚,要用这剩余的28个引脚来控制4个双位共阳极数码管和48个灯泡,用h1以往简单的动态扫描是很难做到的。考虑到这个问题,在设计数码管动态扫描的电路中使用了6个74HC573锁存器。分别为1号锁存器,2号锁存器,3号锁存器,4号锁存器,5号锁存器和6号锁存器。这些锁存器公用一个输入端口P1,这样就大大减少了端口的使用量。但是要是一个输入输出端口给6个锁存器输送数据,

十个会使他们的间隔时间增大,即会出现数码管闪亮的情况,为此显示模块采用了一defgh5号锁存器和6号锁存器。1号锁存ab4c次送4个数据的段码给3号锁存器,号锁存器,器为位选锁存器,用来选通所需显示的数位。电路原理图如图3.9所示。

74HC57312345678

图3.9 数码管模块原理图

3.5 发光二极管电路设计

发光二极管在本系统中担任着相当重要的角色,红黄绿灯的交替点亮代表着该车道或者人行道的禁止通行,等待,可以通行的含义。由于本系统只采用了

20

电容式智能液位测量仪设计

一个STC89C52单片机,本着尽量减少元器件使用量的原则,结合已经设计出来的数码管显示电路。设计出了一个适合与本系统的发光二极管显示电路。由于城市交通灯模拟与控制系统的数码管个数为4个双位数码管,发光二极管的个数为48个,其中红色二极管16个,黄色二极管16个,绿色二极管16个。每个路口有12个二极管用来显示通行状态。每个路口最左侧有二极管用来表示左转向的通行状态,从左往右第二组的三个二极管用来表示该路口直行状态,从左往右第三组的三个二极管用来表示该路口右转通行状态,最右侧的一个三个二极管用来表示该路口人行道的通行状态。最简单的控制方式是一个输入/输出端口控制一个二极管,但是在本系统中若采用一个一个输入/输出端口控制一个二极管的连接方式的话,单片机的端口显然是不够用的。结合数码管显示电路的段选位选思路,可以将发光二极管也当做数码管,对其进行段编排,位编排。这样就可以将二极管看做事没有封装在一起的数码管,从而可以对发光二极管进行如数码管显示装置一样的动态扫描。在本系统中将路口1的所有红色发光二极管和黄色发光二极管的阴极连接在一起,并对其进行编排。将路口1的绿色发光二极管和路口2的红色发光二极管的阴极连接在一起,并对其阳极进行编排。将路口2的黄色发光二极管和绿色发光二极管的阴极连接在一起,并对其阳极进行编排。将路口3的红色和黄色发光二极管的阴极连接在一起,并对其阳极进行编排。将路口3的绿色发光二极管和路口4的红色发光二极管的阴极连接在一起,并对其阳极进行编排。将路口4的黄色和绿色发光二极管的阴极连接在一起,并对其阳极进行编排。这样连接电路的结果是,发光二极管和数码管的控制方式一样了,可以对其进行相应的段选和位选,从而可以用动态扫描的方式实现对其的控制了。

所谓动态扫描就是利用人眼的视觉暂留消音,让数码管轮换着点亮,如果点亮的频率很低,人眼可以很明显的分辨出来显示的动态过程,如果按顺序点亮的频率很高,人眼就很难看出哪个在点亮哪个在熄灭,这就给观察者造成了一个错觉,所有的数码管都在同时点亮着。动态扫描的优点是可以极大的减少I/O的使用,缺点的会造成数码管显示变暗。由于本系统中对发光二极管进行了同样的编码,所以发光二极管也可以用动态扫描的办法点亮,亮度同样也会降低,频率高的话同样也会给观察者带来都被点亮的错觉。设计该电路用到的I/O口也是P0口,用到的锁存器是2号锁存器,3号锁存器,4号锁存器和5号锁存器。其中2号锁存器是用来进行给编码好的二极管进行位选的,另外三个锁存器是给编码好的二极管进行段选的。

21

由于采用的是动态扫描的方式,又由于在相同电压下所用的红、绿、黄颜色发光二极管的亮度本身不同,为使三种颜色发光二极管的亮度均能满足要求,需要根据系统设计好部分的电路以及所设计的程序选用合适的电阻。最终选定的电阻组合为红色二极管接1000Ω电阻,黄色二极管接33Ω电阻,绿色二极管接100Ω电阻。 3.6 本章小结

本章主要介绍的是系统的硬件部分。首先介绍了系统硬件整体设计思想,然后分别介绍了各个子模块的电路设计。针对对各子模块重点介绍了STC89C52单片机最小系统设计,按键电路模块设计,数码管显示电路模块设计以及发光二极管电路模块的设计。

第4章系统软件程序设计

4.1 系统软件总体设计

上一章主要介绍的是系统的硬件设计,其中包括STC89C52单片机最小系统设计,按键电路模块设计,数码管显示电路模块设计以及发光二极管电路模块设计。上一章已经完全叙述了本系统所需要的各种硬件及其联接方式。在本章中将要完成另一个任务,系统软件设计。软件编程时实现系统功能的一个重要部分,没有合适的软件设计就不能完成相应的功能。这里主要介绍一个系统软件的总体设计。本系统的目的是实现城市交通灯的模拟与控制,在完成焊接与连线之后,可以通过查询相应I/O的分配情况编写合适的程序。本系统的程序编写主要包括:系统初始化模块,开机LOGO模块,数据处理模块,键盘扫描模块,数码管显示模块以及二极管点亮模块。根据要是实现的任务,本系统所应用的程序具有简单,易懂,方便修改,并且能够使发光二极管以及数码管的亮度合适。

本系统所设的软件程序主要包括了主程序,定时器程序,按键扫描程序,数据处理程序,数码管显示程序,二极管点亮程序。主程序给本系统软件程序提供一个基本的框架,很多系统的主程序都是类似的,即主程序的大概功能是相同的。主程序除了给城市交通的模拟与控制系统软件程序提供框架以外还能初始化系统数据,在本系统中初始化的是路口1,路口2,路口3,路口4的通行时间,即时间a,b,c,d的初始值,在本系统中路口1,路口2,路口3,路口4的通行时间初始值均设定为20,即a=20,b=20,c=20,d=20.定时器程序相当于系统的心脏,只有时间不停的往前走,才能与各个路口时间值进行比较,才能有比较结果,才有了改变时间以及发光二级管的点亮与熄灭的标准,本系统中使用的是定时器1.按键扫

22

电容式智能液位测量仪设计

描程序对于本系统来说也是必不可少的,只有了按键扫描程序才能对按键进行扫描,判断是哪个按键被按下去了,只有这样机器才能理解操作员的意图,并改变通行模式,或者是各路口通行时间。数据处理程序是用来处理数据的,就是主要

开始是将定时器的时间和按键扫描数据进行处理,只有处理之后,才能给数码管和二极管发出正确的信号,处理不当或者有误都会使系统工作在错误的方式,在本系

系统初始化统会造成数据错误,如果用在实际的交通路口则会造成交通事故,人员伤亡。数码管显示程序,用来显示需要显示的数据,指示出各路口的通行剩余时间或者等待剩余时间。二极管点亮程序,根据硬件连接所编写的二极管点亮程序可以使二Y是否有按键按下极管按照合理的顺序点亮,从而指示车辆和行人按照规则来行进。以上所述是各个小模块程序的功能简介。 按键程序N系统的工作流程:系统上电,单片机开始工作,首先进入初始化程序,给各数据处理程序个路口时间进行初始化,定时器开始工作,然后进行按键扫描,根据所按按键情数码管显示程序况进入按键扫描程序,如果没有按键,会执行数据处理程序,对相应数据进行处开始理之后即进入显示程序,显示程序分别点亮数码管和发光二极管,如此循环下去。程序流程图如图4.1所示 引脚分配二极管显示程序

图4.1 系统程序流程图 各路口通行时间设定4.2 系统初始化 系统初始化主要包括引脚分配,路口通行时间初始化和定时器设定等内容。系统初始化流程图如图4.2所示。 结束 定时器设定与打开图4.2 系统初始化流程图

(1)引脚分配。在本系统中STC89C52单片机的引脚P1引脚设定为传送所要显示的数据段码位码数据的。P0.0连接k1,P0.1连接k2,P0.2连接k3,P0.3连接k4。P2.0连接数码管位选锁存器锁存端,P2.1连接锁存器1锁存端,P2.2连接锁存器2锁存端,P2.3连接锁存器3锁存端,P2.4连接锁存器4锁存端,P2.5连接二极管模拟位选端。

(2)各路口通行时间初始化。

a=20; //路口1通行时间初始化为20秒 b=20; //路口2通行时间初始化为20秒 c=20; //路口3通行时间初始化为20秒

23

d=20; //路口4通行时间初始化为20秒 各路口的通行时间被初始化为20秒。

(3)定时器初始化及开启定时器。本系统中所使用的定时器是计数器/定时器1,工作在方式1,定时时间为1S。程序如下: EA=1; //允许开总中断 ET1=1; //允许开定时器1中断

TMOD=0x10; //定时器1工作在方式1工作状态 TH1=(65536-50000)/256; //给定时器1的高8位赋初值 TL1=(65536-50000)%6; //给定时器1的低8位赋初值 TR1=1; //开定时器1 以上程序的执行,即可完成定时器的初始化。 4.3 开机LOGO程序

设计本程序的有两个目的,第一是使为了美观,鉴于很多电子器件都有自点亮所有己的开机LOGO,本系统从美观上也设计了如此的一个开机标志。目的二在于它

二极管开始可以用于检查发光二极管是否可以正常工作,数码管是否正常工作,因为本开机LOGE

点亮所有是点亮所有的数码管和发光二极管,数码管所以如果有发光二极管没有被点亮或延时1秒结束者数码管没有显示数据,则说明控制那一路的电路有问题,或者连接那一路的数码管或发光二极管已经损坏。本系统所使用的开机LOGO流程图如图4.3所示:

图4.3 开机LOGO流程图

开机LOGO程序如下:

Void jiancha()

P1=0xff; //给锁存器送全高电平 P21=1; //开锁存器1 P21=0; //关锁存器1 P22=1; //开锁存器2 P22=0; //关锁存器2 P23=1; //开锁存器3 P23=0; //关锁存器3 P24=1; //开锁存器4 P24=0; //关锁存器4

24

NY15≤e<20?路口1直行等待电容式智能液位测量仪设计 NP1=0x00; //给锁存器送全低电平 Y路口2直行20≤e<35?P20=1; //开数码管位锁存器 P20=0; //关数码管位锁存器 NP25=1; //开二极管位锁存器 35≤e<40?P25=0; //关二极管位锁存器 delay(5000); //延时子程序调用 } 路口3直行Y40≤e<55?路口2直行等待 以上程序即可实现对所有数码管和发光二极管的点亮。可以用于对数码管和二极管的损坏检查。 4.4 数据处理函数 55≤e<60?Y路口3直行等待在本系统中所谓数据处理,一共包括两个部分。第一就是转向各个小的数的显示的判断条件处理函数,另一个就是将数据分开成个位、十位以用来将数据传递给数码管让其显示的数据处理。下面就来分别介绍各个模块的数据处理。 Y路口4直行60≤e<75?N(1)判断条件数据处理。在本系统中路口1的通行时间是a,路口2的通行时间是b,路口3的通行时间是c,路口4的通行时间是d,各个路口通行时间的初始值是20秒,以往的不具有时间调节功能的城市交通灯系统往往各路口通行时Y75≤e<80?路口4直行等待间相同。也就是说对其进行判断的标注就是看总的计数时间是否为单个路口通行N时间的倍数即可。如果各路口的通行时间为20秒,判断模块工作流程图如图4.4所示. e=0图4.4 判断模块工作流程图

程序语句如下:

if(e<15) { 路口1直行 } else if(e>=15&&e<20) { 路口1直行等待} else if(e>=20&&e<35) { 路口2直行} else if(e>=35&&e<40) { 路口2直行等待 } else if(e>=40&&e<55) 25

{ 路口3直行} else if(e>=55&&e<60) { 路口3直行等待} else if(e>=60&&e<75) { 路口4直行} else if(e>=75&&e<80) { 路口4直行等待}

以上程序是常用的各路口通行时间固定的程序,程序中的数据处理是第二种要介绍的数据处理,在本节中要介绍,首先还是先介绍第一种数据处理。这次的设计城市交通灯模拟与控制系统是4个路口通行时间可调的系统,程序设计不能用上面所说的,必须对数据进行处理。四个路口的通行时间分别为a,b,c,d。计时器时间累加为e。所以当e

26

A+b+c+d-5≤e

程序语句如下:

if(e

else if(e>=a-5&&e

else if(e>=a&&e

else if(e>=a+b-5&&e

else if(e>=a+b&&e=a+b+c-5&&e=a+b+c&&e=a+b+c+d-5&&e

时进入指定的按键程序,从而实现系统的正常工作。在前面硬件部分已经介绍了按键的硬件组成,这里简单描述一下,本系统中共有4个按键,分别为k1,k2,k3,k4,分别连接的是P0.0,P0.1,P0.2,P0.3.根据设计要求按键k1为路口时间加,即每按一次k1相应路口的绿灯通行会加1秒;按键k2为路口时间减,即每按一次k2相应路口的绿灯通行时间会减1秒;按键k3为路口切换按钮,即在时间调节模式下每按一次k3会改变时间调节的路口;按键k4为模式切换按钮,按一次k4系统会工作在禁止通行工作模式,再按一次k4会进入夜间模式,再按一次k4会进入时间调节模式,再按一次k4会进入正常工作模式。本系统中按键扫描程序一共设计了两个子程序,分别为 key3()和key4()。key4()子程序主要是用来切换模式的,key3子程序则是为了调节时间。

在介绍着两个子程序之前先介绍一些按键消抖。当工作人员按下任意一个按钮时,它的电平都有一个抖动时间,很短,但是单片机能够识别出来,并认为已经按了多次按钮,如此一来系统便不能正确按照操作者的意图工作,此时就需要设计按键消抖程序。按键消抖就是在确定按键按下之后停止一段时间再对系统进行扫描,然后再确定按钮已经松开之后,停止一段时间再对其进行扫描,停止时间很短。按键消抖流程图如图4.5所示:

图4.5 按键消抖流程图

针对本系统设计的按键消抖程序如下: if(ki==0) //按键ki被按下

{ delay(100); //延时一段时间

if(ki==0) //再对其进行扫描,如果ki确实被按下 { 语句1 //执行语句1 }

while(ki!=1); //如果ki按下程序会在此处等待,直到ki松开 delay(100); //延时一段时间 }

以上所述即为本系统所使用的按键消抖程序,下面介绍key3(),key4()子程序。

(1) 时间调节程序key3()设计,时间调节流程图如图4.7.时间调节程序用来调节各

路口的通行时间。由于4个路口的时间调节程序基本相同,在这里就简要介绍一

28

g=5?YNg=1电容式智能液位测量仪设计 任意三个路口通行时间 之和小于100?Y下路口1的时间调节程序。路口时间调节流程图如图4.6所示: 结束 图4.7 路口时间调节流程图

对一个路口时间调节程序如下:

void key3() { if(k3==0)

{ delay(100);

if(k3==0) //按键消抖

}

{ g++; //g初始值为0,g的改变可以用于进行路口选择判断} while(k3!=1);

delay(100); //键盘消抖 while(g==1)

{

数码管显示,二极管显示 if(k1==0) //检查k1是否被按下

{ delay(100);//延时程序调用 if(k1==0) ++a; //路口1通行时间加1秒 while(k1!=1); delay(100); //消抖 }

if(k2==0) //检查k2是否被按下 { delay(100); //延时子程序调用 if(k2==0) --a; //路口1通行时间减1秒 while(k2!=1); delay(100);//消抖 }

以上程序可以用来对路口1进行时间调节,其余路口时间调节方式与以上所述路口1的调节方式相同,不再敖述。 (2)模式切换子程序key4()设计。模式切换子程序的设计需要满足系统的要29

禁行模式

f=3?求,即切换模式,在这里只介绍一种模式的切换,别的模式与该种模式切换方式相同,可进行类比分析。下面介绍从正常工作状态入时间调节模式。

正常工作切换模式流程图如图4.8

图4.8 模式转换流程图

模式切换程序如下: void key4() { if(k4==0)

{ delay(100); //按键消抖 if(k4==0) { f++;

if(f==3) //f表示k4已经被按下的次数,若f为3时,要清零 f=0;} while(k4!=1);

delay(100); //按键消抖 }

while(f==1) //如果f=1,系统切换到禁行模式。 { 数码管显示语句,二极管发光语句} }

如上便是系统切换模式的整体设计思路,虽然只是一种模式的切换,但是各种模式的切换思路是一样的。

4.6 数码管显示程序

数码管显示程序是用来将所要显示的数据传递给数码管,使数码管正确显示数据的程序。本系统中数码管的显示用的是动态扫描方式,首先对四组双位数码管的十位进行位选,然后送四组十位段码,然后对数码管的四组个位进行位选,然后送四组个位段码。从而实现数码管对数据的显示。由于系统硬件采用的是共阴极数码管,所以其段码的0对应0xfe,1对应0x3f,2对应0x06,3对应0x5b,4对应0x4f,5对应0x66,6对应0x6d,7对应0x7d,8对应0x07,9对应0x7f,0对应0x6f。对段码进行编码有:

unsigned char code //段码定义duanma[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};//段码组4组数码

30

电容式智能液位测量仪设计

管先显示十位,后显示个位。十位和个位的显示原理是相同的,在这里只介绍城市交通的模拟与控制系统显示装置即数码管十位显示程序,程序如下: P1=TempData[0]; //将路口1的十位段码送给单片机的P1口 P21=1; //开锁存器3 P21=0; //关锁存器3

P1=TempData[2];//将路口2的十位段码送给单片机的P1口 P22=1; //开锁存器4 P22=0; //关锁存器4

P1=TempData[4];//将路口3的十位段码送给单片机的P1口 P23=1; //开锁存器5 P23=0; //关锁存器5

P1=TempData[6];//将路口4的十位段码送给单片机的P1口 P24=1; //开锁存器6 P24=0; //关锁存器6

P1=0xaa; //将四个路口的十位选通端设打开 P20=1; //开数码管的位锁存器 P20=0; //关锁存器 delay(10); //延时一段时间

以上程序即可完成对四组数码管十位的显示,四组数码管个位数据的显示与四组数码管十位显示方式相同,只是进行数据的切换。 4.7 二极管点亮程序

本系统中对按8个二极管一组的方式将其阴极连接在一起,一共有48个发光二极管,所以相当于一共有6个二极管组,每组8个二极管。将每两个发光二极管当成一个双位发光二极管组,这样可以将所有的发光二极管当成3组发光二极管组。可以按照数码管显示的方式对其进行点亮或熄灭。具体的细分工作已在本文中第三章的硬件部分介绍过了,这里不再敖述。在这里就具体讲一下二极管组十位等显示。在显示之前要对红绿灯进行编码具体编码如表4.1所示:

图4.3 二极管编码

对二极管进行分组以及编码之后就可以将其视为数码管,因为现在它们在显示过程已经没有任何区别,只是需要串联的电阻以及外观不同。故此时的显

31

示程序与数码管显示程序类似。下面来介绍二极管组十位显示程序,和数码管十位显示程序类似。二极管十位显示程序如下所示: P1=TempData[8];

//将二极管1组十位点亮段码送给单片机的P1口

P21=1; //开锁存器3 P21=0; //关锁存器3

P1=TempData[10]; //将二极管2组十位点亮段码送给单片机的P1口 P22=1; //开锁存器4 P22=0; //关锁存器4

P1=TempData[12]; //将二极管3组十位点亮段码送给单片机的P1口 P23=1; //开锁存器5 P23=0; //关锁存器5 P1=0xaa; //将二极管十位选通 P25=1; //开二极管位锁存器 P25=0; //关二极管位锁存器 delay(10); //延时一段时间

以上即为二极管组十位点亮程序,它能将二极管按动态扫描的方式将二极管组的十位数组点亮,一般的红绿灯都是采用静态方式显示,这里不但使用了动态方式显示,而且还给二极管进行了编组使其能按数码管的方式工作,能够节省单片机的引脚,完成系统任务要求。

4.8 延时子程序

延时子程序的功能为延时,正确使用延时子程序能使系统正常的工作。本系统使用的延时子程序如下所示: void delay(int ms)

{ uint j,k; //定义两个无符号整形数据 for(j=0;j

for(k=0;k<25;k++);//数据k从25开始自减,直到为0 }

以上即为延时子程序,该延时子程序的设计能够满足系统要求。

4.9 本章小结

本章主要介绍了系统的软件部分。首先介绍的是系统软件的总体设计思路,然后分模块对其进行设计、分析。设计的软件模块主要包括:系统初始化模块,

32

电容式智能液位测量仪设计

开机LOGO模块,数据处理模块,按键扫描模块,数码管显示模块,二极管点亮模块。

第5章系统软硬件调试

5.1 系统调试过程中的问题与注意事项

系统的硬件与软件设计好以后要对其进行联调,在调试的过程中遇到了很多问题,有硬件电路的问题还有软件程序的问题,在本系统的设计中相对于硬件电路遇到的问题来说,软件编程出现的问题更多一点。由于本系统是一块STC89C52单片机控制的,所以相对遇到的问题会多一点。在遇到问题与处理问题的过程当中,慢慢的学会了分块检查和画流程图的方式理解问题所在,总的来说本次实验所遇到的问题都得到了合理的解决,有些可能不是最优方式,但是最终结果还会比较满意的。在调试系统的过程中所遇到的硬件问题和软件问题将在本节中做出详细介绍。 5.1.1 硬件调试

本系统所设计的硬件电路实物如图5.1所示。

图5.1 硬件电路实物图

在本系统的硬件的设计中,首先先把必要的元器件,如双位共阴极数码管以及6个锁存器用焊锡焊在面包板上,然后根据所选择的数码管型号,确定出其a,b,c,d,e,f,g,h引脚,根据引脚在画图软件上设计出合理的电路图,在这

33

个过程中主要出现的是飞线问题和怎么合理布局的问题。刚开始没有用画图工具,只是手绘了一个数码管显示电路图,然后就开始焊接,导致的直接结果就是路口1数码管的飞线过多,有时候会出现接触不良或短路的情况,在路口2,路口3,路口4的数码管显示电路焊接中使用了画图工具,先画好原理图然后在根据原理图进行焊接,所以路口2,路口3,路口4的数码管显示模块飞线比较少,工作出错情况相对较少。

二极管的焊接也出现了几次错误,在这次毕设过程中,由于事先没有想好如何点亮二极管,只是为了进度盲目的将二极管按照顺序给焊接在了面包板上,导致的结果就是真正有了思路的时候,给二极管进行了数码管一样的编排,但是发现这时候画出来的电路图已经不能再面包板上进行焊接,除非全用飞线,为了解决这个问题,只好把所有的二极管全部用吸锡器拔出来,然后对其进行重新焊接。这样一来,不仅影响了面包办的美观,而且还造成后面的铜贴片掉了几个,使焊锡不容易与面包板接触。在硬件焊接过程中遇到焊锡与面包板不容易接触的时候,我主要采取的措施是换线路,或者是飞线。本系统的最小系统实物如图5.2所示:

图5.2 STC89C52最小系统

在焊接最小系统的时候主要也遇到了一些问题。焊STC89C52最小系统时,所用的焊锡丝比较粗,有与自己的动手能力相对比较弱,造成的结果是每一个焊锡线路都很粗,很接近,这样造成的后果就是有几路短路了,在解决这个问题的时候,首先采取的是机械方法,就是用平板螺丝刀在焊锡比较接近的位置反复打磨,直到两个焊锡电路不在连接。采用这种方法确实能够解决这个问题,但是会耗时费力,而且会使面包板遭到破坏,在看一些前辈焊接电路的视频之后,学会了用热的电烙铁在两条电路的中间走一遍,这样不仅能够解决上面所说的短路问题,而且还能清除两条电路之间的焊锡废渣,使电路工作更可靠。但是这对手法要求比较高,需要不断练习。

在连接导线的过程中也遇到了问题,导线的反复插拔,会使插口松动,引起

34

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

Top