LED 通常用做跑馬燈,用來表示系統正在執行中的燈號。
LED 標頭檔宣告 LED 驅動程式相關的常數和結構。
宣告 LED_H,避免標頭檔的重複引用。
01 #ifndef LED_H 01 #define LED_H
宣告 LED 控制結構原型,包含狀態機和計時器變數。
01 typedef struct { 01 INT8U State; 01 INT16U Timer; 01 }LED_CONTROL;
將 LED 驅動程式的控制結構和介面函式引出,其他程式可參考 LED 標頭檔,並引用這些變數與函式。
01 extern LED_CONTROL LedCtrl; 01 extern void LedInit(void); 01 extern void LedSvc(void); 01 #endif
宣告 LED 燈號控制腳位,P1^0 表示是在 PORT 0 的第一根腳位。 宣告 LED 控制結構 LedCtrl。
01 sbit Led0=P1^0; 01 01 LED_CONTROL LedCtrl;
LED 函式庫。
函式名稱說明 LedInitLED初始化函式。 LedSvcLED服務函式。
設定初始狀態是顯示第一個 LED。 設定第一次的顯示時間是 2 秒鐘之後。
01 void LedInit(void){ 01 LedCtrl.State=Led0OnState; 01 LedCtrl.Timer=50; 01 }
當等待時間未耗盡,離開服務函式。 設定下一次進來的時間。 每次進來時,更改 LED 顯示燈號,並設定下一次顯示的 LED 狀態,這就是跑馬燈的原理。
01 void LedSvc(void){ 01 if(LedCtrl.Timer!=0) return; 01 LedCtrl.Timer=50; 01 switch(LedCtrl.State){ 01 case Led0OnState: 01 Led0=LED_ON; 01 LedCtrl.State=Led0OffState; 01 break; 01 case Led0OffState: 01 Led0=LED_OFF; 01 LedCtrl.State=Led0OnState; 01 break; 01 default: 01 break; 01 } 01 }