星星点灯(四)-LED流水灯大检阅

2024-03-15 19:59

本文主要是介绍星星点灯(四)-LED流水灯大检阅,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《星星点灯(一)-LED点灯初阶》
《星星点灯(二)-LED点灯中阶》
《星星点灯(三)-LED点灯高阶》
《在嵌入式系统高效实现软定时器-STOpen软件定时器》
《一个用于嵌入式开发的简单可靠的消息系统-STOpen消息系统》
前面几篇文章讲述了我们常用的LED驱动的设计逐渐提高的方法,然后提出了一种消息系统加软件定时器的全新思路来设计如何简单的驱动两颗LED,把一个全新的软件设计架构展现在了你的面前。
有了这个消息系统框架,现在我们就能比较容易的,用非常简单的代码来实现我们的各种流水灯的动作了,你仔细品品,是不是和你知道的流水灯的设计方法完全不一样,而且是那么的简单,优雅,易于扩展。你掌握了这种设计方法和程序设计思路,是不是再也不用没日没夜的加班熬夜了呢?
程序设计并不是一件多么复杂的事情,关键是掌握好模块化设计能力,同时选择最合适的软件架构,辅以稍微的设计技巧和算法,就非常简单的把复杂问题简单化了。
阅读下面代码,请首先阅读前面五篇文章,才能全面系统的理解其精髓。
要设计一个可以随意动作的流水灯,我们首先定义一个表示流水灯操作动作的结构。

#define LED_ACTION_ON		1
#define LED_ACTION_OFF		2
#define LED_ACTION_DELAY	3
typedef	struct __tagLedCtrl {UINT32	action;			//LED的动作,可以是多颗LED同时操作UINT32	led;			//如果是on,off led,表示那些led被操作,//如果是延时动作,就表示这次操作后到下次操作的延迟时间
}LEDCOFIG;

然后,我们定义一个动作序列

const LEDCOFIG LedSet[] = {{LED_ACTION_ON,LED_1},{LED_ACTION_DELAY,500}, //配对出现,动作和延时为一组动作,不可缺少{LED_ACTION_ON,LED_2},{LED_ACTION_DELAY,500},{LED_ACTION_ON,LED_3},{LED_ACTION_DELAY,500},{LED_ACTION_ON,LED_4},{LED_ACTION_DELAY,500},{LED_ACTION_ON,LED_5},{LED_ACTION_DELAY,500},{LED_ACTION_ON,LED_6},{LED_ACTION_DELAY,500},{LED_ACTION_OFF,LED_1},{LED_ACTION_DELAY,500},{LED_ACTION_OFF,LED_2},{LED_ACTION_DELAY,500},{LED_ACTION_OFF,LED_3},{LED_ACTION_DELAY,500},{LED_ACTION_OFF,LED_4},{LED_ACTION_DELAY,500},{LED_ACTION_OFF,LED_5},{LED_ACTION_DELAY,500},{LED_ACTION_OFF,LED_6},{LED_ACTION_DELAY,500},{LED_ACTION_ON,LED_ALL},{LED_ACTION_DELAY,500},{LED_ACTION_OFF,LED_ALL},{LED_ACTION_DELAY,500},{LED_ACTION_ON,LED_ALL},{LED_ACTION_DELAY,500},{LED_ACTION_OFF,LED_ALL},{LED_ACTION_DELAY,500},{LED_ACTION_ON,LED_1|LED_6},{LED_ACTION_DELAY,200},{LED_ACTION_ON,LED_2|LED_5},{LED_ACTION_DELAY,200},{LED_ACTION_ON,LED_3|LED_4},{LED_ACTION_DELAY,200},{LED_ACTION_OFF,LED_3|LED_4},{LED_ACTION_DELAY,200},{LED_ACTION_OFF,LED_2|LED_5},{LED_ACTION_DELAY,200},{LED_ACTION_OFF,LED_1|LED_6},{LED_ACTION_DELAY,1000},
};

最后,我们用一个简单的函数来实现流水灯的操作,这个函数的精妙之处在于你可以任意配置各种流水灯的花式,而不需要修改一行代码。

