基于单片机的单定时器无延时呼吸灯控制方法与流程

文档序号:17150453发布日期:2019-03-19 23:22阅读:873来源:国知局

本发明涉及呼吸灯控制方法,尤其涉及一种基于单片机的单定时器无延时呼吸灯控制方法。



背景技术:

随着物联网的发展,单片机的应用越来越广泛,应用的单片机型号也越来越多,但是物联网的特性要求单片机程序实时性要强,实现代码所占空间尽可能小,功能强大的同时功耗尽可能低。这就要求程序要有良好的算法支撑,才能用最少的代码量实现尽可能多的功能。

在单片机上通过延时来实现呼吸灯的算法,弊端是实时性不高,显示效果太差,延时过程也会占用了太多的系统资源,影响其他中断的响应,导致不必要的系统资源浪费以及冗余代码对存储空间的浪费。

在单片机上通过3个定时器来实现呼吸灯的算法,实时性很高,显示效果也不错,但是在单片机这样资源紧张的器件上占用三个定时器来实现功能,显得有些资源浪费。



技术实现要素:

为了解决现有技术中的问题,本发明提供了一种基于单片机的单定时器无延时呼吸灯控制方法。

本发明提供了一种基于单片机的单定时器无延时呼吸灯控制方法,包括以下步骤:

s1、将单周期内的计数变量x和周期个数计数变量y都设置为零;

s2、每调用一次单定时器中断响应函数,单周期内的计数变量x自增预设值a,并判断是否达到单个周期计数最大值,如果是,执行步骤s3,否则执行步骤s7;

s3、将单周期内的计数变量x赋值为0,周期个数计数变量y自增预设b;

s4、判断周期个数计数变量y是否大于最大周期个数,如是,执行步骤s5,否则执行步骤s6;

s5、将周期个数计数变量y赋值为0,并将控制呼吸灯呼吸的变量z取反;

s6、计算当前的周期个数占空比阀值t;

s7、如果单周期内的计数变量x小于等于当前的周期个数占空比阀值t,则设置呼吸灯为亮,否则设置呼吸灯为灭;

s8、返回步骤s2。

作为本发明的进一步改进,在步骤s2中,每调用一次单定时器中断响应函数,单周期内的计数变量x自增1,并判断是否达到单个周期计数最大值,如果是,执行步骤s3,否则执行步骤s7。

作为本发明的进一步改进,在步骤s3中,将单周期内的计数变量x赋值为0,周期个数计数变量y自增1。

作为本发明的进一步改进,在步骤s6中,如果吸,呼吸灯越来越亮,占空比也响应的越来越大,周期个数计数变量y即为当前的周期个数占空比阀值t;如果为呼,呼吸灯的亮度越来越暗,占空比也响应的越来越小,此时的当前的周期个数占空比阀值t是最大周期个数减去周期个数计数变量y。

作为本发明的进一步改进,在步骤s6中,当前的周期个数占空比阀值t为周期个数计数变量y除以最大周期个数,再乘以100%。

作为本发明的进一步改进,在步骤s2中,每调用一次单定时器中断响应函数,单周期内的计数变量x自增1,并判断是否达到单个周期计数最大值100,如果是,执行步骤s3,否则执行步骤s7。

作为本发明的进一步改进,在步骤s4中,判断周期个数计数变量y是否大于最大周期个数100,如是,执行步骤s5,否则执行步骤s6。

作为本发明的进一步改进,在步骤s5中,z为0是呼,z为1是吸,取反就是z由0变为1或者z由1变为0。

作为本发明的进一步改进,在步骤s7中,通过改变控制呼吸灯亮灭状态的单片机引脚来控制呼吸灯的亮或灭。

本发明的有益效果是:通过上述方案,通过一个定时器实现了无延时呼吸灯控制,占用较少的资源:仅用一个定时器,代码简洁,占用空间少;中断函数执行具有较高的实时性,延时低。

