交通信号灯是城市交通安全、有序、快速运行的重要保障。本文提出一种基于单片机的交通信号灯控制系统的设计方案。该系统模拟现实中十字路口的通行指示,倒计时、紧急车辆通行、强制东西/南北通行、夜间模式灯、转向等功能。并结合交通灯,设计了人行道灯。采用STC89C51芯片作为中心期间来设计交通灯来控制电路,结合七段共阴极数码管显示时间的模块、交通灯显示模块、按键电路、IO口扩展电路等组成,通过程序设计和软件仿真来实现红、黄、绿、蓝燃亮时间以及双位数码管显示倒计时。
关键字:交通信号灯、人行道灯、STC89C51单片机、紧急通行、转向功能
51单片机交通灯Proteus仿真
一、工程介绍
1.1、实现要求
- 控制交通灯实现车辆东西通行后,南北通行功能
- 控制转向灯实现交通灯东西通行后左转,南北通行后左转功能
- 控制人行道灯实现交通灯东西通行的同时,同时南北人行道开启,同理南北通行亦如此
- 可以控制按钮实现东西时间的调整、夜间模式、紧急模式、强制东西/南北模式、查看时间
二、仿真电路设计
2.1环境介绍
- 仿真设计使用Proteus 8.0;Proteus安装参考链接
2.2、电路设计
2.2.1、最小系统的实现
关于51单片机最小系统可以查看我以前博客,2.2.1、最小系统实现参考链接
从Proteus中选取元件有:74HC595芯片、74HC245芯片、AT89C51单片机、BUTTON开关、BUZZER蜂鸣器、CAP电容、CAP-ELEC电解电容、CRYSTAL晶振、LED-BLUE蓝色LED、LED-GREEN绿色LED、LED-RED红色LED、LED-YELLOW黄色LED、PNP三极管、RES电阻、RESPACK-8排阻、TRAFFICLIGHTS交通灯、7SEG-MPX2-CC两位八段共阴极数码管
最小系统如下:
2.2.2、数码管的使用
数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、3位、4位、5位、6位、7位等数码管。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。
一位数码管内部原图如图所示:
在实际电路中数码管是要加驱动芯片的,因为单靠51单片机管脚输出电流是不够的,这里通过添加74HC245驱动芯片驱动各个数码管,用51单片机P0口传送数据给数码管,一定要加上拉电阻,并通过八同相三态总线收发器74HC245直接连接数码管的八个LED。
74HC245芯片内部结构如下:
由于单片机或CPU的数据地址控制总线端口都有一定的负载能力,如果负载超过其负载能力,一般应加驱动器。主要应用于大屏显示,以及其它的消费类电子产品中增加驱动。
仿真电路图如下:
2.2.3、交通灯、人行灯及转向灯
通过Proteus绘制路线以及人行道,可以画出如下电路图:
2.2.4、74HC595芯片的使用
74HC595是串口转并口芯片,可输出三种状态:高电平、低电平和高组态。一片74HC595芯片可实现3根口线扩展为8根口线.也可采用多片74HC595进行级联的方式扩展输出口线。控制可以采取如下控制:
仿真电路图如下:
2.2.6、蜂鸣器电路的设计
当IO输出低电平时,三极管导通,蜂鸣器发出声音。
2.2.7、按键电路的设计
2.3、总体仿真电路图
三、程序设计
3.1、环境介绍
- 程序设计采用Keil 5.22;MDK5安装以及C51支持包
3.2、定时器的使用
89C51单片机内部有两个16位的定时/计数器,即定时器T0和定时器T1,这次仿真是要控制数码管每隔1S变化一次,所以应把两个定时器配置50MS的中断,响应10次即完成0.5S,响应20次完成1S。由于51单片机1个机器周期=12个时钟周期,系统时钟频率为12MHZ,则一个机器周期为1US,$ Sysclk = \frac{12MHZ}{12}=1MHZ$。下面是涉及定时器的相关寄存器:
工作模式寄存器TMOD是用于控制定时器0/1的工作模式,通过对TMOD进行赋值,则可以改变定时器的工作模式具体各位的定义如下:
定时器T0/T1有四种工作模式:模式0(13位定时器/计数器),模式1(16位定时器/计数器模式),模式2(8位自动重重装载模式),模式3(两个8位定时器/计数器)。T1除模式3外,其他工作模式与定时器/计数器0相同,T1载模式3无效,停止计数。
定时器的控制寄存器TCON为定时器/计数器T0、T1的控制寄存器,同时也锁存T0、T1溢出中断源和外部请求中断源等,格式如下:
配置T0和T1定时器程序如下:
void TIMER_init(void) // 定时器初始化配置
{
TMOD=0X11; // 设置T0和T1为模式1(16位定时器)
TH1=0X3C; // 定时器1置初值 0.05S
TL1=0XB0;
TH0=0X3C; // 定时器0置初值 0.05S
TL0=0XB0;
EA=1; // 开总中断
ET0=1; // 定时器0中断开启
ET1=1; // 定时器1中断开启
TR0=1; // 启动定时0
TR1=0; // 关闭定时1
}
定时器T0实现交通灯和转向灯程序流程: