|
当键盘按键少于4个时,通常采用独立式接法。但当需要管理键盘的数目增加时,独立式这种简单的接法显然就不适用了。
一般单片机的书上通常会介绍另一种扫描式的方法:用8个I/O口控制16按键。虽然有所优化,但占用的端口资源仍然比较多。
下面介绍一个只需要用3个端口,就能控制16个按键的十分巧妙的接法。
原理图如下:

驱动程序如下:
/*********************************************************************************************/
unsigned chargetkey(void)
{
unsigned char x;
P1|=0x07;
x=P1&0x07;
if(x==0x07) /*判断K0-K6是否有键按下,如果没有,检测K7-K15*/
{
P1&=0xfe;x=P1&0x07;x=x/2+7;
if(x==10)
{
P1|=0x07;P1&=0xfd;x=P1&0x07;x=(x+1)/2+10;
if(x==13)
{
P1|=0x07;P1&=0xfb;x=P1&0x07;x+=13;
}
}
}
return(x);
}
//返回的X为相应的键盘值,如果没有键按下,则返回16 |