yohai26 2023-11-10 14:35 采纳率: 83.3%
浏览 9
已结题

单片机按键延时给低电平代码

使用51单片机89c52.
p1.0为低电平触发按键,p0.0为低电平输出触发继电器用的。
要求按下p1.0持续达到0.5秒(时间我可以改动),p0.0才会得到低电平让继电器跳动,约0.5秒后继电器再跳回。未达到指定时间不运行的,每次触发都是这么循环。
说明:自己写的代码貌似是时间叠加的比喻第一次约触发0.3秒虽然没有跳动,下次启动0.2秒就跳动了,所有不行,要每次都是从原始状态重新运行。

  • 写回答

5条回答 默认 最新

  • 社区专家-Monster-XH 2023-11-10 14:35
    关注

    基于Monster 组和AIGC的调写:若有帮助,还望采纳~~:

    • 代码如下
    #include <REGX52.H>
    
    void delay(unsigned int ms) {
        // 一个大约1ms的延时函数,根据实际晶振频率调整
        unsigned int i, j;
        for (i = ms; i > 0; i--)
            for (j = 110; j > 0; j--);
    }
    
    void main() {
        while (1) {
            if (P1_0 == 0) {  // 检测按键是否按下
                delay(500);   // 延时0.5秒
                if (P1_0 == 0) {  // 再次检查按键是否仍然按下
                    P0_0 = 0;     // 激活继电器
                    delay(500);   // 维持0.5秒
                    P0_0 = 1;     // 关闭继电器
                }
            }
        }
    }
    

    这个代码片段执行以下操作:

    1. 持续检查P1.0是否被按下。
    2. 如果检测到按键按下,程序将等待0.5秒。
    3. 0.5秒后,如果按键仍然按下,则P0.0设为低电平激活继电器。
    4. 继电器保持激活状态0.5秒后,P0.0设回高电平关闭继电器。
    5. 如果按键在0.5秒内释放,不会激活继电器。
    • delay函数需要根据你的51单片机的晶振频率进行调整,以确保准确的延时。每个for循环的迭代次数取决于单片机的执行速度,你可能需要通过试验来确定适当的迭代次数以达到精确的延时。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 11月18日
  • 已采纳回答 11月10日
  • 创建了问题 11月10日