51单片机编程问题。(独立键控制LED灯)程序如下:问为什么这段程序不能使当按下key2按键时使LED2亮。

为什么按下key3键,松开手时不能使LED3亮。

#include<reg51.h>
#include<intrins.h>
sbit key1=P3^2;
sbit key2=P3^3;
sbit key3=P3^4;
sbit key4=P3^5;
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;
sbit LED4=P1^3;

void DelayUs2x(unsigned char t);
void DelayMs(unsigned char t);
//函数声明;
#define uchar unsigned char
#define uint unsigned int
void main()
{
key1=key2=key3=key4=1;
while(1)
{
if(!key1)
{
DelayMs(10);//消抖
while(!key1)
{
LED1=0;
// DelayMs(10);//消抖
while(key1)
{
LED1=1;
}
}
}
if(!key2)
{
DelayMs(10);
while(!key2)
{
LED2=0;
while(key2)
{
LED2=1;
}
}
}
if(!key3)
{
DelayMs(10);
if(!key3)
{
while(!key3)
{
LED3=!LED3;
}
}
}
}

}

void DelayUs2x(unsigned char t)
{
while(--t);
}
void DelayMs(unsigned char t)
{

while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}

那应该是LED3 = ~LED3;而且要先对LED3赋值。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-08
没搞清楚你说的意思。按下按键LED灯亮释放按键灯灭?还是按下一次按键LED灯反转一次?关于按键推荐你去阿莫论坛看马潮老师专栏里面的帖子,状态机思想的按键检测。
第2个回答  2012-09-08
你没有对LED3赋值啊!你上面写LED3=!LED3是干什么的?追问

我打算控制LED3灯按一下熄灭,再按一下亮起。

第3个回答  2012-09-08
你的硬件连接图呢?
你加个上拉电阻看看追问

图片已上传