LED指示灯的闪烁控制方法、装置和终端设备与流程

文档序号:24651504发布日期:2021-04-13 20:10阅读:1560来源:国知局
LED指示灯的闪烁控制方法、装置和终端设备与流程
led指示灯的闪烁控制方法、装置和终端设备
技术领域
1.本申请实施例属于发光二极管技术领域,特别是涉及一种led指示灯的闪烁控制方法、装置和终端设备。


背景技术:

2.发光二极管(light emitting diode,led)指示灯是一种常见的状态指示工具。led指示灯可以用作电源指示灯、按键指示灯、手机的状态指示灯等等。根据不同的应用场景和设备资源,对led指示灯的控制要求也不同。总的来说,led指示灯只有亮和灭两种状态,但是通过控制亮和灭的时间长度,可以组成多种不同的组合,这些组合可以用于指示不同的状态。
3.led指示灯的亮灭交替就实现了led指示灯的闪烁。led指示灯闪烁的最基本实现方式就是在亮和灭之间插入延时时间,即亮灯

延时

灭灯

延时

亮灯。如此循环便实现了led指示灯的闪烁功能。除了通过直接在亮和灭之间插入延时实现led指示灯的闪烁外,还有一些实现方式是结合定时器中断,通过在定时器里检查led的状态并统计亮灭时间,从而根据led的状态和时间,适当地切换led的亮和灭的状态,最终实现需要的闪烁效果。
4.但是,通过在亮和灭之间插入延时时间来实现的闪烁功能比较单一,无法有效地指示多种工作状态。采用定时器中断实现的闪烁虽然能够实现多种闪烁功能,但该方法需要建立一个闪烁列表,led指示灯在闪烁时只能按照列表中已有的方式进行闪烁,若要增加新的闪烁方式,操作起来也十分繁琐。


技术实现要素:

