J028 51單片機(jī)簡易交通燈_代碼易懂版_仿真代碼_報告_講解
仿真圖proteus 7.8
程序編譯器:keil 4/keil 5
設(shè)計編號:J028
工作狀態(tài):
狀態(tài)1:南北方向綠燈通行12秒,東西紅燈禁止通行15秒,分別倒計時;
狀態(tài)2:南北方向黃燈提醒3秒,東西繼續(xù)紅燈倒計時;
狀態(tài)3:東西方向綠燈通行9秒,南北方向禁止通行12秒;
狀態(tài)4:東西方向黃燈提醒3秒,南北繼續(xù)紅燈倒計時;
狀態(tài)5:執(zhí)行狀態(tài)1,反復(fù)循環(huán)。
程序部分講解
主要的核心點是倒計時,和LED燈亮滅控制
記住這個就可以設(shè)計軟件了。首先要有時間基礎(chǔ),倒計時從哪來呢?
一般兩個來源:
1,延時
```C delay(1000ms); ```
通過死循環(huán)卡主軟件的運(yùn)行來達(dá)到延時效果,程序執(zhí)行效率極低,不可取。
2,定時
通過定時器產(chǎn)生時基。軟件設(shè)置50ms產(chǎn)生一次定時中斷,在中斷執(zhí)行函數(shù)中做計數(shù)。
EA=1; //開總中斷 // EX1=1;//外部中斷1 // IT1=1;//設(shè)置下降沿觸發(fā)中斷1 TMOD|= 0X01; TH0=(65536-50000)/256; TL0=(65536-50000)%256;//12M晶振 50ms定時初值 ET0=1; //允許定時器0中斷 TR0=1;//啟動定時器0 state=0;
50ms執(zhí)行一次中斷函數(shù),通過one_sec_flag累加到20判斷時間過去了一秒。設(shè)置一秒標(biāo)志位scan_flag置一。
void Timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256;//12M晶振 50ms定時初值 if(++half_sec_flag>10){ half_sec_flag=0; half_flag1s=1; } if(++one_sec_flag<20){ return;//提前結(jié)束函數(shù) } one_sec_flag=0; if(run_mode==0){//不是正常運(yùn)行時,不紅綠燈數(shù)值不減一 flag1s=1; } }
在主函數(shù)while循環(huán)里判斷標(biāo)志位,如果是1,則倒計時計數(shù)值減一,即完成了倒計時的軟件設(shè)計思路
//LED和數(shù)碼管顯示,時刻刷新 if(flag1s)//一秒執(zhí)行一次 { flag1s=0; main_road_time--; //紅綠燈倒計時時間減 secondary_road_time--; }
仿真圖(提供源文件):




程序(提供源文件源碼):

程序流程框圖

系統(tǒng)硬件框圖

設(shè)計報告

資料清單(提供資料清單所有文件):

審核編輯:湯梓紅
-
led
+關(guān)注
關(guān)注
243文章
24594瀏覽量
690821 -
51單片機(jī)
+關(guān)注
關(guān)注
278文章
5714瀏覽量
134278 -
交通燈
+關(guān)注
關(guān)注
13文章
325瀏覽量
40840
原文標(biāo)題:51單片機(jī)簡易交通燈(代碼易懂版_仿真代碼_報告_講解)
文章出處:【微信號:嘉盛單片機(jī),微信公眾號:嘉盛單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
基于51單片機(jī)的交通燈
請問一下怎樣去設(shè)計一種基于51單片機(jī)的簡易交通燈?
交通燈程序設(shè)計 交通燈protues仿真程序基于51單片機(jī)交通燈
使用51單片機(jī)實現(xiàn)交通燈的程序
51單片機(jī)設(shè)計簡易交通燈
基于51單片機(jī)的簡易交通燈設(shè)計
評論