心形流水燈

       這個心形流水燈是我在大一時候學的,那會學的是在51開發板上面實現點亮一個燈,或是實現8個流水燈閃爍。在經過深度學習和理解後,把8個燈擴展爲32個。
       剛開始是拿洞洞焊接的,經過實驗可以實現後,繪製心形PCB做心形流水燈。
       在這個過程中不僅提高了焊接技術,而且學會了繪製異性PCB的方法,還提高了編程的能力。

個人思路:
我這個流水燈共有40多種流水方式,在main函數去while循環這40多個方式。
       ①程序中採用模塊化函數,把沒一種流水方式都進行一層封裝。main函數只放這40個函數的名稱,函數體放在其他處。
       ②建立一些基本的流水方式數組。
       ③在其他處寫這40多個函數體。
       ④用for循環依次去查詢數組的第i個數據,然後對端口進行賦值,達到控制I/O端口的目的,進而控制LED燈。
燈採用共陽接法 ,因爲P0口是漏極開路,如果要它輸出高電平的話必須接上拉電阻。

心形流水燈

在這裏插入圖片描述在這裏插入圖片描述

這個是PCB的實物和演示視頻。
視頻在網盤:
百度網盤鏈接  (點擊藍色字體即可跳轉)
提取碼:31bl
在這裏插入圖片描述在這裏插入圖片描述

原理圖和PCB
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

       這個是手工焊接的實物和演示視頻。
視頻在網盤:
鏈接:https://pan.baidu.com/s/1RDgoBSlWNCEFJxVNofPUeA
提取碼:qa4n

部分代碼:

