扫描单个键盘矩阵芯片的两种方法

SCM扫描矩阵有两种方式键盘:第一种:逐行扫描方式,它是逐行扫描的。
代码如下(键盘端口P2)。
## DefineNO_KEY0XFF defineKEY_LO()和P2 = 0XF0#defineKEY_HI()=为0x0F#defineKEY_L(i)和P2 =?(1#defineKEY_RD()((P2 >> 4)和为0x0F)
UINT8OnceKey(无效){UINT8line = 0; UINT8key = NO_KEY; // keyvalueKEY_LO();是(KEY_RD()==为0x0F){KEY_HI(); returnNO_KEY;}
(线= 0;线{KEY_HI(); KEY_L(线);键= KEY_RD();开关(键){caseROW_FIRST:密钥= 4 *线+ 0;打破; caseROW_SECOND:键= 4 *线+ 1;破; caseROW_THIRD:键= 4 * + 2行;打破; caseROW_FOURTH:键= 4 *行+ 3;断裂;默认:键=为0x0F;断裂;}如果(键{ReturnKey;}}returnNO_KEY;}
第二种方法是线性反演。
读取行和列。
代码如下。
#defineCVT(ⅰ)((I)==(α1)和为0x0F)?
0:((i)==(?2)和0 x 0 F)
1:((i)==(?4)和0 x 0 F)
2:((i)==(?8)和0 x 0 F)
3:4。
#DefineKEY0_3HI()P2 | =为0x0F#defineKEY0_3LO()P2&= 0XF0#defineKEY4_7HI()P2 | = 0 = 0XF0#defineKEY4_7LO()P2&=为0x0F#defineKEY0_3RD()(P2和为0x0F)#defineKEY4_7RF()((P2 >>4)和0 x 0 F)
UINT8OnceKey(无效){UINT8line = NO_KEY; UINT8row = NO_KEY; UINT8键。KEY0_3HI(); KEY4_7LO();行= KEY0_3RD(); //行值被读出和是(为0x0F ==线){键= NO_KEY;}其他{KEY0_3LO();}KEY4_7HI();行=KEY4_7RD(); //读取该列是(线为0x0F ==){键= nO_KEY;}的值否则{键= CVT(行)×4 + CVT(线);}}KEY0_3HI(); KEY4_7HI(); ReturnKey;

来源:28356365体育投注//所属分类:bt365体育在线官网/更新时间:2019-04-17
相关bt365体育在线官网