为何是一下这样。我的问题是1,P3给了0xfe,p3又给temp。再拿temp跟0xf0比较那不是总是拿0xfe与0xf0比较。2,P3=0xfe是什么作用,既然要对比按下键后P3与0xf0,那么直接对比p3与0xf0的值就可以了啊(只要后两句)
while(1) {P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
P3口的低4位接行,高四位接列,忘记说了,不好意思
那么P3=0xfe有什么作用?
追答读取P3口的状态
追问是不是读取前全部要置1,那写成0xff不还好。
追答不是的,要有1有0才行,不然,如何知道有键被按下?
当管脚由1变成0表示有键按下的。
P3口的低4位接行,高四位接列,忘记说了,不好意思
追答P3=0xfe; //将第一行线置低电平,其余行线全为高电平。
temp=P3; //读取P3口当前状态值赋给临时变量temp,用于后面计算。
temp=temp&0xf0;//将temp与0xf0进行“与”运算,然后再将结果赋值给temp,主要目的是判
断temp的高四位是否有0,如果temp的高四位有0,那么与0xf0”与”运算后结果必然不等于0xf0;如果temp的高四位没有0,那么它与0xf0”与”运算后结果必然等于0xf0。temp的高四位数据线实际上就是矩阵键盘的4个列线,从而我们可以判断temp与0xf0“与”运算后的结果是否为0xf0来判断第一行按键是否有键按下。
while(temp!=0xf0) // 这句话中的temp是P3口数据与oxf0“与”运算后的结果,如果temp不等于0xf0,说明有键按下。
当然后面紧接着要加延时去抖,并需要在判断一次是否有键确实被按下。
这下明白了么?如果还不明白,我也没办法了。
51单片机 矩阵键盘 检测的命令
temp的值会受到按键的影响,例如变成:7e或别的值等。
求助程序:51单片机矩阵键盘是否按下检测程序
函数功能 : 检测有按键按下并读取键值 输 入 : 无 输 出 : 无 \/ void KeyDown(void){ char a=0;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f)\/\/读取按键是否按下 { delay(1000);\/\/延时10ms进行消抖 if(GPIO_KEY!=0x0f)\/\/再次检测键盘是否按下 { \/\/测试列 GPIO_KEY=0X0F...
51单片机如何用矩阵键盘输入数值,最后赋值到一个变量上
你做矩阵键盘检测的时候,会触发相关的IO口的状态,通过分析IO口,就能知道那个键按下;定义一个变量,将按下的键值赋给变量就行了
单片机矩阵键盘检测的疑问
temp=temp&0xf0; \/\/temp&1111 0000,0与任何数结果为0,把temp变量的低四位屏蔽了,高四位因为任何数与1等于它本身,所以把高四位对应的端口状态读进来。while(temp!=0xf0) \/\/上步处理后,高四为不全为1,说明有按键按下(结合矩阵键盘的电路结构才能理解,这里不方便上图){ delay(5);temp=P...
51单片机如何用矩阵键盘输入数值,最后赋值到一个变量上
你好!!你做矩阵键盘检测的时候,会触发相关的IO口的状态,通过分析IO口,就能知道那个键按下;定义一个变量,将按下的键值赋给变量就行了
一个关于51单片机矩阵键盘的问题。我现在已经能实现矩阵键盘的检测,我 ...
while(temp!=0xf0) \/\/松手检测 { temp=P1;temp=temp&0xf0;display(); \/\/调用显示 } } } P1=0xfd;temp=P1;temp=temp&0xf0;while(temp!=0xf0){ delay(10);while(temp!=0xf0){ temp=P1;temp=temp&0xf0;switch(temp){ case 0xe0: num=4;break;case 0xd0: num=5;break;...
51单片机矩阵键盘怎么检测啊
给按键的一端一个低电平,当按键按下时,相当于一个通路,会将低电平返回到另外一端,所以我们只要判断另外一端是否返回低电平来检测按键是否被按下!
单片机矩阵键盘怎么进行松手检测?
用位跳转指令,检测到按键后,确定其是有键按下,不是干扰后,就用位跳转指令等待其弹起,再转到相应处理程序处理即可。
51单片机的矩阵键盘检测问题
扫描按键有没有释放,如果释放再加个消抖延时,再扫描有没有释放,如果按键释放则确认已经松手了。我是这么做的,可以用
关于51单片机矩阵键盘的问题。
(1)P3口是准双向IO口(注意与双向IO口的区别),它 的硬件结构决定着,读取之前先写1,再读取,读取的结果才可能是正确的,你可以区域查查书。(2)4X4 矩阵键盘的8根线直接连在IO上,而独立按键有一根线固定是接地的,这就意味着必须采取扫面或者线反转的方法。比如其中一根行线赋0,相当于...