自己整理了一个功能模块,名字叫twinkle
时驱函数这个词语说不清楚 我在一份头大的代码里面看到一个中文注释。
应用是 比如控制LED灯一闪一闪(好像没啥难的)包括闪动3次以后停止 比如控制蜂鸣器 需要拉高在拉低,就像LED闪烁一样,需要控制电平高低和总次数。 twinkle 本质是一个前后台程序,后台是时驱函数,前台程序是给后台丢配置参数。 时驱函数是需要放到定时器TIME的中断里面或者UCOS的任务里面周期性调用的所以叫时驱函数
- #ifndef _Twinkle_H_
- #define _Twinkle_H_
-
- #include "sys.h"
-
- typedef struct
- {
- uint8_t pin;
- uint32_t timeCnt;
- uint8_t mode;//
- uint8_t openFlag;
- int cnt;
- int flashCnt;
- uint32_t delayTime;//
- uint32_t openTime;//
- uint32_t closeTime;//
- }twinkleType;
-
-
-
- typedef enum
- {
- BLINK_OPEN_INIT,
- BLINK_OPEN_DELAY,
- BLINK_OPEN_NOW,
- BLINK_OPEN_ALWAYS,
- }TwinkleOpenType;
-
-
- void twinkle_timer_isr( twinkleType *p );
-
- void twinkle_set(twinkleType *p , uint8_t Mode , uint8_t OpenCnt , uint32_t OpenTime ,uint32_t CloseTime ,uint32_t DelayTime);
-
- extern twinkleType JustTesk;
-
-
- #endif
-
复制代码- #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;
- }
- }
- }
- }
- }
复制代码 用起来还是挺方便的。
上面的代码中为了求简单直接在OPEN时间做开灯 CLOSE时间做关灯 方便测试。
最后是我自己画的图,理解蜜汁方便。
|