矩阵键盘行列反转法疑惑


依据各教材的解析和网上部分解释,大致理解但依旧有疑虑。

以按下S16为例(P3.3、P3.4)

uchar keyscan(void)  
{
 uchar cord_h,cord_l;
 P3=0x0f;            //初始赋值0000 1111
 cord_h=P3&0x0f;     //按键按下故P3变成1110 0111(0xe7),所以cord_h成0000 0111
 if(cord_h!=0x0f)    //先检测有无按键按下
 {
  delay(100);        //去抖
  if(cord_h!=0x0f)
  {
    cord_h=P3&0x0f;  //0000 0111
    P3=cord_h|0xf0;  //将前四位变高电平,保留后四位1111 0111
    cord_l=P3&0xf0;  //因为已经按下,故P3是1110 0111,所以cord_l成1110 0000
    return(cord_h+cord_l);//键盘最后组合码值1110 0111
   }
  }return(0xff);     //返回该值
}

解决了cord_l的值的问题,(主要是P3的值不断更新)

但P3=cord_h|0xf0;这条语句不知有何作用(对下文而言)觉得累赘,可以删除。

但是网上解释这是由于硬件方面的语句。由于没找到硬件层次的解释(也许是找到但看不懂)就此搁置。

值得肯定的是,删除该语句会导致整个矩阵键盘的失效,按前两行的按键时指示灯会闪动,数码管无变化(完全失效)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值