#define scan_key_port P3
uchar key_scan()
{
uchar sccode,recode;
uchar key_value;
scan_key_port=0xf0; /* 发全 "0" 的行扫描码,列线输入 */
if((scan_key_port&0xf0)!=0xf0) /* 若有键按下 */
{
delay_1ms(1); /*延时去抖动*/
if((scan_key_port&0xf0)!=0xf0) /* 若有键按下 */
{
sccode=0xfe; /*逐行扫描初值*/
while((sccode&0x10)!=0)
{
scan_key_port=sccode; /* 输出行扫描码 */
if((scan_key_port&0xf0)!=0xf0) /* 本行有键按下 */
{
recode=(scan_key_port&0xf0)|0x0f;
key_value=(~sccode)+(~recode);/* 返回特征码 */
}
else sccode=(sccode<<1)|0x01; /* 行扫描左移一位 */
}
}
}
else { //若无键按下
scan_key_port = 0xff;
return (0);
}
scan_key_port = 0xff; /*释放按键扫描端口*/
switch(key_value){ /*显示按键对应的丝印*/
case 0x11:
return('0');
case 0x12:
return('1');
case 0x14:
return('2');
case 0x21:
return('3');
case 0x22:
return('4');
case 0x24:
return('5');
case 0x41:
return('6');
case 0x42:
return('7');
case 0x44:
return('8');
case 0x81:
return('9');
case 0x82:
return('A');
case 0x84:
return('B');
case 0x18:
return('C');
case 0x28:
return('D');
case 0x48:
return('E');
case 0x88:
return('F');
}
}
上一篇:LCD1602四位总线尝试成功
下一篇:1602液晶万年历源程序-带温度、背光、灰度 数字
推荐阅读最新更新时间:2024-03-16 14:04