/* L E D _ D E M O _ T A S K */
/*-------------------------------------------------------------------------
*功能:延时器测试闪灯,在超级循环中运行。
*参数:无
*返回:无
*备注:未测试。
-------------------------------------------------------------------------*/
void led_demo_task(void)
{
static uint8_t s_chStep = 0;
switch (s_chStep)
{
case 0:
/* 全灭 */
/* 第一次用直接就是超时状态,因为还未设置超时时间 */
if (zl_poll_delay_timeout(DELAY_ID2)) {
zl_poll_delay_set(DELAY_ID2, DELAY_TIME2); //延时3s
LED1 = 1;
LED2 = 1;
s_chStep = 1;
}
break;
case 1:
/* LED1 亮 */
if (zl_poll_delay_timeout(DELAY_ID1)) {
zl_poll_delay_set(DELAY_ID1,DELAY_TIME1); //延时2s
LED1 = 0;
s_chStep = 2;
}
break;
case 2:
/* LED2 亮 */
if (zl_poll_delay_timeout(DELAY_ID0)) {
zl_poll_delay_set(DELAY_ID0, DELAY_TIME0); //1s
呃,大哥,你得告诉我出了啥问题吧,光贴代码不知道你想表达啥问题。。。另,你的代码缩进好难受
只能让我猜猜你所谓的问题吧
你想要实现的是不是:
>状态0:两个LED全灭,延时4S
>状态1:LED1亮,延时4S
>状态2:LED2亮,延时4S,LED2亮起的同时切换到状态0
如果是这样,你的写法确实存在些问题,用一个延时器就可以实现了。。。
按我猜测的功能写的,不过代码未测试,只是展示延时器的使用。。。
- #define LED_DELAY_TIME 4000
- /* L E D _ D E M O _ T A S K */
- /*-------------------------------------------------------------------------
- *功能:延时器测试闪灯,在超级循环中运行。
- *参数:无
- *返回:无
- *备注:未测试。
- -------------------------------------------------------------------------*/
- void led_demo_task(void)
- {
- static uint8_t s_chStep = 0;
- switch (s_chStep)
- {
- case 0:
- /* 全灭 */
- /* 第一次用直接就是超时状态,因为还未设置超时时间 */
- if (zl_poll_delay_timeout(0)) {
- zl_poll_delay_set(0, LED_DELAY_TIME);
- LED_1 = 1;
- LED_2 = 1;
- s_chStep = 1;
- }
- break;
- case 1:
- /* LED1 亮 */
- if (zl_poll_delay_timeout(0)) {
- zl_poll_delay_set(0, LED_DELAY_TIME);
- LED_1 = 0;
- s_chStep = 2;
- }
-
- break;
- case 2:
- /* LED2 亮 */
- if (zl_poll_delay_timeout(0)) {
- zl_poll_delay_set(0, LED_DELAY_TIME);
- LED_2 = 0;
- s_chStep = 0;
- }
- break;
- default:
- break;
- }
- }
复制代码在每个case里设置的延时,是为下个case服务的。
你说的对,量大消耗的时间也多
就是设计查询函数,我不太明白,是基于心跳计数查询吗
18楼的方法我觉得也不错。
对的,代码就是实现这样的效果了,代码我直接复制黏贴了,没注意看显示的效果 了,不好意思,看了一下楼主的代码,是我自己理解错误了,按楼主的代码试了一下,效果很好,非常感谢了。。。
再问一下楼主, 我case0 延时3s,case1 延时2s,case2 延时1s,是下面这么写吗,现象是LED1,LED2同时亮了,我是不是又哪里用错了
#define DELAY_ID0 0
#define DELAY_TIME0 1000
#define DELAY_ID1 1
#define DELAY_TIME1 2000
#define DELAY_ID2 2
#define DELAY_TIME2 3000
/* L E D _ D E M O _ T A S K */
/*-------------------------------------------------------------------------
*功能:延时器测试闪灯,在超级循环中运行。
*参数:无
*返回:无
*备注:未测试。
-------------------------------------------------------------------------*/
void led_demo_task(void)
{
static uint8_t s_chStep = 0;
switch (s_chStep)
{
case 0:
/* 全灭 */
/* 第一次用直接就是超时状态,因为还未设置超时时间 */
if (zl_poll_delay_timeout(DELAY_ID2)) {
zl_poll_delay_set(DELAY_ID2, DELAY_TIME2); //延时3s
LED1 = 1;
LED2 = 1;
s_chStep = 1;
}
break;
case 1:
/* LED1 亮 */
if (zl_poll_delay_timeout(DELAY_ID1)) {
zl_poll_delay_set(DELAY_ID1,DELAY_TIME1); //延时2s
LED1 = 0;
s_chStep = 2;
}
break;
case 2:
/* LED2 亮 */
if (zl_poll_delay_timeout(DELAY_ID0)) {
zl_poll_delay_set(DELAY_ID0, DELAY_TIME0); //1s
LED2 = 0;
s_chStep = 0;
}
break;
default:
break;
}
}
一周热门 更多>