• 方案介紹
    • 1.? 簡(jiǎn)介
    • 2.? 主要功能
    • 3.? 源程序(Keil5)
    • 4.? 仿真proteus8.6
    • 5.? 設(shè)計(jì)報(bào)告
    • 6.? 資料清單
    • 7.? 資料獲取鏈接
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

基于51單片機(jī)的多功能交通燈設(shè)計(jì)!!!

04/17 08:35
450
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf

共1個(gè)文件

資料清單:C程序+仿真+設(shè)計(jì)報(bào)告+使用說(shuō)明+元件清單+操作視頻

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

程序編譯:Keil5 C51

編程語(yǔ)言:C語(yǔ)言

設(shè)計(jì)編號(hào):【M03】

1.? 簡(jiǎn)介

? 本文提出了一種基于51單片機(jī)的智能交通燈設(shè)計(jì)。該設(shè)計(jì)在硬件方面主要采用AT89C51單片機(jī)作為主控核心,結(jié)合獨(dú)立按鍵、數(shù)碼管、LED燈,實(shí)現(xiàn)不同的紅綠燈切換時(shí)間,并且具有倒計(jì)時(shí)的功能。

2.? 主要功能

a.當(dāng)主干道通行亮綠燈時(shí),支干道亮紅燈,而支干道亮綠燈時(shí),主干道亮紅燈。

b.主支干道交替通行,主干道每次放行60s、支干道30s,設(shè)計(jì)60s和30s計(jì)時(shí)顯示電路。

c.在過(guò)程中間,要亮5s的黃燈作為過(guò)渡,設(shè)置5s計(jì)時(shí)顯示電路。

d.有緊急車輛要求通過(guò)時(shí),系統(tǒng)要能禁止東西或南北兩條路上所有的車輛通行。

3.? 源程序(Keil5)

本設(shè)計(jì)采用keil5 C51軟件(內(nèi)附安裝包)實(shí)現(xiàn)程序設(shè)計(jì)。如需用keil4打開程序,可自行通過(guò).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;     //南北轉(zhuǎn)向黃燈
sbit    EWturn_Yellow=P1^7;     //東西轉(zhuǎn)向黃燈
	
sbit    Time_Button=P3^0;       //時(shí)間加減按鈕判斷輸入端
sbit    QZ_Button=P3^1;         //強(qiáng)制通行方向判斷輸入端

bit     Flag_SNstraight_Yellow;  //SN直行黃燈標(biāo)志位
bit     Flag_EWstraight_Yellow;  //EW直行黃燈標(biāo)志位
bit     Flag_SNturn_Yellow;      //SN轉(zhuǎn)向黃燈標(biāo)志位
bit     Flag_EWturn_Yellow;      //EW轉(zhuǎn)向黃燈標(biāo)志位
bit     QZ_EW;					         //EW強(qiáng)制通行標(biāo)志
bit     QZ_SN;					         //SN強(qiáng)制通行標(biāo)志
bit     QZ_flag;                 //數(shù)碼管強(qiáng)制標(biāo)志

char	Time_EW;                //東西方向倒計(jì)時(shí)單元
char	Time_SN;                //南北方向倒計(jì)時(shí)單元

uchar EW=30,SN=30,EWL=60,SNL=60; //倒計(jì)時(shí)時(shí)長(zhǎng)

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


/*********************延時(shí)函數(shù)**********************/
void	Delay(uchar	 a)
	{
		while(a--);
	}


/*******************顯示函數(shù),顯示倒計(jì)時(shí)的值**********************/
void	Display(void)
{
		char h,l;
		h=Time_EW/10;		//EW方向計(jì)時(shí)的十位數(shù)
		l=Time_EW%10;		//EW方向計(jì)時(shí)的個(gè)位數(shù)
  	P0=table[l];		//顯示EW計(jì)時(shí)時(shí)間的低位
		EW_LED2=1;
		Delay(2);
		EW_LED2=0;
	  P0=table[h];		//顯示EW計(jì)時(shí)時(shí)間的高位
		EW_LED1=1;
		Delay(2);
		EW_LED1=0;

		h=Time_SN/10;		//SN方向計(jì)時(shí)的十位數(shù)
		l=Time_SN%10;		//SN方向計(jì)時(shí)的個(gè)位數(shù)
		P0=table[l];		//顯示SN計(jì)時(shí)時(shí)間的低位
		SN_LED2=1;
		Delay(2);
		SN_LED2=0;
	  P0=table[h];		//顯示SN計(jì)時(shí)時(shí)間的高位
		SN_LED1=1;
		Delay(2);
		SN_LED1=0;
		
} 

/*******************顯示函數(shù),強(qiáng)制通行的值**********************/
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;
		}			
			
} 

/************************信號(hào)燈控制函數(shù)******************/
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右轉(zhuǎn)綠燈
{
	  SNright_Green=1;
	  SNturn_Yellow=0;
	  SNright_Red=0;
}

void SN_STOPturnright()        //SN右轉(zhuǎn)紅燈
{
	  SNright_Green=0;
	  SNturn_Yellow=0;
	  SNright_Red=1;
}

void SN_GOturnleft()           //SN左轉(zhuǎn)綠燈
{
	  SNleft_Green=1;
	  SNturn_Yellow=0;
	  SNleft_Red=0;
}

void SN_STOPturnleft()         //SN左轉(zhuǎn)紅燈
{
	  SNleft_Green=0;
	  SNturn_Yellow=0;
	  SNleft_Red=1;
}

void EW_GOturnright()          //EW右轉(zhuǎn)綠燈
{
	  EWright_Green=1;
	  EWturn_Yellow=0;
	  EWright_Red=0;
}

void EW_STOPturnright()        //EW右轉(zhuǎn)紅燈
{
	  EWright_Green=0;
	  EWturn_Yellow=0;
	  EWright_Red=1;
}

void EW_GOturnleft()           //EW左轉(zhuǎn)綠燈
{
	  EWleft_Green=1;
	  EWturn_Yellow=0;
	  EWleft_Red=0;
}

void EW_STOPturnleft()         //EW左轉(zhuǎn)紅燈
{
	  EWleft_Green=0;
	  EWturn_Yellow=0;
	  EWleft_Red=1;
}

4.? 仿真proteus8.6

? 本設(shè)計(jì)采用proteus8.6軟件(內(nèi)附安裝包)實(shí)現(xiàn)仿真設(shè)計(jì),如下圖所示。proteus軟件一般存在高低版本兼容問(wèn)題,該仿真是通過(guò)proteus8.6導(dǎo)出的,所以請(qǐng)盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。

初始界面:

東西通行:

南北通行:

5.? 設(shè)計(jì)報(bào)告

設(shè)計(jì)報(bào)告主要包括硬件電路、軟件設(shè)計(jì)、仿真調(diào)試等等,僅供參考。

6.? 資料清單

設(shè)計(jì)資料主要包括C程序+仿真+設(shè)計(jì)報(bào)告+使用說(shuō)明+元件清單+操作視頻等。

7.? 資料獲取鏈接

百度網(wǎng)盤下載鏈接:【M03】百度網(wǎng)盤下載鏈接

更多單片機(jī)仿真設(shè)計(jì)合集:單片機(jī)仿真設(shè)計(jì)合集

  • 單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf
    下載

相關(guān)推薦