基于51单片机交通灯程序设计与仿真

基于51单片机交通灯程序设计与仿真
摘要

交通信号灯是城市交通安全、有序、快速运行的重要保障。本文提出一种基于单片机的交通信号灯控制系统的设计方案。该系统模拟现实中十字路口的通行指示,倒计时、紧急车辆通行、强制东西/南北通行、夜间模式灯、转向等功能。并结合交通灯,设计了人行道灯。采用STC89C51芯片作为中心期间来设计交通灯来控制电路,结合七段共阴极数码管显示时间的模块、交通灯显示模块、按键电路、IO口扩展电路等组成,通过程序设计和软件仿真来实现红、黄、绿、蓝燃亮时间以及双位数码管显示倒计时。

关键字:交通信号灯、人行道灯、STC89C51单片机、紧急通行、转向功能

51单片机交通灯Proteus仿真

一、工程介绍

1.1、实现要求

  1. 控制交通灯实现车辆东西通行后,南北通行功能
  2. 控制转向灯实现交通灯东西通行后左转,南北通行后左转功能
  3. 控制人行道灯实现交通灯东西通行的同时,同时南北人行道开启,同理南北通行亦如此
  4. 可以控制按钮实现东西时间的调整、夜间模式、紧急模式、强制东西/南北模式、查看时间

二、仿真电路设计

2.1环境介绍

2.2、电路设计

2.2.1、最小系统的实现

关于51单片机最小系统可以查看我以前博客,2.2.1、最小系统实现参考链接
src="51%E5%8D%95%E7%89%87%E6%9C%BA%E8%BD%A6%E6%B5%81%E9%87%8F%E4%BA%A4%E9%80%9A%E7%81%AF+%E4%BA%BA%E8%A1%8C%E9%81%93%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E4%B8%8E%E4%BB%BF%E7%9C%9F.assets/%E5%8E%9F%E4%BB%B6%E9%80%89%E6%8B%A9.png" align = "left" style="width:500px;height:300px" />
从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、环境介绍

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实现交通灯和转向灯程序流程:

评论 172
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoxiaodawei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值