void LedOperation(void)
{static UINT32 cnt = 0;LEDCOFIG LedParm;if(cnt < sizeof(LedSet)/sizeof(LedSet[0])){LedParm = LedSet[cnt];	//读取动作if(LedParm.action == LED_ACTION_ON){LedOn(LedParm.led);}else if(LedParm.action == LED_ACTION_OFF){LedOff(LedParm.led);}LedParm = LedSet[cnt+1];	//读取下一个延时时间SetTimer(TIMER_ID1,LedParm.led,TRUE);cnt += 2;if(cnt >= sizeof(LedSet)/sizeof(LedSet[0]))cnt = 0;}
}

有没有一点茅塞顿开,眼前一亮的感觉!
如果扩展一下,我们把动作表放到flash里面,可以通过上位机下载,那是不是就变成了一个用户可以自己定义的流水灯设备了,就像大家经常看到的led广告牌一样。
喜欢的关注微信和博客,获取更多设计方法和技巧。
相关问题可以加QQ群‘开源斌哥开发群1’:1090541942讨论
在这里插入图片描述

这篇关于星星点灯(四)-LED流水灯大检阅的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/813102

相关文章

物联网之流水LED灯、正常流水灯、反复流水灯、移动流水灯

MENU 硬件电路设计软件程序设计正常流水LED灯反复流水LED灯移动流水LED灯 硬件电路设计 材料名称数量直插式LED1kΩ电阻杜邦线(跳线)若干面包板1 每一个LED的正极与开发板一个GPIO引脚相连,并串联一个电阻,负极接GND。 当然也可以选择只使用一个电阻。 软件程序设计 正常流水LED灯 因为要用到多个GPIO引脚,所以最好把所有的GPI

什么是LED智能会议一体机?COB超微小间距LED会议一体机大势所趋

LED智能会议一体机,作为现代会议室革新的核心装备,正逐步颠覆传统会议模式的界限。它不仅仅是一台集成了高清显示、触控互动、音视频处理及远程协作等功能于一体的智能设备,更是推动会议效率与体验双重飞跃的关键力量。随着技术的不断进步,特别是COB(Chip On Board)超微小间距LED技术的引入,LED智能会议一体机正迎来前所未有的发展机遇,成为大势所趋。 COB技术通过将LED芯片直接封装在基

全倒装COB超微小间距LED显示屏的工艺技术,相比SMD小间距有何优势

全倒装COB(Chip On Board)超微小间距LED显示屏,在工艺技术上的革新,相较于传统的SMD(Surface Mount Device)小间距LED显示屏,展现出了多方面的显著优势。 首先,全倒装技术极大地提升了LED芯片的散热性能。通过将芯片直接焊接在基板上,减少了热阻,使得热量能够更快速地传导至基板并散发出去,有效避免了因高温导致的光衰和色彩偏移问题,从而保证了显示屏的长期稳定性

批量生成编号(A~Z+3位流水编号)

/*** 批量生成编号* @param num* @param warehouseId* @return*/public synchronized List<String> generatCodeList(int num,long warehouseId){MesRack rack = this.getCurrentRack(warehouseId);String oldRackCode;Lis

STM32CubeMX 1 创建一个新工程 利用时钟点亮LED KEIL5 Jlink配置

直接上ST的官网下载STM32CubeMX安装 地址: 单片机:STM32F103C8T6 带外部8MHz晶振 目的:利用Timer和使LED按照1Hz的频率闪烁。 在此方面学霸级人物的指引下学习了,并写此文章记录,以防忘记。 新建工程 出现如下界面,中央就是这个封装的引脚图: 接下来开始配置 1. 设置外部晶振接口在PD0和PD1 单机想要配置的引脚,出现选择菜单。

LED显示屏维修技巧与常见问题

LED显示屏作为现代显示技术的重要组成部分,广泛应用于广告、信息发布、公共显示等多个领域。然而,随着使用时间的增长,LED显示屏难免会出现各种问题。本文将探讨LED显示屏维修的一些小技巧以及常见的问题,帮助用户更好地维护和延长显示屏的使用寿命。 LED显示屏维修小技巧 1. 快速定位问题 当LED显示屏出现问题时,首先需要快速定位故障部位。这通常涉及到对显示屏的初步检查,包括电源

git 学习的流水log

git命令联系 配置以及修改全局user信息 git config --global user.name 'you_name' git config --global user.email 'you_email@qq.com' 现有设备中的所有配置 git config --list 现有设备中的所有配置 git config --list --local/--global/--syste

基于 AC 驱动的电容结构 GaN LED 模型开发和应用

随着芯片尺寸减小,微小尺寸GaN 基 Micro LED 显示面临着显示与驱动高密度集成的难题,传统直流(DC)驱动技术会导致结温上升,降低器件寿命。南京大学团队创新提出交流(AC)驱动的单电极 LED(SC-LED)结构【见图1】,利用隧穿结(TJ)降低器件的交流工作电压。为了深入理解该器件的工作原理,我司技术团队开发了基于 AC 驱动的物理解析模型,揭示了隧穿结降低器件工作电压的

全倒装COBP1.5超微小间距LED显示屏快速抢占市场

随着全倒装COBP1.5超微小间距LED显示屏技术的日益成熟与成本的逐步降低,其市场渗透力愈发强劲,迅速在多个领域绽放出耀眼的光芒。不仅在传统的广告传媒、会议展览中成为不可或缺的视觉盛宴制造者,更在高端监控、虚拟现实体验、乃至医疗影像展示等前沿科技领域崭露头角。 随着市场需求的多样化,各大厂商纷纷加大研发投入,不断推出定制化解决方案,以满足不同场景下的特殊需求。这种灵活性与创新性,进一步推动了全

P0.7全倒装COB超微小间距LED显示屏厂家已量产,加速高清显示的发展

随着P0.7全倒装COB超微小间距LED显示屏技术的成功量产,这一里程碑式的成就不仅标志着高清显示技术迈入了全新纪元,更预示着未来视觉体验将迎来前所未有的变革。各大应用场景,如指挥中心、会议中心、大型活动直播、高端影院乃至家庭娱乐,都将因这项技术而焕发新生。 市场上,消费者对于视觉质量的追求日益高涨,P0.7全倒装COB显示屏以其极致细腻的画质、超高的色彩还原度以及卓越的稳定性,迅速成为行业新宠