这个拖尾灯,或者扫描灯,或者流星灯,不管怎么叫,原理上估计都是一样的。这玩意困扰了我好长的时间。我知道用PWM可以做出明暗效果。但是无法做到实现多路控制。

在网上有种叫“霹雳游侠扫描灯”的东西。好像是用专用的ic做的。找不到相关的源码。

自己想啊想。一直想了一个月。直到昨天,上课的时候灵光一闪,突然想到一个好的点子,用定时器控制多路PWM。然后赶快记下。

呵呵,字写的有点丑了。。

其实原理很简单,用定时器同时控制多路i/o口做PWM。main函数只要设置相应的参数就行了。这样的好处就是调用起来非常方便。而且如果主频够高的话,可以随意控制多路LED。不知道网上有相同类似的东西么,不过这玩意确实是我自己想起来的。由被动接受到主动创造的一部分。意义深远。O(∩_∩)O哈哈~

程序如下,不详细解释,很简单。

//多路LED控制

//元素

//2010.05.21

#include

#define uint unsigned int

#define uchar unsigned char

#define delaytime 10 //延迟时间

//管脚定义

sbit P2_0 = P2^0;

sbit P2_1 = P2^1;

sbit P2_2 = P2^2;

sbit P2_3 = P2^3;

sbit P2_4 = P2^4;

sbit P2_5 = P2^5;

sbit P2_6 = P2^6;

sbit P2_7 = P2^7;

uint t=1;

uint LED[8]={0}; //8个led

//延迟函数

void delay_ms (unsigned int a){

unsigned int i;

while( a-- != 0){

for(i = 0; i < 600; i++);

}

}

//定时,1ms

void time0_server_(void)interrupt 1

{

TH0 = 0xFC;

TL0 = 0x18;

if(t >=9)

t = 1;

else

t++;

if(t >LED[0]) //LED0 亮度

P2_0 = 1;

else

P2_0 = 0;

if(t > LED[1]) //LED1 亮度

P2_1 = 1;

else

P2_1 = 0;

if(t > LED[2]) //LED2 亮度

P2_2 = 1;

else

P2_2 = 0;

if(t > LED[3]) //LED3 亮度

P2_3 = 1;

else

P2_3 = 0;

if(t > LED[4]) //LED4 亮度

P2_4 = 1;

else

P2_4 = 0;

if(t > LED[5]) //LED5 亮度

P2_5 = 1;

else

P2_5 = 0;

if(t > LED[6]) //LED6 亮度

P2_6 = 1;

else

P2_6 = 0;

if(t > LED[7]) //LED7 亮度

P2_7 = 1;

else

P2_7 = 0;

}

void Init_t0(void)//定时器初始化

{

TMOD = 0x01;//选择方式1

TH0 = 0xFC;

TL0 = 0x18;//1ms

EA = 1;

ET0 = 1;

TR0 = 1;//开始计数

}

void main(void)

{

uint i,j;

LED[7] = 10;

Init_t0();

for(i = 0;i <8;i++)

LED[i] = i;

while(1)

{

LED[0] = 10;

delay_ms(delaytime);

LED[1] = 10;

LED[0] = 6;

delay_ms(delaytime);

LED[2] = 10;

LED[1] = 6;

LED[0] = 2;

for(i = 0;i < 5;i++)

{

LED[i] = 0;

LED[i+1] = 2;

LED[i+2] = 6;

LED[i+3] = 10;

delay_ms(delaytime);

}

LED[5] = 0;

LED[6] = 2;

LED[7] = 6;

delay_ms(delaytime);

LED[6] = 0;

LED[7] = 2;

delay_ms(delaytime);

LED[7] = 0;

delay_ms(delaytime);

/*

for(i = 0;i <8;i++)

{

for(j = 0;j < 8;j++)

LED[j] = (i+j)%8;

delay_ms(10);

}*/

}

}

下面是一点演示视频,不是很清晰。噪音很大,讲究这看吧。

