時間觸發嵌入式系統設計模式 第22章 筆記 控制LCD顯示面板
阿新 • • 發佈:2018-11-10
時間觸發嵌入式系統設計模式 第22章 筆記 控制LCD顯示面板
E:\Nu_LB_Nuc140\Nu_LB_NUC140_BSP\SampleCode\Nu-LB-NUC140\Sched_22_LCD_Time
E:\Nu_LB_Nuc140\Nu_LB_NUC140_BSP\SampleCode\Nu-LB-NUC140\Sched_22_LCD_KEY
按鍵掃描:
/*------------------------------------------------------------------*- KEYPAD_Scan() 這個函式由被排程的鍵盤函式呼叫,必須根據需要修改以匹配按鍵標籤, 包含兩個“功能鍵”可以與其他列的任何按鍵同時使用 -*------------------------------------------------------------------*/ unsigned char KEYPAD_Scan(char* const pKey, char* const pFuncKey) { static char Old_Key; char Key = KEYPAD_NO_NEW_DATA; char Fn_key = (char) 0x00; GPIO_SetMode(PA, BIT2, GPIO_MODE_QUASI); GPIO_SetMode(PA, BIT1, GPIO_MODE_QUASI); GPIO_SetMode(PA, BIT0, GPIO_MODE_QUASI); PA2 = 1; PA1 = 1; PA0 = 1; GPIO_SetMode(PA, BIT3, GPIO_MODE_QUASI); GPIO_SetMode(PA, BIT4, GPIO_MODE_QUASI); GPIO_SetMode(PA, BIT5, GPIO_MODE_QUASI); PA5 = 1; PA4 = 1; PA3 = 1; #define C1 PA2 #define C2 PA1 #define C3 PA0 #define R1 PA3 #define R2 PA4 #define R3 PA5 ////////////// C1 = 0; // 掃描列1 if (R1 == 0) Key = '1'; if (R2 == 0) Key = '4'; if (R3 == 0) Fn_key = '*'; C1 = 1; C2 = 0; // 掃描列 2 if (R1 == 0) Key = '2'; if (R2 == 0) Key = '5'; if (R3 == 0) Key = '0'; C2 = 1; C3 = 0; // 掃描列 3 if (R1 == 0) Key = '3'; if (R2 == 0) Key = '6'; if (R3 == 0) Fn_key = '#'; C3 = 1; if (Key == KEYPAD_NO_NEW_DATA) { // 沒有按鍵被按下(或只是功能鍵) Old_Key = KEYPAD_NO_NEW_DATA; Last_valid_key_G = KEYPAD_NO_NEW_DATA; return 0; // 沒有新的資料 } // 一個按鍵被按下,通過檢查兩次來消抖 if (Key == Old_Key) { //檢測到一個有效的(經過消抖)鍵按下 //必須是一個新的按鍵才有效,不允許“自動重複” if (Key != Last_valid_key_G) { // 新的按鍵 *pKey = Key; printf("%c",Key); Last_valid_key_G = Key; // 功能鍵是否也被按下 if (Fn_key) { // 功能鍵與另一個按鍵被同時按下 *pFuncKey = Fn_key; } else { *pFuncKey = (char) 0x00; } return 1; } } // 沒有新的資料 Old_Key = Key; return 0; }
(稍後補充)