RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

單片機(jī)項(xiàng)目中LED的重要性

jf_pJlTbmA9 ? 來(lái)源:jf_pJlTbmA9 ? 作者:jf_pJlTbmA9 ? 2023-09-18 16:19 ? 次閱讀

很多初學(xué)者覺(jué)得自己學(xué)的東西很基礎(chǔ),擔(dān)心今后實(shí)際工作用不到。有初學(xué)者問(wèn)了這樣的問(wèn)題:單片機(jī)真正開(kāi)發(fā)產(chǎn)品和學(xué)習(xí)的時(shí)候有什么差別,平時(shí)學(xué)的LED、ADC這些東西,在實(shí)際項(xiàng)目中會(huì)用到嗎?

雖然技術(shù)更新迭代很快,但有很多基本的技術(shù),仍然在實(shí)際項(xiàng)目中會(huì)用到,今天就拿LED為例來(lái)說(shuō)說(shuō)吧。

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)目中很常見(jiàn)。

拿狀態(tài)指示燈來(lái)說(shuō),一個(gè)項(xiàng)目的LED狀態(tài)指示燈可以直觀明了的指示設(shè)備的運(yùn)行狀態(tài),比如:運(yùn)行、故障、待機(jī)、死機(jī)等常見(jiàn)狀態(tài)。通過(guò)RGB,或者紅黃綠不同顏色LED組合,可以實(shí)現(xiàn)更多狀態(tài)的指示。

下面針對(duì)LED狀態(tài)燈,說(shuō)幾點(diǎn)細(xì)節(jié)的內(nèi)容。

LED狀態(tài)燈實(shí)現(xiàn)

這里結(jié)合代碼為大家分享一些項(xiàng)目中常見(jiàn)的LED狀態(tài)燈的實(shí)現(xiàn)方法。

1、單色LED運(yùn)行狀態(tài)指示燈

通過(guò)閃爍(一亮一滅)指示設(shè)備運(yùn)行的狀態(tài)的指示燈,一個(gè)關(guān)鍵作用:設(shè)備有沒(méi)有死機(jī)。

很多產(chǎn)品中都會(huì)用到,你買一個(gè)開(kāi)發(fā)板,提供的綜合例程也基本都有。

裸機(jī)情況下(一般狀態(tài)機(jī)),在某一個(gè)狀態(tài)實(shí)現(xiàn)LED閃爍:

