交通信号灯模拟控制系统设计
设计要求:用51单片机设计一个交通信号灯模拟控制系统,晶振采用12MHz。
具体要求如下:
(1)正常情况下,A、B道(A、B道交叉组成十字路口,A是主道,B是支道)轮流放行,A道绿灯1min(其中10s用于黄灯),B道绿灯放行30s(其中5s用于黄灯)。
(2)一道有车而另一道无车时,使有车车道放行(用两个按键开关控制)。
(3)有紧急车辆通过时,A、B道均为红灯(用按键开关控制)。
(4)要求由数码管显示红绿灯倒计时时间。
表1:元器件列表
STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
STC89C52RC是STC89系列单片机中应用较为广泛的一种型号,内部的8KB存储器用于存放可编程控制器监控程序。
STC89C52RC单片机的40条引脚按功能来分,可以分为3部分,电源及时钟引脚、控制引脚和输入/输出引脚。
图2-1 89C52单片机引脚图
STC89C52单片机引脚功能介绍:
(见附件)
P3口功能表:
表2P3口功能表
STC89C52内部结构图:
图2-2 STC89C52内部结构图
复位电路的作用
在复位过程中,控制CPU的复位状态:这段时间内让CPU保持复位状态,而不是一上电或刚复位完毕就工作,防止CPU发出错误的指令、执行错误操作,也可以提高电磁兼容性能。
基本的复位方式
单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。本系统中单片机系统的复位方式为手动按钮复位。
手动按钮复位
手动按钮复位需要人为在复位输入端RST上加入高电平(图1)。一般采用的办法是在RST端和正电源Vcc之间接一个按钮。当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。手动按钮复位的电路如图所示。由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。
图2-3 复位电路图
在MCS - 51单片机片内有一个高增益的反相放大器,反相放大器的输入端为XTAL1,输出端为XTAL2,由该放大器构成的振荡电路和时钟电路一起构成了单片机的时钟方式。
在内部方式时钟电路中,必须在XTAL1和XTAL2引脚两端跨接石英晶体振荡器和两个微调电容构成振荡电路,通常C1和C2一般取30pF,晶振的频率取值在1.2MHz~12MHz之间。对于外接时钟电路,要求XTAL1接地,XTAL2脚接外部时钟,对于外部时钟信号并无特殊要求,只要保证一定的脉冲宽度,时钟频率低于12MHz即可。本系统采用的是12MHz石英晶振。
晶体振荡器的振荡信号从XTAL2端送入内部时钟电路,它将该振荡信号二分频,产生一个两相时钟信号P1和P2供单片机使用。时钟信号的周期称为状态时间S,它是振荡周期的2倍,P1信号在每个状态的前半周期有效,在每个状态的后半周期P2信号有效。CPU就是以两相时钟P1和P2为基本节拍协调单片机各部分有效工作的。
图2-4 时钟电路图
LED灯显示电路:
LED灯电路由6个LED灯(2个红LED灯,两个黄LED灯,两个绿LED灯)与6个阻值为470欧姆的电阻组成,LED的正极与Vcc+相连,LED的负极分别与电阻串联再连接到STC89C52芯片的P1端口(P0.0—P0.5)。
2-5 LED灯显示电路图
数码管显示电路:
数码管普遍地用于直观地显示数字系统的运行状态和工作数据,点亮数码管的方法有静态和动态两种,本系统中采用的是动态数码管显示。动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效.这样一来,就没有必要每一位数码管配上一个锁存器,从而大大地简化了硬件电路。选亮数码管采用动态扫描显示,所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用数码管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
2-6 数码管引脚图
本系统中采用的数码是二位八段共阳数码管,数码管a~f引脚与分别于阻值为470欧姆的上拉电阻串联,再连接到P0端口(P0.0—P0.6),其中dp引脚不作连线(不需要用到dp)。两个位选引脚1,引脚2分别与集电极相连,P2端口(P2.0—P2.3)串联一个阻值为1k的电阻再连接到8550三极管基极端,4个8550三极管的发射端接在电源Vcc上,组成两个方向的二位数码管显示电路。
2-7 数码管显示电路图
为了实现此功能,本系统利用到了51单片机中的P3.1端口。利用一个手动按钮开关接至单片机的P3.1端口,同时在软件设计时将其设定为每次都进行按键扫描,当其按下时,四方全为红灯,数码管只亮一根横线,当紧急情况过了之后,再次按下该按键回到原来的位置继续执行未完成的程序。
为了实现此功能,本系统再利用一个手动按钮接至单片机中的P3.2端口。当其按下时,如果是东西方向道路是红灯,而南北方向道路是绿灯,则将其置为东西是绿灯,南北是红灯;如果是东西方向道路是绿灯,而南北方向道路是红灯,则将其置为东西是红灯,南北是绿灯。两种情况都是执行完后,回到正常状态继续执行。
2-8 交通灯总电路图
总体接线说明:
- 交通信号灯指示电路部分,STC89C52芯片的P1.0~P1.5接6个470Ω的限流电阻,然后在依次分别接到南北方向的绿、黄、红色的LED指示灯,东西方向的绿、黄、红色的LED指示灯(共阳级接法);
- STC89C52芯片的RST接复位电路;
- 按键电路部分,STC89C52芯片的P3.0(RXD)、P3.1(TXD)、P3.2、P3.3分别接4个微动开关;
- STC89C52芯片的XTAL2、XTAL1、VSS0接晶振电路;
- STC89C52芯片的P2.0~P2.3接4个1KΩ的电阻,然后分别接到4个三极管的基极,发射极接Vcc,均接地,4个集电极分别依次接到南北方向数码管显示D1和东西方向的数码管显示的D2;
- STC89C52芯片的(引脚31)和复位电路的VCC相连;
- 倒计时显示部分,STC89C52芯片的P0.0~P0.6接7个470Ω的电阻,然后均接到VCC电源端,同时STC89C52芯片的P0.0~P0.6分别依次直接接到所有数码显示器的a、b、c、d、e、f、g,DP置空;
- STC89C52芯片的Vcc接电源正极,GND接地。