keypad 键盘扫描,并返回按键值

本文介绍了一个用于89S51单片机的4x4小键盘输入函数,通过扫描键盘矩阵并返回按键值。文章中包含了键盘扫描函数keypad_scan()的实现,以及检查是否有按键按下并返回按键值的gotkey()函数。同时,还提供了时间延迟函数delay()以确保稳定扫描。
摘要由CSDN通过智能技术生成

       /*
标题:小键盘的输入函数
版本:1.0
Target:89S51
函数描述:   char gotkey(void)
             从4ⅹ4小键盘输入数据,返回0 15
小键盘的连接方式:

  
  1 P20 -----0----1----2----3
             |    |    |    |
  2 P21 -----4----5----6----7
             |    |    |    |
  3 P22 -----8----9----10---11
             |    |    |    | 
  4 P23 -----12---13---14---15
             |    |    |    |
  5 P24 ---- |    |    |    |
             |    |    |    |
  6 P25 ----------     |    |
                       |    |
  7 P26 ---------------     |  
                            |
  8 P27 --------------------   
*/
#include <REGX51.H>
code char key_code[]={0x7E,0XBE,0XBD,0XBB,0XDE,0XDD,0XDB,0XEE,
                      0XED,0XEB,0X7D,0X7B,0XE7,0XD7,0XB7,0X77};
code ksp[4]={0x7F,0xBF,0xDF,0xEF};
void delay (void)  {                  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的51单片机扫描键盘并动态显示的代示例: ```c #include <reg51.h> #define KEYPAD_PORT P1 // 键盘连接的IO口 #define DISPLAY_PORT P2 // 显示器连接的IO口 unsigned char keybuffer; // 存储键值的缓冲区 // 扫描键盘返回键值 unsigned char scan_keypad() { unsigned char row, col, keycode; KEYPAD_PORT = 0x0f; // 将列线拉高,行线拉低 col = KEYPAD_PORT & 0x0f; // 读取列线的状态 if (col == 0x0f) { // 没有键按下 return 0xff; } KEYPAD_PORT = 0xf0; // 将行线拉高,列线拉低 row = KEYPAD_PORT & 0xf0; // 读取行线的状态 if (row == 0xf0) { // 没有键按下 return 0xff; } // 根据行列值计算键值 if (row == 0x70) { // 第1行 switch (col) { case 0x0e: keycode = 1; break; case 0x0d: keycode = 2; break; case 0x0b: keycode = 3; break; case 0x07: keycode = 4; break; } } else if (row == 0xb0) { // 第2行 switch (col) { case 0x0e: keycode = 5; break; case 0x0d: keycode = 6; break; case 0x0b: keycode = 7; break; case 0x07: keycode = 8; break; } } else if (row == 0xd0) { // 第3行 switch (col) { case 0x0e: keycode = 9; break; case 0x0d: keycode = 0; break; case 0x0b: keycode = '#'; break; case 0x07: keycode = '*'; break; } } return keycode; } // 将键值存入缓冲区 void buffer_key(unsigned char keycode) { if (keycode != 0xff) { keybuffer = keycode; } } // 显示键值 void display_key(unsigned char keycode) { DISPLAY_PORT = keycode; } void main() { unsigned char keycode; while (1) { keycode = scan_keypad(); // 扫描键盘 buffer_key(keycode); // 将键值存入缓冲区 display_key(keybuffer); // 显示键值 } } ``` 这段代会不断扫描键盘,将按下键值存入缓冲区,然后在显示器上动态显示。你可以根据需要修改其中的细节部分,比如键盘连接的IO口、键值的计算方法、显示器的驱动方式等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值