介绍一个快捷易用的led驱动包

2020-7-2 13:28 [复制链接] 1 250

Quick Led

& m" E% i, ~2 T2 s

1.简介

! H) z# H6 o% y0 e5 O% |) v" X

Quick Led 旨在提供一个快捷易用的led驱动包。

1 F8 x: _% e; l0 U0 [

1.1目录结构

7 t1 ^. c! b8 s6 w4 ^

Quick Led 软件包目录结构如下所示:

8 x% t) K) r- e- u% J  L5 E* ~0 k+ {
qled
9 f2 J0 K5 u  r+ D6 A├───inc                         // 头文件目录, q# T8 f& W4 i% a- P: A/ P( M$ c9 F
│   |   qled.h                  // API 接口头文件6 d3 K2 r: J0 s
│   └───qled_sample.h           // 示例头文件% q9 m) h: j4 Q/ p
├───src                         // 源码目录/ y4 J- S4 ?7 |
│   |   qled.c                  // 主模块
  i. w5 T$ U% N# ]% [│   └───qled_samplec            // 示例模块6 n% W9 G2 j6 r' q. i5 H; E! S
│   license                     // 软件包许可证
) s" }, t. g- c8 k& M0 O│   readme.md                   // 软件包使用说明& k$ }6 X& K$ O3 v3 E* ~$ ?
└───SConscript                  // RT-Thread 默认的构建脚本
! E' H6 w! g5 J, V3 @! l1 w

1.2许可证

" m; h0 R' I; e+ q$ T- {7 A1 E

Quick Led package 遵循 LGPLv2.1 许可,详见 LICENSE 文件。

. x7 Z! f$ Q& x# a# [7 H

1.3依赖

9 T: j; r8 P' i! G5 @$ z1 ~2 P
    5 Y5 E( }- U% y' W5 Q
  • RT_Thread 4.0
  • 8 i9 l, b$ V6 n+ z3 F
& e* j% o6 _' W2 ^; Y+ D9 {& m! X; K

2.使用

. I, `$ Y# G* P  M' f% a

2.1接口函数说明

2 O6 j- J4 s2 B& U

int qled_add(int pin, int level);

7 b& |( r: o1 `1 p9 J1 M! M- W) \
    6 h" p2 o, k. O; L2 c' E3 K' B
  • 功能 :加一个led到驱动
  • 3 T. }0 P! g$ e
  • 参数 :pin--led使用的引脚号
  • $ `* d5 R: p( X
  • 参数 :level--点亮led的电平
  • , y8 ], ]: A! m6 F$ O/ i2 x5 t
  • 返回 :0--成功,其它--错误
  • . ]6 J1 L! R4 P6 Y" z% b0 Q% r
7 E  \, l( S; u2 Z( c- o  x, {( z

void qled_remove(int pin);

  H) }0 L, L2 o# N1 e4 A/ `" V6 T
    ) l, m/ U# n. I
  • 功能 :从驱动移除led
  • 3 H* p  z9 h% T
  • 参数 :pin--led使用的引脚号
  • 8 Q% r& J1 W$ n
  • 返回 :无
  • / B2 W5 o" }# R) Z& P0 w
, E# K/ x1 B! b- w$ X

int qled_set_off(int pin);

( @$ J  H, V3 _+ }# ?( e
    ; }& Y1 }0 Y% X; X( o
  • 功能 :设置led到常灭状态
  • , K/ W0 e4 K. p6 B/ q  R/ L; M
  • 参数 :pin--led使用的引脚号
  • 6 S3 N# [" a8 }" p# R1 O* X. ]
  • 返回 :0--成功,其它--错误
  • 9 }. O, U2 B  `
! W. @4 J# f! p2 Y8 T+ K1 g5 R

int qled_set_on(int pin);

6 [" d" H: O( h) j9 u- O' q8 i
    ( [. W: E& q. j, }$ I2 c$ y* l
  • 功能 :设置led到常亮状态
  • . ~5 s8 o; n) R' _
  • 参数 :pin--led使用的引脚号
  • % K& Z) h$ J5 ]1 i
  • 返回 :0--成功,其它--错误
  • : ]: V5 T1 c2 m) C7 B6 ^
2 J) y! V: E+ d. k+ O

int qled_set_blink(int pin, int ton_ms, int toff_ms);

3 W3 C' q( O: Z. g/ M
    9 t- a* l! V% r) C0 F/ F4 m
  • 功能 :设置led到周期性闪烁状态
  • - ?2 I8 n# T& L6 _" S& L- }  M
  • 参数 :pin--led使用的引脚号
  • / k/ y3 G1 p2 J3 M
  • 参数 :ton_ms--led点亮时长
  • 6 B; A5 [# J: o
  • 参数 :toff_ms--led熄灭时长
  • * `4 O" X! {# H/ m/ }. X) M( D
  • 返回 :0--成功,其它--错误
  • : H2 E& M- K! w& a
