在LED行业,一般都会有多个节目显示,假如现在有10节目,里面的节目数据可能会为空或者不为空,每点击一下切换节目按钮,就切换下一条节目。当然,可以选择播放指定的节目,也可以循环播放所有的节目。当我们选择了循环播放节目的时候,加入1、3、5、7、9都存在节目,其他的节目为空,这里我们就希望,先播放第1条节目,然后播放第三条节目,之后按照这个顺序播放所有后续的节目,播放完毕后,又切换到第一条节目,这样一直循环下去。所以,现在就不罗嗦了,下面代码片段就是实现该功能。
代码中的program数组中0代表该节目为空,1代表该节目存在。
#include <stdio.h>
typedef unsigned char uint8_t;
//p: 搜索的首地址
//len: 搜索的长度
//curItem: 数组中搜索的起始位置
//返回: 从数组的起始位置后面开始搜索,直到搜索到里面数据为的1地方停止,返回该位置,未搜索到,返回255
uint8_t FindNextItem(uint8_t *p, uint8_t len, uint8_t curItem)
{
uint8_t i = curItem + 1, ret = 255;
for (; i <= curItem + len; i++)
{
if (p[i % len])
{
ret = i;
break;
}
}
return ret;
}
int main()
{
uint8_t program[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
uint8_t nextItem = 0;
nextItem = FindNextItem(program, 10, 4);
printf("the next item is %d\r\n", nextItem);
return 1;
}