键盘扫面函数这个怎么理解
展开全部
从ME850独立按键的电路图上可以得知,K1-K4四个键使用了51单片机P1口的P1.4,P1.5,P1.6和P1.7作为输入,K5-K8使用了51单片机P3口的P3.2,P3.3,P3.4和P3.5作为输入,档按键按下时,该键对应的I/O口电平被拉低,因此在进行按键检测时,需要事先拉高P1,P3的电平,若某个口电平为低,则表明该键被按下。因此程序解释如下:
unsigned char scankey()
{
unsigned char keynum,keynum1,keynum2;
P1 = 0xff; //假定K1-K4未按下
P3 = 0xff; //假定K5-K8未按下
keynum1 = P1; //读 P1 端口
keynum2 = P3; //读 P3 端口
//K1-K4键使用了P1的高四位,为了屏蔽低四位,采用 keynum1&0xf0 式来实现,>>4 将屏蔽 后的结果右移四位来形成键码的低四位
//K5-K8键使用了P3的中间四位,为了屏蔽前后各2位,采用 keynum2&0x3c 式来实现,<<2 将 屏蔽后的结果左移两位来形成键码的高四位
keynum1 = (keynum1 & 0xf0) >> 4; //低四位为有效位(k1-k4)
keynum2 = (keynum2 & 0x3c) << 2; //低四位为有效位(k5-k8)
keynum = keynum1 | keynum2; //组合成键码
return (keynum); //返回键码
}
unsigned char scankey()
{
unsigned char keynum,keynum1,keynum2;
P1 = 0xff; //假定K1-K4未按下
P3 = 0xff; //假定K5-K8未按下
keynum1 = P1; //读 P1 端口
keynum2 = P3; //读 P3 端口
//K1-K4键使用了P1的高四位,为了屏蔽低四位,采用 keynum1&0xf0 式来实现,>>4 将屏蔽 后的结果右移四位来形成键码的低四位
//K5-K8键使用了P3的中间四位,为了屏蔽前后各2位,采用 keynum2&0x3c 式来实现,<<2 将 屏蔽后的结果左移两位来形成键码的高四位
keynum1 = (keynum1 & 0xf0) >> 4; //低四位为有效位(k1-k4)
keynum2 = (keynum2 & 0x3c) << 2; //低四位为有效位(k5-k8)
keynum = keynum1 | keynum2; //组合成键码
return (keynum); //返回键码
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询