int main(void) { //系統(tǒng)初始化 while(1) { //do something 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) { static TickType_t xLastWakeTime; //初始化 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漸變的專有芯片。

但是,對(duì)于單片機(jī)項(xiàng)目來(lái)說(shuō),單片機(jī)自身就能實(shí)現(xiàn),如果單獨(dú)用一個(gè)芯片,就顯得有點(diǎn)多余。

使用DAC輸出模擬量可以實(shí)現(xiàn),但如果多路就不現(xiàn)實(shí),因此這種方法不常見(jiàn)。

常見(jiàn)的是PWM控制IO高低電平(從而控制電壓),這種對(duì)于單片機(jī)來(lái)說(shuō)有兩種方法:

定時(shí)器硬件PWM

控制GPIO口高低電平

a、定時(shí)器硬件PWM

一個(gè)定時(shí)器輸出PWM波形的同時(shí),還需要一個(gè)定時(shí)器定時(shí)更新PWM輸出占空比(修改亮度)。

b、控制GPIO口高低電平

這個(gè)方法就比較簡(jiǎn)單,控制IO口高低電平時(shí)間,只是這個(gè)時(shí)間需要結(jié)合整個(gè)項(xiàng)目業(yè)務(wù)邏輯(特別是裸機(jī)情況下),不能出現(xiàn)“卡機(jī)”情況。

當(dāng)然,在RTOS情況下,業(yè)務(wù)邏輯就比較簡(jiǎn)單,單獨(dú)一個(gè)線程:

LED_ON(); vTaskDelay(TimesON); LED_OFF(); vTaskDelay(TimesOFF);

這里TimesON 和 TimesOFF是需要結(jié)合項(xiàng)目情況修改的變量(比如漸變時(shí)間)。

3、多色LED,多種運(yùn)行狀態(tài)

一個(gè)設(shè)備在沒(méi)有顯示屏指示狀態(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) { static TickType_t xLastWakeTime; 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è)模塊,但是,如果針對(duì)莫個(gè)人設(shè)計(jì)一塊LED的產(chǎn)品,那就意義非凡了。

wKgaomUD9YOAZHufAAQgzNBWJLU314.png

上面這種,相信很多暖(zhi)男都做過(guò),就是不知道,最終那個(gè)女孩子感動(dòng)了沒(méi)有?如果感動(dòng)了,那這個(gè)LED項(xiàng)目就是一生中非常重要的項(xiàng)目。

審核編輯:彭菁

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    242

    文章

    23252

    瀏覽量

    660558
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6035

    文章

    44554

    瀏覽量

    634629
  • 顯示屏
    +關(guān)注

    關(guān)注

    28

    文章

    4483

    瀏覽量

    74238
  • adc
    adc
    +關(guān)注

    關(guān)注

    98

    文章

    6495

    瀏覽量

    544461
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Syncer模塊的重要性是什么?

    我在我的項(xiàng)目中使用25G以太網(wǎng)IP。通過(guò)打開(kāi)此IP的示例設(shè)計(jì),我們可以看到許多SYNCER模塊,一個(gè)FSM模塊和一個(gè)流量生成器模塊。我想問(wèn)一下這些Syncer模塊的重要性是什么,我是否需要在我的最終設(shè)計(jì)中使用所有syncer模塊。
    發(fā)表于 05-18 09:25

    代碼規(guī)范的重要性是什么

    論代碼規(guī)范的重要性
    發(fā)表于 05-19 13:07

    STM32F4時(shí)鐘樹(shù)的重要性

    STM32F4時(shí)鐘樹(shù)時(shí)鐘是單片機(jī)的心臟,重要性不言而喻,STM32F4的時(shí)鐘樹(shù)是比較復(fù)雜的,所以不是一言兩語(yǔ)能寫清楚的,我只簡(jiǎn)單的描述下時(shí)鐘來(lái)源,詳細(xì)知識(shí)需要去看正點(diǎn)原子的視頻講解。整個(gè)時(shí)鐘來(lái)源有五
    發(fā)表于 08-11 07:40

    時(shí)鐘對(duì)于單片機(jī)重要性

    時(shí)鐘對(duì)于單片機(jī)來(lái)說(shuō)是非常重要的,它為單片機(jī)工作提供一個(gè)穩(wěn)定的機(jī)器周期從而使系統(tǒng)能夠正常運(yùn)行。時(shí)鐘系統(tǒng)猶如人的心臟,一旦有問(wèn)題整個(gè)系統(tǒng)就崩潰。我們知道STM32屬于高級(jí)單片機(jī),其內(nèi)部有很
    發(fā)表于 08-12 06:18

    時(shí)鐘的重要性

    什么是時(shí)鐘?時(shí)鐘是單片機(jī)運(yùn)行的基礎(chǔ),時(shí)鐘信號(hào)推動(dòng)單片機(jī)內(nèi)各個(gè)部分執(zhí)行相應(yīng)的指令。時(shí)鐘系統(tǒng)就是CPU的脈搏,決定cpu速率,像人的心跳一樣 只有有了心跳,人才能做其他的事情,而單片機(jī)有了時(shí)鐘,才能夠
    發(fā)表于 08-13 07:31

    Keil5創(chuàng)建51單片機(jī)項(xiàng)目中CPU顯示為空怎么解決?

    Keil5創(chuàng)建51單片機(jī)項(xiàng)目中CPU顯示為空怎么解決?
    發(fā)表于 10-09 08:38

    單片機(jī)中斷的重要性

    單片機(jī)中斷有什么作用打個(gè)比方,你在房間看書(shū),看書(shū)這個(gè)事是持久的,拖延幾分鐘也沒(méi)事。突然淘寶買的衣服送到了,鏢局的人敲門,你用書(shū)簽做好標(biāo)記去開(kāi)門。拿回衣服,回去繼續(xù)看書(shū)。這個(gè)事的發(fā)生過(guò)程很正常。同樣
    發(fā)表于 11-26 07:34

    arm匯編的重要性是什么?

    arm匯編的重要性是什么?
    發(fā)表于 11-30 08:03

    單片機(jī)精確計(jì)時(shí)的重要性

    的。小到手機(jī),大到汽車飛機(jī),現(xiàn)在幾乎只要是電子器件,就有單片機(jī)的身影。精確計(jì)時(shí)的重要性傳感器能夠感知外界環(huán)境,可以說(shuō)是一切智能機(jī)器的基礎(chǔ)。實(shí)際工程中,常常使用單片機(jī)或者控制傳感器工作,或者采集傳感器的...
    發(fā)表于 12-07 13:18

    led單片機(jī)應(yīng)用中的重要性

    很多初學(xué)者覺(jué)得自己學(xué)的東西很基礎(chǔ),擔(dān)心今后實(shí)際工作用不到。有初學(xué)者問(wèn)了這樣的問(wèn)題:單片機(jī)真正開(kāi)發(fā)產(chǎn)品和學(xué)習(xí)的時(shí)候有什么差別,平時(shí)學(xué)的LED、ADC這些東西,在實(shí)際項(xiàng)目中會(huì)用到嗎?雖然技術(shù)更...
    發(fā)表于 02-23 07:09

    單片機(jī)程序架構(gòu)之時(shí)間輪片法程序架構(gòu)重要性解析

    單片機(jī)程序架構(gòu)—時(shí)間輪片法程序架構(gòu)重要性很多人尤其是初學(xué)者在寫代碼的時(shí)候往往都是想一點(diǎn)寫一點(diǎn),最開(kāi)始沒(méi)有一個(gè)整體的規(guī)劃,導(dǎo)致后面代碼越寫越亂,bug不斷。最終代碼跑起來(lái)看似沒(méi)有問(wèn)題(有可能也真的
    發(fā)表于 02-24 06:52

    單片機(jī)LED有哪些作用

    ? ? 很多初學(xué)者覺(jué)得自己學(xué)的東西很基礎(chǔ),擔(dān)心今后實(shí)際工作用不到。有初學(xué)者問(wèn)了這樣的問(wèn)題: 單片機(jī)真正開(kāi)發(fā)產(chǎn)品和學(xué)習(xí)的時(shí)候有什么差別,平時(shí)學(xué)的LED、ADC這些東西,在實(shí)際項(xiàng)目中會(huì)用到嗎? ? 雖然
    的頭像 發(fā)表于 11-16 15:13 ?5621次閱讀

    Keil5創(chuàng)建51單片機(jī)項(xiàng)目中CPU顯示為空

    Keil5創(chuàng)建51單片機(jī)項(xiàng)目中CPU顯示為空
    發(fā)表于 11-23 16:36 ?12次下載
    Keil5創(chuàng)建51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>項(xiàng)目中</b>CPU顯示為空

    單片機(jī)項(xiàng)目中LED重要性~

    很多初學(xué)者覺(jué)得自己學(xué)的東西很基礎(chǔ),擔(dān)心今后實(shí)際工作用不到。有初學(xué)者問(wèn)了這樣的問(wèn)題:單片機(jī)真正開(kāi)發(fā)產(chǎn)品和學(xué)習(xí)的時(shí)候有什么差別,平時(shí)學(xué)的LED、ADC這些東西,在實(shí)際項(xiàng)目中會(huì)用到嗎?雖然技術(shù)更...
    發(fā)表于 12-29 19:28 ?2次下載
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>項(xiàng)目中</b><b class='flag-5'>LED</b>的<b class='flag-5'>重要性</b>~

    串口在單片機(jī)中的重要性

    剛開(kāi)始學(xué)單片機(jī)的你,是不是會(huì)因用程序把LED點(diǎn)亮而感到高興,會(huì)因用程序把數(shù)碼管點(diǎn)亮而感到高興。這是好事,這也是想繼續(xù)學(xué)習(xí)下去的動(dòng)力。
    的頭像 發(fā)表于 07-14 16:14 ?1999次閱讀
    RM新时代网站-首页