- 單片機C語言程序設計實訓100例
- 彭偉編著
- 669字
- 2018-12-27 05:12:02
3.5 LED模擬交通燈
本例中的12只LED分成東西向和南北向兩組,各組指示燈均有相向的2只紅色、2只黃色與2只綠色的LED,本例中對相應的LED單獨進行定義,程序運行時模擬了十字路口交通信號燈的切換過程與顯示效果。
本例電路如圖3-5所示。

圖3-5 LED模擬交通燈電路
程序設計調試與實訓:
源程序中用6行sbit對東西和南北向的紅、黃、綠指示燈分別進行定義,這樣便于對它們進行單獨控制。
本例將交通指示燈切換時間設置得較短,這樣可在調試的時候較快觀察到運行效果,讀者可在調試運行本例后修改代碼,使指示燈切換過程更接近于實際的交通指示燈切換過程。
源程序代碼:
//----------------------------------------------------------------- // 名稱: LED模擬交通燈 //----------------------------------------------------------------- // 說明: 東西向綠燈亮若干秒后,黃燈閃爍,閃爍5次后亮紅燈, // 紅燈亮后,南北向由紅燈變為綠燈,若干秒后南北向黃燈閃爍, // 閃爍5次后亮紅燈,東西向綠燈亮,如此重復。 // //----------------------------------------------------------------- #include <reg51.h> #define uchar unsigned char #define uint unsigned int sbit RED_A = P0^0; //東西向指示燈 sbit YELLOW_A = P0^1; sbit GREEN_A = P0^2; sbit RED_B = P0^3; //南北向指示燈 sbit YELLOW_B = P0^4; sbit GREEN_B = P0^5; uchar Flash_Count = 0, Operation_Type = 1; //閃爍次數及操作類型變量 //----------------------------------------------------------------- // 延時 //----------------------------------------------------------------- void DelayMS(uint x) { uchar i; while (x--) for ( i = 0; i< 120; i++); } //----------------------------------------------------------------- // 交通燈切換子程序 //----------------------------------------------------------------- void Traffic_Light() { switch (Operation_Type) { case 1: //東西向綠燈與南北向紅燈亮 RED_A = 1; YELLOW_A = 1; GREEN_A = 0; RED_B = 0; YELLOW_B = 1; GREEN_B = 1; DelayMS(2000); //延時 Operation_Type = 2; //下一操作 break; case 2: //東西向黃燈開始閃爍,綠燈關閉 DelayMS(300); //延時 YELLOW_A = !YELLOW_A; GREEN_A = 1; //閃爍5次 if (++Flash_Count != 10) return; Flash_Count = 0; Operation_Type = 3; //下一操作 break; case 3: //東西向紅燈與南北向綠燈亮 RED_A = 0; YELLOW_A = 1; GREEN_A = 1; RED_B = 1; YELLOW_B = 1; GREEN_B = 0; //南北向綠燈亮若干秒后切換 DelayMS(2000); //延時 Operation_Type = 4; //下一操作 break; case 4: //南北向黃燈開始閃爍 DelayMS(300); //延時 YELLOW_B = !YELLOW_B; GREEN_B = 1; if (++Flash_Count != 10) return; //閃爍5次 Flash_Count = 0; Operation_Type = 1; //回到第一種操作 } } //----------------------------------------------------------------- // 主程序 //----------------------------------------------------------------- void main() { while(1) Traffic_Light(); }
推薦閱讀
- DevOps:軟件架構師行動指南
- Web Scraping with Python
- 基于Swift語言的iOS App 商業實戰教程
- Visual C#.NET程序設計
- 網站構建技術
- Python忍者秘籍
- 大學計算機基礎實驗指導
- Node.js 12實戰
- Laravel Application Development Blueprints
- FPGA嵌入式項目開發實戰
- 愛上C語言:C KISS
- Oracle Data Guard 11gR2 Administration Beginner's Guide
- PHP 8從入門到精通(視頻教學版)
- Apache Solr PHP Integration
- 從零開始:C語言快速入門教程