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++);
}
劳烦高手指点一下
#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++);
}
...全文
相关推荐
if条件满足,代码却不执行
if条件满足,代码却不执行,好奇怪!
keil5 if else 问题解决
现象:keil 5 仿真时候,if和else执行的内容会一直触发; 在Options for Target Optimization(优化) 选择level 0 或者 default
如何在keil中查看程序执行时间
对于单片机初学者,在做跑马灯实验时,如果用C语言编程,这个教程将很好的教会你在keil环境下如何看一个函数执行的时间长短,进而更好地实现延时的精准性~
keil实例教程(2)Keil的调试命令在线汇编与断点设置.pdf
介绍Keil的调试命令在线汇编与断点设置
STM32 KEIL调试不能打断点,源代码无箭头
对于STM32程序的keil调试时断点按键为灰色不能打断点,和调试时源代码窗口没有出现三角箭头的即代码运行不跟踪跳转的问题,下面提供终极解决方案。


单片机/工控
