前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >没错,单片机写出那些你没点过的灯

没错,单片机写出那些你没点过的灯

作者头像
单片机技术宅
发布2022-11-22 15:27:59
5570
发布2022-11-22 15:27:59
举报
文章被收录于专栏:初学单片机初学单片机

很多初学者都觉得自己学的东西很基础,担心今后实际工作用不到。于是,有初学者提出这样的问题:单片机真正开发产品和学习的时候有什么差别?平时学的LED、ADC这些东西,在实际项目中会用到吗?

虽然技术更新迭代很快,但有很多基本的技术,仍然在实际项目中会用到,今天就拿LED为例来说说吧。

01

身边的LED‍

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

首先就是以LED为光源的项目,比如呼吸灯、广告灯、LED显示屏等,这类控制LED亮灭(闪烁),或者亮度渐变。在或者现在的照明用的光源,基本都是LED灯光源,要完成一个无频闪的光源,还是没想象的那么容易的。

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

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

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

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

02

LED状态灯的实现‍

这里结合代码为大家分享一些项目中常见的LED状态灯的实现方法。

单色LED运行状态指示灯:

通过闪烁(一亮一灭)指示设备运行的状态的指示灯,一个关键作用:设备有没有死机。还可以通过闪烁的快慢指示一些特殊的状态,比如蓝牙在搜索连接状态下为快闪,在已连接状态为慢闪,等等的情况。

很多产品中都会用到,你买一个开发板,提供的综合例程也基本都有。在某一个状态实现LED闪烁:

代码语言:javascript
复制
int main(void){  //系统初始化 
     while(1)  {    //do something    
         switch(State)    {      
             case 状态1:  break;       //do something      
             case 状态2:   break;      //do something      
                  。
                  。
             case 状态灯:ED_TOGGLE();        //LED闪烁
                                      break;    
           }  
      }
}

03

LED渐变‍

LED渐变在生活中其实也有一些场景在用,呼吸灯、键盘等,其实原来也很简单,就是控制LED亮度。

控制方法有很多,电压、PWM都能达到控制LED亮度的效果。当然,现在还有控制LED渐变的专有芯片。在专门的渐变灯具,或者具有亮度调节功能的灯具中通常会有专门的亮度控制芯片。

但是,对于单片机项目来说,单片机自身就能实现,如果单独用一个芯片,就显得有点多余。目前常见的单片机都是具有PWM功能的,通过PWM控制IO高低电平(从而控制电压),这种对于单片机来说有两种方法,即定时器硬件PWM、控制GPIO口高低电平。

a. 定时器硬件PWM:一个定时器输出PWM波形的同时,还需要一个定时器定时更新PWM输出占空比(修改亮度)。

b. 控制GPIO口高低电平:这个方法就比较简单,控制IO口高低电平时间,只是这个时间需要结合整个项目业务逻辑,不能出现“卡机”情况。

04

LED的变种

前面所说的LED的,在更多的时候都是一个或几个,少量的LED的使用,这样的设计确实简单了很多。会了简单的少量的LED的运用,那在增加大量LED灯数量的情况下呢?其实原理都是一样的,相信大家都能完成。下面就说几个大量LED的使用场景。

相信很多小伙伴都知道,数码管其内部也还是LED灯,只是多个LED组合而成一位或多位的数码管。常见的数码管有七段的或者八段的,其实就是七个或者八个LED组合排列成一个数码管,根据不同的链接方式,还分为共阳和共阴两种。

说完数码管,还有一个大家常见的电子元件是LED点阵,其内部也是由多个LED组成,一块8x8的LED点阵内部由64个LED,通过八行八列的方式排列而成。

还有很多小伙伴都做过的光立方,比如8x8x8的光立方是由8行8列再加上8层组成的一个立方体,一共需要64x8=512个LED组成。

以上说的这些,其实质都是LED,当你会了点一个灯,自然会了点8个灯,慢慢自然会了以上说的这些高级别的点灯。所以不要总觉得点灯简单,也不要总觉得点灯就很low,真要把灯点好了,那也是需要技术的。

05

最后‍

以上的控制LED的状态,其实是一个项目中很小的一个模块,还有更复杂的LED实现和控制方法,相信小伙伴的想法会更具有创意。

当然,LED在项目中是微不足道的一个模块,但是,如果针对某个人设计一块LED的产品,那就意义非凡了,也可以把点灯技术提升到一个更高的档次。

上面这种,相信很多暖(直)男都做过,就是不知道,最终那个女孩子感动了没有?如果感动了,那这个LED项目就是一生中非常重要的项目,其他都是TMD的扯淡。什么高级,什么酷炫都是浮云,唯有那个女孩收到礼物后一笑。

·END·

单片机技术宅

以最简单的方式服务初学者

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 单片机技术宅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档