找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 454|回复: 7
打印 上一主题 下一主题
收起左侧

单片机按键控制程序问题

[复制链接]
跳转到指定楼层
楼主
我的按键处理程序,本来设计的是第一次按下走20mm、第二次按下走15mm,现在第一次按下走20mm之后自动走了15mm,求助我的程序是哪里有问题

1.png (33.06 KB, 下载次数: 0)

1.png

2.png (33.9 KB, 下载次数: 0)

2.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1023753 发表于 2025-5-20 17:14 | 只看该作者
很明显按键检测有问题,逻辑不太对
回复

使用道具 举报

板凳
ID:1023753 发表于 2025-5-20 17:16 | 只看该作者
按键检测程序有问题,
回复

使用道具 举报

地板
ID:1144713 发表于 2025-5-21 09:27 | 只看该作者
按键没有防抖动,按下一次,单片机扫描过快,判断按键按下不止一次,不是自动走的
回复

使用道具 举报

5#
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用来判断按键弹起的。你看下硬件别搞反了。
回复

使用道具 举报

6#
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. }
复制代码
回复

使用道具 举报

7#
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;//
                }
        }
        ///////////////////////////
}
回复

使用道具 举报

8#
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;
        }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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