单片机流星灯_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单片机拖尾灯实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mongodb的id的唯一性_探讨Mon
- 下一篇: ewomail 内部通讯_教你搭建自己的