日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

只会用单片机点灯,很丢人吗?

發布時間:2023/12/19 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 只会用单片机点灯,很丢人吗? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

要學嵌入式,關注 ↓↓↓?@我要學嵌入式,嵌入式猛男的加油站。

作者 | strongerHuang

微信公眾號?|?嵌入式專欄

很多初學者覺得自己學的東西很基礎,擔心今后實際工作用不到。有初學者問了這樣的問題:單片機真正開發產品和學習的時候有什么差別,平時學的LED、ADC這些東西,在實際項目中會用到嗎?

雖然技術更新迭代很快,但有很多基本的技術,仍然在實際項目中會用到,今天就拿LED為例來說說吧。

01?

LED有哪些作用?

別小看LED,它在實際生活中應用很廣泛的。

首先就是以LED為光源的項目,比如呼吸燈、廣告燈、LED顯示屏等,這類控制LED亮滅(閃爍),或者亮度漸變。

再次就是LED背光燈,像液晶背光燈、按鍵背光燈等,這種也是需要控制LED變化的。我之前做過有按鍵的項目,按鍵背光燈需要漸變、配合音效控制LED不同頻率閃爍,目的就是為了達到更好的體驗效果。

再再次,LED作為指示燈,電源指示燈、狀態指示燈,這種就和接近初學者的學習時的LED燈,但這種卻在項目中很常見。

拿狀態指示燈來說,一個項目的LED狀態指示燈可以直觀明了的指示設備的運行狀態,比如:運行、故障、待機、死機等常見狀態。通過RGB,或者紅黃綠不同顏色LED組合,可以實現更多狀態的指示。

下面針對LED狀態燈,說幾點細節的內容。

02?

LED狀態燈的實現

這里結合代碼為大家分享一些項目中常見的LED狀態燈的實現方法。

1.單色LED運行狀態指示燈

通過閃爍(一亮一滅)指示設備運行的狀態的指示燈,一個關鍵作用:設備有沒有死機

很多產品中都會用到,你買一個開發板,提供的綜合例程也基本都有。

裸機情況下(一般狀態機),在某一個狀態實現LED閃爍:

int main(void) {//系統初始化while(1){//do?somethingswitch(State){case 狀態1://do somethingbreak;case 狀態2://do somethingbreak;···case 狀態燈:ED_TOGGLE(); //LED閃爍break;}} }

RTOS情況下,新建一個狀態燈線程,在線程里面直接控制即可:

?

void StatusLight_Task(void *pvParameters) {static?TickType_t?xLastWakeTime;?//初始化xLastWakeTime?=?xTaskGetTickCount();for(;;){//do?somethingLED_TOGGLE(); //LED閃爍vTaskDelayUntil(&xLastWakeTime, 500);} }

03?

單色LED漸變

LED漸變在生活中其實也有一些場景在用,呼吸燈、鍵盤等,其實原來也很簡單,就是控制LED亮度。

控制方法有很多,電壓、PWM都能達到控制LED亮度的效果。當然,現在還有控制LED漸變的專有芯片。

但是,對于單片機項目來說,單片機自身就能實現,如果單獨用一個芯片,就顯得有點多余。

使用DAC輸出模擬量可以實現,但如果多路就不現實,因此這種方法不常見。

常見的是PWM控制IO高低電平(從而控制電壓),這種對于單片機來說有兩種方法:

  • 定時器硬件PWM

  • 控制GPIO口高低電平

a.定時器硬件PWM

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

b.控制GPIO口高低電平

這個方法就比較簡單,控制IO口高低電平時間,只是這個時間需要結合整個項目業務邏輯(特別是裸機情況下),不能出現“卡機”情況。

當然,在RTOS情況下,業務邏輯就比較簡單,單獨一個線程:

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

這里TimesON?和?TimesOFF是需要結合項目情況修改的變量(比如漸變時間)。

04?

多色LED,多種運行狀態

一個設備在沒有顯示屏指示狀態的時候,通過LED指示狀態也是一種方法,比如:紅、黃、綠三色,分別常滅、常亮、閃爍三種狀態。

這種相對第一種單色固定狀態要復雜一點,但實現起來也不難,方法也有很多。

這里分享一些思路:創建一個線程,一個結構體,輪詢各種LED狀態,根據應用修改其各種狀態,以及閃爍時間等。

LED狀態結構體:

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; /* 狀態燈 */

LED狀態主線程:

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);} }

這里結構體也是方便統一管理,其中SL_Scan瀏覽(掃描)函數的參數通過傳遞結構體指針,是為了方便讀取并修改其中變量。

當然,SL_Scan 瀏覽函數具體實現,就與你應用有關:

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(); //滅燈} }

05?

最后

以上的控制LED的狀態,其實是一個項目中很小的一個模塊,還有更復雜的LED實現和控制方法,相信做過這一塊的同學就比較了解。

當然,LED在項目中是微不足道的一個模塊,但是,如果針對莫個人設計一塊LED的產品,那就意義非凡了。

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

-END-

對了,前兩天在小號做了個抽獎,送20份禮品,11月1號開獎,沒有參與的朋友可以參與一波。

NUCLEO-U575ZI-Q?開發板?*?1塊 電烙鐵焊臺套件 * 1套 焊槍 * 2份 萬用表 * 4份 藍牙耳機 * 2份 保溫杯 * 2份 Type-C快充頭 * 4份 無線鼠標* 4份

關注回復【STM32U5】,即可參與。字母都是大寫哦。

猛男學嵌入式,關注@我要學嵌入式,嵌入式男人的加油站。

總結

以上是生活随笔為你收集整理的只会用单片机点灯,很丢人吗?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。