5.有鉴于此,本申请实施例提供了一种led指示灯的闪烁控制方法、装置和终端设备,用以实现丰富多样的闪烁效果。
6.本申请实施例的第一方面提供了一种led指示灯的闪烁控制方法,包括:
7.当监听到触发led指示灯闪烁的事件时,获取与所述事件相对应的闪烁参数;
8.将所述闪烁参数保存至预先配置的控制变量中;
9.确定led状态机当前的状态,所述led状态机当前的状态用于表征所述led指示灯当前的工作状态;
10.调用led闪烁函数,所述led闪烁函数中包含有分别与多个状态下的执行动作一一对应的函数段;
11.以所述控制变量为入参,从与所述当前的状态对应的目标函数段开始执行所述led闪烁函数,以控制所述led指示灯按照与所述事件相设定的闪烁模式进行闪烁。
12.本申请实施例的第二方面提供了一种led指示灯的闪烁控制装置,包括:
13.参数获取模块,用于在监听到触发led指示灯闪烁的事件时,获取与所述事件相对应的闪烁参数;
14.参数保存模块,用于将所述闪烁参数保存至预先配置的控制变量中;
15.状态确定模块,用于确定led状态机当前的状态,所述led状态机当前的状态用于表征所述led指示灯当前的工作状态;
16.函数调用模块,用于调用led闪烁函数,所述led闪烁函数中包含有分别与多个状态下的执行动作一一对应的函数段;
17.闪烁控制模块,用于以所述控制变量为入参,从与所述当前的状态对应的目标函数段开始执行所述led闪烁函数,以控制所述led指示灯按照与所述事件相设定的闪烁模式进行闪烁。
18.本申请实施例的第三方面提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述第一方面所述的led指示灯的闪烁控制方法。
19.本申请实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如上述第一方面所述的led指示灯的闪烁控制方法。
20.本申请实施例的第五方面提供了一种计算机程序产品,当所述计算机程序产品在终端设备上运行时,使得所述终端设备执行上述第一方面所述的led指示灯的闪烁控制方法。
21.与现有技术相比,本申请实施例包括以下优点:
22.本申请实施例,可以通过编写简单的代码实现丰富的led闪烁功能。与现有技术相比,采用本申请实施例提供的方法控制led指示灯闪烁时,在系统内部没有任何延时和等待,可以完全无阻塞的执行,不会因为led闪烁阻塞和等待而影响其他事务的处理。其次,本方法的控制过程逻辑简单,思路清晰,实现该本方法所需的代码量很少,只需占用很少的系统资源。第三,本申请实施例提供的控制方法可充分发挥预定义方法和自定义方法的优点,通过预定义闪烁模式和自定义闪烁模式的结合,可实现丰富的闪烁功能。第四,本申请实施例的控制过程不需要在中断里执行,不占用宝贵的中断资源,不管是在单任务系统还是多任务系统,都不会影响系统的实时性。
附图说明
23.为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
24.图1是现有技术中一种led指示灯的闪烁控制方法的步骤流程示意图;
25.图2是现有技术中一种led指示灯的闪烁控制方法的控制时序示意图;
26.图3是本申请一个实施例的一种led指示灯的闪烁控制方法的步骤流程示意图;
27.图4是本申请一个实施例的一种led闪烁函数的工作流程示意图;
28.图5是本申请一个实施例提供的一种led指示灯的闪烁控制过程示意图;
29.图6是本申请一个实施例提供的一种led指示灯的闪烁控制方法的控制时序示意图;
30.图7是本申请一个实施例的一种led指示灯的闪烁控制装置的示意图;
31.图8是本申请一个实施例的一种终端设备的示意图。
具体实施方式
32.以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域技术人员应当清楚,在没有这些具体细节的其他实施例中也可以实现本申请。在其他情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
33.在介绍本申请实施例提供的led指示灯的闪烁控制方法前,首先对与本方法相关的部分技术作一介绍。
34.作为相关技术中的一种可能的实现方式,根据led闪烁的基本原理,周期性的点亮和熄灭led指示灯,并在点亮和熄灭之间添加一定的延时,这样便可以实现led指示灯的闪烁。这种闪烁方法适用于系统运行指示。如果led指示灯在闪烁,则说明系统正在运行,如果led指示灯不闪烁,则说明系统停止了运行。
35.对于单任务系统,采用上述方式在点亮和熄灭之间添加延时可能会导致其他事务无法及时处理,影响系统的实时性。一些比较重要的事务,如过流过压警告等,如果不能及时处理将会产生严重的后果。对于多任务系统,可以单独创建一个led指示灯闪烁任务,在该任务里专门处理led指示灯闪烁的相关操作。当led指示灯在闪烁延时的时候,系统仍然可以处理其他事务。但是,为了闪烁led而单独创建一个任务会浪费很多不必要的内存空间,而且这种闪烁方式功能比较单一,应用范围有限,无法有效指示多种工作状态。
36.作为相关技术中的另一种可能的实现方式,可以采用定时器中断+查表的方式来实现led指示灯的闪烁。在采用该方式控制led指示灯闪烁时,首先需要建立一个led闪烁列表,该列表中须包含led亮灯时间、led灭灯时间、循环次数、延迟时间、宏等等。根据宏的不一样,led指示灯的亮灭时间参数也不一样,因此需要设置变量保存当前所用的宏以及当前的时间参数。
37.如图1所示,是现有技术中一种led指示灯的闪烁控制方法的步骤流程示意图,图1所示的即是采用定时器中断+查表的方式来实现led指示灯的闪烁的方式。按照图1所示,该方式包括如下步骤:
38.s101、在系统启动后,对stm32芯片中的定时器进行初始化处理,并在处理的过程中设定好定时器的中断时间。可以在stm32芯片的定时器内设定一个最小时间单位,将其设置为定时器的中断时间,中断时间的最小时间单位可以是5

