找回密码
 立即注册
查看: 1958|回复: 22

求助!关于独立按键检测的问题(问题解决了,但是疑问还在)

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:301
  • 最近打卡:2025-05-07 00:54:31
已绑定手机

20

主题

329

回帖

1692

积分

金牌会员

积分
1692
发表于 2024-2-27 21:06:32 | 显示全部楼层 |阅读模式
本帖最后由 ly1350 于 2024-2-28 09:35 编辑

我用8H8K64U的P3.2口,连接按键到地,想通过程序读取P3.2口的状态,来控制变量f,我写的语句如下:


void main()
{
        uchar i=0,f=0;
        P3M0 &= ~0x04; P3M1 &= ~0x04;         //设置P32为标准io口
        EX0=0;
        P32=1;
        Timer1_Init();

        while(1)
        {


          if(P32==0)
          {        
//                Delay10ms();               去掉这个语句,程序运行正常,加上后就死机;在uv4里调试,进入软件延时函数里的循环,电脑就死机。
                if(P32==0)
                {
                         f++;
                        while(!P32);
                    
                }
          }
          if(f>=3) f=0;
。。。。。。

是按键检测的软件去抖思路有问题吗?请教大家,这个去抖该如何实现?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:301
  • 最近打卡:2025-05-07 00:54:31
已绑定手机

20

主题

329

回帖

1692

积分

金牌会员

积分
1692
发表于 2024-2-27 21:08:59 | 显示全部楼层
开始我怀疑是P32口触发了外部中断,已经将外部中断关了,问题依旧。
        EX0=0;

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:60
  • 最近打卡:2025-05-07 11:01:36

718

主题

1万

回帖

1万

积分

管理员

积分
15682
发表于 2024-2-27 21:19:38 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:524
  • 最近打卡:2025-05-07 07:52:10
已绑定手机

46

主题

1724

回帖

2674

积分

金牌会员

积分
2674
发表于 2024-2-27 22:13:19 | 显示全部楼层
不是你延时函数的问题?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:301
  • 最近打卡:2025-05-07 00:54:31
已绑定手机

20

主题

329

回帖

1692

积分

金牌会员

积分
1692
发表于 2024-2-27 22:27:02 | 显示全部楼层
jw*** 发表于 2024-2-27 22:13
不是你延时函数的问题?

不是。软件延时函数是stc工具生成的。我用了2个,一个是1ms的,用来刷新数码管,去残影;一个是10ms,用来软件除抖。
不调用延时函数,运行是正常的,就是视频上那样;
只要加上延时函数,程序就死了。
我也换成调用1ms的试过,问题依旧。1ms在数码管刷新里也调用了,没问题。
说明问题不在延时函数本身。不知道是不是这种去抖思路有问题。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:301
  • 最近打卡:2025-05-07 00:54:31
已绑定手机

20

主题

329

回帖

1692

积分

金牌会员

积分
1692
发表于 2024-2-27 22:54:40 | 显示全部楼层
神*** 发表于 2024-2-27 21:19
【分享】按键程序,大道至简,按键扫描 + 累计主循环次数去抖动/不占用定时器 - I/O读写及点灯,外部中断 ...

这个我要好好学习一下。
我的这种处理办法,以前学stc89c52时候,是没有问题的。不知道现在问题出在哪里。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:301
  • 最近打卡:2025-05-07 00:54:31
已绑定手机

20

主题

329

回帖

1692

积分

金牌会员

积分
1692
发表于 2024-2-27 23:37:49 | 显示全部楼层
这个是stc的工具生成的软件延时函数
void Delay10ms(void)        //@24.000MHz
{
        unsigned char data i, j;

        i = 234;
        j = 115;
        do
        {
                while (--j);
        } while (--i);
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:493
  • 最近打卡:2025-05-07 07:40:37
已绑定手机

27

主题

693

回帖

2004

积分

金牌会员

打工人

积分
2004
发表于 2024-2-28 05:31:02 | 显示全部楼层
代码能全发出来么?不全不好找问题啊
打工人
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2024-2-28 08:01:17 | 显示全部楼层
晚点我给你发一个好的按键检测函数
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:301
  • 最近打卡:2025-05-07 00:54:31
已绑定手机

20

主题

329

回帖

1692

积分

金牌会员

积分
1692
发表于 2024-2-28 08:11:25 | 显示全部楼层
昨日*** 发表于 2024-2-28 08:05
试验一一下延时正常吗

确定是正常的
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-7 11:47 , Processed in 0.133872 second(s), 115 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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