?? 4x4.c
字號:
/*-----------------------------------------------
函數名稱:key_scan
功 能:鍵盤掃描,返回數字鍵值
輸 入:無
輸 出:無符號整型鍵值
范 圍:
------------------------------------------------*/
unsigned char key_scan(void)
{
uchar sccode, recode; //行掃描碼(低4位1110 1101 1011 0111),重新編碼(高4位 1101)
uchar key;
P2 = 0xf0; //發全0行掃描,列線輸入
if( (P2 & 0xf0) != 0xf0) //若有4*4有鍵按下,在進行鍵盤掃描,找出按下的鍵
{
delay_nms(20); //延時去抖動,一個按鍵持續上百毫秒
if( (P2 & 0xf0) != 0xf0 )
{
sccode = 0xfe; //逐行掃描初值
while( (sccode & 0x10) != 0 ) //本行有鍵按下
{
P2 = sccode; //行掃描碼寫入P2
if( (P2 & 0xf0) != 0xf0 )
{
recode = (P2 & 0xf0) | 0x0f; //保存列特征信息
key = ( (~sccode) + (~recode) ); //特征字節碼
}
else
{
sccode = (sccode << 1) | 0x01; //該行沒有鍵按下,則行掃描碼
} //左移一位,繼續下一行的掃描
}
}
switch(Key)
{
case 0x11: return 1; break;
case 0x21: return 2; break;
case 0x41: return 3; break;
case 0x81: return MAX; break;
case 0x12: return 5; break;
case 0x22: return 6; break;
case 0x42: return MIN; break;
case 0x82: return 8; break;
case 0x14: return 9; break;
case 0x24: return UART; break;
case 0x44: return NC; break;
case 0x84: return 0; break;
case 0x18: return NC; break;
case 0x28: return NC; break;
case 0x48: return NC; break;
case 0x88: return NC; break;
default: break;
}
}
return (NC); //沒有鍵按下,返回0
}
/************************************
函數名稱:delay_xms
功 能:延時 X ms
輸 入:無符號整型
輸 出:
范 圍:12MHZ
************************************/
void delay_nms(uint n)
{
uint i;
for(; x > 0; x--)
{
for(i = 0; i < 124; i++)
{
/*沒有循環體*/
}
}
}
/*-----------------------------------------------------------------------
----------------------------------------------------------------------- */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -