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