91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

單片機(jī)“花式點(diǎn)燈”實(shí)現(xiàn)方法

strongerHuang ? 來源:strongerHuang ? 2023-01-15 14:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

有初學(xué)者問了這樣的問題:單片機(jī)真正開發(fā)產(chǎn)品和學(xué)習(xí)的時(shí)候有什么差別,平時(shí)學(xué)的LED、ADC這些東西,在實(shí)際項(xiàng)目中會(huì)用到嗎? 雖然技術(shù)更新迭代很快,但有很多基本的技術(shù),仍然在實(shí)際項(xiàng)目中會(huì)用到,今天就拿LED為例來說說吧。

LED有哪些作用

別小看LED,它在實(shí)際生活中應(yīng)用很廣泛的。 首先就是以LED為光源的項(xiàng)目,比如呼吸燈、廣告燈、LED顯示屏等,這類控制LED亮滅(閃爍),或者亮度漸變。 再次就是LED背光燈,像液晶燈、按鍵等,這種也是需要控制LED變化的。我做過有按鍵的項(xiàng)目,按鍵背光燈需要漸變、配合音效控制LED不同頻率閃爍,目的就是為了達(dá)到更好的體驗(yàn)效果。 再再次,LED作為指示燈,電源指示燈、狀態(tài)指示燈,這種就和接近初學(xué)者的學(xué)習(xí)時(shí)的LED燈,但這種卻在項(xiàng)目中很常見。354d71ee-9471-11ed-bfe3-dac502259ad0.gif ?拿狀態(tài)指示燈來說,一個(gè)項(xiàng)目的LED狀態(tài)指示燈可以直觀明了的指示設(shè)備的運(yùn)行狀態(tài),比如:運(yùn)行、故障、待機(jī)、死機(jī)等常見狀態(tài)。通過RGB,或者紅黃綠不同顏色LED組合,可以實(shí)現(xiàn)更多狀態(tài)的指示。 下面針對(duì)LED狀態(tài)燈,說幾點(diǎn)細(xì)節(jié)的內(nèi)容。

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

這里結(jié)合代碼為大家分享一些項(xiàng)目中常見的LED狀態(tài)燈的實(shí)現(xiàn)方法。 1.單色LED運(yùn)行狀態(tài)指示燈通過閃爍(一亮一滅)指示設(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í)原來也很簡單,就是控制LED亮度。 控制方法有很多,電壓、PWM都能達(dá)到控制LED亮度的效果。當(dāng)然,現(xiàn)在還有控制LED漸變的專有芯片。355d5f32-9471-11ed-bfe3-dac502259ad0.gif ?但是,對(duì)于單片機(jī)項(xiàng)目來說,單片機(jī)自身就能實(shí)現(xiàn),如果單獨(dú)用一個(gè)芯片,就顯得有點(diǎn)多余。 使用DAC輸出模擬量可以實(shí)現(xiàn),但如果多路就不現(xiàn)實(shí),因此這種方法不常見。 常見的是PWM控制IO高低電平(從而控制電壓),這種對(duì)于單片機(jī)來說有兩種方法: a.定時(shí)器硬件PWM一個(gè)定時(shí)器輸出PWM波形的同時(shí),還需要一個(gè)定時(shí)器定時(shí)更新PWM輸出占空比(修改亮度)。 b.控制GPIO口高低電平這個(gè)方法就比較簡單,控制IO口高低電平時(shí)間,只是這個(gè)時(shí)間需要結(jié)合整個(gè)項(xiàng)目業(yè)務(wù)邏輯(特別是裸機(jī)情況下),不能出現(xiàn)“卡機(jī)”情況。 當(dāng)然,在RTOS情況下,業(yè)務(wù)邏輯就比較簡單,單獨(dú)一個(gè)線程:
LED_ON();
vTaskDelay(TimesON);


LED_OFF();
vTaskDelay(TimesOFF);

這里TimesONTimesOFF是需要結(jié)合項(xiàng)目情況修改的變量(比如漸變時(shí)間)。 3.多色LED,多種運(yùn)行狀態(tài)一個(gè)設(shè)備在沒有顯示屏指示狀態(tài)的時(shí)候,通過LED指示狀態(tài)也是一種方法,比如:紅、黃、綠三色,分別常滅、常亮、閃爍三種狀態(tài)。 這種相對(duì)第一種單色固定狀態(tài)要復(fù)雜一點(diǎn),但實(shí)現(xiàn)起來也不難,方法也有很多。 這里分享一些思路:創(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ù)通過傳遞結(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)和方法,相信做過這一塊的同學(xué)就比較了解。 當(dāng)然,LED在項(xiàng)目中是微不足道的一個(gè)模塊,但要做到兼容項(xiàng)目,又方便移植、又可刪減增加功能,其實(shí)也不是想象的那么簡單。

