全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > LED照明 >

一个轻量级的LED控制模块

时间:2024-02-29 11:43

人气:

作者:admin

标签: 控制模块  LED 

导读:一个轻量级的LED控制模块-比如LED周期控制函数为100ms,理论上设置500ms间隔闪烁,则需要占用10个bit,但是增加一个bit时间颗粒度变量,只需要占用两个bit即可,bit时间颗粒度变量为500...

做项目,一直给大家讲述的是要“模块化”,这样不但易于理解,关键是方便维护、移植。

下面给大家分享一个轻量级的LED控制模块。

前言

LED灯操作在单片机开发中是最常用的功能,通常通过 GPIO 高低电平控制完成各种各样的亮灭动作。

LED灯控制实现的方式有很多种,这里介绍一种通过bit位控制LED灯亮灭的实现方式。

介绍

特点

移植方便,只需要实现硬件 IO 初始化和 IO 状态写入即可

丰富的接口实现,通过这些接口可以实现亮灭、闪烁、自定义等多种要求的功能

代码量少,且代码注释丰富,风格统一,便于阅读和使用

实现方式

通过定义一个变量,将其每个bit做为控制LED的亮灭状态,0-灭,1-亮。

代码中通过定义uint8_t state[LED_STATE_BYTE_NUM];数组用来储存LED的亮灭状态,因为当时LED亮灭没有复杂的要求时,可以修改LED_STATE_BYTE_NUM的值,减少内存占用;如果亮灭要求很复杂,那就可以将LED_STATE_BYTE_NUM的值改大,储存更多的状态信息

为了尽可能地减少bit位的占用,在设置LED状态时会计算出占用bit位的最小的信息。

比如LED周期控制函数为100ms,理论上设置500ms间隔闪烁,则需要占用10个bit,但是增加一个bit时间颗粒度变量,只需要占用两个bit即可,bit时间颗粒度变量为500ms。

当多个LED需要配合亮灭时,如流水灯,只需要观察每个LED自身时的状态设置即可

比如五个灯1秒中完成一次流水灯操作,那么从同一时刻起每个灯的状态都是周期变化的,根据这个周期变化调用相关函数完成设置即可。

代码示例

部分使用接口函数

/************ 普通模式  ***********/
cotLed_SetState(IO_LED_0, IO_LED_OFF); // 设置灯灭
cotLed_SetState(IO_LED_0, IO_LED_ON); // 设置灯亮

// 设置灯亮持续一秒后熄灭
cotLed_SetStateWithTime(IO_LED_0, IO_LED_ON, 1000); 

/************ 闪烁模式  ***********/

// 500毫秒进行闪烁(亮灭间隔时间)
cotLed_Twinkle(IO_LED_0, 500);  

// 500毫秒进行闪烁3次(一亮一灭为一次),次数完成后灯灭
cotLed_TwinkleWithCount(IO_LED_0, 500, 3, IO_LED_OFF);  

/************ 自定义模式  ***********/
// 2 秒内 3 次快闪,总共5次,次数完成后灯灭
cotLed_Custom(IO_LED_0, 5, IO_LED_OFF, 100, -100, 100, -100, 100, -100, -1400, 0);

// 2 秒内 1 次快闪,无限制次数
cotLed_Custom(IO_LED_0, 0, 100, -100, -1800, 0);

// 5个灯完成流水灯操作
cotLed_Custom(IO_LED_0, 200, -800, 0);
cotLed_Custom(IO_LED_1, -200, 200, -600, 0);
cotLed_Custom(IO_LED_2, -400, 200, -400, 0);
cotLed_Custom(IO_LED_3, -600, 200,-200, 0);
cotLed_Custom(IO_LED_4, -800, 200, 0);
 
审核编辑:黄飞

 

 

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信