/ R0 I9 ^8 l: O  w# o5 |' x' q

int qled_set_special(int pin, const u16 datas, int data_total, void (over_cb)(void));

4 `: Q. w! m) f/ T; \' T
    : C1 K# K9 D) x5 k
  • 功能 :设置led执行特殊序列闪烁
  • 1 h+ ?4 d6 O9 t* h" {' h  I4 n
  • 参数 :pin--led使用的引脚号
  • # w+ {# a/ ]8 `+ L5 K
  • 参数 :datas--特殊序列数据
  • : K3 v1 g: I5 D- ~6 `5 c2 U
  • 参数 :data_total--特殊序列的数据总数
  • 6 m( C( @0 Z% s* e0 _
  • 参数 :over_cb--特殊序列执行结束时的回调函数
  • 9 J; v3 F  c' w% l0 g! j6 |2 h
  • 返回 :0--成功,其它--错误
  • $ d' E4 r: L; u1 n5 [+ G
, L! w4 j( ?4 @" a8 b

2.2使用示例

( z1 U7 d3 Q1 p" [- M: F

示例1. 以指定频率和占空比控制led闪烁

2 I; M1 X+ A0 Q6 }' a2 y8 {
qled_add(24, 1);//加24号引脚led到驱动,高电平点亮7 `8 b' P; z) J2 k7 B/ J
& C# Q" s- n# R. O
qled_set_blink(24, 50, 50);//设置led以10Hz闪烁,亮50ms,灭50ms. q5 g( e' v: I& y6 H
rt_thread_mdelay(5000);//时间5s
: j+ Y- K6 Y5 k# k) g2 F3 k) _7 d2 `/ v  X+ C( K6 r8 z
qled_set_blink(24, 50, 450);//设置led以2Hz闪烁,亮50ms,灭450ms) H! W% T. b8 ^2 W7 {0 d" U
rt_thread_mdelay(10000);//时间10s9 S# I: F3 y3 N0 Q" ?6 a

0 Z2 m+ j$ q) Sqled_remove(24);//不再需要led了,从驱动中移除
+ `3 P/ F' E" e; e* U

示例2. 发送SOS信号

3 W6 A# _; a& O: e/ p, Q3 ^* M7 i+ f
#define QLED_SOS_PIN GET_PIN(B, 9) //25号
( s" N1 }* C; S$ A: O8 c/ A
1 W' i. w5 {& _& K8 \+ M7 w' O" g- Zstatic int sos_send_times = 0;//发送sos信号次数计数0 s/ E" {7 s4 n4 T' y1 m' O% @
static const u16 sos_datas[] = //定义sos信号时间数据
1 |" P! I: H' @, l{
; _' a9 A1 x( B    200, 200, 200, 200, 200, 200,       //short 3 times( m) L" t. k- }' g' I9 D4 S1 e; b6 h
    600, 600, 600, 600, 600, 600,       //long 3 times
3 q, L2 t! k2 R. R0 m    200, 200, 200, 200, 200, 200 + 2000 //short 3 times and 2000ms interval8 B: d5 Z- i& c. c
};
% y% d4 X9 b3 ^* o" K  A! J  ^. G: w  I& x
static void qled_sos_cb(void)//定义特殊序列执行结束回调函数
( A; c) w8 E8 P4 o" L1 r7 P{7 ~) e/ h' ^2 S
    sos_send_times--;6 N/ ?* l) E3 [$ R
    if (sos_send_times > 0)//执行次数未到: I7 o0 [, }/ w
    {
5 I* `3 w1 @0 ^. [) a        qled_set_special(QLED_SOS_PIN, sos_datas, sizeof(sos_datas)/sizeof(u16), qled_sos_cb);//再次执行# n7 l" @5 Z; A' b# t6 D
    }) v: a6 ]  G) L# _+ }9 F
    else//执行完成
3 @9 C4 U' ?. u: V+ g# H* p    {4 |" K/ z/ Z' L+ U% M$ A7 @# d1 }
        qled_remove(QLED_SOS_PIN);//不需要了,从驱动移除
