单片机的c语言:判断矩阵键盘被按下:P1=0xfe;while(P1!=0xfe){延时,判断。。。。。。。。。};。。。
我题目的程序能判断吗跟这个标准的有啥区别P3=0xfe;temp=P3;temp=temp&0xf0;while(temp!=0xf0){...
我题目的程序能判断吗
跟这个标准的有啥区别
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{ 展开
跟这个标准的有啥区别
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{ 展开
2个回答
展开全部
硬件没问题到可以最好加个中间变量 。
第一步先给矩阵赋值将一线拉低即:P3=0xFE; // 1111,1110
第二步再给读口即:temp=P3;
第三步取:取高4位;temp&=0xF0;
第四步:判断是否有按键,有按键按下进入按键循环,没有就退出,一般用if就行了。
第五步:延时10ms
第六步接着第一步,到第四步要使用while循环才确定真正有键按下而不是干扰引起的引脚波动。
为什么有Temp太重要了,一定要使用,中间变量在你做判断的时候不会因为改变而改变,
例如:写两句
if(P1==0xFE)
{
if(P1==0xFE)
。。。
}
和
temp=P1;
if(Temp==0xFE)
{
if(Temp==0xFE)
。。。
}
实际应用中不如加Temp稳定,P1口一直会因为外部影响而变的,temp不会只会跟你的运算而变,你在取高位判断或直接判断的时候回发现,虽然你赋值0xFE但是,发现第二个管脚短接了,
会P1会变成:0xFC;// 1111 1100;因此你的while(P1!=0xfe)就不如直接用temp取值后判断了,程序就会跑到你不知道的地方,这叫误判断也叫失控,对以后的查找问题会带来麻烦。
第一步先给矩阵赋值将一线拉低即:P3=0xFE; // 1111,1110
第二步再给读口即:temp=P3;
第三步取:取高4位;temp&=0xF0;
第四步:判断是否有按键,有按键按下进入按键循环,没有就退出,一般用if就行了。
第五步:延时10ms
第六步接着第一步,到第四步要使用while循环才确定真正有键按下而不是干扰引起的引脚波动。
为什么有Temp太重要了,一定要使用,中间变量在你做判断的时候不会因为改变而改变,
例如:写两句
if(P1==0xFE)
{
if(P1==0xFE)
。。。
}
和
temp=P1;
if(Temp==0xFE)
{
if(Temp==0xFE)
。。。
}
实际应用中不如加Temp稳定,P1口一直会因为外部影响而变的,temp不会只会跟你的运算而变,你在取高位判断或直接判断的时候回发现,虽然你赋值0xFE但是,发现第二个管脚短接了,
会P1会变成:0xFC;// 1111 1100;因此你的while(P1!=0xfe)就不如直接用temp取值后判断了,程序就会跑到你不知道的地方,这叫误判断也叫失控,对以后的查找问题会带来麻烦。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询