问题:一直不明白为什么这两种写法 第一种就实现不到目标效果

第一种:

查看代码
 #include<reg51.h>  
sbit LED1=P1^3;
sbit LED2=P3^5;
sbit LED3=P3^6;
sbit LED4=P3^7;   //定义位名称四个LED灯
sbit  K1=P2^0; 
sbit  K2=P2^1;    
//延时函数
void delay(unsigned int xms)
{
	while(xms>0)xms--;
}
//执行动作
void main(){
	while(1){
		if(K1==0&&K2==0){
			delay(1200);
			if(K1==0&&K2==0){
				LED1=0;	LED2=LED3=LED4=1; }
		}
		else if(K1==0&&K2==1){
			delay(1200);
			if(K1==0&&K2==1){
				LED2=0;	 LED1=LED3=LED4=1;} 
		}
		else if(K1==1&&K2==0){
			delay(1200);
			if(K1==1&&K2==0){
				LED3=0;	  LED1=LED2=LED4=1;	}
		}
		else if(K1==1&&K2==1){
			delay(1200);
			if(K1==1&&K2==1){
				LED4=0;	  LED1=LED2=LED3=1;}
		}
		
	}
}

效果:
按按键后 改变了状态 但是松开后立即回到上一个LED显示状态  发现不出来问题 

第二种:

#include<reg51.h>
sbit LED1=P1^3;
sbit LED2=P3^5;
sbit LED3=P3^6;		
sbit LED4=P3^7;
sbit KG0=P2^0;
sbit KG1=P2^1;
bit KG0_State=1;
bit KG1_State=1;
void delay(unsigned int xms);
void keyBoard();
//执行动作
void main(){
	while(1){
		keyBoard();
		if(	KG0_State==0&&KG1_State==0){
			LED1=0;	LED2=LED3=LED4=1; }
		else if(KG0_State==0&&KG1_State==1){
			LED2=0;	LED1=LED3=LED4=1; }
		else if(KG0_State==1&&KG1_State==0){
			LED3=0;	LED1=LED2=LED4=1; }
		else if(KG0_State==1&&KG1_State==1){
			LED4=0;	LED1=LED2=LED3=1; }
		}
	}

//延时函数
void delay(unsigned int xms)
{
	while(xms>0)xms--;
}
//判断按键状态
void keyBoard()
{
	if(KG0==0){
		delay(1200);
		if(KG0==0){
			delay(1200);
			while(!KG0);	
			KG0_State=!KG0_State;		
		}
	}
	if(KG1==0){
		delay(1200);
		if(KG1==0){
			delay(1200);
			while(!KG1);	
			KG1_State=!KG1_State;		
		}
	}
}

 效果:
正常 完美

posted @ 2022-09-30 17:24  iZJ"Qq4577105  阅读(17)  评论(0编辑  收藏  举报