具体实施方式

下面结合具体实施方式对本发明作进一步说明。

针对现有实现方法的弊端,本发明提供了一种基于单片机的单定时器无延时呼吸灯控制方法,只占用一个定时器资源,通过不同的循环变量来控制灯点亮的占空比来实现呼吸灯的效果。

一种基于单片机的单定时器无延时呼吸灯控制方法,具体包括以下步骤:

1.将单周期内的计数变量x和周期个数计数变量y都设置为零。

2.每调用一次单定时器中断响应函数,单周期内的计数变量x自增1,并判断是否达到单个周期计数最大值100,如果是,执行3,否则执行7。

3.将单周期内的计数变量x赋值为0,周期个数计数变量y自增1,呼和吸时间一致,如果不想一致,只需在每次调用终端函数加1时改为加2或加3或其他值等,就可以调出呼和吸时间不一致的效果。

4.判断周期个数计数变量y是否大于最大周期个数100,如是,执行5,否则执行6。

5.将周期个数计数变量y赋值为0,并将控制呼吸的变量z取反(z为0是呼,为1是吸;取反就是由0变为1或由1变为0)。

6.如果吸(z为1),呼吸灯越来越亮,占空比也响应的越来越大,周期个数计数变量y即为当前的周期个数占空比阀值t;如果为呼(z为0),呼吸灯的亮度越来越暗,占空比也响应的越来越小,此时设置的占空比阀值是最大周期个数减去周期个数计数变量y,可以得到当前的占空比阀值t;如果单片机支持乘除法运算,可以将占空比阀值的计算改为y除以周期最大个数,再乘以100%来确定。

7.如果单周期内的计数变量x小于等于占空比阀值t,则设置灯为亮,否则设置灯为灭(通过改变控制灯亮灭状态的单片机引脚来控制灯的亮或灭,引脚状态分为高和低两种状态,根据电路图设计可能引脚状态位高是灯亮,也可能低为灯亮,根据具体电路图设置对应的引脚状态即可)。

8.执行2步。

单片机定时器的特点为:单片机一般会有一个以上的定时器,且每个定时器可以互相独立的工作,通过往对应定时器的寄存器设置不同的参数来控制定时器的响应时间,响应时间到了就会调用中断函数,从而执行不同的逻辑功能。

本发明利用单片机定时器周期性调用中断函数的特点,来设计单定时器控制呼吸灯的逻辑。设计思路是通过在周期性调用的定时器中断响应函数中进行计数,每调用一次中断函数计数加1,当计数达到预定值时,此计数清零,另一个计数加1,通过这两个计数来完成两个循环,一个循环负责根据本周期内占空比(单个周期灯亮的的时间和总时间的比值,这个值影响灯的亮度)来设置灯的亮灭时长,另一个循环负责设置各周期的不同占空比。通过两个循环的控制,实现呼吸灯的效果。

本发明提供的一种基于单片机的单定时器无延时呼吸灯控制方法,具有以下优点:

1.占用较少的资源:仅用一个定时器,代码简洁易懂,占用空间少。

2.中断函数执行具有较高的实时性,延时低。

3.通过设置不同的中断响应时间(单片机有对应的寄存器,设置不同的值就有不同的响应时间),可以方便的控制呼吸灯的呼吸时长。

4.本发明考虑到有些单片机不支持乘除法运算,为了更好的通用性只用到了加减法运算。

5.呼和吸时间一致,如果不想一致,只需在每次调用终端函数加1时改为加2或加3或其他值等,就可以调出呼和吸时间不一致的效果。

6.如果单片机支持乘除法运算,可以将占空比阀值的计算改为y除以周期最大个数,再乘以100%来确定,这算是此算法的一种扩展。

本发明提供的一种基于单片机的单定时器无延时呼吸灯控制方法,特别适用于单片机代码空间紧缺、无太多定时器可用的情况下。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1