//4*4矩阵键盘扫描函数:
unsigned char ScanArrayKey(void)//反转扫描法,效率高
{
unsigned char list,line,x,y,keynum;
P3=0x0f;//四行同时拉低,
list=P3;//读回,取得四列的值
P3=0xf0;//四列同时拉低
line=P3;//读回,取得四行的值
if(list==0x0e) x=1;//如果第一列为低电平,设列值为1 (从左往右数)
else if(list==0x0d) x=2;//如果第二列为低电平,设列值为2
else if(list==0x0b) x=3;//如果第三列为低电平,设列值为3
else if(list==0x07) x=4;//如果第四列为低电平,设列值为4
else ;
if(line==0x70) y=0;//如果第一行为低电平,设行值为0(从下往上数)
else if(line==0xb0) y=4;//如果第二行为低电平,设行值为4
else if(line==0xd0) y=8;//如果第三行为低电平,设行值为8
else if(line==0xe0) y=12;//如果第四行为低电平,设行值为12
else ;
keynum=x+y;//键值=列值+行值
return keynum;
}
//主函数:
int main(void)
{
unsigned char num;
while(1)
{
num=ScanArrayKey();//扫描矩阵按键获得键值
DTDisplayChar(segmcode[num/10],0xfe);//显示键值的十位
Delayms(1);
DTDisplayChar(segmcode[num%10],0xfd);//显示键值的各位
Delayms(1);
}
return 0;
} |