问题:一直不明白为什么这两种写法 第一种就实现不到目标效果
第一种:
查看代码
#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;
}
}
}
效果:
正常 完美
作者QQ4577105