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

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

Quick Led

, q$ R0 G* |4 R. [6 ]4 q1 Y

1.简介

" o: j  h! E  a+ e

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

8 G" D/ \& R( y9 d, |; a

1.1目录结构

$ a: y# ?- w. ]- O

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

) K8 d; s! `& g7 @. a
qled
+ v0 p$ @6 [/ \' c1 }* G├───inc                         // 头文件目录
* {$ w5 H) X$ N- g, Q8 P- o  A8 {/ S│   |   qled.h                  // API 接口头文件
* W- o& R6 [) r) o│   └───qled_sample.h           // 示例头文件6 V- D2 i% }0 d+ F# Z8 {4 Z; Z% z
├───src                         // 源码目录( x- Y0 k2 v( Y
│   |   qled.c                  // 主模块
9 _, X, t) F7 r1 s│   └───qled_samplec            // 示例模块
; R* C' W) l- U' v" {* h  Q' T, @3 k│   license                     // 软件包许可证
5 f9 ~8 ]  K$ H│   readme.md                   // 软件包使用说明3 ]. h5 Y8 @# e" d
└───SConscript                  // RT-Thread 默认的构建脚本
) v3 I& E  T! @) Z' I/ O

1.2许可证

" ?' F7 ^0 F1 d3 G/ b3 q

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

3 `  J. e$ _, d$ J

1.3依赖

