51单片机问题。。怎么在按下按键1后的一段时间内检测有没有按下按键2。。

按下1后。在50毫秒内检测是否按下按键2。若按下。则给出一个信号。。最好通过延时实现。附带c语言文件。。谢谢

其实这个通过定时器做比较好。但是既然楼主要用延时,那我就写一段吧,希望给分~~~

/************************************************************************

STC89C52
1:测试晶振为11.0592M.
2:需要修改按键所在的IO口宏定义,

************************************************************************/
#include <reg51.h>
#define key1 P3_4 //改变按键1的IO口位置
#define key2 P3_5 //改变按键2的IO口位置

void scan_delay(unsigned int z)//1ms延时函数
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

unsigned char Key_Scan() //调用此函数,若返回1,则表示按下1后50毫秒内有按下2.
{
unsigned char num=0;
if(key1==0)
{
for(num=0;num<50;num++) //循环50此,每次一毫秒
if(key2==0)
return 1; //50毫秒内有按下按键2,直接返回1
else
scan_delay(1); //若没有按下2,则延时1毫秒继续扫面按键2

}
return 0;
}

void main()
{
if(Key_Scan()==1) //若满足,表示按下按键1后50毫秒内有按下按键2
......
}追问

太谢谢了。。。我现在有一个一百行左右的程序。。看不出错误。。可以帮我查一下么?拜托了。。可以加分的。。QQ305171991。。拜托。。。

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-29
如果你在这一段延时里面不会导致其他问题的话,可以实现。
但没有电路图是没法给程序的,只能给个流程。这key2就是给出的信号。
if (检测到按键1按下)
{
key2= 0;
ulong temp = 0x1234;根据系统频率赋值,达到延时50ms的目的。
while(temp --)
{
if(检测到按键2按下)
{
buttom2 = 1;
break;
}
}
}
第2个回答  2011-11-29
没有电路,很难有程序的。 同时,用C编译后程序,延时不如直接编写精确。
第3个回答  2011-11-29
50毫秒用51自带的定时器编写比较好

51单片机如何检测k1是否按下
在51单片机中,检测K1按钮是否被按下需要通过读取该按钮连接的GPIO引脚电平状态。操作步骤如下:首先,将K1按钮的连接端口与单片机的GPIO引脚相连接,确保引脚选择正确。在51单片机的GPIO引脚中,通常高电平代表未按下,低电平表示按钮已按下。其次,编写读取GPIO引脚电平状态的代码。在程序执行时,单片机将根...

51单片机 独立按键按下去 再放开才算按键一次 计算按键次数 程序应该...
按键防抖:在按键按下时有时会有短暂的接触不良,因此会多次判断按键按下和断开,因此一般在按键按下或断开时增加几十毫秒的防抖处理,具体就是连续多个循环判断按键是否是一个状态,如果状态不变,再进行下一步处理。

51单片机双键同时识别(长按)判断程序怎么编?
假设“1”表示键按下,那么双键同时按,肯定端口有两个“1”,只有一个键按则只有一个“1”,当然“0”表示按下的话,取反就是了。这样就好办了,将这个有效键位值赋值给累加器A,根据奇偶标志“P"的值就可以判断是单键还是双键了。

51单片机做矩阵键盘,定义四个键,其中一个确认键,要求按下确认键时才显 ...
之前按下的按键数值保存在变量里面,当检测到按下确认键的时候再把之前的按键数值取出来显示。

51单片机如何通过编程来实现长按键与短按键的识别?
检测到按键按下后,来一个 for(;;){ 按键松了break;否则一只等待,同时一个变量i++当i加到一定值就可以为长按了 }

51单片机按一下显示1,再按一下同一个按键显示2
程序大致这样:uchar a=0;\/计按键次数的变量 while(1){ if(key==0)\/\/按键按下 { delayms(10);\/\/延时消抖 if(key==0) {a++;while(key==0);}\/\/变量加1 } display(a);\/\/显示 }

51单片机 矩阵键盘 检测的命令
temp的值会受到按键的影响,例如变成:7e或别的值等。

用51单片机按键控制启动给按键控制LED亮熄 在按键控制停止给LED不工 ...
不晓得你的按键和LED是高有效还是低有效 键盘需要去抖动啊 每次检测有键按下后,要延时一小段时间,在检测。你试一下呢?聚集还是要不得,感觉你程序算法有问题 include<reg52.h> \/\/\/宏定义\/\/\/ define uint unsigned int define uchar unsigned char \/\/\/定义引脚\/\/\/ sbit K1 = P1^0;sbit K2...

一个51单片机如何同时响应两个以上按键输入信号
所谓的同时响应是不可能的,无论是扫描还是中断都有分先后。你的问题可以参考以下解决方法:扫描时先记录KEY1的状态,如果为按下则无论下次扫描到什么状态都不执行动作,如果是放开的记录为放开,再次扫描到如果为按下则执行动作。这个扫描可以同时应用于KEY2两个不相冲突。

51单片机按键防抖这么处理
即while(!key);。跳出这个循环之后就表示按键事件完成。那么就LED =~LED。你的程序:if(key == 0) 如果是高电平触发,那么大部分时间都在进行LED取反,导致过快闪烁,你看不出变化,就看成了长亮。如果是低电平触发,你按下的每一时刻都在变化,释放之后,可能是亮的,也可能是灭的 ...

相似回答