关于矩阵键盘反转法中的一个奇怪的问题

2019-07-16 00:23发布

矩阵键盘扫描-----反转法
#include<reg52.h>#define uint unsigned int
#define uchar unsigned char
uchar low,high,temp;
void delay(uint t);
void main()
{
        while(1)
        {       
                        P3=0x0f;
                        if(P3!=0x0f)
                        {        delay(100);
                                low=P3&0x0f;
                                P3=0xff; //What the hell  ??????
                                P3=0xf0;        //如果没了上面那行,此处用 P3=low|0xf0 什么的 同样失效。。。。                       
                                high=P3&0xf0;
                               
                                temp=high+low;       
                                switch(temp)
                                                {
                                                        case 0xd7:P0=0x3f;break; //0
                                                        case 0xeb:P0=0x06;break; //1
                                                        case 0xdb:P0=0x5b;break;   //2
                                                        case 0xbb:P0=0x4f;break;  //3
                                                        case 0xed:P0=0x66;break;   //4
                                                        case 0xdd:P0=0x6d;break;  //5
                                                        case 0xbd:P0=0x7d;break;   //6
                                                        case 0xee:P0=0x07;break;   //7
                                                        case 0xde:P0=0x7f;break;        //8
                                                        case 0xbe:P0=0x6f;break;        //9
                                                }                                 
                        }
       
        }  
}
void delay(uint t)
{
        while(t--);
}

-----------------------------------------------------------------------------------------------------------------------
首先 这个程序是正确的,虽然有些地方不足,但是是可以正常工作的。。。

主要是红 {MOD}字体那 就是让我纠结了好久的一个问题,实在是想不出来了 所以来论坛里求助 希望大家能帮帮忙 看一下也行  谢谢了 :)

因为实在是太奇怪了,
如果没有他,
如果我将她该为0x0f;那么高四位(P3.4~P3.7)相当于失效。
如果将他改为0xfe;那么P3.0口就失效。。。
总之就是,这个P3端口必须要置1一下 后面才能使用。
但是从C语言上,对于下面一条语句来说,他是多余的呀,难道和硬件有关吗???
如果有关的话 那这句话究竟起着什么作用呢???  
我是在仿真软件上进行测试的 也没有提示有错误

QQ截图20130526101448.jpg


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。