4x3矩阵键盘扫描法c语言,四种4*4矩阵键盘的扫描方法

第一种:这种方法就是郭天祥书上教的扫描方法,很容易理解,但是程序比较长。

P2=0xfe;//给第一列送低电平

temp=P2;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(10); //去抖

temp=P2;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P2;

switch(temp)

{       case 0xee:num=1;break;

case 0xee:num=2;break;

case 0xee:num=3;break;

case 0xee:num=4;break;

}

while(temp!=0xf0)    //按键释放

{

temp=P2;

temp=temp&0xf0;

}

}

}

然后再给第二、三、四列依次送低电平检查,也就是说再重复上边的程序四次

第二种

uchar keyscan(void)

{

unsigned char cord_h,cord_l;

P2=0x0f;            //行线输出全为0

cord_h=P2&0x0f;     //读入列线值

if(cord_h!=0x0f)    //先检测有无按键按下

{

delayms(10);        //去抖

if((P2&0x0f)!=0x0f)

{

cord_h=P2&0x0f;  //读入列线值

P2=cord_h|0xf0;  //输出当前列线值

cord_l=P2&0xf0;  //读入行线值

while((P2&0xf0)!=0xf0);//等待松开并输出

return(cord_h+cord_l);//键盘最后组合码值

}

}

return(0xff);     //返回该值

第三种

uchar keyscan()

{

uchar i=0,j=0,key;

P2=0xf0;               // 高位拉高,低位拉低

if(((~P2)&0xf0)!=0)

{

delay(10);

if(((~P32&0xf0)!=0)

{

P2=0xfe;

while(((~P2)&0x0f)!=0)        // 此语句保证只扫描四行

{

if(((~P2)&0xf0)!=0)

{

switch((~P2)&0xf0)

{

case 0x10:

j=0;break;

case 0x20:

j=1;break;

case 0x40:

j=2;break;

case 0x80:

j=3;break;

}

return(4*i+j);

}

else

{

P3=P3<<1;           //循环4次

i++;

}

}

}

}

return (key) ;

}

第四种

uchar keyscan(void)

{

uchar code K_Tab[4][4] = {

0xee, 0xde, 0xbe, 0x7e, 0xed, 0xdd, 0xbd, 0x7d,

0xeb, 0xdb, 0xbb, 0x7b, 0xe7, 0xd7, 0xb7, 0x77};

uchar temp1 = 0xfe, temp2, i, j;

for(i = 0; i < 4; i++)

{          //扫描低四位

P3 = temp1;                     //输出一行0

temp2 = P3;                     //马上就读入

if((temp2 & 0xf0) != 0xf0)     //如果有键按下

{

for(j = 0; j < 4; j++)        //就扫描高四位

if(temp2 == K_Tab[j])    //查表

return i * 4 + j;         //查到了就返回按键的数值

}

else temp1 = _crol_(temp1, 1);

}

return 16;                        //没有查到,返回按键松开的代码

}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值