Keil if(条件)不成立,还会执行内部代码,高手进来帮忙看一下
我是初学者,新手,学习中,遇到if(条件)不成立,还会执行内部代码,网上找一通,也没整明白
劳烦高手指点一下
#include <reg52.h>
unsigned char key;
void DelayS(unsigned int ms);
unsigned char KeyScan();
void main()
{
unsigned char a,b,c,d,e,f,g;
unsigned char Num[10],Wei[4];
unsigned char key1;
a=0xFE;
b=0xFD;
c=0xFB;
d=0xF7;
e=0xEF;
f=0xDF;
g=0xBF;
Num[0]=a&b&c&d&e&f;
Num[1]=b&c;
Num[2]=a&b&g&e&d;
Num[3]=a&b&c&d&g;
Num[4]=f&g&b&c;
Num[5]=a&f&g&c&d;
Num[6]=a&f&e&d&c&g;
Num[7]=f&a&b&c;
Num[8]=a&b&c&d&e&f&g;
Num[9]=f&a&b&c&d&g;
Wei[0]=0x0E;
Wei[1]=0x0D;
Wei[2]=0x0B;
Wei[3]=0x07;
P1=0x00;
/*
EA=1;
TMOD=0x01;
TH0=(65536-20000)/256;
TL0=(65536-20000)%256;
ET0=1;
TR0=1;
*/
key=0;
while(1)
{
//个位显示
P1=Wei[3];
P0=0xFF;
P0=Num[key%10];
DelayS(50);
//十位显示
P1=Wei[2];
P0=0xFF;
P0=Num[key/10];
DelayS(50);
key1=KeyScan();
if(key1!=16) key=key1;
}
}
/*
void Timer0() interrupt 1
{
unsigned char key1;
TH0=(65536-20000)/256;
TL0=(65536-20000)%256;
key1=KeyScan();
if(key1!=16) key=key1;
}
*/
unsigned char KeyScan()
{
unsigned char KeyCode,Press1,Press2,cond;
unsigned int i;
unsigned char code KeyCodes[16] = {0xEE,0xDE,0xBE,0x7E,
0xED,0xDD,0xBD,0x7D,
0xEB,0xDB,0xBB,0x7B,
0xE7,0xD7,0xB7,0x77};
Press1=0x0F;
P2=0x0F;
if ((Press1^P2)==0x01) //为什么条件不成立也会执行内部的代码
{
DelayS(10);
if ((Press1^P2)==0x01)//为什么条件不成立也会执行内部的代码
{
Press1=P2;
P2=0xF0;
Press2=0xF0;
P2=0xF0;
Press2=P2;
for(i=0;i<16;i++)
{
if(((Press1 | Press2)^KeyCodes[i])==0x00)//为什么条件不成立也会执行内部的代码
{
return i;
}
}
}
}
else
{
return 16;
};
}
void DelayS(unsigned int ms)
{
unsigned int i,j;
for(i=ms;i<0;i--)
for(j=0;j<110;j++);
}