51單片機C程序實驗LED燈:[5]模擬交通燈

來源:酷知科普網 2.15W

名稱:LED 模擬交通燈
目的:東西向綠燈亮若干秒,黃燈閃3次後紅燈亮, 紅燈亮後,南北向由紅燈變為綠燈,若干秒後南北向黃燈閃爍3次後變紅燈,東西向變綠燈,如此重複。
分析一共有12個燈,每個與每個又有邏輯聯繫,但其實不是很複雜,分析比較重要,只要把交通燈的規律總結出來就很簡單了,而且每個人總結規律是不同的,程序也就有更多種,所以這裏算是一個比較廣泛的例子。

51單片機C程序實驗LED燈:[5]模擬交通燈

proteus電路圖

(01)LED燈方面的元器件不是很複雜,之前説了很多,也差不多,只是燈不一樣。51單片機電容瓷片電容晶振綠色二極管紅色二極管黃色二極管電阻

51單片機C程序實驗LED燈:[5]模擬交通燈 第2張

(02)電路圖:1為總體圖,2,3為大圖PS:圖要是不會畫也可以評論提問。。

51單片機C程序實驗LED燈:[5]模擬交通燈 第3張
51單片機C程序實驗LED燈:[5]模擬交通燈 第4張
51單片機C程序實驗LED燈:[5]模擬交通燈 第5張

程序清單

(01)説明分析(不想看請直接跳往下一步):通過思考我們發現燈的循環大致分為1、橫向綠燈亮,豎向紅燈亮2、橫向黃燈閃三下,豎向紅燈依舊亮3、橫向紅燈亮,豎向綠燈亮4、橫向紅燈依舊亮,豎向黃燈閃三下由分析我們把程序也分為四個循環

(02)【程序】圖片版按照程序順序截圖,前面是子程序,最後為主程序

51單片機C程序實驗LED燈:[5]模擬交通燈 第6張
51單片機C程序實驗LED燈:[5]模擬交通燈 第7張
51單片機C程序實驗LED燈:[5]模擬交通燈 第8張

(03)【文字版】/* 名稱:LED 模擬交通燈説明:東西向綠燈亮若干秒,黃燈閃3次後紅燈亮, 紅燈亮後,南北向由紅燈變為綠燈,若干秒後南北向黃燈閃爍3次後變紅燈,東西向變綠燈,如此重複。*/#include<reg51.h>#define uchar unsigned char#define uint unsigned int//規劃好各個腳連接的燈,方便使用sbit RED_1=P0^0; //東西向燈sbit YELLOW_1=P0^1;sbit GREEN_1=P0^2;sbit RED_2=P0^3; //南北向燈sbit YELLOW_2=P0^4;sbit GREEN_2=P0^5;uchar number=0,type=1; //閃爍次數,操作類型變量//延時子程序void Delay(uint x){uchar i;while(x--) for(i=0;i<120;i++);}//交通燈切換程序//總共分為四種情況,如此循環//注:1為關燈,0為開燈traffic(){switch(type){case 1: //東西向綠燈與南北向紅燈亮RED_1=1;YELLOW_1=1;GREEN_1=0;RED_2=0;YELLOW_2=1;GREEN_2=1;Delay(2000);type=2;break;case 2: //東西向黃燈閃爍,綠燈關閉Delay(300);YELLOW_1=~YELLOW_1;GREEN_1=1;if(++number!=6) return; //閃爍3次number=0;type=3;break;case 3: //東西向紅燈,南北向綠燈亮RED_1=0;YELLOW_1=1;GREEN_1=1;RED_2=1;YELLOW_2=1;GREEN_2=0;Delay(2000);type=4;break;case 4: //南北向黃燈閃爍3次Delay(300);YELLOW_2=~YELLOW_2;GREEN_2=1;if(++number!=6) return;number=0;type=1;}}//主程序,由於用了switch,為了便於循環選擇,用一個traffic子函數寫在外面void main(){while(1) traffic();}

完成結果仿真圖

01
51單片機C程序實驗LED燈:[5]模擬交通燈 第9張
51單片機C程序實驗LED燈:[5]模擬交通燈 第10張
熱門標籤