页面加载中,请稍候
来源:strongerHuang发布时间:2023-01-15104浏览
询问 AI
作者 |strongerHuang微信公众号 |strongerHuangLED有哪些作用
别小看LED,它在实际生活中应用很广泛的。
拿状态指示灯来说,一个项目的LED状态指示灯可以直观明了的指示设备的运行状态,比如:运行、故障、待机、死机等常见状态。通过RGB,或者红黄绿不同颜色LED组合,可以实现更多状态的指示。LED状态灯实现
这里结合代码为大家分享一些项目中常见的LED状态灯的实现方法。int main(void){//系统初始化 while(1) {//dosomething switch(State) { case 状态1: //do something break;
case 状态2: //do somethingbreak; · ·· case 状态灯: ED_TOGGLE(); //LED闪烁 break; } }}
void StatusLight_Task(void *pvParameters){staticTickType_txLastWakeTime; //初始化 xLastWakeTime = xTaskGetTickCount();
for(;;) { //do something
LED_TOGGLE(); //LED闪烁 vTaskDelayUntil(xLastWakeTime, 500); }}
但是,对于单片机项目来说,单片机自身就能实现,如果单独用一个芯片,就显得有点多余。LED_ON();vTaskDelay(TimesON);
LED_OFF();vTaskDelay(TimesOFF);
typedef struct{ uint8_t Mode; //模式
uint8_t Status; //当前状态 uint16_t OffTimes; //灭时间 uint16_t OnTimes; //亮时间(ms) uint16_t Counter; //计数(计时)
void (*OffFun)(void); //灭函数接口 void (*OnFun)(void); //亮函数接口}SL_TypeDef;/* 状态灯 */
void StatusLight_Task(void *pvParameters){staticTickType_txLastWakeTime; xLastWakeTime = xTaskGetTickCount();
for(;;) { SL_Scan(sSLG_Structure); //红灯 SL_Scan(sSLY_Structure); //黄灯 SL_Scan(sSLR_Structure); //绿灯
vTaskDelayUntil(xLastWakeTime, SL_TASK_PERIOD); }}
static void SL_Scan(SL_TypeDef *SL_Struct){ /* 常灭模式 */ if(SL_MODE_OFF == SL_Struct->Mode) { SL_Struct->Status = SL_STATUS_OFF; //状态置为"灭" SL_Struct->OffFun(); //灭灯 } /* 常亮模式 */ else if(SL_MODE_ON == SL_Struct->Mode) { SL_Struct->Status = SL_STATUS_ON; //状态置为"亮" SL_Struct->OnFun(); //亮灯 } /* 闪烁模式 */ else if(SL_MODE_FLICKER == SL_Struct->Mode) { /* 在灭状态 */ if(SL_STATUS_OFF == SL_Struct->Status) { SL_Struct->Counter++; if(SL_Struct->Counter >= SL_Struct->OffTimes) { SL_Struct->Counter = 0; SL_Struct->OnFun(); //亮灯 SL_Struct->Status = SL_STATUS_ON; //状态置为"亮" } } /* 在亮状态 */ else if(SL_STATUS_ON == SL_Struct->Status) { SL_Struct->Counter++; if(SL_Struct->Counter >= SL_Struct->OnTimes) { SL_Struct->Counter = 0; SL_Struct->OffFun(); //灭灯 SL_Struct->Status = SL_STATUS_OFF; //状态置为"灭" } } else { SL_Struct->Status = SL_STATUS_OFF; //状态置为"灭" } } /* 未知模式 */ else { SL_Struct->Status = SL_STATUS_OFF; //状态置为"灭" SL_Struct->OffFun(); //灭灯 }}
最后
以上的控制LED的状态,其实是一个项目中很小的一个模块,还有更复杂的LED实现和控制方法,相信做过这一块的同学就比较了解。------------END------------

关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。


新闻来源:strongerHuang,文中所述为作者独立观点,不代表icspec立场。更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj。
暂无评论哦,快来评论一下吧!
16 小时前

2026-06-18

2026-07-03