• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

基于51单片机的多功能交通灯设计!!!

04/17 08:35
956
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

单片机仿真设计合集资料获取.pdf

共1个文件

资料清单:C程序+仿真+设计报告+使用说明+元件清单+操作视频

仿真版本:Proteus8.6及以上版本

程序编译:Keil5 C51

编程语言:C语言

设计编号:【M03】

1.? 简介

? 本文提出了一种基于51单片机的智能交通灯设计。该设计在硬件方面主要采用AT89C51单片机作为主控核心,结合独立按键、数码管、LED灯,实现不同的红绿灯切换时间,并且具有倒计时的功能。

2.? 主要功能

a.当主干道通行亮绿灯时,支干道亮红灯,而支干道亮绿灯时,主干道亮红灯。

b.主支干道交替通行,主干道每次放行60s、支干道30s,设计60s和30s计时显示电路

c.在过程中间,要亮5s的黄灯作为过渡,设置5s计时显示电路。

d.有紧急车辆要求通过时,系统要能禁止东西或南北两条路上所有的车辆通行。

3.? 源程序(Keil5)

本设计采用keil5 C51软件(内附安装包)实现程序设计。如需用keil4打开程序,可自行通过.c和.h文件新建工程即可。

#include	<reg51.h> 	
#define	uchar	unsigned char
#define	uint	unsigned int
	
/*****定义控制位**********************/
sbit	  EW_LED2=P2^3;	          //EW_LED2控制位
sbit	  EW_LED1=P2^2;	          //EW_LED1控制位
sbit	  SN_LED2=P2^1;	          //SN_LED2控制位
sbit	  SN_LED1=P2^0;	          //SN_LED1控制位

sbit    SNstraight_Green=P1^3;  //南北直行绿灯
sbit    EWstraight_Green=P1^0;  //东西直行绿灯
sbit    SNstraight_Yellow=P1^4; //南北直行黄灯
sbit    EWstraight_Yellow=P1^1; //东西直行黄灯
sbit    SNstraight_Red=P1^5;    //南北直行红灯
sbit    EWstraight_Red=P1^2;    //东西直行红灯
sbit    SNright_Green=P2^7;		  //南北右拐绿灯
sbit    EWright_Green=P1^6;		  //东西右拐绿灯
sbit    SNright_Red=P3^4;		    //南北右拐红灯
sbit    EWright_Red=P2^4;		    //东西右拐红灯
sbit    SNleft_Green=P3^5;		  //南北左拐绿灯
sbit    EWleft_Green=P2^5;		  //东西左拐绿灯
sbit    SNleft_Red=P3^7;		    //南北左拐红灯
sbit    EWleft_Red=P2^6;		    //东西左拐红灯
sbit    SNturn_Yellow=P3^6;     //南北转向黄灯
sbit    EWturn_Yellow=P1^7;     //东西转向黄灯
	
sbit    Time_Button=P3^0;       //时间加减按钮判断输入端
sbit    QZ_Button=P3^1;         //强制通行方向判断输入端

bit     Flag_SNstraight_Yellow;  //SN直行黄灯标志位
bit     Flag_EWstraight_Yellow;  //EW直行黄灯标志位
bit     Flag_SNturn_Yellow;      //SN转向黄灯标志位
bit     Flag_EWturn_Yellow;      //EW转向黄灯标志位
bit     QZ_EW;					         //EW强制通行标志
bit     QZ_SN;					         //SN强制通行标志
bit     QZ_flag;                 //数码管强制标志

char	Time_EW;                //东西方向倒计时单元
char	Time_SN;                //南北方向倒计时单元

uchar EW=30,SN=30,EWL=60,SNL=60; //倒计时时长

uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//0~~~~9段选码


/*********************延时函数**********************/
void	Delay(uchar	 a)
	{
		while(a--);
	}


