0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机中LED有哪些作用

Q4MP_gh_c472c21 来源:嵌入式专栏 作者:strongerHuang 2021-11-16 15:13 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

很多初学者觉得自己学的东西很基础,担心今后实际工作用不到。有初学者问了这样的问题:单片机真正开发产品和学习的时候有什么差别,平时学的LEDADC这些东西,在实际项目中会用到吗? 虽然技术更新迭代很快,但有很多基本的技术,仍然在实际项目中会用到,今天就拿LED为例来说说吧。

01

LED有哪些作用?

别小看LED,它在实际生活中应用很广泛的。

首先就是以LED为光源的项目,比如呼吸灯、广告灯、LED显示屏等,这类控制LED亮灭(闪烁),或者亮度渐变。

其次是LED背光灯,像液晶背光灯、按键背光灯等,这种也是需要控制LED变化的。我之前做过有按键的项目,按键背光灯需要渐变、配合音效控制LED不同频率闪烁,目的就是为了达到更好的体验效果。

再次是LED作为指示灯电源指示灯、状态指示灯,这种就和接近初学者的学习时的LED灯,但这种却在项目中很常见。

拿状态指示灯来说,一个项目的LED状态指示灯可以直观明了的指示设备的运行状态,比如:运行、故障、待机、死机等常见状态。通过RGB,或者红黄绿不同颜色LED组合,可以实现更多状态的指示。

下面针对LED状态灯,说几点细节的内容。

02

LED状态灯的实现

这里结合代码为大家分享一些项目中常见的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;    }  }}
RTOS情况下,新建一个状态灯线程,在线程里面直接控制即可:

