一般的鍵盤電路是會使用輪詢 (Polling) 或中斷 (Interrupt)來檢測鍵盤是否按下,由於中斷 (Interrupt) 會用在其它的功能上,而且鍵盤按下頻率不高,所以這鍵盤電路是用輪詢 (Polling) 來檢測鍵盤。程式會掃描鍵盤的行,從第一行開始,每掃描一行後,程式便會讀每一列是否按下 (按下時是高電位) 。如果讀入高電位,程式便會計算出按下鍵的位置,在矩陣內取出代表資料數值,資料數值輸出到 LCD 1602 作出顯示。
▲ 3x3 Keypad 流程圖 |
void main(void) { // 1234567890123456 char LCD_name[]=" BWS Keypad 3x3"; int i; unsigned int timeout=0; char data; char key; ADCON0 = 0x00; // Disable the AD converter ADCON1 = 0x0F; // Set all ports to digital TRISA = 0b00000000; // Setup PORTA as Output // Initialise LCD OpenXLCD(FOUR_BIT&LINES_5X7); // Init the LCD Display while(BusyXLCD()); WriteCmdXLCD(BLINK_OFF & CURSOR_OFF ); while(BusyXLCD()); stdout = _H_USER; // Redirect I/O to LCD LcdSetLine1(); // Put cursor on start of line 1 putsXLCD(LCD_name); // Display text kbd_init(); while(1) { key = kbd_getc(); LATAbits.LATA0 = 0; // RA0=0 LED=OFF Scope=50ms LcdSetLine2(); // Put cursor on start of line 2 printf("Key=%02i",key); LATAbits.LATA0 = 1; // RA0=1 LED=ON Scope=1 Delay10KTCYx(1); // 10,000 x 1 x (4 x 0.05us) = 2ms // Scope = 2ms } } |
▲ 3x3 Keypad 鍵盤連接到控制主板 |
▲ LCD 顯示按下鍵的數值 |
氣溫:17.6 度 @ 23:00
相對濕度:百分之98%
天氣:微雨
請問可以給我看您的副程式是怎麼寫的嗎??
回覆刪除請問專家,有開發版是 MICROCHIP APP025(PIC18F4520),搭配 M-001 L298N 驅動模組及 28BYJ-48 步進馬達(4線5線),可有可參考的 硬體接線 及 軟體程式,感謝各位專家,可寄至 h540305@hotmail.com
回覆刪除