51单片机4 x 4矩阵键盘的检测中P3=0xfe,temp=P3;看解释ms第二步是把按下去的键P3赋给temp 但p3不是被
发布网友
发布时间:2022-04-30 00:41
我来回答
共5个回答
热心网友
时间:2023-10-11 05:23
这个问题是这样的,首先单片机的c语言和电脑的编译器不是一样的,你要考虑硬件,下面步入正题:
P3=0xfe; //P3等于0xfe
temp=P3; //temp等于P3等于0xfe
temp=temp&0xf0; //到这里,如果你按下矩阵键盘的第一个键,那么temp等于0xee
temp=0xee&0xf0=0xe0
while(temp!=0xf0) //你这里打错了,不是while语句是if语句,现在temp的值是0xe0
0xe0不等于0xf0,所以进入语句内部
{
delay(5); //去抖动
temp=P3; //现在赋值,这是你还在按着第一个键,那么P3=0xee,所以temp等于0xee
temp=temp&0xf0; //temp=0xee&0xf0=0xe0,“看这里,这是temp=0xe0”
while(temp!=0xf0) //这里还是写错了,是if语句,0xe0不等于0xf0再次进入语句内部
{
temp=P3;//在没执行这一步的时候,temp的值是0xe0,如果不把P3的值赋予temp
那么当进入switch语句后就没有相应的case,这是你还在按键,那么
P3=0xee,所以temp也等于0xee,然后进入switch语句判断,进入
相应的case
switch(temp)
热心网友
时间:2023-10-11 05:23
按键的中断级比较高,你赋值后,如果按键了,他会先处理按键,硬件采用与或非的的逻辑,最终会把该按键的值在你按下的时候赋值进去。
热心网友
时间:2023-10-11 05:24
P3在等号左边是赋值,在等号右边是读入
热心网友
时间:2023-10-11 05:24
没看明白,程序没错啊!~先赋值,然后读取,判断
热心网友
时间:2023-10-11 05:25
唉,何必这么复杂呢;用我这程序吧
sbit k0=P3^0;
sbit k1=P3^1;
sbit k2=P3^2;
sbit k3=P3^3;
sbit k4=P3^4;
sbit k5=P3^5;
sbit k6=P3^6;
sbit k7=P3^7;
P3=0xff;
k0=0;
if(!k4){}
if(!k5){}
if(!k6){}
if(!k7){}
P3=0xff;
k1=0;
if(!k4){}
if(!k5){}
if(!k6){}
if(!k7){}
P3=0xff;
k2=0;
if(!k4){}
if(!k5){}
if(!k6){}
if(!k7){}
P3=0xff;
k3=0;
if(!k4){}
if(!k5){}
if(!k6){}
if(!k7){}
中间加适当的按键去抖就行
51单片机4 x 4矩阵键盘的检测中P3=0xfe,temp=P3;看解释ms第二步是把...
0xe0不等于0xf0,所以进入语句内部 { delay(5); //去抖动 temp=P3; //现在赋值,这是你还在按着第一个键,那么P3=0xee,所以temp等于0xee temp=temp&0xf0; //temp=0xee&0xf0=0xe0,“看这里,这是temp=0xe0”while(temp!=0xf0) //这里还是写错了,是if语句,0xe0不等于0xf0再次进入...
51单片机 矩阵键盘 检测的命令
temp的值会受到按键的影响,例如变成:7e或别的值等。
51单片机如何用矩阵键盘输入数值,最后赋值到一个变量上
你做矩阵键盘检测的时候,会触发相关的IO口的状态,通过分析IO口,就能知道那个键按下;定义一个变量,将按下的键值赋给变量就行了
关于51单片机矩阵键盘的问题。
(1)P3口是准双向IO口(注意与双向IO口的区别),它 的硬件结构决定着,读取之前先写1,再读取,读取的结果才可能是正确的,你可以区域查查书。(2)4X4 矩阵键盘的8根线直接连在IO上,而独立按键有一根线固定是接地的,这就意味着必须采取扫面或者线反转的方法。比如其中一根行线赋0,相当于...
大神帮我看下我这个C51单片机4*4矩阵键盘扫描,在keil变量窗口查看键入值...
P1=0xf0;scan0=P1;delay1ms(20);if(scan0!=0xf0) //判键是否按下 { scan0=P1;if(scan0!=0xf0) //二次判键是否按下 { P1=0x0f; //线反转法的核心 delay1ms(20);scan1=P1;keycode=scan0|scan1; //组合成键编码 for(m=0;m<16;m++){ if(keycode==x[m]) //...
单片机矩阵键盘检测的疑问
temp=P3; //读回P3口的状态 temp=temp&0xf0; //temp&1111 0000,0与任何数结果为0,把temp变量的低四位屏蔽了,高四位因为任何数与1等于它本身,所以把高四位对应的端口状态读进来。while(temp!=0xf0) //上步处理后,高四为不全为1,说明有按键按下(结合矩阵键盘的电路结构才能理解,这里不...
谁能帮我解释一下这个程序中的这个(键盘扫描函数,使用行列反转扫描法...
你用的是4x4的矩阵键盘的行列反转扫描吧,这种方法确定一个键码要分成3步:第一步:将行IO置低电平,列IO置高电平,读数据。按下任意键时,将有一个列IO被拉低,于是读到类似00001011的数据 第二步:将行IO置高电平,列IO置低电平,重复第一步,读到类似11010000的数据cord_l=P3&0xf0;本句取...
单片机键盘检测的问题
《把P3口的值赋给随机变量temp,然后和0xf0相与,通过结果判断temp高四位有没有0.从而判断出4x4矩阵的第一行有没有按键被按下》。--- 另外的问题,如果有一个按键被按下,是不是它所在的行列线的电平都会变成低电平 只有当行线,先输出零之后,按键被按下,它所在的列线,会变成低电平。
51单片机矩4X4阵键盘的第一排按键没反应。
你仔细看一下资料就会发现这个问题是开发板的问题,就是他用到的一个芯片会把单片机P3口的某个引脚置高,导致键盘不好使,解决方法是下载完程序之后拔掉下载USB线,只保留供电USB线再做测试
51单片机矩阵键盘检测方面的问题
第一个问题,应该是考虑如果先开锁存器,在那一时刻,P0的值还是上一次给P0赋的值,下在一条语句才将这次的值给P0,这样会造成数码管的余辉,静态显示的时候,因为太快看不到,动态显示时,就会比较明显了。第二个问题他的程序应该检测的是高四位,是否被拉低,因为temp和0xf0与,低四位不管是...