微控制器流星燈 51微控制器拖尾燈實現

2021-10-13 01:54:06 字數 2622 閱讀 6117

這個拖尾燈,或者掃瞄燈,或者流星燈,不管怎麼叫,原理上估計都是一樣的。這玩意困擾了我好長的時間。我知道用pwm可以做出明暗效果。但是無法做到實現多路控制。

在網上有種叫「霹靂遊俠掃瞄燈」的東西。好像是用專用的ic做的。找不到相關的原始碼。

自己想啊想。一直想了乙個月。直到昨天,上課的時候靈光一閃,突然想到乙個好的點子,用定時器控制多路pwm。然後趕快記下。

呵呵,字寫的有點醜了。。

其實原理很簡單,用定時器同時控制多路i/o口做pwm。main函式只要設定相應的引數就行了。這樣的好處就是呼叫起來非常方便。而且如果主頻夠高的話,可以隨意控制多路led。不知道網上有相同類似的東西麼,不過這玩意確實是我自己想起來的。由被動接受到主動創造的一部分。意義深遠。o(∩_∩)o哈哈~

程式如下,不詳細解釋,很簡單。

//多路led控制

//元素

#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]=; //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微控制器

數碼管顯示幾乎是每次藍橋杯微控制器設計與開發組競賽的必考部分,相對於使用lcd1602作為顯示裝置,使用數碼管來顯示能夠更好的考察參賽選手的微控制器基本功,因為ct107d開發平台的設計使得數碼管的顯示不僅牽扯到數碼管顯示的 基本內容,還涉及到74hc573鎖存器,74hc02異或門,74hc138...

51微控制器

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 1.供電電源 一般開發板上提供兩種供電方式,usb供電和專用電源供電。使用usb供電你只要用一根usb線將開發板usb電源介面與電腦的usb...

51微控制器

設計包含乙個矩陣式鍵盤電路和動態顯示電路的微控制器應用系統,通過根據按下不同的數字按鍵 0 9 在數碼管上顯示出自己學號的後8位。各位大神幫忙挑挑錯,或者問題太大了可以幫忙寫乙個新的麼!萬分感謝!好著急 a 8255 equ 7cffh a口 b 8255 equ 7dffh b口 c 8255 e...