/*******************显示函数,显示倒计时的值**********************/
void	Display(void)
{
		char h,l;
		h=Time_EW/10;		//EW方向计时的十位数
		l=Time_EW%10;		//EW方向计时的个位数
  	P0=table[l];		//显示EW计时时间的低位
		EW_LED2=1;
		Delay(2);
		EW_LED2=0;
	  P0=table[h];		//显示EW计时时间的高位
		EW_LED1=1;
		Delay(2);
		EW_LED1=0;

		h=Time_SN/10;		//SN方向计时的十位数
		l=Time_SN%10;		//SN方向计时的个位数
		P0=table[l];		//显示SN计时时间的低位
		SN_LED2=1;
		Delay(2);
		SN_LED2=0;
	  P0=table[h];		//显示SN计时时间的高位
		SN_LED1=1;
		Delay(2);
		SN_LED1=0;
		
} 

/*******************显示函数,强制通行的值**********************/
void	Display1(void)
{
	  P0=table[8];
	  if(QZ_flag==1)
		{
		  EW_LED2=1;			
		  EW_LED1=1;		
		  SN_LED2=1;			
		  SN_LED1=1;
			
		}
		else
    {
		  EW_LED2=0;
		  EW_LED1=0;
		  SN_LED2=0;
		  SN_LED1=0;
		}			
			
} 

/************************信号灯控制函数******************/
void SN_GOstraight()           //SN直行绿灯
{
	  SNstraight_Green=1;	      
    SNstraight_Yellow=0;
    SNstraight_Red=0;		
}

void SN_STOPstraight()         //SN直行红灯
{
	  SNstraight_Green=0;	      
    SNstraight_Yellow=0;
    SNstraight_Red=1;
}

void EW_GOstraight()           //EW直行绿灯
{
    EWstraight_Green=1;	      
    EWstraight_Yellow=0;
    EWstraight_Red=0;	
}

void EW_STOPstraight()         //EW直行红灯
{
	  EWstraight_Green=0;	      
    EWstraight_Yellow=0;
    EWstraight_Red=1;	
}

void SN_GOturnright()          //SN右转绿灯
{
	  SNright_Green=1;
	  SNturn_Yellow=0;
	  SNright_Red=0;
}

void SN_STOPturnright()        //SN右转红灯
{
	  SNright_Green=0;
	  SNturn_Yellow=0;
	  SNright_Red=1;
}

void SN_GOturnleft()           //SN左转绿灯
{
	  SNleft_Green=1;
	  SNturn_Yellow=0;
	  SNleft_Red=0;
}

void SN_STOPturnleft()         //SN左转红灯
{
	  SNleft_Green=0;
	  SNturn_Yellow=0;
	  SNleft_Red=1;
}

void EW_GOturnright()          //EW右转绿灯
{
	  EWright_Green=1;
	  EWturn_Yellow=0;
	  EWright_Red=0;
}

void EW_STOPturnright()        //EW右转红灯
{
	  EWright_Green=0;
	  EWturn_Yellow=0;
	  EWright_Red=1;
}

void EW_GOturnleft()           //EW左转绿灯
{
	  EWleft_Green=1;
	  EWturn_Yellow=0;
	  EWleft_Red=0;
}

void EW_STOPturnleft()         //EW左转红灯
{
	  EWleft_Green=0;
	  EWturn_Yellow=0;
	  EWleft_Red=1;
}

4.? 仿真proteus8.6

? 本设计采用proteus8.6软件(内附安装包)实现仿真设计,如下图所示。proteus软件一般存在高低版本兼容问题,该仿真是通过proteus8.6导出的,所以请尽量使用proteus8.6打开文件,低于proteus8.6的版本不能够正常使用,高于proteus8.6的版本除了proteus8.8/8.9理论上可以正常使用。

初始界面:

东西通行:

南北通行:

5.? 设计报告

设计报告主要包括硬件电路、软件设计、仿真调试等等,仅供参考。

6.? 资料清单

设计资料主要包括C程序+仿真+设计报告+使用说明+元件清单+操作视频等。

7.? 资料获取链接

百度网盘下载链接:【M03】百度网盘下载链接

更多单片机仿真设计合集:单片机仿真设计合集

  • 单片机仿真设计合集资料获取.pdf
    下载

相关推荐