J028 51單片機簡易交通燈_代碼易懂版_仿真代碼_報告_講解
仿真圖proteus 7.8
程序編譯器:keil 4/keil 5
設計編號:J028
工作狀態:
狀態1:南北方向綠燈通行12秒,東西紅燈禁止通行15秒,分別倒計時;
狀態2:南北方向黃燈提醒3秒,東西繼續紅燈倒計時;
狀態3:東西方向綠燈通行9秒,南北方向禁止通行12秒;
狀態4:東西方向黃燈提醒3秒,南北繼續紅燈倒計時;
狀態5:執行狀態1,反復循環。
程序部分講解
主要的核心點是倒計時,和LED燈亮滅控制
記住這個就可以設計軟件了。首先要有時間基礎,倒計時從哪來呢?
一般兩個來源:
1,延時
```C delay(1000ms); ```
通過死循環卡主軟件的運行來達到延時效果,程序執行效率極低,不可取。
2,定時
通過定時器產生時基。軟件設置50ms產生一次定時中斷,在中斷執行函數中做計數。
EA=1; //開總中斷 // EX1=1;//外部中斷1 // IT1=1;//設置下降沿觸發中斷1 TMOD|= 0X01; TH0=(65536-50000)/256; TL0=(65536-50000)%256;//12M晶振 50ms定時初值 ET0=1; //允許定時器0中斷 TR0=1;//啟動定時器0 state=0;
50ms執行一次中斷函數,通過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循環里判斷標志位,如果是1,則倒計時計數值減一,即完成了倒計時的軟件設計思路
//LED和數碼管顯示,時刻刷新 if(flag1s)//一秒執行一次 { flag1s=0; main_road_time--; //紅綠燈倒計時時間減 secondary_road_time--; }
仿真圖(提供源文件):
程序(提供源文件源碼):
程序流程框圖
系統硬件框圖
設計報告
資料清單(提供資料清單所有文件):
審核編輯:湯梓紅
-
led
+關注
關注
242文章
23355瀏覽量
663162 -
51單片機
+關注
關注
274文章
5705瀏覽量
124294 -
交通燈
+關注
關注
13文章
324瀏覽量
39831
原文標題:51單片機簡易交通燈(代碼易懂版_仿真代碼_報告_講解)
文章出處:【微信號:嘉盛單片機,微信公眾號:嘉盛單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
請問一下怎樣去設計一種基于51單片機的簡易交通燈?
51單片機設計簡易交通燈
![<b class='flag-5'>51</b><b class='flag-5'>單片機</b>設計<b class='flag-5'>簡易</b><b class='flag-5'>交通燈</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論