单片机流星灯_51单片机拖尾灯实现相关推荐

  1. 单片机流星灯_51单片机流星灯c语言源程序

    大家自己根据程序中的io定义部分  接上灯即可实现流星灯的效果!! //......................................... //内控自走程序 //CPU:STC12C2 ...

  2. 单片机流星灯_LED流星雨灯的制作(51单片机程序代码)

    本文主要介绍了LED流星雨灯的制作原理,包括成品图片,电路原理图以及所用的51单片机的程序代码. 一.图片分享: 二.PCB文件分享: 三.原理图分享: 上面只做了5根灯管,如果需要增加灯管的话,只需 ...

  3. m0单片机io口_51单片机蜂鸣器

    蜂鸣器实验 * 蜂鸣器 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机.打印机.复印机.报警器.电子玩具.汽车电子设备.电话机.定时器等电子产品中作发声器件.蜂鸣器主要分为压电 ...

  4. m0单片机io口_51单片机独立按键和矩阵按键实现

    独立按键实验 按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时, 开关断开.我们开发板上使用的按键及内部简易图如下图所示 管脚与管脚之间(注意是距离)距离长的是导通状态,短的是接通状 ...

  5. 单片机加减法计算器_51单片机之4位数加法计算器的设计报告

    2014级单片机原理与应用 课程设计报告 课题名称 4位数加法计算器的设计 一.设计任务及要求: 设计任务: 1.通过4*4矩阵键盘输入数字及运算符: 2.可以进行4位十进制数以内的加法预算.如果计算 ...

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

    本程序仅供学习交流用,不得用于任何商业用途 程序改进思路:可以加入流星下落速度调整,即下文的 staytime 可以用数组替换 参考数组 226,160,130,113,101,92,85,80,75 ...

  7. 51 单片机 建立 文本文件_51单片机KEIL如何建立多个C文件及注意事项

    1如何建立多个C文件 首先,我们需要一个新文档,这个文档的建立有两种方法(以delay1s函数为例).第一种,在工程目录下建立一个delay1s.txt然后将其改名为delay1s.h.因为都是同编码 ...

  8. 单片机加减法计算器_51单片机简易计算器程序 实现数字的加减乘除运算

    单片机源程序如下: #include //头文件 #define uint unsigned int #define uchar unsigned char sbit lcden=P1^1; //LC ...

  9. ht1621b和单片机电平匹配_51单片机对HT1621 LCD 控制器的使用

    51 单片机对 HT1621 LCD 控制器的使用 HT1621 是一款 128 个位元的 LCD 控制器件,内部 RAM 直接对应 LCD 的显示单元.相应 的软件使它适用于包括 LCD 模块和显示 ...

最新文章

  1. iOS开发UI中懒加载的使用方法
  2. ubuntu下vscode调试开发踩过的坑
  3. MySQL sysdate()函数 不走索引的问题
  4. 高等数学下-赵立军-北京大学出版社-题解-练习9.1
  5. The 2019 ICPC Asia Shanghai Regional Contest
  6. Win11关机后自动开机怎么办 Win11关机后自动开机的解决方法
  7. 20_python基础—面向对象-私有属性和私有方法
  8. RabbitMQ学习之spring配置文件rabbit标签的使用
  9. 高盛 CEO:没背景的孩子,请与有野心的人为伍!
  10. Cocos2dx------touch事件
  11. 前端了解的简要php
  12. php基础知识(2),PHP基础知识2
  13. python小结_Python小结
  14. jupyter notebook 修改主题、字体、字号等
  15. 计数器—verilog
  16. 漫威电影(复仇者联盟)系列观看顺序和资源下载地址
  17. 寻找复杂背景下的物体轮廓 (从禾路的博客园整理学习)
  18. VB.net应用技巧5: VB.net 除法运算
  19. 【渝粤题库】陕西师范大学202521中国古代文学(三) 作业(高起专)
  20. [OHIF-Viewers]医疗数字阅片-医学影像-es6-Element.querySelector()

热门文章

  1. iOS viewDidUnload方法
  2. 在linux下面安装MySQL5.6管理帐号安装失败的解决方法
  3. Java 小故事系列 导航
  4. 第四章课后习题及答案
  5. SpiderData 2019年2月22日 DApp数据排行榜
  6. Code Snippets
  7. c语言中数组名a和a详细介绍
  8. BGWN项目轶事之主导Global Weekly Meeting
  9. iframe高度宽度自适应(转)
  10. MathLab混合编程成功总结