单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 657|回复: 0
打印 上一主题 下一主题
收起左侧

一个简单的51单片机 4x4 Keypad 测试小程序

[复制链接]
跳转到指定楼层
楼主
这里介绍一个简单的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. }
复制代码
相关信息:http://www.51hei.com/bbs/dpj-136722-1.html




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51Hei单片机16群 联系QQ:125739409;技术交流QQ群7344883

Powered by 单片机教程网

快速回复 返回顶部 返回列表