LED 灯的显示原理:通过同名管脚上所加电平的高低来控制发光二极管是否点亮而显示不同的字形,如 dp,g,f,e,d,c,b,a全亮显示为8,采用共阴极连接驱动代码,代码表如下表5所示。
表5 驱动代码表 显示数值 0 1 2 3 4 5 6 7 8 9 dp,g,f,e,d,c,b,a 00101111 00000110 01011011 01001111 01100110 01101101 01111101 00000111 01111111 01101111 驱动代码 0x3f 0x06 0x5b 0x4f 0x66 0x6d 0x7d 0x07 0x7f 0x6f 相应在程序软件上,可以通过调用程序给定的秒值经过特定计算算出需要显示的个位和十位,然后有DPTR调取LEDMAP的代码。
LED8段数码管的设置为每个方位上的一对2为显示器。四个方位上总共用8个LED接在单片机的IO口上。虽然路口不一样,但是显示的时间在数字上是一样的,所以两边连接的IO口是对称的。
倒计时显示电路:
(2)时段的设置
本设计中可通过键盘对时段进行手动设置,
本设计设置了有4个键:K1键P3.0,K2键P3.1,K5键P3.4,K6键P3.5,每个按键一端接地,另一端接对应的P3端口。低电平有效,当按键按下端口接地,单片机捕获到低电平,从而知道相应的输入信息。 按键电路图:
(3)紧急处理
本交通控制中增设了紧急车辆优先功能,通过外部中断INT0(按键K3)和INT1(按键K4)来判断是东西方向有紧急车辆还是南北方向有紧急车辆。设紧急车辆通过十字路口需要5秒,若此时为红灯,则交通口为全红状态,倒计时5秒,让紧急车辆通过;若此时为绿灯,则判断剩余的时间是否够紧急车辆通过,若不足,则延长够5秒让紧急
车辆通过。
外部中断电路图:
5.1 交通控制系统电路图
5.3程序流程图:
开 始 Y 东西绿灯,南北红东西有无紧急车? 东西绿灯<5s N 东西绿灯延时至5s 是否到20s 东西红灯、南北绿 东西有无紧 Y 急车? 东西5s绿、南北5s红 N 东西红,南北绿 是否到25s? 说明:开始时:按K1键即进入两相位平峰时段,倒计时20s; 按K2键即进入两相位早高峰时段,倒计时40s; 按K3键表示东西方向有紧急车辆,倒计时5s; 按K4键表示南北方向有紧急车辆,倒计时5s; 按K6键即进入两相位午高峰时段,倒计时50s; 按K7键即进入两相位夜间时段,倒计时30s;
5.4演示程序:
#include
sbit D2=P1^1; //led灯引脚定义
sbit D3=P1^2; 、// east-west p1.1red,p1.2yellow,p1.3green sbit D4=P1^3;
sbit D6=P1^5; //north-south p1.5red ,p1.4yellow, p1.3green sbit D7=P1^6; sbit D8=P1^7; sbit K1=P3^0; sbit K2=P3^1; sbit K6=P3^5; sbit K7=P3^6; sbit LS138A=P2^2; //数码管引脚定义 sbit LS138B=P2^3; sbit LS138C=P2^4;
void delay(unsigned int i); void display(int);
unsigned char aa,num,flag; unsigned int LedOut[6]; unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //0~9数模 void main() {
TMOD=0x11; TH0=0x3c; TL0=0xb0; EX0=1; IT0=1; IT1=1; EX1=1; ET0=1; EA=1; while (1) {
if(K1==0) { flag=0;