51单片机4 x 4矩阵键盘的检测中P3=0xfe,temp=P3;看解释ms第二步是把按下去的键P3赋给temp 但p3不是被 5
oxfe赋值了吗?????为什么还可以保留所按键啊/*********第一行键盘的检测**********/P3=0xfe;//设置P3口的电平为11111110,也就是...
oxfe赋值了吗?????为什么还可以保留所按键啊
/*********第一行键盘的检测**********/
P3=0xfe; //设置P3口的电平为11111110,也就是让P3.0口为低电平,其他的口为高电平
temp=P3; //读取p3口的电平
temp=temp&0xf0; //p3口的电平跟11110000做与操作
while(temp!=0xf0) //检测到第一行上有键盘按下去了
{
delay(5); //延时5ms用来消除按键的抖动
temp=P3; //再次读取P3口的电平
temp=temp&0xf0; //p3口的电平跟11110000做与操作
while(temp!=0xf0) //延时后确实有人按下了第一行的键盘(不是别的干扰导致的)
{
temp=P3; //因为已经确定按下了键,这时就读取P3口的电平
switch(temp) 展开
/*********第一行键盘的检测**********/
P3=0xfe; //设置P3口的电平为11111110,也就是让P3.0口为低电平,其他的口为高电平
temp=P3; //读取p3口的电平
temp=temp&0xf0; //p3口的电平跟11110000做与操作
while(temp!=0xf0) //检测到第一行上有键盘按下去了
{
delay(5); //延时5ms用来消除按键的抖动
temp=P3; //再次读取P3口的电平
temp=temp&0xf0; //p3口的电平跟11110000做与操作
while(temp!=0xf0) //延时后确实有人按下了第一行的键盘(不是别的干扰导致的)
{
temp=P3; //因为已经确定按下了键,这时就读取P3口的电平
switch(temp) 展开
5个回答
展开全部
这个问题是这样的,首先单片机的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)
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)
展开全部
按键的中断级比较高,你赋值后,如果按键了,他会先处理按键,硬件采用与或非的的逻辑,最终会把该按键的值在你按下的时候赋值进去。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
P3在等号左边是赋值,在等号右边是读入
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没看明白,程序没错啊!~先赋值,然后读取,判断
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
唉,何必这么复杂呢;用我这程序吧
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){}
中间加适当的按键去抖就行
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){}
中间加适当的按键去抖就行
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询