倪闻博
(陕西省西咸新区秦汉中学,陕西西安,712000)
红绿灯在我们的日常生活中扮演着十分重要的角色,在大雾等低能见度天气条件下,行人和驾驶人员的视线会受到更大的影响,严重时甚至会导致交通事故的发生。现在使用范围较广的是单一的指示灯进行视觉提醒,本设计在以往常规的红绿灯基础上加入预警装置,可以进一步保证恶劣天气下的交通安全,降低安全隐患。
本设计通过AT89C51 单片机驱动和控制系统中红黄绿灯的交错显示,设计的总体框架如图1 所示。该系统主要由单片机、复位电路、时钟电路、LED 灯和蜂鸣器等几部分构成,其中,单片机、复位电路和时钟电路构成了单片机的最小系统,而系统中使用的AT89C51 单片机包含了32个IO 口,可用于控制十字路口两组红黄绿灯的交错点亮和蜂鸣器的发声。系统框图如图1 所示。
图1 附有蜂鸣器红绿灯系统硬件组成框图
单片机最小系统包含复位电路、时钟产生电路和电源。复位电路一般分为上电复位和按键复位两种,本装置采用的复合复位是将这两种方式结合在一起的做法,本设计采用的复位电路具体如图2[1]所示。复位电路的功能主要是:可以使CPU 及其它部件在开机时恢复到一个预设的初始状态,同时复位电路还可以在单片机死机时重新开始恢复正常工作。该设计所采用的复合复位其具体的工作原理是:通过将开关与复位电容并联,通过控制开关是否按下,从而使电容充放电为RST 引脚提供需要的复位电平值。
单片机的时钟电路的目的是统一地控制单片机的微操作,为单片机提供基本的工作时钟。单片机的时钟产生方式分为内部时钟方式和外部时钟方式,本设计采用了单片机的内部时钟方式,具体是通过一个12MHz 的晶体振荡器和两个33pF 的电容来实现,具体连接方式如图3 所示。
图2 复位电路连接方式
图3 时钟电路连接方式
任何一个完整的系统,都必须有一个稳定的供电模块,即电源模块,这是系统能够稳定运行的基础和前提。此外,本设计中采用的51 系列的单片机相比其他系列的单片机而言,更容易出现由于受到外部干扰而单片机内部程序跑飞的问题。因此,为解决这一问题,需要给本设计配备一个稳定的供电模块,最终采用通过USB 接口来提供稳定的电源电压。
此外,本设计还采用了蜂鸣器来作为发声装置。蜂鸣器通常包含有源蜂鸣器和无源蜂鸣器两种,其中,有源蜂鸣器内部带有可以发声的振荡器,即只要在有源蜂鸣器的两端分别接上高低电平,蜂鸣器就会发出声音;而无源蜂鸣器则需提供交变的信号才能实现发声的功能。因此,本设计为简化后续的程序设计采用有源蜂鸣器实现,具体连接方式如图4所示。设计中,此装置连通单片机后可以在红灯亮起时发出警报来提醒行人。
具体地,本设计采用的发声系统包括三极管、分压电阻和蜂鸣器构成,并由单片机的P1.6 引脚来控制三极管的导通和截止,三极管的一端通过上拉电阻R15 接高电平,三极管的另一端控制蜂鸣器发声。工作时,当单片机的P1.6引脚输出高电平时,三极管导通,蜂鸣器两端分别连接高低电平,蜂鸣器发声。同样地,当单片机的P1.6 引脚输出低电平时,三极管断开,蜂鸣器的一端未通过上拉电阻接高电平,蜂鸣器不发声。
图4 发声系统连接方式
Proteus 软件是英国Labcenter electronics 公司开发的目前世界上最先进、最完整的嵌入式系统设计与仿真平台软件,该软件可以在windows 系统上正常运行,主要用于模拟器件和集成电路的仿真与分析。同时,该软件还包含了信号发生器、虚拟示波器等硬件开发工具[2]。它支持许多主流的单片机的调试和仿真,例如本文的AT89C51 单片机,因此,受到了国内许多单片机爱好者、教师和科技工作者的青睐。
Keil 是德国的一个单片机开发平台,运行基础可以是32 位windows 环境,支持C 语言,它的强大的软件仿真功能使得它受到许多片机爱好者、教师和科技工作者的喜爱。目前,keil 公司推出的C51 编译器已经被完全集成到一个功能强大的全新集成开发环境中,具体包括项目管理、连接定位、项目管理等,并且可以与proteus 原理图进行联机仿真,为单片机的开发带来极大方便[3]。
Proteus 和keil 软件可以实现联合编程,在keil 软件上编写源程序,在proteus 软件上进行电路的设计,再将keil 中的源程序加载到proteus 的单片机上,就可以在proteus 中进行仿真。
图5 是本设计最终采用的proteus 原理图,本系统使用了红色、绿色和黄色的LED 灯、蜂鸣器、三极管以及电容等元器件。
图5 proteus 设计图
图6
本程序的设计思想是:首先,东西方向绿灯亮,南北方向的红灯亮,并伴随蜂鸣器发声提醒,蜂鸣器发声十次;然后,东西方向绿灯变成黄灯,黄灯闪烁十次,南北方向依然是红灯亮;接着,东西方向红灯亮,南北方向绿灯亮;最后,东西方向红灯亮,南北方向黄灯闪烁十次,并伴随蜂鸣器发声提醒,并依次循环。上述更换过程中,每次绿灯与红灯转换之间都会有黄灯闪烁十次,而在每次黄灯变成红灯时,蜂鸣器都会发出声音提醒行人。
根据上述思想编写的程序如下:
上述设计具体的执行过程为:首先,根据设计思想,先编写源程序,并在keil 软件中存储为.c 文件;将源程序书写完毕后,点击keil 软件中的translate 按钮编译源程序,编译信息显示程序没有错误,如图7 所示[4]。接着,在Keil软件内,最终会生成一个.hex 文件,将这个生成的.hex可执行文件加载到proteus 软件中的单片机内,并且点击proteus 软件中的运行按钮,便能观测设计系统的仿真结果。
图7 程序编译图
附有蜂鸣器红绿灯系统的东西向通行仿真效果如图8所示。图中,东西向为绿灯,南北向为红灯,此时蜂鸣器发声系统接高电平,蜂鸣器发声。
附有蜂鸣器红绿灯系统的东西向黄灯闪烁运行效果如图9 所示,图中,东西向黄灯闪烁,南北向红灯点亮,此时蜂鸣器发声系统未接高电平,蜂鸣器不发声。
图8 东西向通行模拟效果图
图9 东西向黄灯慢行模拟效果图
附有蜂鸣器红绿灯系统南北向通行模拟效果如图10 所示。图中,南北向绿灯点亮,东西向红灯点亮,此时蜂鸣器发声系统接高电平,蜂鸣器发声。
图10 南北向通行模拟效果图
本文使用proteus 软件设计了使用AT89C51 作为控制的核心的红绿灯系统,并且利用keil 软件使用C 语言进行源代码的编程,最后将其生成的.hex 文件加载到单片机上,实现了proteus 与keil 的联合编程。再利用proteus 仿真成功,证明本设计是合理可行的。本设计具有性价比高、功能可靠、结构简单的特点,对比传统的红绿灯多出了蜂鸣器,提高了行人在大雾天气或者雾霾天气驾车的安全系数。