找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3581|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

一個簡單的51單片機 4x4 Keypad 測試小程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:406093 發(fā)表于 2018-11-21 09:50 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
這里介紹一個簡單的51單片機 4x4 Keypad 測試小程序,它同樣可以用在 4x1, 4x2 或者 4x3 Keypad 上。希望對大家有用。

  1. unsigned short kp, cnt, oldstate = 0;
  2. char txt[6];

  3. // Keypad module connections
  4. char keypadPort at P0;
  5. // End Keypad module connections

  6. // Lcd module connections
  7. sbit LCD_RS at P2_0_bit;
  8. sbit LCD_EN at P2_1_bit;

  9. sbit LCD_D4 at P2_2_bit;
  10. sbit LCD_D5 at P2_3_bit;
  11. sbit LCD_D6 at P2_4_bit;
  12. sbit LCD_D7 at P2_5_bit;
  13. // End Lcd module connections

  14. void main() {
  15.   cnt = 0;                                 // Reset counter
  16.   Keypad_Init();                           // Initialize Keypad
  17.   Lcd_Init();                              // Initialize Lcd
  18.   Lcd_Cmd(_LCD_CLEAR);                     // Clear display
  19.   Lcd_Cmd(_LCD_CURSOR_OFF);                // Cursor off

  20.   Lcd_Out(1, 1, "Key  :");                 // Write message text on Lcd
  21.   Lcd_Out(2, 1, "Times:");

  22.   do {
  23.     kp = 0;                                // Reset key code variable

  24.     // Wait for key to be pressed and released
  25.     do
  26.       // kp = Keypad_Key_Press();          // Store key code in kp variable
  27.       kp = Keypad_Key_Click();             // Store key code in kp variable
  28.     while (!kp);
  29.    // Prepare value for output, transform key to it's ASCII value
  30.     switch (kp) {
  31.       //case 10: kp = 42; break;  // '*'   // Uncomment this block for keypad4x3
  32.       //case 11: kp = 48; break;  // '0'   
  33.       //case 12: kp = 35; break;  // '#'
  34.       //default: kp += 48;

  35.       case  1: kp = 49; break; // 1        // Uncomment this block for keypad4x4
  36.       case  2: kp = 50; break; // 2
  37.       case  3: kp = 51; break; // 3
  38.       case  4: kp = 65; break; // A
  39.       case  5: kp = 52; break; // 4
  40.       case  6: kp = 53; break; // 5
  41.       case  7: kp = 54; break; // 6
  42.       case  8: kp = 66; break; // B        
  43.       case  9: kp = 55; break; // 7
  44.       case 10: kp = 56; break; // 8
  45.       case 11: kp = 57; break; // 9
  46.       case 12: kp = 67; break; // C
  47.       case 13: kp = 42; break; // *
  48.       case 14: kp = 48; break; // 0
  49.       case 15: kp = 35; break; // #
  50.       case 16: kp = 68; break; // D

  51.     }

  52.     if (kp != oldstate) {                  // Pressed key differs from previous
  53.       cnt = 1;
  54.       oldstate = kp;
  55.       }
  56.     else {                                 // Pressed key is same as previous
  57.       cnt++;
  58.       }

  59.     Lcd_Chr(1, 10, kp);                    // Print key ASCII value on Lcd

  60.     if (cnt == 255) {                      // If counter varialble overflow
  61.       cnt = 0;
  62.       Lcd_Out(2, 10, "   ");
  63.       }

  64.     WordToStr(cnt, txt);                   // Transform counter value to string
  65.     Lcd_Out(2, 10, txt);                   // Display counter value on Lcd
  66.   } while (1);
  67. }
復(fù)制代碼
相關(guān)信息:http://www.torrancerestoration.com/bbs/dpj-136722-1.html




評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表