单片机流星灯_基于51单片机的16路流星灯程序

本程序仅供学习交流用,不得用于任何商业用途

程序改进思路:可以加入流星下落速度调整,即下文的

staytime

可以用数组替换

参考数组

226,160,130,113,101,92,85,80,75,71,68,65,63,60,58,56,55,53,52,51,49,48,47,46,45,44

本程序只用到

24

个状态

24

个数就够了,如果从

226

开始第一个时间稍长有停顿感。

同时得改进第二颗流星的位置,

以停留时间为准。

以上面的从

226

开始为例,

假如第二颗流

星出现在第

12

个状态,则第二颗流星的第一个状态停留时间

226

约为

63+60+58+56

238

即第

12

个状态到第

15

个状态停留时间之和(即第

2

颗流星第

1

个状态在第一颗流星的

12

15

状态保持不变)

依次类推可算出第二颗流星第

2

3

4

状态出现的位置。

但是会引起

第二颗流星状态不流畅,

改进措施就是调整数组,

对数组进行非线性变换,

以达到较好的效

果。

参考数组能较好模拟出下落效果。

当然自己重新构造数组达到效果也不错。

最理想是理

解本程序后,重新写程序,加入时间调控项进行完美模拟。

C

程序

#include”reg52.h”

#include”table.h”

//

编码文件请参考后面的数组

#define bit(n) (0x01<

#define LED0 P1

#define LED1 P0

char

pd[8];//

端口数据

8 5 3 1

char

stateN=0;

int staytime=50; //

单个状态停留时间

,

设置速度

void delay(int ms); //

延时函数

void display(char N);//

根据传入的状态数,获得单颗流星相应的端口数据

void main()

{

char

n2=96,n4=20,n6=6,n8=1;

//

调整辉光,形成扫尾

while(1)

{

int i=0;

display(stateN);

for(i=0;i

{

LED0=pd[0];

//

0000 0000

8LED

点亮

LED1=pd[1];

delay(n8) ;

LED0=pd[2];

//1100 0000

6LED

点亮

LED1=pd[3];

delay(n6) ;

LED0=pd[4];

//1111 0000

4LED

点亮

相关资源:专业LED光动画制作软件(安装后直接用!)_setup安装包-Delphi工具…

来源:weixin_39629947

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年11月17日
下一篇 2020年11月17日

相关推荐