十四、城市交通路口管理的红、绿灯
在城市大街的十字交通路口,都安置了各种由红、绿色高亮度LED组成的指示图案,用于管理机动车辆、非机动车辆和行人,使之能够安全、顺利地通过各自的路口道。这些红绿灯图案,多种多样。笔者以其中一种十字路口的红绿灯图案的控制为例,来说明PIC单片机C语言在城市交通灯管理中的应用。
图55a是一种由红色高亮LED组成的掌形指示图案,路口显示该图案。表示此时该方向禁止行人通过。图55b、图55c分别是用绿色高亮LED组成的仿人形和仿自行车形的指示图案,在路口显示该图案,表示此时允许人们通行。图56是由红、绿色两种颜色的高亮LED组成的圆形指示图案(红、绿色分时显示), 以提示是否允许机动车辆通行。上述指示图案均设在交通路13,以分时方式交替显示,各指示图案显示时间的长短,是根据不同路13的车流和人流的实际情况来设定的,一般在80秒~1 40秒之间(特殊路口可长达180秒,甚至更久)。
图55
图56
利用PIC16F877或PIC16F876单片机的端121位,加上相应的驱动电路,去分别驱动组成图55、图56所示指示图案的各个高亮红、绿色LED,使之按所需时序进行显示,便可实现上述功能。把它们用箱体装好,安装在交通路口的指定地点,就能够进行路口的交通管理了。
1. 硬件电路和功能
(1)硬件电路
按照上述交通路口红绿灯指示图案显示的要求。用PIC16F877设计的硬件电路如图57所示。
图57
从图57可知,PIC16F877有40个引脚,其I/O口比PIC16F84A多,完全可以满足分时显示上述交通指示图案的要求。
需要说明的是,我们在前面的连载文章中介绍C语言程序时,都是以1 8脚的PlC16F84A单片机为例的,通过本实例大家会看到。只要熟悉了PlC16F84A。会很容易掌握其他多引脚PIC单片机的使用方法的。
由于PIC单片机I/O端1:3每一位的输出电流有限, 即≤ 20mA, 且PORTA、PORTB和PORTE口输出电流的总和不得大于200mA,PORTC和PORTD 口输出电流的总和亦不得大于200mA,而从图57可以看出,PIC16F877单片机的PORTB的PB0~PB7口和PC0、PC1口外接的高亮度LED从十余只到数十只不等,所以对于所有外接有高亮度LED的I/O 口,我们都增加了功率管输出驱动接1:3电路,且外接高亮度LED数量不同(即电流大小的不同),驱动电路亦有所不同。
(2)PIC16F877端口功能位分配
① 管理手掌形红色高亮LED指示灯的端口位。
利用PIC16F877的RB0位。外接单向可控硅SCR1(2A)和多个红色高亮LED (通过布线使多个LED组成图55a所示的手掌图形),采用静止显示方式。通常,组成交通灯的手掌图形大约需要·60只~7O只LED,在我们的设计中,RB0口外接的SCR1回路可接多达100只高亮LED。足以满足设计要求。而RB1位则外接一只PNP型功率三极管V1(2A)和限流电阻R0、偏置电阻R1,组成+24V开关电路,由C程序控制RB0口和RB1 1:3同步定时工作,通过V1的导通或截止来控制是否为SCR1提供+24V工作电压,从而达到令SCR1回路中的红色高亮LED定时点亮或关闭的目的。
② 管理仿人形绿色高亮LED指示灯的端13位。
利用PIC16F877的RB2位,外接单向可控硅SCR2(2A)和多个红色高亮LED(通过布线使多个LED组成图55b所示的仿人形图形),采用静止显示方式。组成该图形大约需要70只LED。而RB3位则外接一只PNP型功率三极管V2(2A)和电阻R2、R3,组成+24V开关电路。
该电路的工作模式与前面介绍的手掌形指示灯完全相似,此处不再赘述。
③ 管理仿自行车形绿色高亮LED指示灯的端口位。
利用RC0、RC1~RC7位, 外接NPN型功率三极管V5~V1 2和若干绿色高亮LED(通过布线使之组成图55c所示的可控制自行车动态显示的图形。该电路工作时,通过控制排列在自行车车轮上的LED分时亮灭,来使人看到好象自行车在转动似的图像, 以提示人或非机动车可以通行。
④ 管理圆形绿色高亮LED的端口位。
利用RB4和RB5外接的单向可控硅SCR3及V3等相关电路,控制如图56所示的绿色高亮LED圆形指示灯,以提示运行机动车通行。
⑤ 管理圆形红色高亮LED的端口位。
利用RB6和RB7外接的单向可控硅SCR4及V4等相关电路,控制如图56所示的红色高亮LED圆形指示灯,以提示禁止机动车通行。
需要说明的是, 图56中的圆形图案是红、绿灯共用的。布线时,应将红、绿色高亮LED相间排列,利用C语言程序,控制红、绿灯LED分时显示即可。
上述各I/O 口的工作,全部受软件(C语言程序)控制。由程序按照各交通路口的规范,控制各高亮LED指示灯图案分时工作,使交通路口的行人、车辆安全有序地通行。
2.C语言程序流程图和C程序
按照图57所示电路,我们可以绘制出城市交通路口直行方向的红、绿灯显示C语言程序流程如图58所示。横行方向的红、绿灯显示C语言程序流程与之相同。此流程图可为大家编辑C语言程序提供思路。
图58
根据图58所示流程编辑的交通路口红绿灯管理C程序清单如下(程序名pic08.C):
说明:上述交通路1:3红、绿灯C程序,是笔者观察到交通路口的红绿灯图案,编辑该程序的目的,是帮助大家学习C语言程序。对于程序中的延时函数值,读者可以根据需要进行调整,以将其用于其他C程序中,作为可任意改变时间的延时函数值。
需要说明的是,实际的交通路口红、绿灯管理系统,是一种基于多路口的红、绿、黄灯工程管理体系,考虑的问题比本文中的程序更多、更复杂。