KeyPad就是P2,以下是一部分代碼,注釋是我根據(jù)自己的理解寫上去的,有不對的還請大佬們指教,現(xiàn)在有個不懂得地方就是scancode+=KeyPad/16*16;這一句中的計算原理是什么,除16又乘16,我用計算機驗證了半天都對不上。
uchar GetScanCode()
{
uchar scancode=0;
KeyPad=0x0f;//00001111讓行的數(shù)值,即低位全為1
if(KeyPad%16!=0x0f) //檢測是否有按鍵按下
{
delay(10); //消抖
KeyPad=0x0f; //
if(KeyPad%16!=0x0f)//再次檢測是否有按鍵按下
{
KeyPad=0x0f;//
scancode=KeyPad%16; //讀取行數(shù)值 ,即取低位
KeyPad=0xf0;
scancode+=KeyPad/16*16;//scancode = scancode + KeyPad/16*16(高位) 行數(shù)值加列數(shù)值 組成掃描代碼
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},
};
|