J028 51單片機(jī)簡易交通燈_代碼易懂版_仿真代碼_報(bào)告_講解
仿真圖proteus 7.8
程序編譯器:keil 4/keil 5
設(shè)計(jì)編號:J028
工作狀態(tài):
狀態(tài)1:南北方向綠燈通行12秒,東西紅燈禁止通行15秒,分別倒計(jì)時(shí);
狀態(tài)2:南北方向黃燈提醒3秒,東西繼續(xù)紅燈倒計(jì)時(shí);
狀態(tài)3:東西方向綠燈通行9秒,南北方向禁止通行12秒;
狀態(tài)4:東西方向黃燈提醒3秒,南北繼續(xù)紅燈倒計(jì)時(shí);
狀態(tài)5:執(zhí)行狀態(tài)1,反復(fù)循環(huán)。
程序部分講解
主要的核心點(diǎn)是倒計(jì)時(shí),和LED燈亮滅控制
記住這個(gè)就可以設(shè)計(jì)軟件了。首先要有時(shí)間基礎(chǔ),倒計(jì)時(shí)從哪來呢?
一般兩個(gè)來源:
1,延時(shí)
```C delay(1000ms); ```
通過死循環(huán)卡主軟件的運(yùn)行來達(dá)到延時(shí)效果,程序執(zhí)行效率極低,不可取。
2,定時(shí)
通過定時(shí)器產(chǎn)生時(shí)基。軟件設(shè)置50ms產(chǎn)生一次定時(shí)中斷,在中斷執(zhí)行函數(shù)中做計(jì)數(shù)。
EA=1; //開總中斷 // EX1=1;//外部中斷1 // IT1=1;//設(shè)置下降沿觸發(fā)中斷1 TMOD|= 0X01; TH0=(65536-50000)/256; TL0=(65536-50000)%256;//12M晶振 50ms定時(shí)初值 ET0=1; //允許定時(shí)器0中斷 TR0=1;//啟動定時(shí)器0 state=0;
50ms執(zhí)行一次中斷函數(shù),通過one_sec_flag累加到20判斷時(shí)間過去了一秒。設(shè)置一秒標(biāo)志位scan_flag置一。
void Timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256;//12M晶振 50ms定時(shí)初值 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í),不紅綠燈數(shù)值不減一 flag1s=1; } }
在主函數(shù)while循環(huán)里判斷標(biāo)志位,如果是1,則倒計(jì)時(shí)計(jì)數(shù)值減一,即完成了倒計(jì)時(shí)的軟件設(shè)計(jì)思路
//LED和數(shù)碼管顯示,時(shí)刻刷新 if(flag1s)//一秒執(zhí)行一次 { flag1s=0; main_road_time--; //紅綠燈倒計(jì)時(shí)時(shí)間減 secondary_road_time--; }
仿真圖(提供源文件):
程序(提供源文件源碼):
程序流程框圖
系統(tǒng)硬件框圖
設(shè)計(jì)報(bào)告
資料清單(提供資料清單所有文件):
審核編輯:湯梓紅
-
led
+關(guān)注
關(guān)注
242文章
23277瀏覽量
660844 -
51單片機(jī)
+關(guān)注
關(guān)注
274文章
5702瀏覽量
123601 -
交通燈
+關(guān)注
關(guān)注
13文章
324瀏覽量
39760
原文標(biāo)題:51單片機(jī)簡易交通燈(代碼易懂版_仿真代碼_報(bào)告_講解)
文章出處:【微信號:嘉盛單片機(jī),微信公眾號:嘉盛單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論