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

这篇博客介绍了基于51单片机的16路流星灯程序,探讨了如何通过调整流星下落速度和状态停留时间来优化效果。文章提到了使用特定参考数组模拟流星下落,并建议理解程序后自行调整数组或重新编写程序以实现更佳的模拟效果。程序中包含了延时函数和端口数据处理,以控制不同数量LED的点亮和熄灭,形成流星扫尾效果。
摘要由CSDN通过智能技术生成

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

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

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

点亮

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值