车流量检测是用外部中断引脚P06,P07捕获到一个低电平,则进入相应的中断服务子程序,在子程序中,用R5计南北向车流量,用R6计东西向车流量,设车向标志位为01H,判断车向. 根据红绿灯时间调整原理,一个周期下来,R5,R6中分别存储着南北,东西的车流量,接下来求单位时间车流量,此时南北向时间,东西向时间分别存储在R0,R1中,则两个方向的流量比例为(R5/R0)/(R6/R1)=(R5*R1)/(R6*R0),显然该比例是1左右带小数的值,然而单片机程序中只取整数,重要的数据信息就会丢失,所以本设计中首先将(R5*R1)乘以10,比例就变为10左右的值。将该比例值放在A,然后进行时间调整。
由于受到多方面的限制,时间调整在此只划定3个范围。比例0到0.7为一个范围,0.8到1.5为一个范围,1.5以上为一个范围。第一范围显然表明东西向交通严重,应将时间调长;第二范围表明两向相当,可设置一样的时间,第三范围表明南北向交通严重,应将该向时间调长。具体设置如下表3.4
表3.4 比例及调整时间
南北与东西向比例 调整南北向时间 调整东西向时间 0—0.7 20 40
由表可知,对应的时间调整也只有三种,分别是20,40;20,20;40,20.显然在实际应用中这样简单的处理难以尽如人意,但在此处,本设计只是模拟大致的调整过程
3.3.2违规检测电路及模拟
在红灯和黄灯期间,车辆是禁行的,为了对那些违反规则的车辆进行检测,可使用超声波车辆传感器。但是,用于受到条件的限制,本系统设计中只是使用了普通光敏二极管。
0.8—1.5 20 20 1.5及以上 40 20 第22页 共43页
R81KINT1vcc光敏电阻 图3.6 违规检测电路
其基本设计思想是:将光敏二极管放在停车线上,当车辆行驶过将光敏二极管遮住,这样,光敏二极管就不导通,单片机检测到这一信号执行警报操作。违规检测电路如下图3.5所示。
但是除了使用光敏二极管,还需使用三极管,三极管的型号是9031.由于普通光敏二极管的开关特性不太好,所以设计在电路中加入了三极管作为开关。由于普通光敏二极管在导通的情况下的电阻都能达到0.5-1K,所以在设计中将光敏二极管直接连到了电源上。同时三极管还可以起到一定的隔直作用。当光敏二极管关闭时,三极管的基极为低电平,基极与发射基之间的电压为零,三极管关断,检测口的电压为高电平。同理,当光敏二极管导通时,三极管的基极电压为高,基极与发射极之间的电平为高,三极管导通,检测口的电压为低电平。基于此就可以检测是否有违规车辆了。
3.3.3八段LED数码管
LED(Light Emitting Diode),发光二极管,它是一种固态的半导体器件,可以直接把电转化为光。LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。半导体晶片由三部分组成,一部分是P型半导体,在它里面空穴占主导地位,另一端是N型半导体,在这边主要是电子,中间通常是1至5个周期的量子阱。当电流通过导线作用于这个晶片的时候,电子和空穴就会被推向量子阱,在量子阱内电子跟空穴复合,然后就会以光子的形式发出能量,这就是LED发光的原理。而光的波长也就是光的颜色,是由形成P-N结的材料决定的。
LED显示屏作为大型显示设备的一种,具有亮度高、价格低、寿命长、维护简便等优点。LED数码管的结构简单,分为七段和八段两种形式,也有共阳和共
第23页 共43页
阴之分。以八段共阴管为例,它有8个发光二极管(比七段多一个发光二极管,用来显示sP,即点),每个发光二极管的阴极连在一起。这样,一个LED数码管就有I根位选线和8根段选线,要想显示一个数值,就要分别对它们的高低电平来加以控制。为方便起见,本文主要讨论共阴八段LED数码显示管,其他类形的显示管与其类似。
12345678AMBERCCabcdfeefgdpagdbcdpGND 图3.7 LED数码管
LED 灯的显示原理:通过同名管脚上所加电平的高低来控制发光二极管是否点亮而显示不同的字形,如 dp,g,f,e,d,c,b,a全亮显示为8。
采用共阴极连接:
表3.5 驱动代码表
显示数值 0 1 2 3 4 5 6 7 8 9
相应在程序软件上,可以通过调用程序给定的秒值经过特定计算算出需要显示的个位和十位,然后用DPTR调取LEDMAP的代码。
LED8段数码管的设置为每个方位上的一对2为显示器。四个方位上总共用8个LED接在单片机的IO口上。虽然路口不一样,但是显示的时间在数字上是
第24页 共43页
a b c d e f g dop 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 0 0 1 0 0 1 1 0 0 1 1 0 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 0 9驱动代码(16进制) 0FCH 60H 0DAH 0F2H 66H 0B6H 0BEH 0E0H 0FEH 0F6H
一样的,所以两边连接的IO口是对称的。因为输出口较少的原因,所以每个十位,个位的数据的传输必须采用动态扫描的方式,因为人眼的视觉原因,人们会认为是同时点亮的.
下面我们用这种方法显示交通灯的时间,南北方向要显示20秒,东西方向要显示25秒,那么我们先给P0口送2的共阴极码即5BH,让第一位2要显示的位码GND段为低电平,其它七位的控制端都接高电平,那么第一位就显示2,其它七位不亮。让其显示1MS后再给P0口送0的共阴极码即3FH,让第二位要显示0的位码GND段为低电平,其它七位的控制端都接高电平,那么第二位就显示0,其它七位不亮。依此类推分别送完第一位2,第二位0,第三位2,第四位5??每一位点亮1MS一个扫描周期为8MS,一秒时间就要扫描125次
3.3.4其它器件 (1)发光二极管
根据本设计的特点,红绿灯的显示不可少,红绿灯的显示采用普通的发光二极管。每个方向上设置红绿黄灯,总共4组。如果东西红灯亮,那南北方向就是绿灯亮,反之亦然,所以在硬件上连接图上也是对称分布的,如下图3.8所示。
p13p14p15RYG0.3K0.3K0.3Kvccvccvccvcc0.3Kvcc0.3Kvcc0.3KRp10vcc0.3KRp10Yp11vcc0.3KYp11Gp12vcc0.3Kp13p14p15Gp12RYG0.3K0.3K0.3Kvccvccvcc
图3.8 信号灯的连接
在本设计中,实际控制的灯只有6个,即:东西红灯,东西绿灯,东西黄
第25页 共43页
灯,南北红灯,南北绿灯,南北黄灯,其中均是低电平有效。
共有4钟状态:东西红灯亮,南北绿灯亮(11011101/DDH);东西红灯亮,南北黄灯亮(10111101/BDH);东西绿灯亮,南北红灯亮(11101101/EDH);东西黄灯亮,南北红灯亮(11100111/E7H)。
括号中是P1端口8个引脚值P1.7,P1.6,P1.5,P1.4,P1.3,P1.2,P1.1,P1.0以及对应的十六进制码。
在用于显示发光二极管时,直接由MOV指令将十六进制码送入P1口。刚才的4个状态是依次变换的,这就要涉及到状态的判断和衔接了。先把P1端口的值与所有的4个状态码比较,若相同则判断成功当前状态,再把下一状态的状态码送显P1即可。
(2)蜂鸣器
本设计采用一般蜂鸣器,蜂鸣器使用PNP三极管进行驱动控制,当连接到单片机上的引脚输出为低电平,PNP导通,蜂鸣器蜂鸣;当连接到单片机上的引脚输出高电平时,PNP截止,蜂鸣器停止蜂鸣。如下图3.9所示
8051
R9VCC
图3.9 蜂鸣器连接 紧停按键和违规信号传感器连接到外部中断引脚INT1,P3.6捕获到一个低
电平,则进入该中断,中断程序中先把蜂鸣器P3.7端口置0,启动蜂鸣。并且等待恢复键F键按下,然后关闭蜂鸣返回。
(3)按键控制
本设计设置了有3个键:S键,J键,F键。每个按键一端接地,另一端接上拉电阻。低电平有效,当按键按下端口接地,单片机捕获到低电平,从而知道相应的输入信息。如下图3.10所示
第26页 共43页