📄 scankey2.c
字号:
//矩阵式键盘--复合键输入的应用,3×4
//P2口作为键盘的接口
//此函数定义了复合键的操作应用,程序中利用检测每一行的按键变量并分别独立再判断
//此程序只能识别同一行按下的单键,而不同行的按键才可以接收复合键的操作。您也可
//以根据自己的需要灵活修改。
void ScanKey2(void)
{
unsigned char keytmp;
//扫描第一行
KeyData1=0;
COLUMN1_PIN=0; //P2.4,scan line1 "0":active
COLUMN2_PIN=1;
COLUMN3_PIN=1;
keytmp=~(P2)&0x0f; //P2.0~P2.3
switch(keytmp)
{
case 1:
KeyData=KEY1;
break;
case 2:
KeyData=KEY2;
break;
case 4:
KeyData=KEY3;
break;
break;
case 8:
KeyData=KEY4;
break;
default:
break;
}
//扫描第二行
KeyData2=0;
COLUMN1_PIN=1;
COLUMN2_PIN=0; //P2.5,scan line2 "0":active
COLUMN3_PIN=1;
keytmp=~(P2)&0x0f;
switch(keytmp)
{
case 1:
KeyData=KEY5;
break;
case 2:
KeyData=KEY6;
break;
case 4:
KeyData=KEY7;
break;
break;
case 8:
KeyData=KEY8;
break;
default:
break;
}
//扫描第三行
KeyData3=0;
COLUMN1_PIN=1;
COLUMN2_PIN=1; //P2.6,scan line3 "0":active
COLUMN3_PIN=0;
keytmp=~(P2)&0x0f;
switch(keytmp)
{
case 1:
KeyData=KEY9;
break;
case 2:
KeyData=KEY10;
break;
case 4:
KeyData=KEY11;
break;
break;
case 8:
KeyData=KEY12;
break;
default:
break;
}
COLUMN3_PIN=1; //SCAN LINE3 NOT ACTIVE
KeyData=KeyData1+KeyData2+KeyData3; //判断最后复合键的值
}
//复合键的调用举例
void ScanKeyCheck(void)
{
ScanKey2();
FlgDoubleKey=0; //初始化标志
KeyData=NO_KEY; //NO KEY
if((KeyData1==KEY1)&&(KeyData3==KEY10))
{
FlgDoubleKey=1; //有双键按下
KeyData=DOUBLE_KEY;
}
}
//END FILE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -