KeyPad就是P2,以下是一部分代码,注释是我根据自己的理解写上去的,有不对的还请大佬们指教,现在有个不懂得地方就是scancode+=KeyPad/16*16;这一句中的计算原理是什么,除16又乘16,我用计算机验证了半天都对不上。
uchar GetScanCode()
{
uchar scancode=0;
KeyPad=0x0f;//00001111让行的数值,即低位全为1
if(KeyPad%16!=0x0f) //检测是否有按键按下
{
delay(10); //消抖
KeyPad=0x0f; //
if(KeyPad%16!=0x0f)//再次检测是否有按键按下
{
KeyPad=0x0f;//
scancode=KeyPad%16; //读取行数值 ,即取低位
KeyPad=0xf0;
scancode+=KeyPad/16*16;//scancode = scancode + KeyPad/16*16(高位) 行数值加列数值 组成扫描代码
KeyPad=0x0f;
while(KeyPad%16!=0x0f);//等待按键松开并输出
return scancode;
}
}
return 0;
}
uchar code KeyValue[][2]={
{0xee,1},
{0xde,2},
{0xbe,3},
{0x7e,4},
{0xed,5},
{0xdd,6},
{0xbd,7},
{0x7d,8},
{0xeb,9},
{0xdb,0},
{0xbb,10},
{0x7b,11},
{0xe7,12},
{0xd7,13},
{0xb7,14},
{0x77,15},
};
|