老阿猴 2022-07-02 16:04 采纳率: 33.3%
浏览 47
已结题

keilc51中if中的表达式

在keilc51中为什么if中的表达式为0,程序还是会进入到if里面?
#include "reg52.h"
#include "math.h"
#define KEY P1
#define LED P0
typedef unsigned int uint;
typedef unsigned char uchar;

uchar duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
                       0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

void delay(double a)
{
    uint b=a*100;
    while(b--);
}

int key_scan()
{
    int n,m;
    for(n=0;n<4;++n)
    {
        KEY=~(0x01<<n);
        if(KEY!=~(0x01<<n))
        {
            delay(10);
            if(KEY!=~(0x01<<n))
            {
                switch(KEY&0xF0)
                {
                    case 0x70:m=4-n;break;
                    case 0xb0:m=8-n;break;
                    case 0xd0:m=12-n;break;
                    case 0xe0:m=16-n;break;
                }
            }
            while(KEY!=~(0x01<<n));
            return m;
        }
    }
    return 0;
}

void smg(int s)
{
    if(s>0)
    {
        LED=duan[s-1];
    }
}

void main()
{
    while(1)
    {
        smg(key_scan());
    }
}

img

img

这个if中的表达式应该是0,但是程序却跳到了delay(10)
  • 写回答

2条回答 默认 最新

  • Tristan Tsai 2022-07-02 16:15
    关注

    下面这句

    
    int n,m;
    

    在前面加上valotile试试

    
    valotile int n,m;
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月2日
  • 创建了问题 7月2日