单片机程序,谁能帮我解释下段是什么意思

#include <reg51.h>
#define uint unsigned int
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
P2=0xff;
P3=0xff;
while(1)
{
if(key1==0)
{
delay(10);
if(key1==0)
{
while(!key1);
delay(10);
while(!key1);
P2=~P2;
P3=~P3;
key1=1;
}
}
if(key2==0)
{
delay(10);
if(key2==0)
{
while(!key2);
delay(10);
while(!key2);
P2=~P2;
key1=1;
}
}
if(key3==0)
{
delay(10);
if(key3==0)
{
while(!key3);
delay(10);
while(!key3);
P3=~P3;
key3=1;
}
}
if(key4==0)
{
delay(10);
if(key4==0)
{
while(!key4);
delay(10);
while(!key4);
P2=0xfd;
P3=0xfd;
}
}
}
}

第1个回答  2012-05-07
#include <reg51.h>
#define uint unsigned int
sbit key1=P1^0;//按键1
sbit key2=P1^1;//按键2
sbit key3=P1^2;//按键3
sbit key4=P1^3;//按键4
void delay(uint z)//延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
P2=0xff; //P2上的端口都置1
P3=0xff;//P3上的端口都置1
while(1)
{
if(key1==0)//如果按键1按下
{
delay(10); //延时一会,用于去抖
if(key1==0)//再确定是否按键1被按下
{
while(!key1);//如果一直按着按键1不放,程序就停在这里
delay(10);//再延时一会,为了去抖
while(!key1);//如果一直按着按键1不放,程序就停在这里
P2=~P2; //对P2的所有端口取反,如果原来的为1,取反后就全变为0,
//如果原来的为0,取反后就全变为1,
P3=~P3;//对P3的所有端口取反,如果原来的为1,取反后就全变为0,
//如果原来的为0,取反后就全变为1,
key1=1;//将按键1置为1,表示按键不被按下
}
}
if(key2==0)/./这里的分析和key1是差不多的
{
delay(10);
if(key2==0)
{
while(!key2);
delay(10);
while(!key2);
P2=~P2;
key1=1; //这里应该是你打错了,应该是key2=1;的吧
}
}
if(key3==0)//和key1的分析一样
{
delay(10);
if(key3==0)
{
while(!key3);
delay(10);
while(!key3);
P3=~P3;
key3=1;
}
}
if(key4==0)//也和前面的分析一样,再分析一个下面不同的地方
{
delay(10);
if(key4==0)
{
while(!key4);
delay(10);
while(!key4);
P2=0xfd;//这里0xfd=1111 1101,只有P2.1=0;如果是led灯的话,只点亮
//P2.1
P3=0xfd;//这里同上
}
}
}
}
第2个回答  2012-05-07
四个按键,按键防抖动写的麻烦。
第3个回答  2012-05-07
有 key1 key2 key3 key4,四个按键,本程序就是扫描这四个按键,若通过,则进入该按键下的功能
相似回答