C语言问题解答。为什么这样可以说检测按键是否松开?
#include<reg51.h>#include<intrins.h>#defineGPIO_LEDP2sbitK1=P3^1;voidDelay10ms();//延时...
#include<reg51.h>
#include<intrins.h>
#define GPIO_LED P2
sbit K1=P3^1;
void Delay10ms( ); //延时10ms
void main(void)
{
unsigned int i,j;
j=0xfe; //1111_1110
while(1)
{
GPIO_LED=j;
if(K1==0) //检测按键K1是否按下
{
Delay10ms(); //消除抖动
if(K1==0)
{
j=_cror_(j,1);
while((i<50)&&(K1==0)) //检测按键是否松开
{
Delay10ms();
i++;
}
i=0;
}
}
}
} 展开
#include<intrins.h>
#define GPIO_LED P2
sbit K1=P3^1;
void Delay10ms( ); //延时10ms
void main(void)
{
unsigned int i,j;
j=0xfe; //1111_1110
while(1)
{
GPIO_LED=j;
if(K1==0) //检测按键K1是否按下
{
Delay10ms(); //消除抖动
if(K1==0)
{
j=_cror_(j,1);
while((i<50)&&(K1==0)) //检测按键是否松开
{
Delay10ms();
i++;
}
i=0;
}
}
}
} 展开
4个回答
展开全部
while((i<50)&&(K1==0))
//检测按键是否松开
{
Delay10ms();
i++;
}分析:
按键K1一直按着的时候,循环执行50次退出。
按键K1松开时,循环马上退出。
所以,是检测按键在500ms(50*10ms)内,按键是否松开。
//检测按键是否松开
{
Delay10ms();
i++;
}分析:
按键K1一直按着的时候,循环执行50次退出。
按键K1松开时,循环马上退出。
所以,是检测按键在500ms(50*10ms)内,按键是否松开。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C语言实现的键盘检测:
/* 检测当前是否有键盘输入,并更新键值JR_KeyValue */
int JR_AnyKeys(void);
/* 返回键值ASCII码 或 对应自定义键值 */
int JR_GetKeyNum(void);
/* 检测指定键是否有按下 */
int JR_IsKeyDown(const int key);
BUG:在一次检测中多次调用函数JR_GetKeyNum()就会出错了。
FIX:把JR_KeyBoard.c文件中的JR_GetKeyNum()函数里面的第一句“JR_AnyKeys();”注释掉就可以了。
/* 检测当前是否有键盘输入,并更新键值JR_KeyValue */
int JR_AnyKeys(void);
/* 返回键值ASCII码 或 对应自定义键值 */
int JR_GetKeyNum(void);
/* 检测指定键是否有按下 */
int JR_IsKeyDown(const int key);
BUG:在一次检测中多次调用函数JR_GetKeyNum()就会出错了。
FIX:把JR_KeyBoard.c文件中的JR_GetKeyNum()函数里面的第一句“JR_AnyKeys();”注释掉就可以了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、首先,你这不是C语言问题,你这是单片机问题,如果是PC端C语言一句话就能搞定;
2、其次,并不是说这样可以检测按键松开,按键松开直接判定是否为低电平就可以,没必要这么麻烦;
3、补充,这是延时去抖算法,只是用于去抖以防止按键抖动导致松开被多次识别、或不是按键松开而是电路抖动导致误触发的问题
2、其次,并不是说这样可以检测按键松开,按键松开直接判定是否为低电平就可以,没必要这么麻烦;
3、补充,这是延时去抖算法,只是用于去抖以防止按键抖动导致松开被多次识别、或不是按键松开而是电路抖动导致误触发的问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询