打印
[应用相关]

【转】STM32的流水灯程序

[复制链接]
1490|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xia00|  楼主 | 2016-9-20 17:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
记得小时候有玩具电动车,车玩坏了就拆了,最高兴的就是能拆出电机和灯泡,玩这两样东西的乐趣不比玩玩具车少。

用干电池就能让小灯泡亮起来,也能让电机转起来,虽然现象很简单,但却融入了自己的控制和想象,这是很有意思的。想让一个灯泡亮起来,给一个适当的电压就可以,这是中学物理都学过的。其实小灯泡的工作电压是2-3V,干电池的电压是1.5V,所以小时候小孩子玩的时候用一节电池或两节电池小灯泡都会亮。而且暗和亮的程度不一样,电机转动的状态也不一样,这就对电学有个直观的认识。

现在灯泡越来越少了,越来越多被LED取代。LED就是Lighting Emitting Diode的缩写,即发光二极管。LED只能往一个方向导通,即给LED加上正向偏压,当电流流过时,电子与空穴在其内复合而发出单色光,这叫电致发光效应,而光线的波长、颜色跟其所采用的半导体材料种类与掺入的元素杂质有关。

LED的工作电压大概2V左右,不同的材料不同型号的LED电压稍稍会有些偏差,但对实际使用的影响不大。


--为什么要跑流水灯


流水灯实验是学单片机的经典例程,可以说是单片机学习中的"HELLO WORLD"。

那么怎么通过STM32把一个LED点亮呢?想让LED发光当然需要给LED加一个正向偏压。STM32的引脚输出电压高电压为3.3V,低电压为0V。想要用STM32控制LED的亮和灭,这里有两种方式可以把给一个LED加上正向偏压:第一种方法就是把LED的负极和电路的地(0V)相连,当STM32输出低电平时,LED两端没有电势差。当STM32输出高电平时,LED正极就加上了3.3V的电压,这样LED就亮了,但是这时候LED可能亮的有点不正常,因为LED的工作电压约为2V,所以这时候LED可能是特别亮,但可能亮了一段时间就会烧坏。为了LED能长期正常工作,所以要让LED在2V的工作电压,所以加一个电阻起保护作用,电阻选470欧或510欧。

第二种方法就是将LED的正极连着3.3V的电源上,负极连在STM32的引脚上,当STM32的引脚输出低电平时LED就会亮。

为什么要通过流水灯的形式来完成实验呢?因为能自由的控制一个灯泡的亮和灭、能自由的控制一个灯亮的时长和灭的时长,这样也就证明已经掌握了一个STM32的IO口高低电平的输出,这就已经可以做很多事情了。


--怎么控制小灯的亮灭


当然是写程序控制了,先从思路上理顺一遍就是:


以下边电路图中3个LED为例:


先让第一个灯亮(因为图中LED采用的是上一段介绍的第二种电路,所以应该让和LED1相连的STM32引脚输出0V低电平),亮一会(这个通过延时函数来实现);把第一个熄灭(同理,让引脚输出高电平即可熄灭),接着(在程序上编程语句的执行肯定有先后之分,因为没有延时函数,STM32工作频率很高,所以就是“同时”)把第二个灯点亮,亮一会;把第二个灯熄灭,接着点亮第三个灯,亮一会;把三个灯熄灭,接着把第一个灯点亮...(这个省略号就是周而复始循环的意思,在程序实现的时候,我们用一个循环函数就可以实现。)


沙发
CallReceiver| | 2016-9-20 17:24 | 只看该作者
感觉不错,很值得学习与借鉴啊

使用特权

评论回复
板凳
mmuuss586| | 2016-9-20 21:00 | 只看该作者
谢谢分享;

使用特权

评论回复
地板
gejigeji521| | 2016-9-20 23:34 | 只看该作者
刚开始那种灯泡很怀旧。

使用特权

评论回复
5
gejigeji521| | 2016-9-20 23:42 | 只看该作者
以前那种手电筒上貌似就用的这个

使用特权

评论回复
6
Brand2| | 2016-9-21 21:20 | 只看该作者
学习单片第一课,点亮LED

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

179

主题

1867

帖子

1

粉丝