- 任务分析
首先要知道LED闪烁主要是怎么工作的,闪烁亮灭自然是一下为高一下为低,亮灭的频率则需要延时来进行控制。
上节已经知道了如何点亮那延时如何做呢首先先编写主框架
这样是否可以通过循环将LED灯一直循环闪烁。
以为while一直在循环所以其实是可以闪烁的,但由于扫描的周期过快,人的肉眼无法看见闪烁,因此需要添加延时。
那么延时如何做呢?
首先打开下载软件,找到软件延时计算器
根据需要的时间修改参数,注意晶振赔率,不知道晶振频率的小伙伴可以看板子上的白色小金属壳上的字,我使用的上写的是Y11.0592。
同时8051指令集选项需要找到使用对应板子型号的选项。
完成后点击生成代码再复制到程序中即可
由于复制的代码是一个打包好的函数,我们在主程序中使用需要将函数进行调用。
(注意需要使用延时需要包含#include <INTRINS.H>)
之后进行下载调试即可,注意生产程序文件,如何下载具体看第一节
- 流水灯
根据LED的闪烁我们知道了如何让LED一下亮一下灭,还可以通过控制延时的数字大小控制亮灭时间的长短。
那流水灯应该如何做呢?
流水灯其实就是第一个亮灭灭了之后第二个亮之后以此类推循环下去。
延时函数闪烁已经介绍过了,我们可以通过对于十六进制的计算来控制每一个LED
LED亮则给0灭则给1这是因为单片机内部给LED模块的电平的原因。
如果每次需要一个延时就复制一段程序那我们的主程序太复杂了,我们可以通过给函数传参的方式改变每次需要延时的值。
将原来延时函数里括号的内容改为传送一个无符号的整形s,无符号整形的取值范围为0~65535由于时间没有负的正好符合我们的要求。
函数的内容也需要重新生成,生成一个一毫秒的函数,这样我们需要多少毫秒就可以将我们需要的秒数直接打到调用函数的括号里了不用在另外去下载器生成新的延时代码。
由于是可更改可传参的函数,但是我们延时函数里的内容只是延时一次一毫秒的内容,我们可以做一个while循环,每执行完一行s--这样定了多少秒就减多少次即可完成功能(程序图片第七行)