找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于51单片机矩阵键盘反转扫描程序

[复制链接]
回帖奖励 5 黑币 回复本帖可获得 1 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
  1. unsigned char KeyScan(void)
  2. {
  3.     unsigned char cord_h, cord_l; // 行列值中间变量 假设是第一行第二列按下 1011 1110
  4.     KeyPort = 0x0f; // 行线输出全为0
  5.     cord_h = KeyPort & 0x0f; // &完以后cord_h是  0000 1110
  6.     if (cord_h != 0x0f) // 先检测有无按键按下
  7.     {
  8.         DelayMs(10); // 去抖
  9.         if ((KeyPort & 0x0f) != 0x0f) {
  10.             cord_h = KeyPort & 0x0f; // 读入列线 cord_h是0000 1110
  11.             KeyPort = cord_h | 0xf0; // 输出当前列线值 1111 1110
  12.             cord_l = KeyPort & 0xf0; // 读入行线值 1111 0000

  13.             while ((KeyPort & 0xf0) != 0xf0)
  14.                 ; // 等待松开并输出

  15.             return (cord_h + cord_l); // 键盘最后组合码值 1111 1110
  16.         }
  17.     }
  18.     return (0xff); // 返回该值
  19. }
  20. unsigned char KeyPro(void)
  21. {
  22.     switch (KeyScan()) {
  23.     case 0x7e:return 0;break; // 0 按下相应的键显示相对应的码值
  24.     case 0x7d:return 1;break; // 1
  25.     case 0x7b:return 2;break; // 2
  26.     case 0x77:return 3;break; // 3
  27.     case 0xbe:return 4;break; // 4    1011 1110
  28.     case 0xbd:return 5;break; // 5
  29.     case 0xbb:return 6;break; // 6
  30.     case 0xb7:return 7;break; // 7
  31.     case 0xde:return 8;break; // 8
  32.     case 0xdd:return 9;break; // 9
  33.     case 0xdb:return 10;break; // a
  34.     case 0xd7:return 11;break; // b
  35.     case 0xee:return 12;break; // c
  36.     case 0xed:return 13;break; // d
  37.     case 0xeb:return 14;break; // e
  38.     case 0xe7:return 15;break; // f
  39.     default:return 0xff;break;
  40.     }
  41. }
复制代码
我这个计算哪里不对呀??我烧录实测这个函数没问题是可以使用的。。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2022-12-23 10:29 | 只看该作者
"我烧录实测这个函数没问题是可以使用的"
所以有啥问题?

进阶编程要尽量避免用长时间(>1ms)阻塞式延时消抖
下面是建议改法


回复

使用道具 举报

板凳
ID:895440 发表于 2022-12-23 10:59 | 只看该作者
lkc8210 发表于 2022-12-23 10:29
"我烧录实测这个函数没问题是可以使用的"
所以有啥问题?

就是我假设第一行第二列按下,按照这个函数,最后我计算得到的是1111 1110 ,结果应该是1011 1110才对。。我不知道哪里不对
回复

使用道具 举报

地板
ID:1042619 发表于 2022-12-23 15:15 | 只看该作者
楼主可以试着参考STC8H8K64U实验箱范例程序41-USB键盘设备通过P0口矩阵按键模拟小键盘功能。实验箱程序范例程序从STC-ISP (V6.91C)一体化软件里面获得:




回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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