找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机按键控制程序问题

查看数: 471 | 评论数: 7 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2025-5-20 16:10

正文摘要:

我的按键处理程序,本来设计的是第一次按下走20mm、第二次按下走15mm,现在第一次按下走20mm之后自动走了15mm,求助我的程序是哪里有问题

回复

ID:1133081 发表于 2025-5-23 07:27
0426 发表于 2025-5-22 17:14
void mianban_Key(void)
{
        static u8 K1cnt1=0,K1cnt2=0;

void mianban_Key(void)//10ms扫描周期
{
        static u8 count=0;
        static bit sign=0;

        if(!K1_KEY)//IO
        {
                if(++count >= 2)&&(sign==0)
                {
                        sign=1;
                        K1=++K1%2;
                }
        }
        else
        {
                count=0;
                sign=0;
        }
}
ID:1118951 发表于 2025-5-22 17:14
小点点1 发表于 2025-5-21 09:27
按键没有防抖动,按下一次,单片机扫描过快,判断按键按下不止一次,不是自动走的

void mianban_Key(void)
{
        static u8 K1cnt1=0,K1cnt2=0;
        if(K1_KEY)//IO
        {
                if(++K1cnt2 > 2)
                {
                        K1cnt2=3;
                        K1cnt1 = 0;                       
                        K1 = 0; //
                }
        }
        else
        {
                if(++K1cnt1 > 2)
                {
                        K1cnt1 = 3;
                        K1cnt2=0;
                        K1 = 1;//
                }
        }
        ///////////////////////////
}
ID:1118951 发表于 2025-5-22 17:13
  1. void mianban_Key(void)
  2. {
  3.         static u8 K1cnt1=0,K1cnt2=0;
  4.         if(K1_KEY)//IO
  5.         {
  6.                 if(++K1cnt2 > 2)
  7.                 {
  8.                         K1cnt2=3;
  9.                         K1cnt1 = 0;                       
  10.                         K1 = 0; //
  11.                 }
  12.         }
  13.         else
  14.         {
  15.                 if(++K1cnt1 > 2)
  16.                 {
  17.                         K1cnt1 = 3;
  18.                         K1cnt2=0;
  19.                         K1 = 1;//
  20.                 }
  21.         }
  22.         ///////////////////////////
  23. }
复制代码
ID:592807 发表于 2025-5-21 11:06
1你的按键逻辑很有问题。K1_jishuqi只有++没有--,只有自增没有自减,一旦长按超过 3S就会失效,而且也没有起到软件滤波的作用,硬件上你有没有做硬件滤波,如果也没有的话,你这个按键程序基本废了,轻轻碰一下,她接收到一个误触发信号就会工作
2就是你的  if(ChannelSet++ >= 2){ChannelSet = 0;}这个逻辑很有问题啊。在这个逻辑下ChannelSet能是0或者是1或者2 .但是你的想法里貌似只有两个按键效果
3一般很少见到 K1 == 1用来判读按键按下的, K1 == 0用来判断按键弹起的。你看下硬件别搞反了。
ID:1144713 发表于 2025-5-21 09:27
按键没有防抖动,按下一次,单片机扫描过快,判断按键按下不止一次,不是自动走的
ID:1023753 发表于 2025-5-20 17:16
按键检测程序有问题,
ID:1023753 发表于 2025-5-20 17:14
很明显按键检测有问题,逻辑不太对

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表