51单片机用两个按钮控制一个LED灯的亮灭(不是那么简单请看我要求)

用两个按钮控制一个LED灯亮灭,要求:key2按下之后松开,再按下key3并松开 此时LED灯才亮, 只按key2,或者只按key3灯都不会亮。 (注意:key2,key3是按钮,不能用开关代替)还请各位大神给出具体的编程方式,或者看看我的程序指出哪里有问题,小弟我在这里谢谢各位了。

程序:
#include<reg52.h>
int a;
int b;
sbit switch0=P2^0;
sbit switch1=P2^1;
sbit key2=P2^2;
sbit key3=P2^3;
sbit key4=P2^4;
sbit key5=P2^5;

void main()

{

if(key2==0)
{
a=1;
}
if(key3==0)
{
b=1;
}

if(a==1&&b==1)
{
P3=0x00;
}

}
两个按钮分别接在P2^2, P2^3. led灯 阴极 接在P3口的任一口都行,就当时接在P3^0吧,
阳极外接一个高电平。 当P3口满足条件输出低电平的时候,led灯被点亮。

第1个回答  推荐于2017-11-22
对你这种编程思想,我想问是跟谁学的啦!
对你这程序,我想问①先按K3、后按K2,你觉得程序结果会如何?②如果2个按键都按住不放,结果又会如何。
考虑一下上面的问题,就能看到你的程序问题了。当然你的程序问题,跟你的题目一样,没那么简单!后面还有一堆!!追问

先按K3,后按K2 让灯亮,如果出现这个结果我也可以接受的。(而且我个人认为以上程序就可以满足要求了) 。 对于那个2个按键都按住不放,这个问题暂时不用考虑。(没人会这么干的,如果实在要考虑我会在程序后面加一条判断。) 现在就想问一下您,以上程序实现 先按K2,再按K3(或是先按K3,再按K2) ,灯都不亮,这到底是什么原因呢?

追答

至于你怎么按都不亮的问题,那是因为,你的程序是个单次系统,不是循环系统。程序一上电,就执行结束了。你压根就没能来得及按。
解决方案:main 函数中,增加 while(1) 循环体

本回答被网友采纳
相似回答