找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 917|回复: 11
收起左侧

关于单片机矩阵键盘界面切换

[复制链接]
ID:1104689 发表于 2024-2-18 15:49 | 显示全部楼层 |阅读模式
原理图上p33和p32分别对应外部中断0和外部中断1,我目前的代码功能能够通过s4,s5拉低电平触发中断切换界面,但是s8和s9的功能我没有合适的思路加进去,我试了把p42口置1来区分,但是p33口默认就是高电平,低电平触发中断,没法正常实现。有没有好大哥能分享一下思路

原理图

原理图

需求

需求
回复

使用道具 举报

ID:332444 发表于 2024-2-19 07:45 | 显示全部楼层
计数切换当等于1执行1当等于2执行2
回复

使用道具 举报

ID:1109793 发表于 2024-2-19 09:09 | 显示全部楼层
4*4的键盘不是要通过扫描获得16个按键的状态,然后哪个用了干啥再决定吗?扫描就扫描,和中断有啥关系
回复

使用道具 举报

ID:1109793 发表于 2024-2-19 09:31 | 显示全部楼层
我买了一个成品的3*4的那种,手感还不错。
  1. switch(keysm){
  2.         case 1:
  3.         if(!key_l1)key_1 = 0;else key_1 = 1;
  4.         if(!key_l2)key_2 = 0;else key_2 = 1;
  5.         if(!key_l3)key_3 = 0;else key_3 = 1;
  6.         break;
  7.         case 2:
  8.         if(!key_l1)key_4 = 0;else key_4 = 1;
  9.         if(!key_l2)key_5 = 0;else key_5 = 1;
  10.         if(!key_l3)key_6 = 0;else key_6 = 1;
  11.         break;
  12.         case 3:
  13.         if(!key_l1)key_7 = 0;else key_7 = 1;
  14.         if(!key_l2)key_8 = 0;else key_8 = 1;
  15.         if(!key_l3)key_9 = 0;else key_9 = 1;
  16.         break;
  17.         case 4:
  18.         if(!key_l1)key_x = 0;else key_x = 1;
  19.         if(!key_l2)key_0 = 0;else key_0 = 1;
  20.         if(!key_l3)key_j = 0;else key_j = 1;
  21.         break;
  22.         default:
  23.         break;
  24.         }
  25. keysm++;if(keysm>4)keysm = 1;
  26. key_h1 = 1;key_h2 = 1;key_h3 = 1;key_h4 = 1;
  27. switch(keysm){
  28.         case 1:
  29.         key_h1 = 0;
  30.         break;
  31.         case 2:
  32.         key_h2 = 0;
  33.         break;
  34.         case 3:
  35.         key_h3 = 0;
  36.         break;
  37.         case 4:
  38.         key_h4 = 0;
  39.         break;
  40.         default:
  41.         break;
  42.         }
复制代码

这样识别12个按键的状态
回复

使用道具 举报

ID:1104689 发表于 2024-2-19 11:04 | 显示全部楼层
xiaobendan001 发表于 2024-2-19 09:09
4*4的键盘不是要通过扫描获得16个按键的状态,然后哪个用了干啥再决定吗?扫描就扫描,和中断有啥关系

我的想法是放到中断里不是能实时切换吗,放到程序里切换可能会不太灵敏吧
回复

使用道具 举报

ID:1109793 发表于 2024-2-19 13:44 | 显示全部楼层
李小虫 发表于 2024-2-19 11:04
我的想法是放到中断里不是能实时切换吗,放到程序里切换可能会不太灵敏吧

对于界面显示,几个微秒的时间眼睛是看不到的。几毫秒也看不到,所以没必要切换那么快。而且这也不是你切换的速度,是按键反应速度。
回复

使用道具 举报

ID:491577 发表于 2024-2-25 00:11 | 显示全部楼层
楼主用中断来判断是不对的,按键会抖动,会多次触发中断。先判断按键,再决定按键的功能。
回复

使用道具 举报

ID:1064915 发表于 2024-2-25 08:44 | 显示全部楼层
xiaobendan001 发表于 2024-2-19 09:31
我买了一个成品的3*4的那种,手感还不错。

这样识别12个按键的状态

请说明一下原理,key如何排列的
回复

使用道具 举报

ID:1110945 发表于 2024-2-25 09:38 | 显示全部楼层
中断方式要先处理防抖,可以并联小电容实现消抖。
但是你这种矩阵按键一般都是用扫描方式而不用担心
抖动问题。
回复

使用道具 举报

ID:230500 发表于 2024-2-25 09:43 | 显示全部楼层
看看我之前帖子; 只要获得了正确的键值后, 想怎么处理就怎么处理;
http://www.51hei.com/bbs/dpj-227062-1.html
回复

使用道具 举报

ID:965189 发表于 2024-2-25 10:59 | 显示全部楼层
矩阵键盘不需要用中断,用扫描就可以了。
回复

使用道具 举报

ID:1109793 发表于 2024-2-25 11:49 | 显示全部楼层
joyb 发表于 2024-2-25 08:44
请说明一下原理,key如何排列的

排列就是矩阵啊,楼主不是有个原理图啊,就是那样的,总共7根线。
原理就是每行输出一个低,然后度每列的值,确定每个按键的状态,总共12个BIT,这样比较废时间和空间。但是处理起来比较随心所欲。
消除抖动可以放在每个BIT的服务里面。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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