单片机学习小组
直播中

余姗姗

7年用户 180经验值
私信 关注

为何加上if(P1=0x0F){keyNo=0xFF;return;} //无按键按下时提前返回,程序就无法正常运行了?

void main()
{
          P0 = 0xFF;
        while(1)
        {
                Keys_Scan();
                if (keyNo == 0xFF) {delay_ms(10);continue;}
                P0 = SEG_CODE[keyNo];Beep();
                while (Keys_Scan(), keyNo != 0xFF);
         }
}
void Keys_Scan()
{
        P1=0x0F;delay_ms(1);
//        if(P1=0x0F){keyNo=0xFF;return;}        //无按键按下时提前返回
        //按键后00001111将变成0000XXXX,X中1个为0,3个为1
        //下面判断按键发生在0~3列中的那一列
        switch(P1)
        {
                case 0x0E:keyNo = 0; break;
                case 0x0D:keyNo = 1; break;
                case 0x0B:keyNo = 2; break;
                case 0x07:keyNo = 3; break;
                default: keyNo = 0xFF;return;
         }
         P1 = 0xF0; delay_ms(1);
         //判断按键发生在哪一行并且加上列号确定准确的位置
         switch (P1)
         {
                 case 0xE0: keyNo +=0; break;
                case 0xD0: keyNo +=4; break;
                case 0xB0: keyNo +=8; break;
                case 0x70: keyNo +=12;break;
                default:  keyNo = 0xFF;
         }
               
}

回帖(11)

魏紫瑜

2019-9-18 07:02:11
你有仔细看if(P1=0x0F){keyNo=0xFF;return;}这一句吗?你有学过C吗?if(P1=0x0F)是什么意思?
if(P1=0x0F)永远是成立的,所以永远不会执行这之后的代码
举报

徐静

2019-9-18 07:17:59
将这句话去掉之后,按键扫面程序就能成功运行,我自己推测了一下,应该是Keys_Scan()每次运行就在if(P1=0x0F){keyNo=0xFF;return;}这句话提前返回了,不知道我说的对不对,求大神指点一下。另外,如果要加入这个功能,应该如何修改呢?
举报

李建设

2019-9-18 07:23:37
你要认真学习呀,我都这么说了,你也还看不出问题!非要最终明确的答案不可吗?这样你很难提高的.按照下面修改就可以了.
if(P1==0x0F){keyNo=0xFF;return;}
举报

李杨

2019-9-18 07:39:17
4楼说得对呀,c语言判断相等是==,=是赋值
举报

更多回帖

发帖
×
20
完善资料,
赚取积分