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) 循环体

本回答被网友采纳

51单片机 2个独立按键控制一个led
delay1(10); \/\/消抖 if(!k3) { while(!k3);\/\/等待松开 LED = ~LED;\/\/亮灭交替 } } } }

c51单片机:两个独立按键控制一个led,k1按下松开led闪烁,k2按下松开le...
include "reg52.h"typedef unsigned int u16;typedef unsigned char u8;sbit led=P2^0;\/\/把所要控制的led灯定义为p2.0这个口sbit k1=P2^1;sbit k2=P2^2;void delay(u16 i){while(i--);}\/\/一个延时程序void main(){if(k1==1)while(1){led=1;delay(50000); \/\/大约延时450msled=0...

51单片机流水灯如何通过两个按键启动和停止 ,怎么停止
define led P2\/\/ char i;sbit k1=P3^6; \/\/启动按键 sbit k2=P3^7;\/\/停止按键 bit s=0; \/\/ 启停标志 char a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; \/\/LED灯的数组 void delay1s(void); \/\/延时函数 void liushuideng(); \/\/流水灯的循环 void main(){ led...

51单片机,用两个按键分别控制两个led,一个亮\/灭,另一个闪烁\/灭,为什么...
你的led1=~led1;这个语句没有循环,所以只会反转一次。要么加循环,要么再写一个闪烁函数。void led_filcker(usigned char x){ while(x){ led1=~led1;x--:} } 如果你是想,按一下,松开也会闪烁,再按一下熄灭。你得定义一个变量来表示按键的按下。include<reg52.h> define uchar unsig...

关于51单片机使用两个定时器进行控制的问题
if(aa==20){ aa=0;D1=1;\/\/LED亮,持续亮两秒,TF1=0;TF0=1;} if(bb==40){ bb=0;D1=0;\/\/LED灭一秒 TF0=0;TF1=1;} } 并且在程序开始处开启定时器1(也就是先执行的定时器),但是要注意,你现在是两个定时器同时工作,应该在if中关闭当前的定时器,并打开另一个定时...

请教一个51单片机控制LED灯亮灭的问题
LED肯定是低电平才会亮,,你看第一个二级制,1357亮,全是0,低电平。那第二个二进制必然是两头灭,中间量啦,你传个电路原理图上来吧,要不然不好分析。

51单片机的按键控制小灯亮灭的问题(程序类型:c语言)怎么解决?
KEY1) \/\/检测到按键按下 { LED = ~LED; \/*LED取反,此时LED = 0,灯亮。当松手时,KEY1 = 1,不满足if语句不 进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进入循环,LED取反得到LED = 0,灯亮。*\/ delay(500); \/*此处延迟,保...

求两个独立开关控制点亮一个led灯的原理图?
1. 双控开关基础电路图当K1扳到1位置的时候,k2扳到3位置,电路接通,电灯亮,此时,再扳动任何一个开关,都能使电灯熄灭。这属于两地开关控制

51单片机怎么只控制一颗LED灯闪烁
1、新建项目,如图所示。2、添加头文件,创建延迟函数。3、创建C主函数。4、添加死循环效果。5、点亮LED灯。P1=0x7e;二进制11111110。6、添加延迟效果。注意事项:很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要...

51单片机两个自锁开关控制多颗led灯 一个开关作用 一个强制关?
开关1,开始工作,开关二停止工作。首先,你已经解决了开关状态的判别工作了吧。然后,工作的流程是(1)调用显示例程,延时,判断开关二状态,循环到第一步。

相似回答