日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单片机流星灯_51单片机拖尾灯实现

發布時間:2025/3/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机流星灯_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单片机拖尾灯实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。