LED有哪些作用
別小看LED,它在實(shí)際生活中應(yīng)用很廣泛的。 首先就是以LED為光源的項(xiàng)目,比如呼吸燈、廣告燈、LED顯示屏等,這類控制LED亮滅(閃爍),或者亮度漸變。 再次就是LED背光燈,像液晶背光燈、按鍵背光燈等,這種也是需要控制LED變化的。我之前做過(guò)有按鍵的項(xiàng)目,按鍵背光燈需要漸變、配合音效控制LED不同頻率閃爍,目的就是為了達(dá)到更好的體驗(yàn)效果。 再再次,LED作為指示燈,電源指示燈、狀態(tài)指示燈,這種就和接近初學(xué)者的學(xué)習(xí)時(shí)的LED燈,但這種卻在項(xiàng)目中很常見。
LED狀態(tài)燈實(shí)現(xiàn)
這里結(jié)合代碼為大家分享一些項(xiàng)目中常見的LED狀態(tài)燈的實(shí)現(xiàn)方法。 1.單色LED運(yùn)行狀態(tài)指示燈通過(guò)閃爍(一亮一滅)指示設(shè)備運(yùn)行的狀態(tài)的指示燈,一個(gè)關(guān)鍵作用:設(shè)備有沒有死機(jī)。 很多產(chǎn)品中都會(huì)用到,你買一個(gè)開發(fā)板,提供的綜合例程也基本都有。 裸機(jī)情況下(一般狀態(tài)機(jī)),在某一個(gè)狀態(tài)實(shí)現(xiàn)LED閃爍:
int main(void)
{
//系統(tǒng)初始化
while(1)
{
//dosomething
switch(State)
{
case 狀態(tài)1:
//do something
break;
case 狀態(tài)2:
//do something
break;
·
·
·
case 狀態(tài)燈:
ED_TOGGLE(); //LED閃爍
break;
}
}
}
RTOS情況下,新建一個(gè)狀態(tài)燈線程,在線程里面直接控制即可:
void StatusLight_Task(void *pvParameters)
{
staticTickType_txLastWakeTime;
//初始化
xLastWakeTime = xTaskGetTickCount();
for(;;)
{
//do something
LED_TOGGLE(); //LED閃爍
vTaskDelayUntil(&xLastWakeTime, 500);
}
}
2.單色LED漸變LED漸變?cè)谏钪衅鋵?shí)也有一些場(chǎng)景在用,呼吸燈、鍵盤等,其實(shí)原來(lái)也很簡(jiǎn)單,就是控制LED亮度。
控制方法有很多,電壓、PWM都能達(dá)到控制LED亮度的效果。當(dāng)然,現(xiàn)在還有控制LED漸變的專有芯片。
- 定時(shí)器硬件PWM
- 控制GPIO口高低電平
LED_ON();
vTaskDelay(TimesON);
LED_OFF();
vTaskDelay(TimesOFF);
這里TimesON 和TimesOFF是需要結(jié)合項(xiàng)目情況修改的變量(比如漸變時(shí)間)。
3.多色LED,多種運(yùn)行狀態(tài)一個(gè)設(shè)備在沒有顯示屏指示狀態(tài)的時(shí)候,通過(guò)LED指示狀態(tài)也是一種方法,比如:紅、黃、綠三色,分別常滅、常亮、閃爍三種狀態(tài)。
這種相對(duì)第一種單色固定狀態(tài)要復(fù)雜一點(diǎn),但實(shí)現(xiàn)起來(lái)也不難,方法也有很多。
這里分享一些思路:創(chuàng)建一個(gè)線程,一個(gè)結(jié)構(gòu)體,輪詢各種LED狀態(tài),根據(jù)應(yīng)用修改其各種狀態(tài),以及閃爍時(shí)間等。
LED狀態(tài)結(jié)構(gòu)體:
typedef struct
{
uint8_t Mode; //模式
uint8_t Status; //當(dāng)前狀態(tài)
uint16_t OffTimes; //滅時(shí)間
uint16_t OnTimes; //亮?xí)r間(ms)
uint16_t Counter; //計(jì)數(shù)(計(jì)時(shí))
void (*OffFun)(void); //滅函數(shù)接口
void (*OnFun)(void); //亮函數(shù)接口
}SL_TypeDef;
/* 狀態(tài)燈 */
LED狀態(tài)主線程:
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);
}
}
這里結(jié)構(gòu)體也是方便統(tǒng)一管理,其中SL_Scan瀏覽(掃描)函數(shù)的參數(shù)通過(guò)傳遞結(jié)構(gòu)體指針,是為了方便讀取并修改其中變量。
當(dāng)然,SL_Scan瀏覽函數(shù)具體實(shí)現(xiàn),就與你應(yīng)用有關(guān):
static void SL_Scan(SL_TypeDef *SL_Struct)
{
/* 常滅模式 */
if(SL_MODE_OFF == SL_Struct->Mode)
{
SL_Struct->Status = SL_STATUS_OFF; //狀態(tài)置為"滅"
SL_Struct->OffFun(); //滅燈
}
/* 常亮模式 */
else if(SL_MODE_ON == SL_Struct->Mode)
{
SL_Struct->Status = SL_STATUS_ON; //狀態(tài)置為"亮"
SL_Struct->OnFun(); //亮燈
}
/* 閃爍模式 */
else if(SL_MODE_FLICKER == SL_Struct->Mode)
{
/* 在滅狀態(tài) */
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; //狀態(tài)置為"亮"
}
}
/* 在亮狀態(tài) */
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; //狀態(tài)置為"滅"
}
}
else
{
SL_Struct->Status = SL_STATUS_OFF; //狀態(tài)置為"滅"
}
}
/* 未知模式 */
else
{
SL_Struct->Status = SL_STATUS_OFF; //狀態(tài)置為"滅"
SL_Struct->OffFun(); //滅燈
}
}
最后
以上的控制LED的狀態(tài),其實(shí)是一個(gè)項(xiàng)目中很小的一個(gè)模塊,還有更復(fù)雜的LED實(shí)現(xiàn)和控制方法,相信做過(guò)這一塊的同學(xué)就比較了解。 當(dāng)然,LED在項(xiàng)目中是微不足道的一個(gè)模塊,但要做到兼容項(xiàng)目,又方便移植、又可刪減增加功能,其實(shí)也不是想象的那么簡(jiǎn)單。
審核編輯 :李倩
-
led
+關(guān)注
關(guān)注
242文章
23709瀏覽量
670959 -
單片機(jī)
+關(guān)注
關(guān)注
6063文章
44925瀏覽量
646980 -
光源
+關(guān)注
關(guān)注
3文章
733瀏覽量
68450
原文標(biāo)題:?jiǎn)纹瑱C(jī)“花式點(diǎn)燈”實(shí)現(xiàn)方法
文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
瑞薩RA8D1單片機(jī)IO中斷配置實(shí)現(xiàn)方法

使用單片機(jī)實(shí)現(xiàn)直流電機(jī)的PWM調(diào)速控制原理圖
上位機(jī)如何實(shí)現(xiàn)發(fā)送參數(shù)給單片機(jī),單片機(jī)保存接收的參數(shù)重復(fù)運(yùn)行指定的功能
單片機(jī)調(diào)試常見問(wèn)題與解決方法
如何實(shí)現(xiàn)51單片機(jī)與PC機(jī)的串行通信
單片機(jī)怎么寫入程序
單片機(jī)的中斷機(jī)制
單片機(jī)基本io功能調(diào)試過(guò)程
單片機(jī)燒錄程序用什么軟件
單片機(jī)燒錄程序的線比單片機(jī)上的少還能燒錄嗎
單片機(jī)燒錄程序的基本步驟是什么
提高M(jìn)SP430G系列單片機(jī)的Flash擦寫壽命的方法

單片機(jī)boot0和boot1怎么設(shè)置
單片機(jī)中的幾種環(huán)形緩沖區(qū)的分析和實(shí)現(xiàn)

藍(lán)牙模塊如何實(shí)現(xiàn)單片機(jī)和手機(jī)端數(shù)據(jù)互傳

評(píng)論