找回密码
 立即注册

QQ登录

只需一步,快速开始

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

请教师傅们一个时间推迟的51单片机程序

  [复制链接]
跳转到指定楼层
楼主
ID:617813 发表于 2023-1-17 02:39 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
500黑币
就是按钮点动后要延时2秒后再执行这个点动的时间,万分感激大家的帮忙

最佳答案

查看完整内容

你这应该修改一下,照你这么写,楼主得一直按着按键,直到2秒后事件执行。上面的延时短点,用于消抖,在执行事件前面加个延时2000毫秒才是楼主想要的 直接在你这上改了 #include #include sbit button = P1^0; // Define button as sbit type, connected to P1.0 void delay_ms(unsigned int time) { unsigned int i, j; for (i = 0; i < time; i++) for (j = 0; j < 110; j++); } void mai ...
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:158391 发表于 2023-1-17 02:39 | 只看该作者
lztopic 发表于 2023-2-5 13:39
注意:需要包含"intrins.h"头文件以使用_nop_()函数进行延时。

你这应该修改一下,照你这么写,楼主得一直按着按键,直到2秒后事件执行。上面的延时短点,用于消抖,在执行事件前面加个延时2000毫秒才是楼主想要的
直接在你这上改了
#include <reg52.h>
#include <intrins.h>

sbit button = P1^0;  // Define button as sbit type, connected to P1.0

void delay_ms(unsigned int time)
{
    unsigned int i, j;
    for (i = 0; i < time; i++)
        for (j = 0; j < 110; j++);
}

void main()
{
    while (1)
    {
        if (button == 0)
        {
            delay_ms(10);  // 消抖
            if (button == 0)
            {
                   delay_ms(2000);  // 等2秒再执行下一步
                // Perform the set program
                // ...
            }
        }
    }
}
回复

使用道具 举报

板凳
ID:996773 发表于 2023-1-17 15:27 | 只看该作者
我读了几遍都没看懂楼主的目的,点动之后延时2秒再执行这个点动?的时间?如果连自己语言都没法整理完善让别人能读懂,编程很难
回复

使用道具 举报

地板
ID:752974 发表于 2023-1-17 15:29 | 只看该作者
没看懂,什么是“执行这个点动的时间”?如果是点动事件发生,再延时2秒执行这个事件,那延时2秒就可以了,很简单的。定时器延时不够,再附加软件计数。
回复

使用道具 举报

5#
ID:155507 发表于 2023-1-17 17:03 | 只看该作者
什么是“执行这个点动的时间”?

是連问题都问不明白,还是我的理解能力下降了?
提出问题也是一门学问,如何能清晰的表述,是解决问题的关键
回复

使用道具 举报

6#
ID:332444 发表于 2023-1-18 07:25 | 只看该作者
很简单的,在需要延时的地方插入延时判断代码一直循环比较到2秒后退出循环即可.
回复

使用道具 举报

7#
ID:517466 发表于 2023-1-18 21:51 | 只看该作者
就是按钮点动后要延时2秒后再执行这个点动的时间----就是按钮点动后要延时2秒后再执行这个点动的事件?
看你代码对按键的访问是中断的,还是轮询的。加标志以及延时处理。
回复

使用道具 举报

8#
ID:965189 发表于 2023-1-19 11:50 | 只看该作者
估计楼主是想,点按键后,经过2秒钟的延时后再执行设定的程序。
回复

使用道具 举报

9#
ID:1043388 发表于 2023-1-20 09:49 来自手机 | 只看该作者
加两秒延时
回复

使用道具 举报

10#
ID:130230 发表于 2023-1-20 13:57 | 只看该作者
开一个硬件定时器,定时2S在中断中置位一个flag,然后在main里面循环查询flag是否置位就行
回复

使用道具 举报

11#
ID:584814 发表于 2023-1-25 08:58 | 只看该作者
看得出楼主只是想活跃一下过年气氛,因为这个问题本身不值500
回复

使用道具 举报

12#
ID:645225 发表于 2023-2-5 13:36 | 只看该作者
  1. #include <reg52.h>
  2. #include <intrins.h>

  3. sbit button = P1^0;  // Define button as sbit type, connected to P1.0

  4. void delay_ms(unsigned int time)
  5. {
  6.     unsigned int i, j;
  7.     for (i = 0; i < time; i++)
  8.         for (j = 0; j < 110; j++);
  9. }

  10. void main()
  11. {
  12.     while (1)
  13.     {
  14.         if (button == 0)
  15.         {
  16.             delay_ms(2000);  // Wait for 2 seconds
  17.             if (button == 0)
  18.             {
  19.                 // Perform the set program
  20.                 // ...
  21.             }
  22.         }
  23.     }
  24. }
复制代码


注意:需要包含"intrins.h"头文件以使用_nop_()函数进行延时。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

13#
ID:645225 发表于 2023-2-5 13:39 | 只看该作者
  1. #include <reg52.h>
  2. #include <intrins.h>

  3. sbit button = P1^0;  // Define button as sbit type, connected to P1.0

  4. void delay_ms(unsigned int time)
  5. {
  6.     unsigned int i, j;
  7.     for (i = 0; i < time; i++)
  8.         for (j = 0; j < 110; j++);
  9. }

  10. void main()
  11. {
  12.     while (1)
  13.     {
  14.         if (button == 0)
  15.         {
  16.             delay_ms(2000);  // Wait for 2 seconds
  17.             if (button == 0)
  18.             {
  19.                 // Perform the set program
  20.                 // ...
  21.             }
  22.         }
  23.     }
  24. }
复制代码

注意:需要包含"intrins.h"头文件以使用_nop_()函数进行延时。
回复

使用道具 举报

14#
ID:158391 发表于 2023-2-5 14:15 | 只看该作者
快,把500黑币给我和12楼一人一半
回复

使用道具 举报

15#
ID:514901 发表于 2023-2-7 17:31 | 只看该作者
delay_ms(2000);
回复

使用道具 举报

16#
ID:617813 发表于 2023-2-28 11:40 | 只看该作者
ldc2000 发表于 2023-1-17 02:39
你这应该修改一下,照你这么写,楼主得一直按着按键,直到2秒后事件执行。上面的延时短点,用于消抖,在 ...

你好,这个代码要是BUTTON不是0,那后面就不能执行下去,我的意思是点动按钮后,按键已经释放了后延时2秒后再执行这个点动时间,比如点动时间0.1秒,那就是释放了后延时2秒再输出0,.1秒,0.3秒释放后延时2秒后输出0.3秒
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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