/*******************************************
函数名称:Check_Key
功 能:扫描键盘的IO端口,获得键值
参 数:无
返回值 :无
********************************************/
/***************************************
key_Val 对应键值
列:[p14] [p15] [p16] [p17]
↓ ↓ ↓ ↓
行:
[p13]→ 1 2 3 4
[p12]→ 5 6 7 8
[p11]→ 9 10 11 12
[p10]→ 13 14 15 16
***************************************/
void Check_Key(void)
{
unsigned char row ,col,tmp1,tmp2;
unsigned char keymap[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};//设置键盘逻辑键值
tmp1 = 0x08;
for(row = 0;row < 4;row++) //行扫描
{
P1OUT = 0x0f; //P1.0~P1.3输出全1
P1OUT -= tmp1; //P1.0~p1.3输出四位中有一个为0
tmp1 >>=1;
if((P1IN & 0xf0)<0xf0) //是否P1IN的P1.4~P1.7中有一位为0
{
tmp2 = 0x10; // tmp2用于检测出哪一位为0
for(col = 0;col < 4;col++) // 列检测
{
if((P1IN & tmp2) == 0x00) // 是否是该列,等于0为是
{
Key_Val = keymap[row*4 + col]; // 获取键值
return; // 退出循环
}
tmp2 <<= 1; // tmp2左移1位
}
}
}
}
此帖出自
小平头技术问答
一周热门 更多>