依據狀態選擇顯示來自時鐘計時器的現在時間,或則是在自設定時間累加器的設定時間。其狀態可由其它程式呼叫切換控制。
結構體型態
typedef struct {
uint8_t State;/* State MachineState of Display Selector */
uint8_t* HourIn_p; /* Pointerto Hour */
uint8_t* SetHourIn_p; /*Pointer to Setting Hour */
uint8_t* MinitIn_p; /*Pointer to Minit */
uint8_t* SetMinitIn_p; /*Pointer to Setting Minit */
uint8_t Digit[4]; /* Digitsto Display*/
uint8_t* DigitOut_p;/*Pointers to the Digits to Display*/
uint8_t DecimalPoint; /*DecimalPoint to Display*/
uint8_t*DecimalPointOut_p;/*Pointers to the DecimalPoint*/
uint8_t* ExCountIn_p;/*Pointers to ExCount of PreTask*/
uint8_t ExCount; /*ExecutionCounter*/
uint8_t*ExCountOut_p;/*Pointers to ExCount*/
} DisplaySelectorStr_t; 佈局巨集
#defineDISPLAYSELECTOR_LAY(DPSSTR)\
DisplaySelectorStr_tDPSSTR={0};\
DPSSTR.DecimalPoint=2;\ /*小數點固定為2分隔小時及分*/
DPSSTR.ExCountOut_p=&(DPSSTR.ExCount);\
DPSSTR.DigitOut_p=&(DPSSTR.Digit[0]);\
DPSSTR.DecimalPointOut_p=&(DPSSTR.DecimalPoint);
巨集呼叫範例: 完成內部佈局後會以等式與前級,時鐘計數器,及鬧鈴比較器串接。
DISPLAYSELECTOR_LAY(DisplaySelector_Str);\
/*netto ClockCounter */\
DisplaySelector_Str.HourIn_p = ClockCounter_str.Hour_p; \
DisplaySelector_Str.MinitIn_p = ClockCounter_str.Minit_p; \
/*netto AlarmChecker*/\
DisplaySelector_Str.ExCountIn_p=AlarmChecker_str .ExCountOut_p;\
/*netto cumulator*/\
DisplaySelector_Str.SetHourIn_p=KeyInCumulator_Str.SetHourOut_p;\
DisplaySelector_Str.SetMinitIn_p=KeyInCumulator_Str.SetMinitOut_p;
步級執行函式
uint8_tDisplaySelector_step (Void* VoidStr_p)
簡介:本函式工作參考狀態選擇顯示來自時鐘計時器的目前時間或則是,來自累加器的設定時間,並將顯示值分割成四個七節點顯示字串。狀態由切換命令決定。
• 傳址參數及回傳: 同標準C4M-OS可排程工作方塊。
呼叫範例:
DisplaySelector_step( (void*) &DisplaySelector_str);
受命執行調控函式
voidDisplaySettint(DisplaySelectorStr_t*Str_p,uint8_t NewState)
簡介:呼叫本函式以設定顯示選擇器的新狀態。本函式可被其他工作方塊呼叫馬上執行。 • 傳址參數:DisplaySelectorStr_t* Str_p:顯示選擇器結構體指標。
• 回傳:void。
呼叫範例:
設定時間時要切換到輸出顯示設定時間狀態。DisplaySettint(&DisplaySelector_Str,1);
設定時間時要切換到輸出顯示目前時間狀態。
DisplaySettint(&DisplaySelector_Str,0);