查看: 674|回复: 0

[其他] 时驱函数代码分享

[复制链接]
  • TA的每日心情
    开心
    2019-11-4 13:48
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2020-4-1 09:43:20 | 显示全部楼层 |阅读模式
    分享到:

    时驱函数这个词语说不清楚  我在一份头大的代码里面看到一个中文注释。
    应用是 比如控制LED灯一闪一闪(好像没啥难的)包括闪动3次以后停止

    比如控制蜂鸣器 需要拉高在拉低,就像LED闪烁一样,需要控制电平高低和总次数。

    twinkle 本质是一个前后台程序,后台是时驱函数,前台程序是给后台丢配置参数。

    时驱函数是需要放到定时器tiME的中断里面或者UCOS的任务里面周期性调用的所以叫时驱函数

    • #include "twinkle.h"
    • #include "Initialise.h"
    • enum
    • {
    •         FALSE,
    •         TRUE
    • };
    • twinkleType    JustTesk;
    • void twinkle_set(twinkleType *p , uint8_t Mode , uint8_t OpenCnt , uint32_t OpenTime ,uint32_t CloseTime ,uint32_t DelayTime)
    • {
    •     p->timeCnt = 0;
    •     p->mode = Mode;
    •     IF( p->mode == BLINK_OPEN_DELAY)
    •     {
    •         p->openFlag = FALSE;
    •     }
    •     else
    •     {
    •         p->openFlag = TRUE;
    •     }
    •     p->cnt = 0;
    •     p->flashCnt = OpenCnt;
    •     p->delayTime = DelayTime;
    •     p->openTime = OpenTime;
    •     p->closeTime = CloseTime;
    • }
    • void twinkle_timer_isr( twinkleType *p )
    • {
    •     if(p->mode == BLINK_OPEN_DELAY)
    •     {
    •         if(p->timeCnt++ > p->delayTime)
    •         {
    •             p->timeCnt = 0;
    •             p->openFlag = TRUE;
    •             p->mode = BLINK_OPEN_INIT;
    •         }
    •     }
    •         //上面的是扩展功能 主要是下面//
    •     if(p->openFlag == TRUE)
    •     {
    •                         if( p->timeCnt ++ < p->openTime)
    •                         {
    •                             //pin_ops.pin_write(p->pin , PIN_HIGH);
    •                                                         TS_LED1_ON() ;
    •                         }
    •                         else
    •                         {
    •                             //pin_ops.pin_write(p->pin , PIN_LOW);
    •                                                         TS_LED1_OFF();
    •                         }
    •                         if( p->timeCnt  >   p->openTime+p->closeTime  )
    •                         {
    •                             p->timeCnt = 0;
    •                             if( p->mode != BLINK_OPEN_ALWAYS)
    •                             {
    •                                 if( ++p->cnt >= p->flashCnt)
    •                                 {
    •                                     p->openFlag = FALSE;
    •                                 }
    •                             }
    •                         }
    •     }
    • }


    [color=rgb(51, 102, 153) !important]复制代码











    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-27 09:08 , Processed in 0.113997 second(s), 14 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.