4 n! W% L# C5 y7 J. u
    ( g6 g$ K# _, R. n3 ]/ s' f
  • RT_Thread 4.0
  • 4 F- O; H: {7 [  {
# T# v7 B# ^: J) Q" J; J( E

2.使用

, O  e) I# G  n  v

2.1接口函数说明

# g+ I/ Z+ S2 A3 ^2 L0 Y

int qled_add(int pin, int level);

5 N6 N- W7 q, n* q  e9 H
    8 Z5 y* V+ w) o$ i
  • 功能 :加一个led到驱动
  •   p" a# p/ [  W6 i1 d9 ?1 O( _& r9 ]
  • 参数 :pin--led使用的引脚号
  • 5 c3 O+ G$ T; L( k/ |* C
  • 参数 :level--点亮led的电平
  • & p2 ]$ s7 M% z* s" ~' B6 t
  • 返回 :0--成功,其它--错误
  • : K$ `$ }# x. E# M  C. _6 y
& h8 K& a2 f2 Z

void qled_remove(int pin);

( g2 O* V3 r+ I0 o7 C7 f% I7 n
    * m8 n- I( z3 r. W  W% q) ]7 {
  • 功能 :从驱动移除led
  • 2 G( e5 Q) V* O" i; I6 Q
  • 参数 :pin--led使用的引脚号
  • 3 s# @. \  i& F: w9 N! T
  • 返回 :无
  • & g: _% h' c! x/ Q* f7 o
& r. T; v& l4 ]

int qled_set_off(int pin);

: l! N6 ?. V* t6 u3 _" j0 o+ q
    - @1 ?1 `: @/ X, H
  • 功能 :设置led到常灭状态
  • 4 @7 V- C. Q1 r( u8 W
  • 参数 :pin--led使用的引脚号
  • 5 X5 N6 e! v& Y! o0 `
  • 返回 :0--成功,其它--错误
  • & U: I1 }& J  V$ K6 T( p! Z, F
6 `6 }4 E  U# E" @

int qled_set_on(int pin);

' |1 t+ \* W5 _% l
    $ N. i  n% d6 R0 Y2 r$ N% [9 q. S
  • 功能 :设置led到常亮状态
  • & H3 ~+ _! @& a1 E9 {. B
  • 参数 :pin--led使用的引脚号
  • 1 i" {* l; T: M: k' R: D! x6 c
  • 返回 :0--成功,其它--错误
  • 1 h3 |) N- y; I0 n) k* b0 b
0 U4 M6 p8 Z. }7 m5 {. \

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

# b1 c+ S3 y$ J3 o# q3 k
    , b2 e$ H& K+ h4 P: I' E
  • 功能 :设置led到周期性闪烁状态
  • # X9 {) u) y4 {* X' b
  • 参数 :pin--led使用的引脚号
  • - R( m5 Q' V$ U# K/ Z
  • 参数 :ton_ms--led点亮时长
  • , k/ z; w$ H' X/ `  T: l' q" s+ K- X
  • 参数 :toff_ms--led熄灭时长
  • - U! d+ t+ T7 U6 Y
  • 返回 :0--成功,其它--错误
  • % v3 r( v  D6 R* w4 h
1 b5 ?( n. W+ E9 L" D" f; g

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

4 G' k9 I0 S' L* v7 C+ M& ]
    3 R. x6 i" N5 }$ Z8 T6 R3 @
  • 功能 :设置led执行特殊序列闪烁
  • , ?; ?( {5 O0 V6 j
  • 参数 :pin--led使用的引脚号
  • % H! @) z  H& u6 u6 B- Z# t
  • 参数 :datas--特殊序列数据
  • + r. W( R! y! Z6 ^# A3 E4 T
  • 参数 :data_total--特殊序列的数据总数
  • : F) e9 ^+ _; o$ x) w" v- f
  • 参数 :over_cb--特殊序列执行结束时的回调函数
  • 6 i& [1 I, s4 O$ z
  • 返回 :0--成功,其它--错误
  • 6 k" T1 P5 A* N, @! `( Q
- R9 p4 I3 P- b

2.2使用示例

) ]7 b+ f1 G+ ?$ Q" i$ ]

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

- h* R+ |( |1 |/ u; U- b( r& b
qled_add(24, 1);//加24号引脚led到驱动,高电平点亮
7 W7 f, ?4 |$ a1 T
' C, N( o8 }4 j" n+ Jqled_set_blink(24, 50, 50);//设置led以10Hz闪烁,亮50ms,灭50ms. e2 q; u0 r) v* E" [& ~
rt_thread_mdelay(5000);//时间5s+ L( [. P$ Y; I; a9 g3 M

% F' A% S& W. x4 x% F4 V, tqled_set_blink(24, 50, 450);//设置led以2Hz闪烁,亮50ms,灭450ms
3 ^0 N, d$ K. c5 ^" h8 ?2 Wrt_thread_mdelay(10000);//时间10s  z, `/ p( |' c# o) y( M4 }8 c( E
$ |* `& N" A# r, R8 N
qled_remove(24);//不再需要led了,从驱动中移除
7 T. j1 t' t9 Z2 K

示例2. 发送SOS信号

( b, R: c8 Q0 f, {  N  @
#define QLED_SOS_PIN GET_PIN(B, 9) //25号
( {7 ^6 r' d! A2 c0 c9 H/ z( B# e9 L
static int sos_send_times = 0;//发送sos信号次数计数( M1 U: ~$ r, Y; V" L( o
static const u16 sos_datas[] = //定义sos信号时间数据
8 h" Y0 Z5 A9 f{: @! k" I; G( Y9 b3 l
    200, 200, 200, 200, 200, 200,       //short 3 times
# g( d: g1 t/ o* n. g2 W9 R    600, 600, 600, 600, 600, 600,       //long 3 times
. T. m* r" ^# ]    200, 200, 200, 200, 200, 200 + 2000 //short 3 times and 2000ms interval
% H- N# L% Y9 N3 a, b0 K$ @};
: e, u# m7 Z: Z! w% u1 b- Y6 L+ P  f. ~) d  \' {. e) |9 e
static void qled_sos_cb(void)//定义特殊序列执行结束回调函数
& _) @5 \" L( [0 n1 M9 ]% e  ^{& ~. l9 G3 P- a8 X5 W+ z( Y+ T' {
    sos_send_times--;
: F6 P) E( G8 z# M    if (sos_send_times > 0)//执行次数未到
8 C7 x8 T% e: O8 Z    {. ~3 V/ }; |2 [  S5 m5 i- h3 h) L/ Q
        qled_set_special(QLED_SOS_PIN, sos_datas, sizeof(sos_datas)/sizeof(u16), qled_sos_cb);//再次执行
  B3 Y$ O  q2 m, `8 x9 C+ {! M" w    }
! Y; w2 W5 m* L. V. u4 A    else//执行完成  @$ B) n; Q8 ]5 A4 i8 @6 z
    {
! t+ I! _" F' k5 M: z% t) I+ V) F  }        qled_remove(QLED_SOS_PIN);//不需要了,从驱动移除; C6 _6 f6 P9 l% l
    }
1 P1 m3 O/ U( L& N; ^0 s  j}
  M4 l( T* A/ P( e: X6 X# s4 y& y; P
void qled_send_sos(void)//执行发送sos信号,发送5次SOS信号, 总用时40s/ U' N7 k! E$ v; C
{6 u. ?2 `. k/ I0 j0 ?- q+ i
    sos_send_times = 5;//设置发送次数为5
. y2 {: m- Z+ E  T: i    qled_add(QLED_SOS_PIN, 1);//加引脚led到驱动6 V: ]8 i: c, H$ V# l( J. D# c
    qled_set_special(QLED_SOS_PIN, sos_datas, sizeof(sos_datas)/sizeof(u16), qled_sos_cb);//启动执行特殊序列
' N' v2 ?( i% _1 Q0 G/ }% G* E}
5 C$ l1 v3 w3 c3 k

2.3获取组件

2 O4 x, F9 J  t  z9 V5 h+ f
    + k$ Q7 w+ m$ {2 U$ `
  • 方式1:: `/ x9 I, E0 y" y& U' R, z( k 通过 Env配置工具RT-Thread studio 开启软件包,根据需要配置各项参数;配置路径为 RT-Thread online packages -> peripherals packages -> quick led
  • 0 j3 G; Z* d7 I" I! `
4 L' ^  {% \7 `. n

2.4配置参数说明

8 S8 t- U, X1 d; z- }1 b; n5 s: y6 V* l9 t/ l! o; I$ I5 \" B5 x! t4 ]! E! B" q0 m, a. k& K, @0 V. R, r- f* U  N% \9 S& U2 |1 \; q- d- \! b5 a7 t# f* g6 p9 w' H) u+ [7 [. P# I: D( o+ Z& ?9 ^# r! r" q# F7 {5 R7 w. g( y" Q3 v0 v3 z6 P. M# h4 l! F0 I' R- Y" B9 N% Y  |6 E( \- z3 J4 `) U  c4 K" Y0 z, a; p  a$ ?, t  C9 ?% f- L9 Z$ I' d3 y/ O$ L" O% O# y- I7 d3 ~* U- e  p& ?/ J9 u' ^2 _3 R5 g8 J. w& U$ ?2 e/ C7 Q/ l$ h: R- T# p2 S! p& f# B' D5 L* i/ U( G9 v* m" S3 S6 ~, Y  K6 b# X. V: S' G0 q! E# e2 s+ U1 ]# S% w! N4 ~' X; L3 F) l( ?. t( r% Y# U' d9 K; y* {: p, `) k; _; V0 I# N9 B9 h  ~) c2 v2 n; q+ w! _4 i( ~7 W5 t, Z8 p7 L/ c: _: a6 a% v9 d3 U& V, T' r& }  Z7 g* Z2 A, Z6 A$ w8 Z5 p2 d# V; [# t' |3 W+ V5 t+ v" e% D  w& U! g# P1 G7 m; \0 _) L  c! [7 c2 p1 U: b2 F, \$ v/ B! A0 d& [  P1 s! O6 L* L. w- w9 i- [0 C- R2 i+ u% L/ t+ r, E" q% V7 u/ K* o* M+ S* F" G' N: m( y& S, C: f/ Y1 s7 }" N. X1 u, Z* S4 C/ d+ b+ c5 I5 |1 M6 r0 L) l- B9 b! s- r# |) Z" x# }/ W8 ?4 `) J+ A5 J0 k8 f, U
参数宏 说明
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信号灯引脚
% G* M9 b7 M9 C

3. 联系方式

3 ]9 ~0 F0 @- _' H# L; T* j2 `$ s
& s- i: |3 |5 @& n! C3 ?( g
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 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

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