P0&0x0f 这个只是表达屏蔽高4位,只取低4位作状态判断,也就是按键是接在低4位,用每次对应低4位状态值变化而判断即可 |
用脑子想一下,你要区分三个不同的按键,即使用没有时序,它也有8种按键组合方式(不按、单按、双按、三按),你想如何简单呢? 简单与复杂与你的设计要求相关。 |
学到矩阵按键的扫描时,最好能结合仿真软件比如proteus来看一下引脚的电平实际变化,会更容易理解的。 |
这个其实还是比较简单的。主要还是你没有习惯这种方法。 按照lz的意思,应该是这样的: key = P0; key = key & 0x0f; 然后是 if(key != 0x0f) { //执行语句 } 意思大致是:key先存储P0口的高低电平状态,然后和0x0f做“与”运算(不一定非要是0x0f)。然后得到“与”运算之后的结果,“与”运算的结果如果和0x0f不一致,则表明P0口的数据发生了变化,即按键按下之后,改变了P0的电平状态。如果数据一致,则表示P0电平未发生变化,按键没有被按下。 举个栗子: 若按键在P0.3,P0初始为0x0f,(0000 0111 b),按下按键之后,会变成0x07(0000 0111b), 若按键按下0x07(0000 0111) & 0x0f(0000 1111) = 0x07(0000 0111)不等于0x0f 此时,key的值会赋值给P2。 |
不同类型按键要采用不同的检测方法,你表达不清楚 |