void StatusLight_Task(void *pvParameters){staticTickType_txLastWakeTime;//初始化xLastWakeTime=xTaskGetTickCount();  for(;;){//dosomething    LED_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);
这里TimesONTimesOFF是需要结合项目情况修改的变量(比如渐变时间)。

04

多色LED,多种运行状态

一个设备在没有显示屏指示状态的时候,通过LED指示状态也是一种方法,比如:红、黄、绿三色,分别常灭、常亮、闪烁三种状态。

这种相对第一种单色固定状态要复杂一点,但实现起来也不难,方法也有很多。

这里分享一些思路:创建一个线程,一个结构体,轮询各种LED状态,根据应用修改其各种状态,以及闪烁时间等。

LED状态结构体:

typedef struct{uint8_tMode;//模式  uint8_t  Status;                //当前状态  uint16_t OffTimes;              //灭时间  uint16_t OnTimes;               //亮时间(ms)uint16_tCounter;//计数(计时)  void (*OffFun)(void);           //灭函数接口  void (*OnFun)(void);            //亮函数接口}SL_TypeDef;/* 状态灯 */

LED状态主线程:

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

这里结构体也是方便统一管理,其中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项目就是一生中非常重要的项目。

责任编辑:haq


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    243

    文章

    24434

    浏览量

    687347
  • 单片机
    +关注

    关注

    6074

    文章

    45340

    浏览量

    663400
  • 光源
    +关注

    关注

    3

    文章

    779

    浏览量

    71100

原文标题:只会用单片机点灯,很丢人吗?

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    单片机学习的8个知识点分享

    能力,以驱动较大的负载。 2、LED串联电阻的计算 单片机基本上使用LED作为输出指示,而LED串联电阻的作用是限制电流,保护
    发表于 11-20 07:58

    什么单片机比较耐用

            在工业控制、户外设备、医疗仪器等场景单片机的耐用性直接决定了设备的稳定运行与维护成本。耐用的单片机通常具备宽温工作范围、强抗干扰能力、稳定的电源适应性和长寿命的硬件设计。深圳市安
    的头像 发表于 07-31 13:48 545次阅读

    单片机什么特点

    单片机作为嵌入式系统的核心部件,凭借独特的技术特性在电子设备占据不可替代的地位。其设计理念融合了微型化、低功耗与高集成度,能够适应从简单控制到复杂数据处理的多样化需求,这些特点使其在各行各业
    的头像 发表于 07-28 11:34 736次阅读

    怎么测单片机系统频率

    单片机系统频率是指单片机工作时的时钟频率,它直接影响单片机的运行速度和处理能力,准确测量系统频率对单片机应用开发、程序调试和性能优化具有重要意义。测量
    的头像 发表于 07-25 11:39 473次阅读

    单片机怎么驱动电机?

    在各类自动化设备和智能装置,电机是重要的执行部件,而单片机作为控制核心,需要通过特定的方式驱动电机运转。单片机驱动电机并非直接连接即可,而是要根据电机类型和功率,搭配合适的驱动电路,才能实现稳定
    的头像 发表于 07-25 09:31 438次阅读

    单片机怎么烧程序

    单片机烧程序是将编写好的程序代码写入单片机内部存储单元,让单片机按照预设逻辑工作的过程,是单片机应用开发不可或缺的环节。无论是简单的灯光控
    的头像 发表于 07-23 11:47 649次阅读

    单片机各种复位电路原理

    内的施密特触发器的。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。单片机系统的复位方式:手动按钮
    发表于 05-30 16:53

    单片机和伺服什么区别

    单片机和伺服的区别 单片机(Microcontroller)和伺服(Servo System)是两种完全不同的技术概念,分别属于 控制系统硬件 和 运动控制执行系统 。以下是它们的详细对比和区别
    的头像 发表于 05-26 09:18 576次阅读

    PLC和单片机到底什么区别?

    在自动化和嵌入式开发领域,PLC和单片机是两种常见的控制系统。虽然它们许多相似之处,但它们的功能、应用范围、开发成本等方面也存在显著差异。本文将从多个角度详细探讨这两者的不同之处,帮助大家更好地理
    的头像 发表于 04-07 11:58 4623次阅读
    PLC和<b class='flag-5'>单片机</b>到底<b class='flag-5'>有</b>什么区别?

    单片机科普总结,建议收藏!

    单片机(MicrocontrollerUnit,MCU)作为嵌入式系统的核心之一,在现代电子产品无处不在。从智能家居、汽车电子,到工业控制、医疗设备,单片机支撑着无数智能化应用的发展。对于初学者
    的头像 发表于 04-07 11:58 4454次阅读
    <b class='flag-5'>单片机</b>科普总结,建议收藏!

    Freescale单片机的特点哪些

    成本,使其在激烈的市场竞争脱颖而出。更为难得的是,该系列单片机配备了丰富多样的集成模块以及灵活多变的总线接口,恰似为开发者提供了一套功能完备的 “万能工具箱”,无论置身何种复杂系统环境,都能游刃有余地施展拳脚,轻松应对各种技
    的头像 发表于 02-04 17:49 1068次阅读

    单片机中断技术详解

    在现代电子设备单片机作为控制核心发挥着举足轻重的作用。而在其高效运作的背后,中断机制是推动单片机实现实时响应与高效执行的关键因素。本文将深入探讨
    的头像 发表于 02-02 15:57 1432次阅读

    单片机在电子技术的应用及发展

    其在实现设备智能化、微型化和功能提升方面的重要作用。接着,探讨了单片机技术的最新发展动态,如片内存储器的改进、在线编程技术的应用以及接口技术的发展等,为单片机技术的未来发展提供了方向。 关键词 :
    的头像 发表于 01-15 10:30 1275次阅读

    AFE4400的30管脚CLKOUT什么作用,他需要和单片机相连吗?连接到哪?

    AFE4400的30管脚CLKOUT什么作用,他需要和单片机相连吗?连接到哪?
    发表于 12-31 08:32

    单片机Debug工具性能对比 单片机调试常用命令

    单片机(Microcontroller Unit, MCU)调试是嵌入式开发的一个重要环节,它帮助开发者发现和修复代码的错误,优化程序性能。不同的单片机和开发环境可能使用不同的调试
    的头像 发表于 12-19 09:56 2161次阅读