为何是一下这样。我的问题是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...
单片机矩阵键盘检测的疑问
temp=temp&0xf0; \/\/temp&1111 0000,0与任何数结果为0,把temp变量的低四位屏蔽了,高四位因为任何数与1等于它本身,所以把高四位对应的端口状态读进来。while(temp!=0xf0) \/\/上步处理后,高四为不全为1,说明有按键按下(结合矩阵键盘的电路结构才能理解,这里不方便上图){ delay(5);temp=P...
一个关于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单片机矩阵键盘的问题。
(1)P3口是准双向IO口(注意与双向IO口的区别),它 的硬件结构决定着,读取之前先写1,再读取,读取的结果才可能是正确的,你可以区域查查书。(2)4X4 矩阵键盘的8根线直接连在IO上,而独立按键有一根线固定是接地的,这就意味着必须采取扫面或者线反转的方法。比如其中一根行线赋0,相当于...
51单片机矩阵键盘检测方面的问题
第一个问题,应该是考虑如果先开锁存器,在那一时刻,P0的值还是上一次给P0赋的值,下在一条语句才将这次的值给P0,这样会造成数码管的余辉,静态显示的时候,因为太快看不到,动态显示时,就会比较明显了。第二个问题他的程序应该检测的是高四位,是否被拉低,因为temp和0xf0与,低四位不管是...
51单片机键盘检测加串口传输的问题
在spi中断程序中没有调用JIANPAN,直接返回了,应该删去JMP ENDD JMP ENDD 删去 这一句 CALL JIANPAN MOV A,R1 MOV SBUF,A OUT: JNB TI,OUT
按键实验
用同样的方法,依次轮流送各列一次低电平,再轮流检测一次各行中是否有低电平。这样就可检测完 所有的按键,也就能判断出被按下的是哪一个键。 当然我们也可将各行线置低电平,然后扫描检测各列线中是否出现低电平, 这就是矩阵键盘检测的原理和方法。include <reg51.h> define uchr unsigned...