使用XY查找4x4键的方法键值与表对应关系?
// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
u8 code T_KeyTable = {0,1,2,0,3,0,0,0,4,0,0,0,0,0,0,0};
行列键扫描程序
使用XY查找4x4键的方法,只能单键,速度快
Y P04 P05 P06 P07
| | | |
X | | | |
P00 ---- K00 ---- K01 ---- K02 ---- K03 ----
| | | |
P01 ---- K04 ---- K05 ---- K06 ---- K07 ----
| | | |
P02 ---- K08 ---- K09 ---- K10 ---- K11 ----
| | | |
P03 ---- K12 ---- K13 ---- K14 ---- K15 ----
| | | |
既然只支持单键干嘛不直接 key_code = (P0 & 0x0f) ? P0 : 0; 获得唯一键值呢,查表需要额外花费地址计算和访问时间(可能需要DPTR,具体看代码生成)。{:4_164:} lzyor 发表于 2024-4-12 10:20
既然只支持单键干嘛不直接 key_code = (P0 & 0x0f) ? P0 : 0; 获得唯一键值呢,查表需要额外花费地址计算和 ...
官方例程,我也是才看的, 带问号处的两个IO_KeyState,应该有一个是IO_KeyState1,才对,感觉,没看懂。
/*********矩阵按键扫描************/
void MatrixKeyScan(void)
{
u8j;
P0 = 0xf0;
IO_KeyDelay();
IO_KeyState = P0 & 0xc0;//这里的“IO_KeyState”???
P0 = 0x0f;
IO_KeyDelay();
IO_KeyState |= (P0 & 0x0f);
IO_KeyState ^= 0xcf;// 这里的“IO_KeyState”???
if(IO_KeyState == IO_KeyState1)//连续两次读相等
{ 本帖最后由 梁工 于 2024-4-23 10:57 编辑
这个程序是我首先于2015年第一代学习板(IAP15W4K61S4)发布的程序。
其对应关系很简单(楼主的行列IO要换换一下,当时没留意改了):
u8 code T_KeyTable = {0,1,2,0,3,0,0,0,4,0,0,0,0,0,0,0};
Y P00 P01 P02 P03
| | | |
X | | | |
P04 ---- K00 ---- K01 ---- K02 ---- K03 ----
| | | |
P05 ---- K04 ---- K05 ---- K06 ---- K07 ----
| | | |
P06 ---- K08 ---- K09 ---- K10 ---- K11 ----
| | | |
P07 ---- K12 ---- K13 ---- K14 ---- K15 ----
| | | |
P0=0xf0, 读入高4位, P0=0x0f,读入低4位,然后取反IO_KeyState变成正逻辑,即有按键对应的位为1,查表读数就是4个IO对应1~4。
如果有键按下,则高4位和低4位均有一位为1,比如按下K14,则读到 1000 0100,高4位查表得到4,低4位查表得到3,则键码=(4-1)*4+3=15,即K00~K15对应键码1~16。
梁工 发表于 2024-4-23 10:55
这个程序是我首先于2015年第一代学习板(IAP15W4K61S4)发布的程序。
其对应关系很简单(楼主的行列IO要换 ...
太感谢老师的指点,我看到几个DEMO都用到了,就是看不懂,搞得我拐头大,我再看一下, 梁工 发表于 2024-4-23 10:55
这个程序是我首先于2015年第一代学习板(IAP15W4K61S4)发布的程序。
其对应关系很简单(楼主的行列IO要换 ...
老师:你这个表是如何得?按键是搞懂,确实不看懂
// 0 1 2 3 4 5 6 7 8 9101112131415
uint8_t code T_KeyTable = {0,1,2,0,3,0,0,0,4,0,0,0,0,0,0,0}; 梁工 发表于 2024-4-23 10:55
这个程序是我首先于2015年第一代学习板(IAP15W4K61S4)发布的程序。
其对应关系很简单(楼主的行列IO要换 ...
最早的是2005年杜洋的4x4矩阵键盘行列线反转法
晓飛飛 发表于 2024-4-23 14:26
最早的是2005年杜洋的4x4矩阵键盘行列线反转法
{:4_250:} 晓飛飛 发表于 2024-4-23 14:26
最早的是2005年杜洋的4x4矩阵键盘行列线反转法
哦,我在90年代就开始使用这个方法(当时是汇编)。我没看过杜洋的程序。
但是实际项目基本不使用这种方法,实际项目我一般使用定时扫描、最近三次扫描结果处理键的按下、释放、RepeatKey、双击、长按等等。
页:
[1]
2