单片机流星灯_51单片机拖尾灯实现
这个拖尾灯,或者扫描灯,或者流星灯,不管怎么叫,原理上估计都是一样的。这玩意困扰了我好长的时间。我知道用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单片机拖尾灯实现相关推荐
- 单片机流星灯_51单片机流星灯c语言源程序
大家自己根据程序中的io定义部分 接上灯即可实现流星灯的效果!! //......................................... //内控自走程序 //CPU:STC12C2 ...
- 单片机流星灯_LED流星雨灯的制作(51单片机程序代码)
本文主要介绍了LED流星雨灯的制作原理,包括成品图片,电路原理图以及所用的51单片机的程序代码. 一.图片分享: 二.PCB文件分享: 三.原理图分享: 上面只做了5根灯管,如果需要增加灯管的话,只需 ...
- m0单片机io口_51单片机蜂鸣器
蜂鸣器实验 * 蜂鸣器 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机.打印机.复印机.报警器.电子玩具.汽车电子设备.电话机.定时器等电子产品中作发声器件.蜂鸣器主要分为压电 ...
- m0单片机io口_51单片机独立按键和矩阵按键实现
独立按键实验 按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时, 开关断开.我们开发板上使用的按键及内部简易图如下图所示 管脚与管脚之间(注意是距离)距离长的是导通状态,短的是接通状 ...
- 单片机加减法计算器_51单片机之4位数加法计算器的设计报告
2014级单片机原理与应用 课程设计报告 课题名称 4位数加法计算器的设计 一.设计任务及要求: 设计任务: 1.通过4*4矩阵键盘输入数字及运算符: 2.可以进行4位十进制数以内的加法预算.如果计算 ...
- 单片机流星灯_基于51单片机的16路流星灯程序
本程序仅供学习交流用,不得用于任何商业用途 程序改进思路:可以加入流星下落速度调整,即下文的 staytime 可以用数组替换 参考数组 226,160,130,113,101,92,85,80,75 ...
- 51 单片机 建立 文本文件_51单片机KEIL如何建立多个C文件及注意事项
1如何建立多个C文件 首先,我们需要一个新文档,这个文档的建立有两种方法(以delay1s函数为例).第一种,在工程目录下建立一个delay1s.txt然后将其改名为delay1s.h.因为都是同编码 ...
- 单片机加减法计算器_51单片机简易计算器程序 实现数字的加减乘除运算
单片机源程序如下: #include //头文件 #define uint unsigned int #define uchar unsigned char sbit lcden=P1^1; //LC ...
- ht1621b和单片机电平匹配_51单片机对HT1621 LCD 控制器的使用
51 单片机对 HT1621 LCD 控制器的使用 HT1621 是一款 128 个位元的 LCD 控制器件,内部 RAM 直接对应 LCD 的显示单元.相应 的软件使它适用于包括 LCD 模块和显示 ...
最新文章
- iOS开发UI中懒加载的使用方法
- ubuntu下vscode调试开发踩过的坑
- MySQL sysdate()函数 不走索引的问题
- 高等数学下-赵立军-北京大学出版社-题解-练习9.1
- The 2019 ICPC Asia Shanghai Regional Contest
- Win11关机后自动开机怎么办 Win11关机后自动开机的解决方法
- 20_python基础—面向对象-私有属性和私有方法
- RabbitMQ学习之spring配置文件rabbit标签的使用
- 高盛 CEO:没背景的孩子,请与有野心的人为伍!
- Cocos2dx------touch事件
- 前端了解的简要php
- php基础知识(2),PHP基础知识2
- python小结_Python小结
- jupyter notebook 修改主题、字体、字号等
- 计数器—verilog
- 漫威电影(复仇者联盟)系列观看顺序和资源下载地址
- 寻找复杂背景下的物体轮廓 (从禾路的博客园整理学习)
- VB.net应用技巧5: VB.net 除法运算
- 【渝粤题库】陕西师范大学202521中国古代文学(三) 作业(高起专)
- [OHIF-Viewers]医疗数字阅片-医学影像-es6-Element.querySelector()