#include<reg52.h>
#define        uint        unsigned int
#define        uchar        unsigned char
#include<intrins.h>
unsigned char LedKey[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //對應IO口值
uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//LED從低位往高位移
uchar code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//LED從高位往低位移
uchar code table2[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//LED從1個亮到8個都點亮(從低位往高位)
uchar code table3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//LED從1個亮到8個都點亮(從高位往低位)
uchar code table4[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//LED從8個全亮到一個都不亮(從低位往高位)
uchar code table5[]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//LED從8個全亮到一個都不亮(從高位往低位)
uchar code table6[]={0xfe,0xfc,0xfa,0xf6,0xee,0xde,0xbe,0x7e};//LED從低位往高位移(最低位始終爲0)
uchar code table7[]={0x7f,0x3f,0x5f,0x6f,0x77,0x7b,0x7d,0x7e};//LED從高位往低位移(最高位始終爲0)
uchar i,j;                //定義循環變量
uint tt=70;                //定義時間指數
void delay(uint time)        //延時函數
{
        uint x,y;
        for(x=time;x>0;x--)
        for(y=110;y>0;y--);
}

void disp0()                        //狀態0 所有LED閃爍3次
{
        for(i=0;i<3;i++)
        {
                P0=0x00; P2=0x00; P3=0x00; P1=0x00;
                delay(300);
                P0=0xff; P2=0xff; P3=0xff; P1=0xff;
                delay(300);
        }
}

void disp1()                        //狀態1 LED順時針轉一圈
{
        for(i=0;i<8;i++)
        {
                P2=table1[i];
                delay(100);
        }
        P2=0xff;
        for(i=0;i<8;i++)
        {
                P3=table1[i];
                delay(100);
        }
        P3=0xff;
        for(i=0;i<8;i++)
        {
                P1=table1[i];        
                delay(100);
        }
        P1=0xff;
        for(i=0;i<8;i++)
        {
                P0=table0[i];
                delay(100);
        }
        P0=0xff;
}

void disp2()                        //狀態2 LED逆時針轉一圈
{
        for(i=0;i<8;i++)
        {
                P0=table1[i];
                delay(100);
        }
        P0=0xff;
        for(i=0;i<8;i++)
        {
                P1=table0[i];
                delay(100);
        }
        P1=0xff;
        for(i=0;i<8;i++)
        {
                P3=table0[i];
                delay(100);
        }
        P3=0xff;
        for(i=0;i<8;i++)
        {
                P2=table0[i];
                delay(100);
        }
        P2=0xff;
}

void disp3()                        //狀態3 4個LED同時順時、逆時針移動1/4圈
{
        for(i=0;i<8;i++)
        {
                P0=table1[i];
                P1=table1[i];
                P2=table1[i];
                P3=table0[i];
                delay(100);
        }
        for(i=0;i<8;i++)
        {
                P0=table0[i];
                P1=table0[i];
                P2=table0[i];
                P3=table1[i];
                delay(100);
        }
        P3=0xff; P0=0xff; 
}
...
...
...
void main()
{      
    unsigned char i=0;
        while(1)
        {       
				led_inii();         
                disp22();                //裝態22 2個LED自上而下移動(循環5次,且頻率漸快,到最快時持續循環16次,然後循環5次頻率再逐漸降低)
                disp0();                 //狀態0 所有LED閃爍3次
				led_init();			   	 //LED全亮 	延時1000ms=1s  LED全滅	延時1000MS=1ms
                disp1();                 //狀態1 LED順時針轉一圈
                disp2();                 //狀態2 LED逆時針轉一圈
                disp3();                 //狀態3 4個LED同時順時、逆時針移動1/4圈
                disp4();                 //狀態4  2個LED同時順時針移動半圈
                disp5();                 //狀態5  2個LED同時逆時針移動半圈
                disp6();                 //狀態6 LED自上而下逐漸點亮(一半點亮一半不亮)
                disp7();                 //狀態7 LED自下而上逐漸點亮(直到全部點亮)
                disp0();                 //狀態0 所有LED閃爍3次
                disp8();                 //狀態8 間斷8格的4個LED亮並逆時針旋轉
                disp9();                 //狀態9 間斷8格的4個LED亮,然後逆時針逐漸點亮(直到全部點亮)
                disp10();                //狀態10 從LED全部亮到全不亮(間斷8格的4個LED開始逆時針熄滅)
                disp11();                //狀態11 間斷8格的4個LED亮並順時針旋轉
                disp12();                //間斷8格的4個LED亮,然後順時針逐漸點亮(直到全部點亮)
                disp13();                //狀態13 從LED全部亮到全不亮(間斷8格的4個LED開始順時針熄滅)
                disp14();                //狀態14 從LED不亮到全亮(從P0.0、P1.0、P2.0、P3.7開始逐布點亮)   
                disp15();                //狀態15 從LED全亮到全不亮(從P0.7、P1.7、P2.7、P3.0開始逐步熄滅)
                disp16();                //狀態16 LED燈交替閃爍(頻率有慢變快)
                disp17();                //狀態17 LED從P0.7開始逆時針逐步點亮,並且速度會逐步提高
                disp18();                //狀態18 LED從P0.7開始逆時針逐步點亮(每亮8位後就熄滅)
                disp19();                //狀態19 LED從P2.7開始順時針逐步點亮,(循環2次)並且速度會逐步提高
                disp20();                //狀態20 LED從P2.7開始順時針逐步點亮(每亮8位後就熄滅)
                disp21();                //狀態21 2個LED開始上下移動半圈
                disp22();                //裝態22 2個LED自上而下移動(循環5次,且頻率漸快,到最快時持續循環16次,然後循環5次頻率再逐漸降低
                disp23();                //狀態23 LED上下交替閃爍
                disp39();                //狀態39 P1、P3LED(下半部分)一直亮,上半部分LED向外擴張亮,然後閃爍3次
                disp24();                //狀態24 LED左右交替閃爍
                disp25();                //狀態25 LED交替閃爍  
                disp8();                 //狀態8 間斷8格的4個LED亮並逆時針旋轉
                disp9();                 //狀態9 間斷8格的4個LED亮,然後逆時針逐漸點亮(直到全部點亮)
                disp10();                //狀態10 從LED全部亮到全不亮(間斷8格的4個LED開始逆時針熄滅)
                disp26();                //狀態26 2個LED開始上下移動半圈(LED不亮流水)
                disp27();                //狀態27 逐步順時針點亮P2、P1的LED,熄滅後,再順時針點亮P0、P3的LED
                disp28();                //狀態28 P1、P2和P0、P3交替閃爍
                disp38();                //狀態38 逐步順時針點亮P2、P1的LED,熄滅後,再順時針點亮P0、P3的LED
                disp29();                //狀態29 逐步順時針點亮P2、P1的LED,再順時熄滅後,再順時針點亮P0、P3的LED,再順時熄滅
                disp30();                //狀態30 逐步逆時針點亮P2、P1的LED,熄滅後,再逆時針點亮P0、P3的LED
                disp31();                //狀態31 逐步逆時針點亮P2、P1的LED,再逆時熄滅後,再逆時針點亮P0、P3的LED,再逆時熄滅
                disp32();                //狀態32 LED自上而下逐步點亮,然後從下往上逐步熄滅
                disp33();                //狀態33 LED從左往右開始點亮(直到全亮),然後從左右兩邊開始熄滅(直到全部熄滅)
                disp37();                //狀態37 2個LED自上而下移動,並點亮最下2個LED,然後2個LED再自下而上回去,同時4個LED(上下各2個LED)再來回移動一次
                disp36();                //狀態36  從P0.7、P3.0開始同時逆時針旋轉,直到LED全亮
                disp40();                //狀態40 LED從P3.0、P0.7開始逆時針同時熄滅,直到LED全部熄滅
                disp35();                //狀態35  從P2.7、P1.7開始同時順時針旋轉,直到LED全亮
                disp41();                //狀態41 LED從P2.7、P1.7開始順時針同時熄滅,直到全部熄滅
                disp34();                //狀態34 LED從左往右開始點亮(直到全亮),然後從中間往左右邊熄滅
                disp28();                //狀態28 P1、P2和P0、P3交替閃爍
				disp42();				 //逆時針點亮
}

       
       
       
                                                                                                                                            2019/12/3
                                                                                                                                                          晴

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章