加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專(zhuān)業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入

基于51單片機(jī)的交通信號(hào)燈系統(tǒng)設(shè)計(jì)

09/23 10:07
890
服務(wù)支持:
技術(shù)交流群

完成交易后在“購(gòu)買(mǎi)成功”頁(yè)面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗(yàn)、收獲成長(zhǎng)和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購(gòu)買(mǎi)后不支持退換且無(wú)法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
實(shí)物圖
相關(guān)方案
  • 方案介紹
  • 相關(guān)文件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

功能:

十字路口交通燈控制程序: 正常時(shí),EW方向計(jì)時(shí)60s,SN方向計(jì)時(shí)40s 若按時(shí)間加按鍵(Add_Button)按鈕,EW、SN方向各加5s,不可大于99s,79s 若按時(shí)間減按鍵(Reduces_Button)按鍵,EW、SN方向各減5s,不可小于40s,20s 若按EW方向強(qiáng)制通行(QZ_EW_Btton)按鈕,EW方向強(qiáng)制通行,SN方向禁止通行 若按SN方向強(qiáng)制通行(QZ_SN_Btton)按鈕,SN方向強(qiáng)制通行,EW方向禁止通行。

仿真原理圖

/ #define TRAFFIC_GLOBAL 1

#include "TRAFFIC.H"

/********************************************************************************************

* 函數(shù)名稱(chēng):延時(shí)子程序

* 功??? 能:延時(shí),給LED顯示的延時(shí)時(shí)間

* 入口參數(shù):時(shí)間參數(shù)

* 出口參數(shù):無(wú)

*********************************************************************************************/

void Delay(uchar???? a)

{

uchar?????? i;

i=a;

while(i--){;}

}

/********************************************************************************************

* 函數(shù)名稱(chēng):顯示子函數(shù)

* 功??? 能:EW方向,SN方向主干道數(shù)碼管顯示驅(qū)動(dòng)

* 入口參數(shù):無(wú)

* 出口參數(shù):無(wú)

*********************************************************************************************/

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;

h= EW1/10;????????????????????? //直行時(shí)間的十位

l= EW1%10;????????????????????? //直行時(shí)間的個(gè)位

P0=table[l];????????????? //時(shí)間的個(gè)位顯示

Time_Show_LED1=1;

Delay(2);

Time_Show_LED1=0;

P0=table[h];???????????? //時(shí)間的十位顯示

Time_Show_LED2=1;

Delay(2);

Time_Show_LED2=0;

}

/********************************************************************************************

* 函數(shù)名稱(chēng):外部0中斷服務(wù)程序

* 功??? 能:中斷,檢測(cè)按鈕的類(lèi)別,執(zhí)行相應(yīng)的操作;

若Add_Button==0,通行時(shí)間加5s ;

若Reduces_Button==0,通行時(shí)間減5s ;

若Busy_Btton==0,開(kāi)繁忙信號(hào)燈,關(guān)特殊信號(hào)燈,通行時(shí)間45s,30s;

若Add_Button==0,關(guān)繁忙信號(hào)燈,開(kāi)特殊信號(hào)燈,通行時(shí)間75s,55s;

* 入口參數(shù):無(wú)

* 出口參數(shù):無(wú)

*********************************************************************************************/

void EXINT0(void) interrupt 0 using 0

{

EA = 0;??????????????????? //關(guān)中斷

if(Add_Button==0)????????????????? //時(shí)間加

{

EW1+=5;?????????????????????????????????? ?? //通行時(shí)間加5s

SN1+=5;

if(EW1>=100)????????????? ?? //通行時(shí)間不得大于100s,80s

{

EW1=99;

SN1=79;

}

}

if(Reduces_Button==0)??? ?????????//時(shí)間減

{

EW1-=5;?????????????????? ????? //通行時(shí)間減5s

SN1-=5;

if(EW1<=40)??????????? ????? //通行時(shí)間不得小于40s,20s

{

EW1=40;

SN1=20;

}

}

EA = 1;????????????????? //開(kāi)中斷

}

/******************************************************************************

* 函數(shù)名稱(chēng):外部中斷1

* 功??? 能:中斷,當(dāng)遇到緊急情況,需要人工控制時(shí),強(qiáng)制直行的函數(shù)處理

若QZ_EW_Btton按下時(shí),EW方向綠燈亮,SN方向紅燈亮 ,并點(diǎn)亮QZ_EW_LED指示燈

若QZ_SN_Btton按下時(shí),EW方向紅燈亮,SN方向綠燈亮 ,并點(diǎn)亮QZ_SN_LED指示燈

* 入口參數(shù):無(wú)

* 出口參數(shù):無(wú)

********************************************************************************/

