2011年3月19日 星期六

DIY - PIC: PIC18F4550 3x3 Keypad 鍵盤程式 (三十九)

DIY - PIC PIC18F4550 3x3 Keypad 鍵盤程式 (三十九)

一般的鍵盤電路是會使用輪詢 (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 顯示按下鍵的數值
2011 03 19 天氣報告
氣溫:17.6 @ 23:00 
相對濕度:百分之98% 
天氣:微雨


2 則留言:

  1. 請問可以給我看您的副程式是怎麼寫的嗎??

    回覆刪除
  2. 請問專家,有開發版是 MICROCHIP APP025(PIC18F4520),搭配 M-001 L298N 驅動模組及 28BYJ-48 步進馬達(4線5線),可有可參考的 硬體接線 及 軟體程式,感謝各位專家,可寄至 h540305@hotmail.com

    回覆刪除