|
一個(gè)非常牛逼的51單片機(jī)交通燈仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
雙向六車(chē)道模擬,人行橫道也有倒計(jì)時(shí):
人行橫道:
SN方向急車(chē)通行按鍵(例如120)
EW方向急車(chē)通行按鍵(例如119)
系統(tǒng)控制開(kāi)關(guān),閉合系統(tǒng)停止工作,斷開(kāi)系統(tǒng)繼續(xù)工作
1、系統(tǒng)上電工作時(shí),SN方向綠燈亮,進(jìn)入SN通車(chē)模式,通車(chē)時(shí)間40S,SN人行道開(kāi)通,EW方向紅燈亮,禁止通行,
2、SN方向倒計(jì)時(shí)剩5秒時(shí),黃燈閃爍,此時(shí)切換到SN左拐模式,左拐燈亮,左拐的維持時(shí)間是20S
3、左拐倒計(jì)時(shí)5秒時(shí),黃燈閃爍,進(jìn)入EW通車(chē)模式,通車(chē)時(shí)間40S,此時(shí)SN人行道綠燈滅,EW綠燈亮,EW人行道燈亮,SN紅燈亮,禁止通車(chē)
4、EW通車(chē)倒計(jì)時(shí)5秒時(shí),黃燈閃爍,進(jìn)入左拐模式,左拐燈亮,左拐維持時(shí)間20S
5、左拐倒計(jì)時(shí)5秒時(shí),黃燈閃爍,再次進(jìn)入SN通車(chē)模式,通車(chē)時(shí)間40S,此時(shí)EW人行道綠燈滅,SN綠燈亮,SN人行道燈亮,EW紅燈亮,禁止通車(chē)
周而復(fù)始,維持上面的過(guò)程
1、繁忙按鍵按下時(shí),道路的通行時(shí)間得到調(diào)整會(huì)減少,這樣可以增加紅綠燈切換的頻率,方便通行
2、時(shí)間+和時(shí)間-分別是增加和減少綠燈開(kāi)通時(shí)間
3、SN急車(chē)通行按鍵第一次按下時(shí),表示有急車(chē)通行,無(wú)論SN方向的狀態(tài)如何,都應(yīng)亮綠燈,EW亮紅燈,數(shù)字暫停倒數(shù),方便急車(chē)通過(guò)當(dāng)SN急車(chē)按鍵第二次按下時(shí),表示急車(chē)通過(guò)了,此時(shí)SN綠燈滅,SN方向的黃燈閃爍,恢復(fù)原來(lái)的狀態(tài)
4、EW急車(chē)通行按鍵第一次按下時(shí),表示EW有急車(chē)通行,無(wú)論EW方向的狀態(tài)如何,都應(yīng)亮綠燈,SN亮紅燈,數(shù)字暫停倒數(shù),方便急車(chē)通過(guò)當(dāng)EW急車(chē)按鍵第二次按下時(shí),表示急車(chē)通過(guò)了,此時(shí)EW綠燈滅,EW方向的黃燈閃爍,恢復(fù)原來(lái)的狀態(tài)
系統(tǒng)控制開(kāi)關(guān),閉合系統(tǒng)停止工作,斷開(kāi)系統(tǒng)繼續(xù)工作
單片機(jī)源程序如下,代碼也有詳細(xì)的中文注釋:
- /*****************************************************
- 十字路口交通燈控制 C 程序
- ******************************************************/
- #define uchar unsigned char
- #define uint unsigned int
- #include <reg52.h>
- /*****定義控制位**********************/
- sbit XIANSHI_SHIJIAN_ZHISHIDENG2=P2^5;
- sbit XIANSHI_SHIJIAN_ZHISHIDENG1=P2^4;
- sbit DONGXI_ZHISHIDENG2=P2^3;
- sbit DONGXI_ZHISHIDENG1=P2^2;
- sbit NANBEI_ZHISHIDENG2=P2^1;
- sbit NANBEI_ZHISHIDENG1=P2^0;
- sbit NANBEI_HUANGDENG=P1^6;
- sbit DONGXI_HUANGDENG=P1^2;
- sbit DONGXI_HONGDENG=P1^3;
- sbit NANBEI_HONGDENG=P1^7;
- sbit DONGXI_PEOPLE=P3^0;
- sbit NANBEI_PEOPLE=P3^1;
- sbit kongzhi=P2^6;
- //sbit Busy_LED=P2^7;//交通繁忙指示燈
- sbit ZHENGCANG_ANJIAN=P3^5;//交通正常按鍵
- sbit FANMANG_ANJIAN=P3^6;//交通繁忙按鍵
- sbit NANBEI_JICHE_ANJIAN=P3^7;//南北方向急車(chē)通行按鍵
- sbit DONGXI_JICHE_ANJIAN=P2^7;//東西方向急車(chē)通行按鍵
- sbit SHIJIAN_JIAJIA=P3^3;//時(shí)間加
- sbit SHIJIAN_JIANJIAN=P3^4;//時(shí)間減
- bit NANBEI_HUANGDENG_BIAOZHI; //SN黃燈標(biāo)志位
- bit DONGXI_HUANGDENG_BIAOZHI;//EW黃燈標(biāo)志位
- char DONGXI_DAOJISHI;//東西方向倒計(jì)時(shí)單元
- char NANBEI_DAOJISHI;//南北方向倒計(jì)時(shí)單元
- uchar DONGXI=60,NANBEI=40,EWL=19,SNL=19; //程序初始化賦值,正常模式
- uchar EW1=60,SN1=40,EWL1=19,SNL1=19;//用于存放修改值的變量
- uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//1~~~~9段選碼
- uchar code S[8]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84};//交通信號(hào)燈控制代碼
- uchar code S1[8]={0X28,0X08,0X82,0X80,0X82,0X84,0X81,0X84};//交通信號(hào)燈控制代碼
- /**********************延時(shí)子程序************************/
- void Delay(uchar a)
- {
- uchar i;
- i=a;
- while(i--){;}
- }
- /*****************顯示子函數(shù)**************************/
- void Display(void)
- {
- char h,l;
- h=DONGXI_DAOJISHI/10;
- l=DONGXI_DAOJISHI%10;
- P0=table[l];
- DONGXI_ZHISHIDENG2=1;
- Delay(2);
- DONGXI_ZHISHIDENG2=0;
- P0=table[h];
- DONGXI_ZHISHIDENG1=1;
- Delay(2);
- DONGXI_ZHISHIDENG1=0;
- h=NANBEI_DAOJISHI/10;
- l=NANBEI_DAOJISHI%10;
- P0=table[l];
- NANBEI_ZHISHIDENG2=1;
- Delay(2);
- NANBEI_ZHISHIDENG2=0;
- P0=table[h];
- NANBEI_ZHISHIDENG1=1;
- Delay(2);
- NANBEI_ZHISHIDENG1=0;
-
- h= EW1/10;
- l= EW1%10;
- P0=table[l];
- XIANSHI_SHIJIAN_ZHISHIDENG1=1;
- Delay(2);
- XIANSHI_SHIJIAN_ZHISHIDENG1=0;
- P0=table[h];
- XIANSHI_SHIJIAN_ZHISHIDENG2=1;
- Delay(2);
- XIANSHI_SHIJIAN_ZHISHIDENG2=0;
- }
- /**********************外部0中斷服務(wù)程序************************/
- unsigned char FastCar_Flag_SN=0;
- unsigned char FastCar_Flag_EW=0;
- unsigned char Start_Flag=0;
- void EXINT0(void)interrupt 0 using 1
- {
- EX0=0; //關(guān)中斷
- if(SHIJIAN_JIAJIA==0) //時(shí)間加
- {
- EW1+=5;
- SN1+=5;
- if(EW1>=100)
- {
- EW1=99;
- SN1=79;
- }
- }
- if(SHIJIAN_JIANJIAN==0) //時(shí)間減
- {
- EW1-=5;
- SN1-=5;
- if(EW1<=40)
- {
- EW1=40;
- SN1=20;
- }
-
- }
- if(ZHENGCANG_ANJIAN==0)//測(cè)試按鍵是否按下,按下為正常狀態(tài)
- {
- EW1=60;
- SN1=40;
- EWL1=19;
- SNL1=19;
- // Busy_LED=0;//關(guān)繁忙信號(hào)燈
- // Special_LED =0;//關(guān)特殊信號(hào)燈
- }
- if(FANMANG_ANJIAN==0) //測(cè)試按鍵是否按下,按下為繁忙狀態(tài)
- {
- EW1=45;
- SN1=30;
- EWL1=14;
- SNL1=14;
- // Special_LED=0;//關(guān)特殊信號(hào)燈
- // Busy_LED=1;//開(kāi)繁忙信號(hào)燈
- }
- if(NANBEI_JICHE_ANJIAN==0)//測(cè)試按鍵是否按下,按下為南北方向急車(chē)通行特殊狀態(tài)
- {
- FastCar_Flag_SN++;
- if(FastCar_Flag_SN==1) //南北方向有急車(chē)通行
- {
- Start_Flag=1;
- ET0=0; //關(guān)閉定時(shí)器
-
- }
- else if(FastCar_Flag_SN==2)
- {
- FastCar_Flag_SN=0;
- Start_Flag=0;
- ET0=1;
- }
- }
-
- if(DONGXI_JICHE_ANJIAN==0)//測(cè)試按鍵是否按下,按下為特殊狀態(tài)
- {
- FastCar_Flag_EW++;
- if(FastCar_Flag_EW==1) //南北方向有急車(chē)通行
- {
- Start_Flag=1;
- ET0=0; //關(guān)閉定時(shí)器
-
- }
- else if(FastCar_Flag_EW==2)
- {
- FastCar_Flag_EW=0;
- Start_Flag=0;
- ET0=1;
- }
-
- }
- EX0=1;//開(kāi)中斷
- }
- /**********************T0中斷服務(wù)程序*******************/
- char TIME_YELLOW_COUNT=3;
- char SN_YELLOW_COUNT_Flag=0;
- char EW_YELLOW_COUNT_Flag=0;
- void timer0(void)interrupt 1 using 1
- {
- static uchar count;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- count++;
- if(kongzhi==0)
- {
- while(1)
- {
- EA=0;
- if(kongzhi==1)
- {
- EA=1;
- break;
- }
-
-
- }
- }
- if(count==10)
- {
- if(NANBEI_HUANGDENG_BIAOZHI==1) //測(cè)試南北黃燈標(biāo)志位
- NANBEI_HUANGDENG=~NANBEI_HUANGDENG;
- if(DONGXI_HUANGDENG_BIAOZHI==1) //測(cè)試東西黃燈標(biāo)志位
- DONGXI_HUANGDENG=~DONGXI_HUANGDENG;
-
-
- }
- if(count==20)
- {
- DONGXI_DAOJISHI--;
- NANBEI_DAOJISHI--;
- TIME_YELLOW_COUNT--;
- if(NANBEI_HUANGDENG_BIAOZHI==1)//測(cè)試南北黃燈標(biāo)志位
- {NANBEI_HUANGDENG=~NANBEI_HUANGDENG;}
- if(DONGXI_HUANGDENG_BIAOZHI==1)//測(cè)試東西黃燈標(biāo)志位
- {DONGXI_HUANGDENG=~DONGXI_HUANGDENG;}
- count=0;
- }
-
- }
- /*********************主程序開(kāi)始**********************/
- void main(void)
- {
- // Busy_LED=0;
- // Special_LED=0;
- IT0=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中斷
- TR0=1;//啟動(dòng)定時(shí)
-
- while(1)
- {
- if(Start_Flag==0)
- {
-
- /*******S0狀態(tài)**********/
- DONGXI_PEOPLE=0; //EW人行道禁止
- NANBEI_PEOPLE=1;//SN人行道通行
- DONGXI_HUANGDENG_BIAOZHI=0; //EW關(guān)黃燈顯示信號(hào)
- DONGXI_DAOJISHI=DONGXI;
- NANBEI_DAOJISHI=NANBEI;
-
- while(NANBEI_DAOJISHI>=5)
- {
-
- if(Start_Flag==1&&FastCar_Flag_SN==1) //SN急車(chē)通行后會(huì)置Start_Flag為1 ,用來(lái)判斷是否急車(chē)通過(guò)
- {
- TIME_YELLOW_COUNT=3; //給急車(chē)過(guò)后的黃燈閃時(shí)間置3秒
- P1=S1[0]; //SN通行,EW紅燈
- SN_YELLOW_COUNT_Flag=1; //黃燈閃標(biāo)志
- Display(); //顯示當(dāng)前時(shí)間
- }
- else if(Start_Flag==1&&FastCar_Flag_EW==1) //EW急車(chē)通行后會(huì)置Start_Flag為1 ,用來(lái)判斷是否急車(chē)通過(guò)
- {
- TIME_YELLOW_COUNT=3; //給急車(chē)過(guò)后的綠燈閃時(shí)間置3秒
- P1=S1[2]; //EW通行,SN紅燈
- EW_YELLOW_COUNT_Flag=1; //黃燈閃標(biāo)志
- Display(); //顯示當(dāng)前時(shí)間
- }
- if(Start_Flag==0)
- {
- if( SN_YELLOW_COUNT_Flag==1) //SN急車(chē)過(guò)后開(kāi)始閃SN黃燈
- {
- P1=S1[1]; //SN燈全滅,EW紅燈
- while(TIME_YELLOW_COUNT>=0) //黃燈閃的時(shí)間是3秒
- {
- NANBEI_HUANGDENG_BIAOZHI=1; //SN開(kāi)黃燈信號(hào)位
- Display(); //開(kāi)始顯示當(dāng)前數(shù)字
- }
- SN_YELLOW_COUNT_Flag=0; //關(guān)急車(chē)通行黃燈閃標(biāo)志
- NANBEI_HUANGDENG_BIAOZHI=0; //SN關(guān)黃燈信號(hào)位
- }
- else if(EW_YELLOW_COUNT_Flag==1) //EW急車(chē)過(guò)后開(kāi)始閃EW黃燈
- {
- P1=S1[3]; //EW燈全滅,SN紅燈
- while(TIME_YELLOW_COUNT>=0) //黃燈閃的時(shí)間是3秒
- {
- DONGXI_HUANGDENG_BIAOZHI=1; //EW開(kāi)黃燈信號(hào)位
- Display(); //開(kāi)始顯示當(dāng)前數(shù)字
- }
- EW_YELLOW_COUNT_Flag=0; //關(guān)急車(chē)通行黃燈閃標(biāo)志
- DONGXI_HUANGDENG_BIAOZHI=0; //EW關(guān)黃燈信號(hào)位
-
-
- }
- P1=S[0]; //恢復(fù)初始狀態(tài)
- Display();
- }
- } //SN黃燈亮,等待左拐信號(hào),EW紅燈
- /*******S1狀態(tài)**********/
- P1=0x00;
- while(NANBEI_DAOJISHI>=0)
- {
- NANBEI_HUANGDENG_BIAOZHI=1; //SN開(kāi)黃燈信號(hào)位
- DONGXI_HONGDENG=1; //SN黃燈亮,等待左拐信號(hào),EW紅燈
- Display();
- }
- DONGXI_PEOPLE=0; //EW人行道禁止
- NANBEI_PEOPLE=0;//SN人行道通行
- /*******S2狀態(tài)**********/
- NANBEI_HUANGDENG_BIAOZHI=0; //SN關(guān)黃燈顯示信號(hào)
- NANBEI_DAOJISHI=SNL;
- while(NANBEI_DAOJISHI>=5)
- {
- if(Start_Flag==1&&FastCar_Flag_SN==1) //SN急車(chē)通行后會(huì)置Start_Flag為1 ,用來(lái)判斷是否急車(chē)通過(guò)
- {
- TIME_YELLOW_COUNT=3; //給急車(chē)過(guò)后的黃燈閃時(shí)間置3秒
- P1=S1[0]; //SN通行,EW紅燈
- SN_YELLOW_COUNT_Flag=1; //黃燈閃標(biāo)志
- Display(); //顯示當(dāng)前時(shí)間
- }
- else if(Start_Flag==1&&FastCar_Flag_EW==1) //EW急車(chē)通行后會(huì)置Start_Flag為1 ,用來(lái)判斷是否急車(chē)通過(guò)
- {
- TIME_YELLOW_COUNT=3; //給急車(chē)過(guò)后的綠燈閃時(shí)間置3秒
- P1=S1[2]; //EW通行,SN紅燈
- EW_YELLOW_COUNT_Flag=1; //黃燈閃標(biāo)志
- Display(); //顯示當(dāng)前時(shí)間
- }
- if(Start_Flag==0)
- {
- if( SN_YELLOW_COUNT_Flag==1) //SN急車(chē)過(guò)后開(kāi)始閃SN黃燈
- {
- P1=S1[1]; //SN燈全滅,EW紅燈
- while(TIME_YELLOW_COUNT>=0) //黃燈閃的時(shí)間是3秒
- {
- NANBEI_HUANGDENG_BIAOZHI=1; //SN開(kāi)黃燈信號(hào)位
- Display(); //開(kāi)始顯示當(dāng)前數(shù)字
- }
- SN_YELLOW_COUNT_Flag=0; //關(guān)急車(chē)通行黃燈閃標(biāo)志
- NANBEI_HUANGDENG_BIAOZHI=0; //SN關(guān)黃燈信號(hào)位
- }
- else if(EW_YELLOW_COUNT_Flag==1) //EW急車(chē)過(guò)后開(kāi)始閃EW黃燈
- {
- P1=S1[3]; //EW燈全滅,SN紅燈
- while(TIME_YELLOW_COUNT>=0) //黃燈閃的時(shí)間是3秒
- {
- DONGXI_HUANGDENG_BIAOZHI=1; //EW開(kāi)黃燈信號(hào)位
- Display(); //開(kāi)始顯示當(dāng)前數(shù)字
- }
- EW_YELLOW_COUNT_Flag=0; //關(guān)急車(chē)通行黃燈閃標(biāo)志
- DONGXI_HUANGDENG_BIAOZHI=0; //EW關(guān)黃燈信號(hào)位
-
-
- }
- P1=S[2];//SN左拐綠燈亮,EW紅燈
- Display();
- }
-
-
-
- }
- /*******S3狀態(tài)**********/
- P1=0x00;
- while(NANBEI_DAOJISHI>=0)
- {
- NANBEI_HUANGDENG_BIAOZHI=1; //SN開(kāi)黃燈信號(hào)位
- DONGXI_HONGDENG=1; //SN黃燈亮,等待停止信號(hào),EW紅燈
-
- Display();}
- /***********賦值**********/
- DONGXI=EW1;
- NANBEI=SN1;
- EWL=EWL1;
- SNL=SNL1;
- /*******S4狀態(tài)**********/
- DONGXI_PEOPLE=1; //EW人行道禁止
- NANBEI_PEOPLE=0;//SN人行道通行
- NANBEI_HUANGDENG_BIAOZHI=0; //SN關(guān)黃燈顯示信號(hào)
- DONGXI_DAOJISHI=NANBEI;
- NANBEI_DAOJISHI=DONGXI;
- while(DONGXI_DAOJISHI>=5)
- {
- if(Start_Flag==1&&FastCar_Flag_SN==1) //SN急車(chē)通行后會(huì)置Start_Flag為1 ,用來(lái)判斷是否急車(chē)通過(guò)
- {
- TIME_YELLOW_COUNT=3; //給急車(chē)過(guò)后的黃燈閃時(shí)間置3秒
- P1=S1[0]; //SN通行,EW紅燈
- SN_YELLOW_COUNT_Flag=1; //黃燈閃標(biāo)志
- Display(); //顯示當(dāng)前時(shí)間
- }
- else if(Start_Flag==1&&FastCar_Flag_EW==1) //EW急車(chē)通行后會(huì)置Start_Flag為1 ,用來(lái)判斷是否急車(chē)通過(guò)
- {
- TIME_YELLOW_COUNT=3; //給急車(chē)過(guò)后的綠燈閃時(shí)間置3秒
- P1=S1[2]; //EW通行,SN紅燈
- EW_YELLOW_COUNT_Flag=1; //黃燈閃標(biāo)志
- Display(); //顯示當(dāng)前時(shí)間
- }
-
- if(Start_Flag==0)
- {
- if( SN_YELLOW_COUNT_Flag==1) //SN急車(chē)過(guò)后開(kāi)始閃SN黃燈
- {
- P1=S1[1]; //SN燈全滅,EW紅燈
- while(TIME_YELLOW_COUNT>=0) //黃燈閃的時(shí)間是3秒
- {
- NANBEI_HUANGDENG_BIAOZHI=1; //SN開(kāi)黃燈信號(hào)位
- Display(); //開(kāi)始顯示當(dāng)前數(shù)字
- }
- SN_YELLOW_COUNT_Flag=0; //關(guān)急車(chē)通行黃燈閃標(biāo)志
- NANBEI_HUANGDENG_BIAOZHI=0; //SN關(guān)黃燈信號(hào)位
- }
-
- else if(EW_YELLOW_COUNT_Flag==1) //EW急車(chē)過(guò)后開(kāi)始閃EW黃燈
- {
- P1=S1[3]; //EW燈全滅,SN紅燈
- while(TIME_YELLOW_COUNT>=0) //黃燈閃的時(shí)間是3秒
- {
- DONGXI_HUANGDENG_BIAOZHI=1; //EW開(kāi)黃燈信號(hào)位
- Display(); //開(kāi)始顯示當(dāng)前數(shù)字
- }
- EW_YELLOW_COUNT_Flag=0; //關(guān)急車(chē)通行黃燈閃標(biāo)志
- DONGXI_HUANGDENG_BIAOZHI=0; //EW關(guān)黃燈信號(hào)位
-
- }
- P1=S[4]; //恢復(fù)EW通行,SN紅燈
- Display();
- }
-
-
- }
- /*******S5狀態(tài)**********/
- P1=0X00;
- while(DONGXI_DAOJISHI>=0)
- {
- DONGXI_HUANGDENG_BIAOZHI=1;//EW開(kāi)黃燈信號(hào)位
- NANBEI_HONGDENG=1;//EW黃燈亮,等待左拐信號(hào),SN紅燈
- Display();}
- /*******S6狀態(tài)**********/
- DONGXI_PEOPLE=0; //EW人行道禁止
- NANBEI_PEOPLE=0;//SN人行道通行
- DONGXI_HUANGDENG_BIAOZHI=0; //EW關(guān)黃燈顯示信號(hào)
- DONGXI_DAOJISHI=EWL;
- while(DONGXI_DAOJISHI>=5)
- {
- if(Start_Flag==1&&FastCar_Flag_SN==1) //SN急車(chē)通行后會(huì)置Start_Flag為1 ,用來(lái)判斷是否急車(chē)通過(guò)
- {
- TIME_YELLOW_COUNT=3; //給急車(chē)過(guò)后的黃燈閃時(shí)間置3秒
- P1=S1[0]; //SN通行,EW紅燈
- SN_YELLOW_COUNT_Flag=1; //黃燈閃標(biāo)志
- Display(); //顯示當(dāng)前時(shí)間
- }
- else if(Start_Flag==1&&FastCar_Flag_EW==1) //EW急車(chē)通行后會(huì)置Start_Flag為1 ,用來(lái)判斷是否急車(chē)通過(guò)
- {
- TIME_YELLOW_COUNT=3; //給急車(chē)過(guò)后的綠燈閃時(shí)間置3秒
- P1=S1[2]; //EW通行,SN紅燈
- EW_YELLOW_COUNT_Flag=1; //黃燈閃標(biāo)志
- Display(); //顯示當(dāng)前時(shí)間
- }
- if(Start_Flag==0)
- {
- if( SN_YELLOW_COUNT_Flag==1) //SN急車(chē)過(guò)后開(kāi)始閃SN黃燈
- {
- P1=S1[1]; //SN燈全滅,EW紅燈
- while(TIME_YELLOW_COUNT>=0) //黃燈閃的時(shí)間是3秒
- {
- NANBEI_HUANGDENG_BIAOZHI=1; //SN開(kāi)黃燈信號(hào)位
- Display(); //開(kāi)始顯示當(dāng)前數(shù)字
- }
- SN_YELLOW_COUNT_Flag=0; //關(guān)急車(chē)通行黃燈閃標(biāo)志
- NANBEI_HUANGDENG_BIAOZHI=0; //SN關(guān)黃燈信號(hào)位
- }
- else if(EW_YELLOW_COUNT_Flag==1) //EW急車(chē)過(guò)后開(kāi)始閃EW黃燈
- {
- P1=S1[3]; //EW燈全滅,SN紅燈
- while(TIME_YELLOW_COUNT>=0) //黃燈閃的時(shí)間是3秒
- {
- DONGXI_HUANGDENG_BIAOZHI=1; //EW開(kāi)黃燈信號(hào)位
- Display(); //開(kāi)始顯示當(dāng)前數(shù)字
- }
- EW_YELLOW_COUNT_Flag=0; //關(guān)急車(chē)通行黃燈閃標(biāo)志
- DONGXI_HUANGDENG_BIAOZHI=0; //EW關(guān)黃燈信號(hào)位
-
-
- }
- P1=S[6];//EW左拐綠燈亮,SN紅燈
- Display();
- }
- }
-
- /*******S7狀態(tài)**********/
- P1=0X00;
- while(DONGXI_DAOJISHI>=0)
- {
- DONGXI_HUANGDENG_BIAOZHI=1; //EN開(kāi)黃燈信號(hào)位
- NANBEI_HONGDENG=1;//EW黃燈亮,等待停止信號(hào),SN紅燈
- Display();}
-
- /***********賦值**********/
- DONGXI=EW1;
- NANBEI=SN1;
- EWL=EWL1;
- SNL=SNL1;
-
-
- }
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
交通燈電路.zip
(386.5 KB, 下載次數(shù): 99)
2020-7-6 01:51 上傳
點(diǎn)擊文件名下載附件
|
|