找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机板子按键返回值求大佬帮帮忙

[复制链接]
跳转到指定楼层
楼主
ID:1114858 发表于 2024-3-31 14:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
unsigned char  Positional_Selection()//位选:选择更改位{

        if(Key()==2)
        {
               
                Bit_selection++;
               
        }
      
        if(Bit_selection>5)
        {
               
                Bit_selection=0;
      
        }

      
        return Bit_selection;
}
按下按钮后
if(Key()==2)
        {

                Bit_selection++;

        }

这段代码判断失效
求各位大佬帮忙看下到底是哪出了问题
如果不使用函数进行按键判断,将按键判断的代码直接写到主程序的这样是可以运行的,为什么,返回值有问题吗
普中的板子

DS1302时钟显示 - 可调时钟.rar

60.28 KB, 下载次数: 5

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

使用道具 举报

沙发
ID:1113342 发表于 2024-4-1 12:01 | 只看该作者
找一个B站矩阵按键的函数看看,要消抖
回复

使用道具 举报

板凳
ID:1114858 发表于 2024-4-1 20:46 | 只看该作者
kk555 发表于 2024-4-1 12:01
找一个B站矩阵按键的函数看看,要消抖

谢谢,key函数里写了消抖
回复

使用道具 举报

地板
ID:161164 发表于 2024-4-1 22:14 | 只看该作者
代码逻辑问题
每一次主循环里,key()函数只可运行一次
不要有类似
if(key()==1){...}
if(key()==2){...}
这种写法
回复

使用道具 举报

5#
ID:1114858 发表于 2024-4-1 22:36 | 只看该作者
lkc8210 发表于 2024-4-1 22:14
代码逻辑问题
每一次主循环里,key()函数只可运行一次
不要有类似

大佬您好,非常感谢您能回复我的贴子,您说的我想了想还是不太明白,所以想问下您key()函数怎么改合适一点,麻烦您给我指一下方向,大概给个思路,真的很谢谢您。
回复

使用道具 举报

6#
ID:1109793 发表于 2024-4-2 07:39 | 只看该作者
下一站过后 发表于 2024-4-1 22:36
大佬您好,非常感谢您能回复我的贴子,您说的我想了想还是不太明白,所以想问下您key()函数怎么改合适一 ...

例如char t;
t = key();
if(t==1);
if(t==2);
这样就只运行了一次key();
或者可以switch(key()){case:1;case:2;}这样是不是也行
回复

使用道具 举报

7#
ID:1114858 发表于 2024-4-2 09:39 来自手机 | 只看该作者
xiaobendan001 发表于 2024-4-2 07:39
例如char t;
t = key();
if(t==1);

非常感谢大佬您的回复,麻烦问下我可不可以理解为每一次循环相同的函数只会调用一次,刚学没多久,不大明白,谢谢您
回复

使用道具 举报

8#
ID:1109793 发表于 2024-4-2 09:55 | 只看该作者
下一站过后 发表于 2024-4-2 09:39
非常感谢大佬您的回复,麻烦问下我可不可以理解为每一次循环相同的函数只会调用一次,刚学没多久,不大明 ...

调用多少次你自己说了算,但是类似您这样大量使用delay的情况下多长重复调用会消耗很多时间,这导致反应变慢很多。你可以尝试在定时器中断里面做一个计数器,用来消除抖动带来的影响。只要不使用DELAY这种,一个比如1ms的定时器里可以做很多事,实在不行2ms也可以
回复

使用道具 举报

9#
ID:1114858 发表于 2024-4-2 10:14 来自手机 | 只看该作者
xiaobendan001 发表于 2024-4-2 09:55
调用多少次你自己说了算,但是类似您这样大量使用delay的情况下多长重复调用会消耗很多时间,这导致反应 ...

谢谢您的回复,这段程序的问题主要是出在延时函数的问题吗?延时函数确实会影响到程序运行的效率,它会影响到我这个按键的判断吗?这个逻辑我不是很明白,谢谢您。麻烦您有空指导一下我的问题是出在哪。
回复

使用道具 举报

10#
ID:1114858 发表于 2024-4-2 13:17 来自手机 | 只看该作者
lkc8210 发表于 2024-4-1 22:14
代码逻辑问题
每一次主循环里,key()函数只可运行一次
不要有类似

大佬您好,我想问下您说的这个每一次主循环里key()函数只可运行一次,这个是什么意思,为什么只可以运行一次,我查了很久的资料也没有答案,麻烦您有空解答一下,谢谢
回复

使用道具 举报

11#
ID:161164 发表于 2024-4-2 13:57 | 只看该作者
主要问题就在于55行的那个while(1)
把那个while(1)拆开分析归纳后的得出三个区域
a. key()==2 : 几微秒
b. 一堆LCD_ShowNum():几百毫秒
c. key()==1 : 几微秒
你觉得按键按下时,会在哪个区域?
当然是b
然后就进入c
基于key()里有放手死等
所以就算按下了2
进入C区域,也要等到放手才离开
结果就是a区域的key()==2永不成立
回复

使用道具 举报

12#
ID:1114858 发表于 2024-4-2 15:59 来自手机 | 只看该作者
lkc8210 发表于 2024-4-2 13:57
主要问题就在于55行的那个while(1)
把那个while(1)拆开分析归纳后的得出三个区域
a. key()==2 : 几微秒

谢谢您的回复,我明白了,太感谢了,困扰我好久了,谢谢
回复

使用道具 举报

13#
ID:1114752 发表于 2024-4-3 20:08 | 只看该作者
我像个NT一样看着评论区
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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