单片机点灯技巧分析

今天给大家分享一下嵌入式入门之点灯技巧。对于初次接触嵌入式的小伙伴们来说,就像大多人入门要写的第一行C代码都是"hello world !",在实物电路板上干的第一件事就是点个灯,甚至是N个灯。


单片机点灯技巧分析

电路板LED指示灯

用微处理器点亮一个灯在逻辑和操作上对新手来说都是比较容易的,虽然看似简单的一件事,但深究起来也蕴含着不少技巧,在你还没掌握这些技巧之前它们就是一个个的坑,你会有各种各样的困惑,遇见各种各样的问题。

假如要实现指示灯按1S周期闪烁,伪代码如下:

<code>

while

(

1

) { 延时

1S

IO

翻转; }

while

(

1

) {

HAL_Delay

(

1000

);

HAL_GPIO_TogglePin

(GPIOC, GPIO_PIN_7); }/<code>

逻辑看起来相当简单,你要做到两件事:1.实现精确的1S延时时间 2.让微处理相关引脚电平翻转

实现固定延时的方式有很多,首先你要考虑的是自己的微处理器HAL库是否自带延时API,如果有那你很幸运,只需要考虑传入正确的时间参数并正确调用它即可,这样可以省去很多麻烦,例如我在上面HAL_Delay(1000);里面写的是1000,代表1000ms。如果没有现成的API提供,你可以用定时器或者死循环来实现,当然这都得需要示波器大哥的严格把关。

对于操控IO的代码,不管是51也好,还是MSP430、STM32等等微处理器,实现方式都大同小异。另外在软件方面还需要注意的是正确配置IO类型,以免代码逻辑正确,但是灯始终不闪烁,甚至导致单片机死机现象。

分析完代码部分再看一下硬件上的实现,一般LED灯驱动电路如下:


单片机点灯技巧分析

LED经典驱动电路

该电路工作原理是,当控制引脚为高电平时,三极管CE之间导通,相当于开关打开,LED通电形成回路故能发光;当控制引脚为低电平时,三极管截止开关关闭。

其中R1的作用是限制流过LED的电流,当你的灯太暗或者太亮时,可以通过调节该电阻的阻值大小达到你想要的亮度,具体阻值的计算要根据你 LED灯电气特性和供电电压来确定;R2的作用是限制流过三极管B极的电流,这是必须要加的,否则当BE之间导通时会产生很大的电流,从而将管子烧掉,原因是三极管是电流控制型元件;R3是一个下拉电阻,其目的是稳定B极电平,防止三极管在工作中受噪声的影响产生误动作,尤其是单片机刚上电时IO状态不稳定,最好不要省略。

另外有些小伙伴喜欢简单粗暴的方式,直接用单片机引脚来驱动LED灯,本人不建议在实际项目中使用该方式,首先拉灌电流过大对单片机的工作稳定性是一种威胁,还有一个理由是一些LED灯不能被IO引脚直接驱动起来,这对单片机来说是心有力而不足,此时你就要加驱动电路了。


单片机点灯技巧分析

Can you drive it?


总而言之,小小的灯也蕴含着处理问题的哲学,当你点亮了第一盏灯,也意味着你正式开启了嵌入式之路,我希望它从此也点亮了你的人生。于工作和实践中提取出通用且健壮的方案是我们每一个工程师的基本追求,不断学习和思考是我们成长进步的动力,一大波干货即将到来。。。



分享到:


相關文章: