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;
}
}
}
}
展开
 我来答
知秋小枫
2014-08-04 · TA获得超过132个赞
知道小有建树答主
回答量:98
采纳率:0%
帮助的人:65.6万
展开全部
while((i<50)&&(K1==0))	 //检测按键是否松开
{
Delay10ms();
i++;
}

分析:

按键K1一直按着的时候,循环执行50次退出。

按键K1松开时,循环马上退出。


所以,是检测按键在500ms(50*10ms)内,按键是否松开。

追问
刚开始i没有赋值,那么它的初值是多少
追答

i要初始化为0

unsigned int i = 0;
unsigned int j = 0xfe; //1111_1110
--
2022-11-18 广告
一、Error -27727: Step download timeout (120 seconds)has expired when downloading resource(s). Set the “Resource Page Time... 点击进入详情页
本回答由--提供
遇怜香广君
2019-01-30 · TA获得超过3926个赞
知道大有可为答主
回答量:3175
采纳率:34%
帮助的人:206万
展开全部
while((i<50)&&(K1==0))
//检测按键是否松开
{
Delay10ms();
i++;
}分析:
按键K1一直按着的时候,循环执行50次退出。
按键K1松开时,循环马上退出。
所以,是检测按键在500ms(50*10ms)内,按键是否松开。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tattackor
2015-10-31 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:859万
展开全部
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();”注释掉就可以了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
暗影·羽a271750
2020-08-10 · TA获得超过1582个赞
知道小有建树答主
回答量:318
采纳率:60%
帮助的人:36万
展开全部
1、首先,你这不是C语言问题,你这是单片机问题,如果是PC端C语言一句话就能搞定;
2、其次,并不是说这样可以检测按键松开,按键松开直接判定是否为低电平就可以,没必要这么麻烦;
3、补充,这是延时去抖算法,只是用于去抖以防止按键抖动导致松开被多次识别、或不是按键松开而是电路抖动导致误触发的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式