51单片机 独立按键按下去 再放开才算按键一次 计算按键次数 程序应该怎么写?

 我来答
秃贼
推荐于2017-09-16 · 超过13用户采纳过TA的回答
知道答主
回答量:23
采纳率:0%
帮助的人:27.8万
展开全部

你好!

因为按键操作涉及寄存器配置和按键防抖,因此写了你也不一定用得上。而且你这个的逻辑比较简单,建议自己写。主要注意几个地方就可以了:

  1. 按键I/O口电平的配置:要结合硬件电路确认按键是低电平触发还是高电平触发。在程序中设置正确的I/O口电平。

  2. I/O口的输入输出状态的配置:I/O口作为按键输入必须是准双向模式或输入模式,这个不同单片机配置寄存器方式不同但大同小异。

  3. 按键防抖:在按键按下时有时会有短暂的接触不良,因此会多次判断按键按下和断开,因此一般在按键按下或断开时增加几十毫秒的防抖处理,具体就是连续多个循环判断按键是否是一个状态,如果状态不变,再进行下一步处理。

追问
具体给个例程看看
追答
#define p_key1      P24//定义P2.4为按键口
#define value_key1 1
#define value_scannum 100 //短 防抖时间设置寄存器

void main(void)
{
unsigned char r_scannum=0;
unsigned char r_key_new=0;
int r_key_count=0; //按键计次
.....//芯片寄存器配置程序
while(1)
{
p_key1=1;
while(p_key1==0) //如果key1按键按下,这里是低电平触发
{
r_scannum++;
if(r_scannum>=value_scannum)
{
r_scannum=0;
r_key_new=value_key1;
break;
}
}
if( r_key_new==value_key1)
{
while(p_key1==1) //如果key1按键释放
{
r_scannum++;
if(r_scannum>=value_scannum)
{
r_key_new=0;
r_key_count++;
break;
}
}
}
}
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式