審核編輯 :李倩


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

    關(guān)注

    243

    文章

    24617

    瀏覽量

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

    關(guān)注

    6076

    文章

    45501

    瀏覽量

    670803
  • 光源
    +關(guān)注

    關(guān)注

    3

    文章

    792

    瀏覽量

    71354

原文標(biāo)題:單片機(jī)“花式點(diǎn)燈”實(shí)現(xiàn)方法

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    學(xué)習(xí)單片機(jī)快速方法

    學(xué)習(xí)單片機(jī)的快速方法 先介紹下單片機(jī)。把單片機(jī)說成是電子信息類專業(yè)最重要的一門課程一點(diǎn)也不為過,你在街上看到的廣告彩燈、煙花表演、紅綠燈、自動(dòng)開關(guān)門這些都可以用
    發(fā)表于 01-14 07:42

    單片機(jī)系統(tǒng)設(shè)計(jì)方法

    現(xiàn)階段,單片機(jī)系統(tǒng)在軍事、民用、工業(yè)產(chǎn)品中的應(yīng)用越來越廣泛.其硬件實(shí)現(xiàn)的功能是由軟件來完成,體積小巧、功能豐富、智能化程度高,而單片機(jī)最為顯著的特點(diǎn)是進(jìn)行數(shù)據(jù)采集由于各個(gè)產(chǎn)業(yè)的急速發(fā)展,數(shù)據(jù)采集技術(shù)
    發(fā)表于 01-06 06:23

    單片機(jī)的入門準(zhǔn)備

    、修改例程,以學(xué)習(xí)板為載體,自己新建編程工程,用自己的編程思想讓外設(shè)電路實(shí)現(xiàn)想要的功能,程序是靈活的,每個(gè)人都有不同的編程思想,多試幾種方法,提高程序的執(zhí)行效率,鍛煉自己的編程能力; 單片機(jī)進(jìn)階篇
    發(fā)表于 12-22 07:39

    單片機(jī)系統(tǒng)硬件的調(diào)試方法

    單片機(jī)的系統(tǒng)硬件調(diào)試,通常有靜態(tài)調(diào)試和動(dòng)態(tài)調(diào)試兩種不同,前者是通過目測(cè)、萬能表測(cè)試、加電檢查、聯(lián)機(jī)檢查的方法,在加電于樣機(jī)之前.對(duì)樣機(jī)的型號(hào)規(guī)格,以及安裝要求等進(jìn)行核對(duì),同時(shí)檢查 電源 系統(tǒng).防止
    發(fā)表于 12-03 06:10

    浮思特 | 智能洗衣背后的靜默力量,ABOV單片機(jī)如何實(shí)現(xiàn)精準(zhǔn)控制?

    ABOV(現(xiàn)代單片機(jī))的長期合作代理商,浮思特科技希望通過本次技術(shù)分享,讓大家了解ABOV單片機(jī)在洗衣機(jī)控制中的關(guān)鍵技術(shù)實(shí)現(xiàn)。現(xiàn)代洗衣機(jī)是一
    的頭像 發(fā)表于 10-16 09:52 ?575次閱讀
    浮思特 | 智能洗衣背后的靜默力量,ABOV<b class='flag-5'>單片機(jī)</b>如何<b class='flag-5'>實(shí)現(xiàn)</b>精準(zhǔn)控制?

    第1章 如何學(xué)習(xí)單片機(jī)

    ? 在錯(cuò)誤的道路上日夜兼程,最終也無法成功,方法和思路絕對(duì)是最重要的。本章節(jié)講到的學(xué)習(xí)單片機(jī)方法,都是作者學(xué)習(xí)單片機(jī)的無數(shù)經(jīng)驗(yàn)和教訓(xùn)總結(jié)出來的瑰寶。通過作者前面的披荊斬棘,開辟了道路
    的頭像 發(fā)表于 10-10 10:32 ?537次閱讀

    什么單片機(jī)比較耐用

    ? ? ? ? 在工業(yè)控制、戶外設(shè)備、醫(yī)療儀器等場(chǎng)景中,單片機(jī)的耐用性直接決定了設(shè)備的穩(wěn)定運(yùn)行與維護(hù)成本。耐用的單片機(jī)通常具備寬溫工作范圍、強(qiáng)抗干擾能力、穩(wěn)定的電源適應(yīng)性和長壽命的硬件設(shè)計(jì)。深圳市安
    的頭像 發(fā)表于 07-31 13:48 ?790次閱讀

    單片機(jī)采用什么電流輸出

    單片機(jī)的電流輸出特性與其內(nèi)部電路設(shè)計(jì)和應(yīng)用場(chǎng)景密切相關(guān),既包含自身工作時(shí)的微弱電流,也涉及通過外部電路擴(kuò)展后的驅(qū)動(dòng)電流。了解單片機(jī)的電流輸出特點(diǎn),是實(shí)現(xiàn)穩(wěn)定控制外部設(shè)備的基礎(chǔ)。 單片機(jī)
    的頭像 發(fā)表于 07-30 11:13 ?1113次閱讀

    單片機(jī)怎么控制轉(zhuǎn)速

    ? ? ? ?在工業(yè)自動(dòng)化、智能家居、機(jī)器人等領(lǐng)域,單片機(jī)控制電機(jī)轉(zhuǎn)速是實(shí)現(xiàn)精準(zhǔn)運(yùn)動(dòng)控制的核心技術(shù)。通過結(jié)合硬件電路設(shè)計(jì)與軟件算法優(yōu)化,單片機(jī)可根據(jù)不同應(yīng)用場(chǎng)景靈活調(diào)整電機(jī)轉(zhuǎn)速。以下從控制方法
    的頭像 發(fā)表于 07-25 13:58 ?983次閱讀

    怎么測(cè)單片機(jī)系統(tǒng)頻率

    單片機(jī)系統(tǒng)頻率是指單片機(jī)工作時(shí)的時(shí)鐘頻率,它直接影響單片機(jī)的運(yùn)行速度和處理能力,準(zhǔn)確測(cè)量系統(tǒng)頻率對(duì)單片機(jī)應(yīng)用開發(fā)、程序調(diào)試和性能優(yōu)化具有重要意義。測(cè)量
    的頭像 發(fā)表于 07-25 11:39 ?818次閱讀

    單片機(jī)怎么驅(qū)動(dòng)電機(jī)?

    在各類自動(dòng)化設(shè)備和智能裝置中,電機(jī)是重要的執(zhí)行部件,而單片機(jī)作為控制核心,需要通過特定的方式驅(qū)動(dòng)電機(jī)運(yùn)轉(zhuǎn)。單片機(jī)驅(qū)動(dòng)電機(jī)并非直接連接即可,而是要根據(jù)電機(jī)類型和功率,搭配合適的驅(qū)動(dòng)電路,才能實(shí)現(xiàn)穩(wěn)定
    的頭像 發(fā)表于 07-25 09:31 ?953次閱讀

    單片機(jī)怎么燒程序

    單片機(jī)燒程序是將編寫好的程序代碼寫入單片機(jī)內(nèi)部存儲(chǔ)單元,讓單片機(jī)按照預(yù)設(shè)邏輯工作的過程,是單片機(jī)應(yīng)用開發(fā)中不可或缺的環(huán)節(jié)。無論是簡單的燈光控制程序,還是復(fù)雜的工業(yè)控制算法,都需要通過燒
    的頭像 發(fā)表于 07-23 11:47 ?1372次閱讀

    瑞薩RA8D1單片機(jī)IO中斷配置實(shí)現(xiàn)方法

    本文為結(jié)合瑞薩e2 studio工具,以及CPKCOR_RA8D1B評(píng)估板,給大家講述瑞薩RA8D1單片機(jī)IO中斷配置實(shí)現(xiàn)方法。
    的頭像 發(fā)表于 04-09 15:05 ?1863次閱讀
    瑞薩RA8D1<b class='flag-5'>單片機(jī)</b>IO中斷配置<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>方法</b>

    單片機(jī)科普總結(jié),建議收藏!

    單片機(jī)(MicrocontrollerUnit,MCU)作為嵌入式系統(tǒng)的核心之一,在現(xiàn)代電子產(chǎn)品中無處不在。從智能家居、汽車電子,到工業(yè)控制、醫(yī)療設(shè)備,單片機(jī)支撐著無數(shù)智能化應(yīng)用的發(fā)展。對(duì)于初學(xué)者
    的頭像 發(fā)表于 04-07 11:58 ?5785次閱讀
    <b class='flag-5'>單片機(jī)</b>科普總結(jié),建議收藏!

    瑞薩Cortext-M85內(nèi)核RA8系列單片機(jī)的串口輸出實(shí)現(xiàn)方法

    串口是最常見的通信方式之一,也是單片機(jī)調(diào)試最常見的通信接口,也是現(xiàn)在的單片機(jī)必備的通信接口,目前(2024-05)最新、最強(qiáng)的Cortext-M85內(nèi)核的RA8系列單片機(jī)也不例外。
    的頭像 發(fā)表于 03-21 09:58 ?1890次閱讀
    瑞薩Cortext-M85內(nèi)核RA8系列<b class='flag-5'>單片機(jī)</b>的串口輸出<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>方法</b>