一、工程简介
cotLed是一款轻量级的LED控制软件框架,可以十分方便地控制及自定义LED的各种状态,移植方便,无需修改,只需要在初始化时实现单片机硬件GPIO初始化,同时为框架接口提供GPIO写函数即可。
框架代码工程地址:https://gitee.com/cot_package/cot_led
工程代码结构也很精简,只用两个文件cot_led.c和cot_led.h实现具体功能,对外提供API接口函数,适用于裸机和带操作系统的应用代码。
通过该软件框架API,可以实现的LED控制接口功能有:
(1)、单个LED的亮灭、翻转、闪烁、呼吸灯、自定义(如多少秒快闪几次等)等多种功能;
(2)、多个LED组合的跑马灯、流水灯等功能;
(3)、上述各个功能模式功能实现的次数设置。
二、工程代码分析
在头文件cot_led.h中包括:
(1)定义了LED亮灭的枚举cotLedState_e;
(2)定义了写入IO状态的函数指针cotLedCtrl_f;
(3)定义了LED核心控制功能成员变量的结构体cotLedProc_t;
(4)外部声明的LED控制接口函数。
/* Define to prevent recursive inclusion -----------------------------------------------------------------------------*/
#ifndef _COT_LED_H_
#define _COT_LED_H_
/* Includes ----------------------------------------------------------------------------------------------------------*/
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
/* Exported types ----------------------------------------------------------------------------------------------------*/
// 状态bit位所使用的byte数,bit之间的控制时间为时间颗粒度
#define LED_STATE_BYTE_NUM 4
/**
* @brief LED亮灭枚举定义
*/
typedef enum{
COT_LED_OFF = 0, /*!< (0)灯灭 */
COT_LED_ON = !COT_LED_OFF /*!< (1)灯亮 */
} cotLedState_e;
typedef void (*cotLedCtrl_f)(cotLedState_e state);
typedef uint16_t led_t;
typedef struct
{
uint8_t validBits; /*!< 状态有效bit位 */
uint8_t offset; /*!< 状态bit位偏移 */
uint8_t count; /*!< 控制次数 */
uint8_t isSetCount : 1; /*!< 是否设置了控制次数 */
uint8_t defState : 1; /*!< 默认状态 */
uint8_t curState : 1; /*!< 当前状态 */
uint8_t pwmDir : 1; /*!< PWM增减方向 */
uint8_t isPwm : 1; /*!< PWM模式 */
uint16_t tic; /*!< 时间计数器 */
uint16_t interval; /*!< 每次控制的时间颗粒度,单位为1ms */
union
{
struct
{
uint16_t onTime; /*!< 亮的时长 */