7 Q. L. U  L% [6 Y0 m$ |8 b    }
( V* J  T% i, o}
/ k/ z( r, q. e. W: |! c+ s" ?7 i% B5 g+ B7 \/ w
void qled_send_sos(void)//执行发送sos信号,发送5次SOS信号, 总用时40s
- j2 O/ F# N  Q, M' ]; j{8 o2 |4 R) [% @* J
    sos_send_times = 5;//设置发送次数为5$ l) d2 _& h5 g  f( t8 G
    qled_add(QLED_SOS_PIN, 1);//加引脚led到驱动
+ `) }6 W) t& i. `% G+ B! `    qled_set_special(QLED_SOS_PIN, sos_datas, sizeof(sos_datas)/sizeof(u16), qled_sos_cb);//启动执行特殊序列
0 W. Y7 _& F# o& ^}
6 H/ {7 s8 P% Q6 W3 y" Y) |) L( m

2.3获取组件

. k5 p! |3 y9 c! }) Y5 g
    ' S/ j! a$ |2 m% b1 q
  • 方式1:0 \, w, Y: w+ J* U. h& t  n: y 通过 Env配置工具RT-Thread studio 开启软件包,根据需要配置各项参数;配置路径为 RT-Thread online packages -> peripherals packages -> quick led
  • 2 M& E$ r. E& r" V. Q$ [' h
5 R4 k. |+ B  t$ C

2.4配置参数说明

. @4 Q+ `$ t6 h; c, y/ u0 X9 ?! a. E8 i/ j; D7 I" M0 H/ y- O/ V# W) u) s0 c5 ?/ d% t- v, i. r2 R7 k2 u) k4 ^% M, j; P3 }* Y$ H0 e/ L5 R8 w- J; J$ e0 g% E+ U! p( B( F- Q; T: F8 S7 G3 \, v% \  H( b$ Z! a. M; F( @, D$ j- p6 y! |6 Z: H4 N# y2 @: O1 d) l( K! q. L4 Q, X& F" `* m5 S6 E3 v# Z4 }7 b1 s) q! Q+ V) u  L, o+ p3 F0 n7 L! ?# A2 F- ?# @  {* ?- Z7 ~. j, x* K# {) H6 L5 T) ~- B( i# D1 p1 ^0 M. a7 q. I: k8 |5 C* k( z+ a  _& X2 w2 r- z# l* j0 X' r7 Q: T+ z) t& R3 M+ u* C  [4 X0 n( a' {: F3 {2 \* |4 p: u8 ]' q* K6 N  b% o. z$ d$ c) G$ Q1 y; W6 |' p& M7 m) t) d! R& L5 }  b, Z/ E' o' w4 N" g3 `& M! E, g+ B" @; ~$ H1 \3 G" l* x# y0 P, f. ?+ {2 I2 |1 J1 y* y, Y/ v) Q! @6 F" V* U$ |3 p% b# n  q/ o5 c" N) z- S  }8 a: A! |  M6 B1 z: _/ `/ b$ K: Q9 D" w# G2 r) W6 s5 D/ D# Q9 c% {! f8 {: }. c# Z. N( K4 |( l* A% v( s6 C& d- O6 W7 _4 G9 b' k: X/ ?' m6 M( o& ~4 v, K% g5 r+ o- z! q) ~6 u5 A+ U' k- E- [2 ^7 e1 v2 e- V* I- I1 W; @& D2 M  {2 X& T# I6 R9 y: |
参数宏 说明
QLED_TOTAL 支持的led总数
QLED_TIME_UNIT_MS led闪烁的时间单位
QLED_THREAD_NAME led驱动线程名称
QLED_THREAD_STACK_SIZE led驱动线程堆栈尺寸
QLED_THREAD_PRIO led驱动线程优先级
QLED_USING_SAMPLE 使用示例
QLED_RUN_PIN 示例运行灯引脚
QLED_SOS_PIN 示例SOS信号灯引脚
* m  }" j& C7 Q6 q& s, D

3. 联系方式

7 K/ B9 m; N+ m6 o  ?0 [
- s4 u( K3 O. I' v! q5 x
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2020-7-2 13:57:20 | 显示全部楼层
欢迎分享,请发到新论坛吧 https://club.rt-thread.org/
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  1. 8 主题
  2. 523 帖子
  3. 523 积分

Ta的主页 发消息

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表