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