我用矩阵键盘的状态机写法,但是有一列根本检测不出,这是什么情况,请各位大佬指教

[复制链接]
查看11 | 回复4 | 2021-1-27 06:20:34 | 显示全部楼层 |阅读模式
#include
#include
#definekey_state_00
#definekey_state_11
#definekey_state_22
#definekeyP3
charkeyresult();
voidmain()
{

unsignedcharkey_val;
while(1)
{
P2=0XA0;P2=0X1F;P0=0X00;
key_val=keyresult();
if(key_val==1){P2=0X80;P2=0X1F;P0=0X00;}
}
}
charkeyresult(void)
{
staticcharkey_state=0;
unsignedcharkey_return=0,key_press;
unsignedcharkey1,key2;
key=0Xf0;
key1=key&0Xf0;
key=0X0f;
key2=key&0X0f;
key_press=key1|key2;
switch(key_state)
{
casekey_state_0:
if(key_press!=0XFF)key_state=key_state_1;break;
casekey_state_1:
if(key_press!=0XFF)
{
if(key_press==0X7e)key_return=1;
if(key_press==0Xdd)key_return=2;
key_state=key_state_2;
}
else
key_state=key_state_0;
break;
casekey_state_2:
if(key_press==0XFF)
{
key_state=key_state_0;
}
break;
}
returnkey_return;
}
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:20:34 | 显示全部楼层

charkeyresult(void)
{
staticcharkey_state=0;
unsignedcharkey_return=0,key_press;
unsignedcharkey1,key2;
key=0Xf0;
key1=key&0Xf0;
key=0X0f;
key2=key&0X0f;
key_press=key1|key2;
switch(key_state)//这个switch(key_state)有意义?

回复

使用道具 举报

千问 | 2021-1-27 06:20:34 | 显示全部楼层
引用1楼dceacho的回复:
charkeyresult(void)
{
staticcharkey_state=0;
unsignedcharkey_return=0,key_press;
unsignedcharkey1,key2;
key=0Xf0;
key1=key&0Xf0;
key=0X0f;
key2=key&0X0f;
key_press=key1|key2;
switch(key_state)//这个switch(key_state)有意义?

有哇,判断状态消抖啊
回复

使用道具 举报

千问 | 2021-1-27 06:20:34 | 显示全部楼层
引用2楼qq_42681825的回复:Quote: 引用1楼dceacho的回复:
charkeyresult(void)
{
staticcharkey_state=0;
unsignedcharkey_return=0,key_press;
unsignedcharkey1,key2;
key=0Xf0;
key1=key&0Xf0;
key=0X0f;
key2=key&0X0f;
key_press=key1|key2;
switch(key_state)//这个switch(key_state)有意义?

有哇,判断状态消抖啊

我还以为局部static会每次初始化
P37,P30
P35,P31
这两个按键有个没反应?
回复

使用道具 举报

千问 | 2021-1-27 06:20:34 | 显示全部楼层
矩阵键盘应该逐线输出,然后读入判断
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行