爱吃西红柿 发表于 2024-3-21 13:09:54

关于延时程序的问题




使用8h8k64u主控的usb手柄,只有一个按钮,现在想实现按钮按下,虚拟按钮闪烁,也就是亮一下之后延时一段时间灭,此时按钮并没有松开,当按钮松开,虚拟按钮又会闪烁一次,但是加了延时之后usb识别会有延迟并且按钮没反应

爱吃西红柿 发表于 2024-3-21 13:11:45

延时程序是正常工作的,加在keyPadData |= 0x02;        之前实现按钮按下延时亮,加在后面实现按钮松开延时灭,唯独加在中键实现自动亮灭的时候程序不正常,有大佬知道怎么回事吗

爱吃西红柿 发表于 2024-3-21 13:16:44

这是有问题的代码

乘风飞扬 发表于 2024-3-21 15:21:45

爱吃西红柿 发表于 2024-3-21 13:16
这是有问题的代码

Delay500ms 对程序的运行会产生比较明显的影响。
建议keyPadData |= 0x01;后面加个标志位,通过定时器判断标志位,计时500ms后执行keyPadData &= ~0x01;指令。

爱吃西红柿 发表于 2024-3-22 13:30:12

乘风飞扬 发表于 2024-3-21 15:21
Delay500ms 对程序的运行会产生比较明显的影响。
建议keyPadData |= 0x01;后面加个标志位,通过定时器 ...

有参考代码吗大哥,研究半天定时器好像不工作,初始化了已经

jwd 发表于 2024-3-22 14:52:53

STC-ISP里面有

jwd 发表于 2024-3-22 14:53:15

也有各种例程

爱吃西红柿 发表于 2024-3-22 15:19:54

我用的就是isp里面的,这是代码, flag1 = 1;的时候不会执行keyPadData &= ~0x01;

乘风飞扬 发表于 2024-3-22 15:25:55

爱吃西红柿 发表于 2024-3-22 13:30
有参考代码吗大哥,研究半天定时器好像不工作,初始化了已经

例如,需要延时位置加标志位与延时时间:
keyPadData |= 0x01;
DelayFlag = 1;
DelayCnt = 50;    //50 * 10ms = 500ms
然后在10ms中断定时器函数里面进行计时:
if(DelayFlag)
{
    DelayCnt--;
    if(DelayCnt == 0)
    {
      DelayFlag = 0;
      keyPadData &= ~0x01;
    }
}

jwd 发表于 2024-3-22 15:31:52

你这个逻辑有点问题吧
页: [1] 2
查看完整版本: 关于延时程序的问题