15ms之间的任意数值。
39.s102、在系统稳定后,stm32芯片的定时器进入中断状态,系统会读取预先创建的led闪烁列表中的led的亮灯数值,将亮灯数值保存到变量中;并且系统将led指示灯的状态切换到亮起的状态,在切换完毕后系统会读取列表中的循环次数的数值,并进行循环次数的保存。
40.s103、在stm32芯片的定时器中断里,自动将之前读取列表中的亮灯变量减去1,使得系统中的led灯保存在自动控制的状态。系统会判断led指示灯的亮灯数值变量是否变为0,如果为0,则进入灭灯的步骤s104,否则继续执行步骤s103。
41.s104、在stm32芯片的定时器进入下次中断时,系统会读取预先创建的led闪烁列表中的led灭灯数值,且将读取到的灭灯数值保存到变量中,然后将led指示灯的状态切换
到灭灯的状态。
42.s105、在stm32芯片的定时器中断里,系统将之前读取到的灭灯数值变量减去1,使其灭灯状态保持在自动控制状态;系统会判断led指示灯的灭灯数值变量是否为0,如果为0则执行下一个步骤s106,否则继续执行步骤s105。
43.s106、在判断出灭灯数值变量为0时,led指示灯亮灭一次结束后,系统对之前读取到的循环次数变量减去1,使其在亮灭灯状态中自动控制循环。
44.s107、系统判断循环次数变量是否变为0,如果循环次数变量变为0,则读取led闪烁列表中的延时时间,并将延时时间保存到系统的变量中,然后执行下一个步骤s108,如果循环次数变量不为0,则执行步骤s106。
45.s108、在stm32芯片的定时器进入下次中断时,系统将延时时间变量减1。
46.s109、系统判断延时时间变量是否为0,如果为0,则执行步骤s102,否则继续执行步骤s108。
47.按照图1所示的步骤对led指示灯的闪烁进行控制的过程,其控制时序如图2所示。
48.采用图1所示的控制方式实现对led指示灯闪烁的控制,所需的代码量不大,闪烁时间控制也可以非常精确。但是,该方式也存在如下的一些缺点:
49.1)查表的方式不够灵活,每个闪烁方式对应一个表项,只能按照闪烁表里的方式进行闪烁。如果需要增加新的闪烁方式,则必须在闪烁表里增加相应表项,不仅操作麻烦,而且闪烁表所占用的存储空间会随着闪烁方式的增加而增加。
50.2)在每个闪烁周期里led指示灯只能亮一次灭一次,在闪烁周期结束后,led指示灯都是熄灭的状态,功能不够丰富。
51.3)一般的,led闪烁属于低优先级的事务,并不需要很精确的闪烁时间,在中断里处理led闪烁事务会增加中断响应时间,影响其他的更重要的非中断事务的处理。如果中断优先级设置不当,还会影响其他低优先级中断的及时响应。如果系统为嵌入式操作系统,则会由于中断响应时间延长而影响系统的实时性。
52.因此,为了解决现有技术中存在的问题,本申请实施例提出一种新的解决方案,可通过编写简单的代码实现led指示灯的闪烁控制。本申请实施例提供的led指示灯的闪烁控制方法采用状态机来实现延时的功能,解决了因为延时而阻塞任务执行的缺点,系统资源占用少,执行效率高,可用在单任务程序也可以用在多任务程序中。此外,本方法控制过程不在中断里执行,不占用中断资源,不会影响系统的实时性。第三,本方法提供的闪烁模式可同时包含预定义闪烁模式和自定义闪烁模式。在预定义闪烁模式下,可将闪烁参数预先定义好,需要的时候可以直接调用对应模式的参数;在自定义闪烁模式下,可以根据实际需要设定不同的闪烁参数,实现各种各样的闪烁效果。两种闪烁模式的结合不但可以提高工作效率,而且也可以实现更加丰富的闪烁功能。
53.下面通过具体实施例来说明本申请实施例的技术方案。
54.参照图3,示出了本申请一个实施例的一种led指示灯的闪烁控制方法的步骤流程示意图,具体可以包括如下步骤:
55.s301、当监听到触发led指示灯闪烁的事件时,获取与所述事件相对应的闪烁参数。
56.需要说明的是,本方法可以应用于任何需要通过led指示灯的闪烁来指示某种工
作状态的系统或设备中,由于上述系统可以是指由cpu控制的一套完整的软硬件系统。例如,空调系统、电视机系统等等。因此,本申请实施例的执行主体可以是终端设备。
57.在本申请实施例中,终端设备中可以配置有监听器,用于监听终端设备中出现或产生的某些事件。通常,为了方便向用户告知这些事件的发生,可以通过led指示灯的闪烁来进行提示。
58.例如,某个网络设备的网络状态指示灯,在其正常工作的时候可以按照每秒闪烁一次进行提示;当该网络设备插入网线后,可以通过指示灯快速闪烁10次来提示有网线插入。
59.所有需要通过led指示灯进行提示的事件都可以是监听器监听的对象。当监听器监听到类似事件发生时,可以获取与该事件相对应的闪烁参数。上述闪烁参数即是预先配置的、用于对该事件进行提示的led指示灯的具体工作数据。例如,上述在网络设备插入网线后,指示灯快速闪烁10秒,则插入网线这一事件对应的闪烁参数即是led指示灯如何实现快速闪烁10秒所需的配置数据。
60.s302、将所述闪烁参数保存至预先配置的控制变量中。
61.在本申请实施例中,当获取到与当前事件相对应的闪烁参数后,可以将该闪烁参数保存至预先配置的控制变量中。这些控制变量可以在后续的处理过程中被led闪烁函数调用,以实现相应的闪烁控制。
62.在本申请实施例的一种可能的实现方式中,可以通过编写程序代码的方式来配置控制变量。相应地,闪烁参数等数据也可以通过代码进行配置。
63.因此,在实现本申请实施例提供的led指示灯的闪烁控制方法的过程中,可以预先定义一些数据结构,如led状态机类型、led闪烁模式类型、闪烁参数结构和led控制结构。
64.下面分别对各种数据结构进行介绍。
65.1、led状态机类型
66.本申请实施例中需要使用到的状态包括起始状态、点亮led状态、led保持状态、led亮灭间隔状态和led延时状态。其中,起始状态主要是获取预定义参数和统计循环次数;点亮led状态用于打开led,使相应的led指示灯亮起来;led保持状态是在点亮led指示灯后,根据闪烁参数使led指示灯在亮的状态下保持一定的时间;led亮灭间隔状态是指在一个闪烁周期内,两次亮起的状态之间的时间间隔,在该状态下led指示灯为熄灭状态;led延时状态主要是在完成亮起和间隔的动作之后,延时一定的时间后进入下一个闪烁周期。
67.led状态机类型的代码可以如下所示:
68.69.需要说明的是,本申请实施例提供的led指示灯的闪烁控制方法属于单片机软件方法,在单片机的软件程序语言中,最常用的是c语言,本申请实施例即是以c语言作为编写代码的程序语言来进行介绍的。当然,根据实际需要,也可以采用其他程序语言来编码上述代码,本申请实施例对此不作限定。
70.2、led闪烁模式类型
71.led闪烁模式类型根据具体的应用而有所不同,可在项目实施的时候根据实际需求来确定。总体来说,本申请实施例中的闪烁模式可以包括预定义闪烁模式和自定义闪烁模式。其中,预定义闪烁模式又可以更进一步划分为多种不同的闪烁模式,如每一秒钟闪烁一次和每一秒钟闪烁两次就可以是两种不同的预定义闪烁模式;所有预定义闪烁模式的类型都需要在这个结构里列出来。这里只是定义了闪烁模式的类型,每个模式的具体参数需要另外定义。需要注意的是,自定义闪烁模式类型只有一个,其具体参数需要通过调用参数配置接口函数来指定。
72.led闪烁模式类型的代码可以如下所示:
[0073][0074][0075]
3、闪烁参数结构
[0076]
闪烁参数结构主要是配置在一个闪烁周期内的闪烁参数,包括一个周期内亮灯的次数、每次亮灯的时间长度、两次亮灯之间的时间间隔、亮灯后的延时时间。上述各个时间均是以毫秒为单位。
[0077]
在本申请实施例中,如果是预定义闪烁模式,这些参数需要在程序初始化阶段预先定义好;如果是自定义闪烁模式,则应当在需要的时候调用参数配置接口函数来设置具体的值。
[0078]
闪烁参数结构的代码可以如下所示:
[0079][0080]
4、led控制结构
[0081]
该结构用于控制led闪烁的过程,led控制结构中包含了闪烁参数结构、循环次数变量、led状态机、第一闪烁模式和第二闪烁模式。
[0082]
其中,循环次数变量用于记录第一闪烁模式的循环次数,第一闪烁模式执行完成后会自动执行第二闪烁模式,第二闪烁模式会一直执行,直到用户重新配置闪烁参数。第一闪烁模式可以是预定义闪烁模式,也可以是自定义闪烁模式,第二闪烁模式必须是预定义闪烁模式。第一闪烁模式和第二闪烁模式的作用主要是为了实现led指示灯在某种模式下闪烁一定的次数之后,自动转换到另外一种方式继续闪烁。例如,若希望使用某个led指示灯指示是否有新的蓝牙设备接入,则可以在平时按正常速度闪烁,当检测到有新的蓝牙设备接入的时候快速闪烁5次,然后再恢复正常速度闪烁。为了实现这一功能,可以在检测到新的蓝牙设备的时候调用参数设置接口函数,将第一闪烁模式设置为快速闪烁模式,循环次数设置为5次,第二闪烁模式设置为正常闪烁模式,这样即可实现想要的效果。
[0083]
led控制结构的代码可以如下所示:
[0084][0085]
在本申请实施例中,在定义出上述数据结构后,还可以确定预定义闪烁模式的闪烁参数。
[0086]
需要说明的是,有多少种预定义闪烁模式,就需要定义多少组闪烁参数。每一组闪烁参数中的数据顺序需要与前述定义的闪烁参数结构中的变量一一对应。
[0087]
预定义闪烁模式的闪烁参数的代码可以如下所示:
[0088][0089][0090]
在本申请实施例中,当需要改变led闪烁参数时,可以调用led参数配置接口函数来实现。该函数主要是将用户设置的参数保存在本地的led控制变量中,而led闪烁函数使用本地的led控制变量来实现led的闪烁控制流程,上述本地变量是指在led模块内部的本地变量。
[0091]
led参数配置接口函数的代码可以如下所示:
[0092][0093]
s303、确定led状态机当前的状态,所述led状态机当前的状态用于表征所述led指示灯当前的工作状态。
[0094]
在本申请实施例中,led状态机可以用于记录led指示灯的工作状态。也即,根据led状态机的状态,可以实时地确定led指示灯当前的工作状态。
[0095]
s304、调用led闪烁函数,所述led闪烁函数中包含有分别与多个状态下的执行动作一一对应的函数段。
[0096]
在本申请实施例中,led闪烁函数是实现led指示灯闪烁功能的主要部分。该函数
可以由系统主函数或主任务函数周期性地调用。调用周期越短,led指示灯闪烁的时间精度就越高。当然,由于led指示灯主要是通过人眼的观察来识别不同的状态,因此对时间的精度要求并不高。
[0097]
在本申请实施例中,led闪烁函数中可以针对不同的状态分配设计有对应的函数段。例如,对于起始状态,led闪烁函数中包含有对应起始状态的函数段;对于led点亮状态,led闪烁函数中也包含有对应led点亮状态的函数段。这些不同的函数段,可以方便系统在确定led指示灯的工作状态后,直接跳转至与该状态对应的函数段处以执行相应的动作。
[0098]
示例性地,led闪烁函数的代码可以如下所示:
[0099]
[0100]
[0101][0102]
需要说明的是,本申请实施例提供的led指示灯的闪烁控制方法属于单片机软件方法,最终的代码实现中部分内容可能会根据不同的单片机而有不同的实现方法。例如,点亮和熄灭led,获取系统时间等。这些依赖具体硬件的方法在本申请实施例中不做具体实现,而是将它们使用函数接口来代替。如点亮led表示为led_turn_on(),获取系统时间表示为get_system_time(),这些函数接口的功能可以很容易从名字中看出来,对于本领域的技术人员来说这些都是很容易理解且很常用的软件方法,这些函数的具体实现并不影响本方法的实现。
[0103]
s305、以所述控制变量为入参,从与所述当前的状态对应的目标函数段开始执行所述led闪烁函数,以控制所述led指示灯按照与所述事件相设定的闪烁模式进行闪烁。
[0104]
在本申请实施例中,在调用led闪烁函数后,可以首先获取系统的当前时间,并将该时间保存在局部变量中。由于系统时间是一直在累加的,如果在后续的计算过程中,每次都直接去读取系统时间,会导致每次读取到的时间不一致,不便于进行计算,也会增加系统开销。因此,通过将读取到的当前时间保存在局部变量中,可以方便后续的计算,避免每次计算过程都去读取系统时间。
[0105]
在本申请实施例中,在调用led闪烁函数后,可以以获取到的控制变量为入参,根据当前的状态跳转至对应的目标函数段开始执行该函数。
[0106]
如图4所示,是本申请一个实施例的一种led闪烁函数的工作流程示意图。按照图4所示的流程,在调用led闪烁函数后,可以根据led状态机的状态,执行如下动作:
[0107]
1、若led状态机当前的状态为起始状态,则可以判断第一闪烁模式当前的循环次数是否为零。
[0108]
若当前的循环次数为零,则从预设参数配置表中读取第二闪烁模式的配置参数,基于第二闪烁模式的配置参数执行第二闪烁模式。
[0109]
若当前的循环次数不为零,则首先将当前的循环次数减一,然后从控制变量中获取第一闪烁模式的闪烁参数并执行,待执行完该状态下的相关操作后,将led状态机切换至led点亮状态。需要说明的是,上述第一闪烁模式的闪烁参数是在调用参数配置方法的时设置的。
[0110]
2、若led状态机当前的状态为led点亮状态,则首先控制led指示灯点亮,然后确定在第一闪烁模式下led指示灯当前的亮灯次数和当前时间,并将当前的亮灯次数保存至亮
灯次数变量中,将当前时间保存至起始时间变量中,然后将led状态机切换至保持状态。
[0111]
3、若led状态机当前的状态为保持状态,则可以判断led指示灯从led点亮状态到当前时间的第一时长是否大于闪烁参数中的亮灯时间长度。
[0112]
若上述第一时长未大于亮灯时间长度,则可以直接控制led闪烁函数返回。
[0113]
若上述第一时长大于亮灯时间长度,则继续判断亮灯次数变量是否为零。若亮灯次数变量为零,则记录亮灯延时开始时间,并将led状态机切换至延时状态;若亮灯次数变量不为零,则首先将当前的亮灯次数减一,然后记录灭灯开始时间,并将led状态机切换至亮灭间隔状态。
[0114]
4、若led状态机当前的状态为亮灭间隔状态,则可以判断从灭灯开始到当前时间的第二时长是否大于闪烁参数中的亮灭间隔时间长度。
[0115]
若上述第二时长未大于亮灭间隔时间长度,则可以直接控制led闪烁函数返回。若上述第二时长大于亮灭间隔时间长度,则可以将led状态机切换至led点亮状态。
[0116]
5、若led状态机当前的状态为延时状态,则可以判断从延时开始到当前时间的第三时长是否大于闪烁参数中的延时时间长度。
[0117]
若上述第三时长大于延时时间长度,则可以直接控制led闪烁函数返回。若上述第三时长未大于延时时间长度,则可以将led状态机切换至起始状态。
[0118]
为了便于理解,下面结合一个示例,从总体上对本申请实施例提供的led指示灯的闪烁控制方法作一介绍。
[0119]
如图5所示,是本申请一个实施例提供的一种led指示灯的闪烁控制过程示意图。按照图5所示的控制过程,在初始时,可以基于用户手动操作或由某些事件的触发,生成led闪烁参数的修改请求。例如,用户通过串口或屏幕操作,或者,系统检测到有网线插入或其他事件。针对上述修改请求,可以定义一个临时的led控制变量,并将该控制变量初始化成与当前的事件相对应的值,也就是与该事件对应的闪烁参数。通过调用led参数配置接口函数,可以实现led闪烁参数的修改。修改后的闪烁参数即是与该事件对应的闪烁参数,后续led闪烁函数将使用新的闪烁参数来控制led指示灯的闪烁。
[0120]
需要说明的是,led闪烁参数的设置应根据具体的需求来设置。例如,某个led用来指示系统运行状态和sd卡工作状态,则可以在正常工作的时候每秒闪烁一次,而检测到有卡插入的时候调用led参数配置接口函数,将闪烁参数修改成快速闪烁5次,写卡出错的时候调用led参数配置接口函数,将闪烁参数修改成快速闪烁10次,如此等等。
[0121]
在控制led指示灯闪烁时,首先需要在初始化阶段完成led的初始化,包括led硬件接口初始化和led相关数据结构的初始化。然后在主循环里周期性的调用led闪烁函数即可。由于led闪烁函数里没有延时等待,函数里每次执行的语句是很少的(整个闪烁函数代码不超过50行),因此该函数会很快返回,不会影响其他事务的处理。
[0122]
如图6所示,是本申请一个实施例提供的一种led指示灯的闪烁控制方法的控制时序示意图。在图6所示的时序图中,包括亮灯时间、亮灯次数、亮灭间隔、闪烁延时等。并且,上述亮灯时间、亮灯次数、亮灭间隔、闪烁延时与led闪烁参数结构中的变量相对应,它们的取值范围均是大于等于0。按照图6所示时序图进行闪烁时,led指示灯在一个闪烁周期内亮灯三次,每两次亮灯之间间隔一个亮灭间隔时间,待三次亮灯后,led指示灯熄灭并在延时一个闪烁延时时间后,进入下一个闪烁周期。在完成预设次数的闪烁周期循环后,led指示
灯便由第一闪烁模式转为第二闪烁模式。在第二闪烁模式下,led指示等将持续按照第二闪烁模式进行闪烁,直到有新的事件触发闪烁参数的修改。
[0123]
通过将图6所示的时序图与图2所示的现有技术中的时序图对比,可以发现本申请实施例提供的技术方案能够实现更加丰富的闪烁功能。
[0124]
在本申请实施例中,可以通过编写简单的代码实现丰富的led闪烁功能。与现有技术相比,采用本申请实施例提供的方法控制led指示灯闪烁时,在系统内部没有任何延时和等待,可以完全无阻塞的执行,不会因为led闪烁阻塞和等待而影响其他事务的处理。其次,本方法的控制过程逻辑简单,思路清晰,实现该本方法所需的代码量很少,只需占用很少的系统资源。第三,本申请实施例提供的控制方法可充分发挥预定义方法和自定义方法的优点,通过预定义闪烁模式和自定义闪烁模式的结合,可实现丰富的闪烁功能。第四,本申请实施例的控制过程不需要在中断里执行,不占用宝贵的中断资源,不管是在单任务系统还是多任务系统,都不会影响系统的实时性。
[0125]
需要说明的是,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
[0126]
参照图7,示出了本申请一个实施例的一种led指示灯的闪烁控制装置的示意图,具体可以包括参数获取模块701、状态确定模块702、函数调用模块703、闪烁控制模块704,其中:
[0127]
参数获取模块,用于在监听到触发led指示灯闪烁的事件时,获取与所述事件相对应的闪烁参数;
[0128]
参数保存模块,用于将所述闪烁参数保存至预先配置的控制变量中;
[0129]
状态确定模块,用于确定led状态机当前的状态,所述led状态机当前的状态用于表征所述led指示灯当前的工作状态;
[0130]
函数调用模块,用于调用led闪烁函数,所述led闪烁函数中包含有分别与多个状态下的执行动作一一对应的函数段;
[0131]
闪烁控制模块,用于以所述控制变量为入参,从与所述当前的状态对应的目标函数段开始执行所述led闪烁函数,以控制所述led指示灯按照与所述事件相设定的闪烁模式进行闪烁。
[0132]
在本申请实施例中,所述闪烁参数包括亮灯次数、亮灯时间长度、两次亮灯之间的时间间隔,以及亮灯后的延时时间。
[0133]
在本申请实施例中,所述闪烁模式包括第一闪烁模式和第二闪烁模式,所述闪烁控制模块包括:
[0134]
循环次数判断子模块,用于若所述状态为起始状态,则判断第一闪烁模式当前的循环次数是否为零;
[0135]
第一控制子模块,用于若所述当前的循环次数为零,则从预设参数配置表中读取第二闪烁模式的配置参数,基于所述配置参数执行所述第二闪烁模式;或者,用于若所述当前的循环次数不为零,则在将所述当前的循环次数减一后,从所述控制变量中获取所述第一闪烁模式的闪烁参数并执行,将所述led状态机切换至led点亮状态。
[0136]
在本申请实施例中,所述控制变量包括亮灯次数变量和起始时间变量,所述闪烁
控制模块还包括:
[0137]
第二控制子模块,用于若所述状态为led点亮状态,则在控制所述led指示灯点亮后,确定在第一闪烁模式下所述led指示灯当前的亮灯次数和当前时间,将所述当前的亮灯次数保存至所述亮灯次数变量中,将所述当前时间保存至所述起始时间变量中,将所述led状态机切换至保持状态。
[0138]
在本申请实施例中,所述闪烁控制模块还包括:
[0139]
亮灯时间长度判断子模块,用于若所述状态为保持状态,则判断所述led指示灯从所述led点亮状态到当前时间的第一时长是否大于所述闪烁参数中的亮灯时间长度;
[0140]
第三控制子模块,用于若所述第一时长未大于所述亮灯时间长度,则控制所述led闪烁函数返回;或者,用于若所述第一时长大于所述亮灯时间长度,则判断亮灯次数变量是否为零;若所述亮灯次数变量为零,则记录亮灯延时开始时间,并将所述led状态机切换至延时状态;若所述亮灯次数变量不为零,则在将所述当前的亮灯次数减一后,记录灭灯开始时间,并将所述led状态机切换至亮灭间隔状态。
[0141]
在本申请实施例中,所述闪烁控制模块还包括:
[0142]
亮灭间隔时间长度判断子模块,用于若所述状态为亮灭间隔状态,则判断从灭灯开始到当前时间的第二时长是否大于所述闪烁参数中的亮灭间隔时间长度;
[0143]
第四控制子模块,用于若所述第二时长未大于所述亮灭间隔时间长度,则控制所述led闪烁函数返回;或者,用于若所述第二时长大于所述亮灭间隔时间长度,则将所述led状态机切换至led点亮状态。
[0144]
在本申请实施例中,所述闪烁控制模块还包括:
[0145]
延时时间长度判断子模块,用于若所述状态为延时状态,则判断从延时开始到当前时间的第三时长是否大于所述闪烁参数中的延时时间长度;
[0146]
第五控制子模块,用于若所述第三时长大于所述延时时间长度,则控制所述led闪烁函数返回;或则,用于若所述第三时长未大于所述延时时间长度,则将所述led状态机切换至起始状态。
[0147]
对于装置实施例而言,由于其与方法实施例基本相似,所以描述得比较简单,相关之处参见方法实施例部分的说明即可。
[0148]
参照图8,示出了本申请一个实施例的一种终端设备的示意图。如图8所示,本实施例的终端设备800包括:处理器810、存储器820以及存储在所述存储器820中并可在所述处理器810上运行的计算机程序821。所述处理器810执行所述计算机程序821时实现上述led指示灯的闪烁控制方法各个实施例中的步骤,例如图3所示的步骤s301至s305。或者,所述处理器810执行所述计算机程序821时实现上述各装置实施例中各模块/单元的功能,例如图7所示模块701至705的功能。
[0149]
示例性的,所述计算机程序821可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器820中,并由所述处理器810执行,以完成本申请。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段可以用于描述所述计算机程序821在所述终端设备800中的执行过程。例如,所述计算机程序821可以被分割成参数获取模块、状态确定模块、函数调用模块、闪烁控制模块,各模块具体功能如下:
[0150]
参数获取模块,用于在监听到触发led指示灯闪烁的事件时,获取与所述事件相对应的闪烁参数;
[0151]
参数保存模块,用于将所述闪烁参数保存至预先配置的控制变量中;
[0152]
状态确定模块,用于确定led状态机当前的状态,所述led状态机当前的状态用于表征所述led指示灯当前的工作状态;
[0153]
函数调用模块,用于调用led闪烁函数,所述led闪烁函数中包含有分别与多个状态下的执行动作一一对应的函数段;
[0154]
闪烁控制模块,用于以所述控制变量为入参,从与所述当前的状态对应的目标函数段开始执行所述led闪烁函数,以控制所述led指示灯按照与所述事件相设定的闪烁模式进行闪烁。
[0155]
所述终端设备800可包括但不仅限于,处理器810、存储器820。本领域技术人员可以理解,图8仅仅是终端设备800的一种示例,并不构成对终端设备800的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备800还可以包括输入输出设备、网络接入设备、总线等。
[0156]
所述处理器810可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field

programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0157]
所述存储器820可以是所述终端设备800的内部存储单元,例如终端设备800的硬盘或内存。所述存储器820也可以是所述终端设备800的外部存储设备,例如所述终端设备800上配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等等。进一步地,所述存储器820还可以既包括所述终端设备800的内部存储单元也包括外部存储设备。所述存储器820用于存储所述计算机程序821以及所述终端设备800所需的其他程序和数据。所述存储器820还可以用于暂时地存储已经输出或者将要输出的数据。
[0158]
本申请实施例还公开了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如前述各个实施例所述的led指示灯的闪烁控制方法。
[0159]
本申请实施例还公开了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如前述各个实施例所述的led指示灯的闪烁控制方法。
[0160]
本申请实施例还公开了一种计算机程序产品,当所述计算机程序产品在终端设备上运行时,使得所述终端设备执行前述各个实施例所述的led指示灯的闪烁控制方法。
[0161]
以上所述实施例仅用以说明本申请的技术方案,而非对其限制。尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应
包含在本申请的保护范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1