void EXINT1(void) interrupt 2 using 2

{

EA = 0;

if(QZ_EW_Btton==0)????????????? //EW方向強(qiáng)制通行按鍵是否按下

{

QZ_EW = ~QZ_EW; ?????? //

QZ_SN = 0;

if(QZ_EW)

{QZ_EW_LED = 1;

QZ_SN_LED = 0;}

else? ????? ???QZ_EW_LED = 0;

}

if(QZ_SN_Btton==0)???????????? //測(cè)試按鍵是否按下,按下為特殊狀態(tài)

{

QZ_SN = ~QZ_SN;

QZ_EW = 0;

if(QZ_SN)

{QZ_SN_LED = 1;

QZ_EW_LED = 0;}

else

QZ_SN_LED = 0;

}

EA = 1;

}

/******************************************************************************

* 函數(shù)名稱(chēng):main()

* 功??? 能:主函數(shù)

* 入口參數(shù):無(wú)

* 出口參數(shù):無(wú)

********************************************************************************/

void main(void)

{

QZ_EW_LED = 0;

QZ_SN_LED = 0;

QZ_EW = 0;

QZ_SN = 0;

IT0=1;????? ??????????????????? //INT0負(fù)跳變觸發(fā)

IT1=1;????????????????? //INT0負(fù)跳變觸發(fā)

TMOD=0x01;???? ?????????????//定時(shí)器工作于方式1

TH0=(65536-50000)/256;????? //定時(shí)器賦初值

TL0=(65536-50000)%256;

EA=1;?????????????????????? //CPU開(kāi)中斷總允許

ET0=1;????????????????????? //開(kāi)定時(shí)中斷

EX0=1;????????????????????? //開(kāi)外部INTO中斷

EX1=1;????????????????????? //開(kāi)外部INT1中斷

TR0=1;????????????????????? //啟動(dòng)定時(shí)

while(1)

{????????????????????????????????? /*******SN通行,EW紅燈*** ***************/

Flag_EW_Yellow=0;???????????? //EW關(guān)黃燈顯示信號(hào)

Time_EW=EW;

Time_SN=SN;

while(Time_SN>=5&QZ_EW == 0&QZ_SN == 0)

{P1=LIGHT[0];???????? ????????????? //SN通行,EW紅燈

Display();}

/*******SN黃燈亮,等待左拐信號(hào),EW紅燈***/

P1=0x00;

while(Time_SN>=0&QZ_EW == 0&QZ_SN == 0)

{Flag_SN_Yellow=1; ????????? //SN開(kāi)黃燈信號(hào)位

EW_Red=1;???????????????????? //SN黃燈亮,等待左拐信號(hào),EW紅燈

Display();

}

/*******SN左拐綠燈亮,EW紅燈*************/

Flag_SN_Yellow=0;???????????? //SN關(guān)黃燈顯示信號(hào)

Time_SN=SNL;

while(Time_SN>=5&QZ_EW == 0&QZ_SN == 0)

{P1=LIGHT[2];???????????????? //SN左拐綠燈亮,EW紅燈

Display();}

/*******SN黃燈亮,等待停止信號(hào),EW紅燈******/

P1=0x00;

while(Time_SN>=0&QZ_EW == 0&QZ_SN == 0)

{Flag_SN_Yellow=1; ????????? //SN開(kāi)黃燈信號(hào)位

EW_Red=1;???????????????????? //SN黃燈亮,等待停止信號(hào),EW紅燈

Display();}

/****EW黃燈亮,等待停止信號(hào),SN紅燈***/

P1=0X00;

while(Time_EW>=0&QZ_EW == 0&QZ_SN == 0)

{Flag_EW_Yellow=1;?????????????? //EW開(kāi)黃燈信號(hào)位

SN_Red=1;?????????????????????? //EW黃燈亮,等待停止信號(hào),SN紅燈

Display();}

/*********EW方向強(qiáng)制通行**************/

while(QZ_EW)

{Time_EW = 88;

Time_SN = 88;

EW1 = 88;

Display();

P1=LIGHT[4];???????? ??????????????? //EW通行,SN紅燈

EW1 = 60;

SN1 = 40;}

/*********SN方向強(qiáng)制通行**************/

while(QZ_SN)

{Time_EW = 88;

Time_SN = 88;

EW1 = 88;

 

  • 有需要資料的可了解一下.docx

相關(guān)推薦

電子產(chǎn)業(yè)圖譜