基于51单片机的简易交通灯控制装置仿真与实现(一)

        设计、仿真并制作一基于51单片机的简易交通灯控制装置,该装置具有指挥十字路口不同方向车辆通行的功能,交通信号灯有红、黄、绿三种颜色,同时具有倒计时功能。

一、设计要求:

①十字路口分东西和南北2个方向,当东西方向车辆通行时,该方向上的绿灯亮、红灯灭,时间为9s,数码管从9倒计时到1;同时南北方向上车辆停止通行,该方向上的红灯亮、绿灯灭,倒计时9s。反之亦然。

②从通行到停止之间,以及从停止到通行之间,有准备时间3s,此时黄灯亮,其余灯灭,数码管显示3s倒计时。

③使用Protues软件进行设计,在AltiumDesigner软件里设计电路板,使用Keil开发单片机软件。

二、原理图设计:

根据设计要求,设计该装置电路原理图如下:

        对该电路各部分做简要分析:

    P1是接线端子,外部供电电源通过接线端子给系统供电;

    S1是开关,控制供电电源的通断;

    C5和C4一大一小两个容值的电容是给系统电源滤波;

    U1、C1、C2、C3、R1、Y1组成单片机最小系统,即单片机能够正常工作所需的最少外围电路,主要包括晶振电路和复位电路;

    RP1是排阻,因为P0口是开漏输出,所以需要外接上拉电阻才能输出高电平。

    R2~R17为限流电阻,即限制数码管电流的电阻;

    D1~D3和D4~D6分别是两个方向上的2组交通信号灯,他们的亮灭由单片机的P0口控制;

    DS1和DS2为两个方向上的2个倒计时数码管,它们分别由单片机P1口和P2口控制;

    P2和单片机的串口相连,用来给单片机下载处出现。

三、仿真电路搭建

在Protues软件里搭建所设计的电路原理图,用来进行仿真验证。

        所搭建的仿真电路,和刚才我们设计的电路略有差异,我们设计的电路有接线端子和电源开关,仿真电路里没有,因为我们仿真主要是为了验证设计的电路能否正确工作,所以仿真电路里直接用J1排针作为电源输入。

        我们设计的电路中,和P1、P2相连的限流电阻采用的是单独封装的200Ω电阻,而仿真电路里使用的是RN1和RN2两个200Ω排阻,其实它们的功能是一样的,排阻相当于把8个分立电阻封装在一起作为一组来使用。

四、单片机程序编写

51单片机软件可以使用Keil来进行设计开发。程序代码如下:

//交通灯
#include <reg51.h>
#include <intrins.h>
typedef unsigned char Uchar;
typedef unsigned int Uint;
#define ledport P0
#define north_south_time P1
#define east_west_time P2

sbit north_south_red=ledport^0;
sbit north_south_yellow=ledport^1;
sbit north_south_green=ledport^2;
sbit east_west_red=ledport^3;
sbit east_west_yellow=ledport^4;
sbit east_west_green=ledport^5;
//共阳数码管的显示码
Uchar discode[]={ 0xC0,0xF9,0xA4,0xB0,
      0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,
      0xC6,0xA1,0x86,0x8E};
//函数声明
void Delay_nms(Uint nms);
void seg7_dis(Uchar Ntime);	  
//主函数
void main()
{	ledport=0xff;             //初始化,所有显示关闭
	north_south_time=0xff;
	east_west_time=0xff;
	//南北绿,东西红,9秒,黄3秒,南北绿,东西红,9秒,黄3秒
	while(1)
	{	north_south_green=0;east_west_red=0;
		seg7_dis(9);
		north_south_green=1;east_west_red=1;
		north_south_yellow=0;east_west_yellow=0;
		seg7_dis(3);
		north_south_yellow=1;east_west_yellow=1;
		north_south_red=0;east_west_green=0;
		seg7_dis(9);
		north_south_yellow=0;east_west_yellow=0;
		north_south_red=1;east_west_green=1;
		seg7_dis(3);
		north_south_yellow=1;east_west_yellow=1;
	}
}

void Delay_nms(Uint nms)		//@11.0592MHz ,1ms*N
{
	Uchar  i, j;
    do{
			_nop_();
			i = 2;
			j = 219;
			do
			{
				while (--j);
			} while (--i);
		}
	while(--nms);
}
//共阳数码管显示
void seg7_dis(Uchar Ntime)
{	Uchar tmp;
	do{
		tmp=discode[Ntime];
		north_south_time=tmp;
		east_west_time=tmp;
		Delay_nms(1000);
	}while(--Ntime);
}  

        在Keil中建立工程,并编译生成hex文件,然后将生成的hex文件添加到Protues仿真电路的单片机模型中,点击运行,便可在Protues中看到运行效果。 

51单片机简易交通灯Protues仿真

原理图+PCB+C程序代码+Protues仿真文件下载链接:

https://download.youkuaiyun.com/download/jeffashan/88497581

关注公众号 ,随时获取最新内容:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

平凡工匠

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

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

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

打赏作者

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

抵扣说明:

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

余额充值