20220907_C52单片机学习笔记 | LED流水灯

发布于:2022-12-26 ⋅ 阅读:(318) ⋅ 点赞:(0)

1.C52单片机和LED原理图

 

2.思路分析

  • 如何实现流水灯?

流水灯,顾名思义像水一样流过去,寄存器P2有8颗灯,按照顺序一个亮跳到下一个亮,OK ,我们先写二进制编码。

 如上图所示,D1亮-延迟-其余灯灭-延迟,D2亮-延迟-其余灯灭-延迟——D8亮-延迟-其余灯灭-延迟,再次回到D1(循环),这不,主函数就来了~ 根据LED闪烁的笔记,可以直接将延迟函数复制过来直接使用。

                

                                 延迟函数                                                                       主函数

 3.效果展示

LED流水灯效果

4.流水灯PLUS

    上面所述的是每颗灯间隔500ms依次点亮,如果想要更改间隔时间,按照之前的方法就很麻烦,要每改一次间隔时间就得重新生成函数,是否可以用一个固定的延迟函数呢?当然看可以~

把间隔时间设为一个变量xms,设置什么类型的变量呢?以下是常用数据类型👇

       数的范围其实就是2^所占位数的次方-1,例如 unsigned int 所占位数为16位,2^16-1=25535,这里减一是因为0也包含在范围内。在定义这个数据类型的时候,所设置的数值不可超过范围,不然单片机无法读取数值,也不会提示错误,会出现BUG,很难找出,所以一开始设置的时候,就要考虑好。

首先,先设置个1ms的延迟函数,打开STC-ISP软件,设置以下内容,复制到Keil中

 参考程序👇

为什么将xms设置为unsigned int 型?我的理解是:毫秒肯定是没有负的,那就是无符号数据类型;char 数的范围只有0-255,不够用,float long 精度很高,数的范围也很广,太浪费空间;所以int更合适。(个人理解)

    

 哈哈~这样就可以随意更改间隔时间啦~但是要注意的是不可超过数的范围哦~

5. 结束语

其实写到这里,还是有很多问题我想去弄明白,但是我搜了好多遍,没找到我想要的答案,先把问题遗留在这里,懂了之后再来写解。

(1)软件生成的延迟函数如何运行的?

(2)C语言中的其他数据类型在什么情况下会用到?

(3)do while循环嵌套如何运用?


网站公告

今日签到

点亮在社区的每一天
去签到