找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1631|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機旋轉(zhuǎn)LED

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1049009 發(fā)表于 2022-10-24 17:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
第一章 緒言
隨著科學(xué)技術(shù)的發(fā)展,LED顯示屏得到廣泛的應(yīng)用,但大部分的顯示屏只能在平面顯示,不能滿足人們的需求,所以LED旋轉(zhuǎn)屏的想法正好能填補這個空缺。LED旋轉(zhuǎn)屏利用人的視,覺暫留效應(yīng),通過高速旋轉(zhuǎn)的LED燈陣列,形成一個360環(huán)形畫面,創(chuàng)造立體效果,不管人站在那個角度都能看到顯示的內(nèi)容。該應(yīng)用實用性好,制作相對簡單,而且能節(jié)省LED燈的使用。
本設(shè)計以STC89C52單片機為核心最大限度的利用單片機的資源LED驅(qū)動芯片緊密。系統(tǒng)以STC89C52單片機作為核心,控制器件通過控制電機保持一定的速度穩(wěn)定旋轉(zhuǎn)帶動單排LED旋轉(zhuǎn)形成掃描顯示屏,單片機根據(jù)LED旋轉(zhuǎn)的速度控制LED發(fā)光或熄滅,在視覺上形成平面圖形點陣的顯示效果。


第二章 方案設(shè)計第一節(jié) 設(shè)計任務(wù)與要求
一、設(shè)計任務(wù)
基于視覺暫留原理,利用了POV“視覺暫留”原理,在這短暫的時間段里,當(dāng)前面的視覺形象還沒有完全消退,新的視覺形象又繼續(xù)產(chǎn)生時,就會在人的大腦里形成連貫的視覺錯覺。利用高速旋轉(zhuǎn)中控制LED亮滅,設(shè)計一種旋轉(zhuǎn)式LED顯示屏。在穩(wěn)定旋轉(zhuǎn)地載體上安裝16個貼片發(fā)光二極管。靜止時,各個發(fā)光二極管等間距排布,隨著掃描速度的加快,不斷掃描出預(yù)設(shè)的文字。
二、設(shè)計要求
1、底座供電部分,底座為主板供電;
2、主板旋轉(zhuǎn)部分,主板負責(zé)文字旋轉(zhuǎn)。
3、制作完成后,載入程序,調(diào)試并分析結(jié)果。
第二節(jié) 任務(wù)分析
一、LED 旋轉(zhuǎn)控制
用電動機帶動LED轉(zhuǎn)動,用單片機控制LED點亮和熄滅來形成文字的,這些文字一看也去,就象懸浮在空中的。
旋轉(zhuǎn)LED旋轉(zhuǎn)起來是一個圓,那么就需要有一個傳感器來判斷起點位置,這個起點檢測非常重要,單片機就是根據(jù)這個起點來判斷是否要開始顯示數(shù)據(jù)的。如果起點檢測不到單片機就不開始顯示。我選用紅外對管,單片機控制LED燈使用紅外發(fā)射,在底座上有一個紅外發(fā)射管,這個紅外發(fā)射管不斷地向旋轉(zhuǎn)的主電路板發(fā)射紅外線。
二、底座供電部分
供電模塊電路設(shè)計的完善,采用無線輸電技術(shù),利用電磁轉(zhuǎn)換原理,先將電流變成磁場,然后再將磁場變成電流給電路供電。
三、主板旋轉(zhuǎn)部分
主板電路設(shè)計的完善,核心系統(tǒng)的選擇,用于旋轉(zhuǎn)起點檢測的傳感器選用。
第三節(jié) 方案框圖
基于以上設(shè)計方案與要求所設(shè)計方案框圖如下:主控電路,電源部分,程序端口,穩(wěn)壓濾波電路,紅外接收管,LED顯示部分。
圖 2-1  方案框圖


第三章 硬件電路設(shè)計第一節(jié) 主控電路設(shè)計
一、STC89C52簡介
單片機是指一個集成在一塊芯片上的完整計算機系統(tǒng)。盡管他的大部分功能集在一塊小芯片上,但是它具有一個完整計算機所需要的大部分部件: CPU、內(nèi)存、內(nèi)部和外部總線系統(tǒng),目前大部分還會具有外存。同時集成諸如通訊接口、定時器,實時時鐘等外圍設(shè)備而STC89C52是一種可編程可檫除只讀存儲器的低電壓,高性能的微處理器,俗稱單片機。
二、單片機最小系統(tǒng)
用單片機控制LED點亮和熄滅來形成文字。如圖3-1所示:
圖 3-1  主控電路
第二節(jié) 電源電路設(shè)計
無線供電方式,經(jīng)過實踐論證,功率很有限,需要改進的地方還很多,電路原理是把直流轉(zhuǎn)成交流,然后經(jīng)過初級線圈 ,最后次級線圈感應(yīng)得電,經(jīng)過整流濾波后給旋轉(zhuǎn)部分供電,直流轉(zhuǎn)交流部分電路是一個自激震蕩電路。將直流電轉(zhuǎn)化成高頻交流信號,通過線圈將交流信號輸送到旋轉(zhuǎn)的主電路板上,主電路板上利用5.1v的穩(wěn)壓二極管,將接收到的交流信號變成5.1v直流電,通過220uF的電解電容濾波,供給單片機,使單片機能正常工作。如圖3-2所示:
圖 3-2  無線供電小板
第三節(jié) LED顯示電路設(shè)計
一、字幕顯示設(shè)置
如何讓一列燈不斷的送數(shù)據(jù)實現(xiàn)一個文字的顯示呢?這個我們就要了解文字取模的原理了,這里以PC2002字幕軟件為例,取一個16*16的中文字,見字幕選項設(shè)置:
圖 3-3  文字取模設(shè)置圖
二、LED顯示電路
電動機帶動LED轉(zhuǎn)動,用單片機控制LED點亮和熄滅來形成文字;一個紅外發(fā)射管,一個紅外接收管,板上的紅外接受管每轉(zhuǎn)動一圈就會導(dǎo)通一次,讓單片機知道從哪一點開始播放字符;無線供電部分通過線圈向主板供電,相當(dāng)于變壓器的工作原理。
圖 3-4  LED顯示屏原理圖
第四節(jié) 穩(wěn)壓濾波電路設(shè)計
由于電源是從電機中引出來的所以需要通過整流濾波才能為系統(tǒng)供電。如圖3-5所示:
圖 3-5  穩(wěn)壓整流濾波電路
第五節(jié) 其它部分電路設(shè)計
一、程序端口
下載程序,通過程序來來實現(xiàn)想要達到的效果。如圖3-6所示:
圖 3-6  程序端口
二、紅外接收電路部分
判斷起點位置,起點檢測,根據(jù)紅外接收管電路來判斷是否要開始顯示。如圖3-7所示:
圖 3-7  紅外接收管電路


第四章 軟件設(shè)計
當(dāng)程序開始運行的時候,首先就是要對程序進行初始化,主要作用就是讓程序按照我們所設(shè)計的初始值去運行。初始化之后,讓單片機知道從哪一點開始播放字符,讓LED點亮和熄滅來形成文字;一個紅外發(fā)射管,一個紅外接收管,板上的紅外接受管每轉(zhuǎn)動一圈就會導(dǎo)通一次,對數(shù)據(jù)進行校對,執(zhí)行完成后返回到初始化操作之后重復(fù)以上的操作。
圖4-1 軟件設(shè)計流程圖


第五章 系統(tǒng)調(diào)試第一節(jié) 問題及解決方法
一、旋轉(zhuǎn) LED 上電后,電機旋轉(zhuǎn),但是無任何反應(yīng)。
解決方法:
1、檢查了供電板上元件的位置以及正負極性。
2、檢查元件有無虛焊現(xiàn)象。
3、連接電源后,測量初級線圈電壓。用萬用表交流檔 20V 測試,有 6-9V 的交流電壓輸出是正常。如不正常,檢查輸入電源是否是 5V。
    4、檢查旋轉(zhuǎn)主板 4 個 4148 焊接位置以及正負極性是否正確。
二、部分燈不亮
解決方法:
1、利用提供的“流水燈測試程序”,測試 LED 是否有虛焊以及損壞的問題,下載好程序,通過程序下載口供電,可以看到每個燈都會流水點亮。如果發(fā)現(xiàn)不亮的燈,檢測 LED 正負極性有無焊接錯,有無虛焊現(xiàn)象,對應(yīng)的限流電阻是否損壞或者焊接良好。
2、排除以上問題后,檢查該 IO 口到單片機管腳的線是否連接完好。如果是斷路,就應(yīng)該是單片機控制該LED的IO口虛焊,補焊單片機即可。
三、旋轉(zhuǎn) LED 旋轉(zhuǎn)時抖動大
解決方法:
1、確定銅柱固定是否和制作說明中的一樣。
2、底盒通過加沙石加重重量。
結(jié)論
在焊接之前先看原理圖以便理解電路工作原理,然后進行電路焊接。由于焊接的器件都比較小,所以焊接過程比較麻煩,經(jīng)常會出現(xiàn)虛焊等情況,所以經(jīng)常進行反復(fù)檢查。且這次設(shè)計存在不足的地方,比如重心偏移,電機旋轉(zhuǎn)時產(chǎn)生抖動,應(yīng)該在設(shè)計時對電路布局進行科學(xué)的分析,調(diào)整重心。
剛開始會遇到很多挫折,并不是說按照原理圖焊接出來,就直接可以正常使用,在這幾日里,我經(jīng)歷了階段性成功的喜悅,測試失敗后的沮喪,陷入困境的急噪,重新投入的振作,這樣的心路歷程是非常寶貴的體會,正是有了大家的幫助終于成功了。同學(xué)們在設(shè)計的過程中互相幫助讓我深刻的體會出團結(jié)就是力量的含義。

                                 部分代碼



#include "NEW_8051.H"
#include "task.h"
#include <intrins.h>        
void delay_300ms(void);
bit BIT_timeout=0;
uint i=0,j=0;
uchar Data_L=0xff;
uchar Data_H=0xff;
uchar time_delay=0;
uchar k;
bit Scan_bit=0;
uint uiFontNumber=0;
#define ucNumRows 176
uchar code liushui[1]={0x01};
void DelayUs(uint N)
{
    uint x ;
    for(x=0;x<=N;x++);
}
void int0() interrupt 0      
{
        BIT_timeout=1;
}
void start(void)
{
        P1=0XFF;
        P2=0XFF;
        P0=0XFF;
        P3=0XFF;
        uiFontNumber=((byte_read(0x2000)<<8)+byte_read(0x2001))*16;
        Send_data(0X55);
}
void OS_ALLRun(void)
{
        if(BIT_timeout)      
        {                       
                BIT_timeout=0;
                Scan_bit=1;
                j++;                                    
        if( j>uiFontNumber )
        {
            j=0 ;
        }                              
        for(i=j;i<ucNumRows+j;i++)  
        {                              
           
                        P2=Data_L;      
                        P0=Data_H;
                           time_delay=1;
                        while(time_delay)
                        {
                                        Data_L=byte_read(i*2+0x2002);      
                                        Data_H=byte_read(i*2+1+0x2002);
                                        DelayUs(3);
                                        time_delay=0;      
                        }
                        P0=P2=0XFF;                                                      
           if(BIT_timeout)
                                 
                   {
                                   return;
                   }
                }   
        }
        if(Scan_bit==0)      
        {
                for(k=0;k<1;k++)
                        {                              
                                P0=~liushui[k];
                                P2=~liushui[k];
                                delay_300ms();
                        }      
        }
}
void delay_300ms(void)   
{
    unsigned char a,b,c;
    for(c=98;c>0;c--)
        for(b=127;b>0;b--)
            for(a=17;a>0;a--);
}
#ifdef EN_OS_INT0
    IT0 = 1;   
    EX0 = 1;  
#endif
  #ifdef EN_OS_INT1   
    IT1 = 1;   
    EX1 = 1;   
  #endif              
#ifdef EN_OS_SERIAL
    SCON = 0x50;
    TMOD|= 0x20;
    TH1  = 0xFB;
    TL1  = 0xFB;
    TR1  = 1;
    ES   = 1;      
    PS = 1;         
    PSH;
#endif
#ifdef EN_OS_TIMER0
    TMOD|=0X01;
          ET0=1;
        TH0=0x0FF;      
        TL0=0x0F1;
        TR0=1;         
#endif
#ifdef EN_OS_TIMER1
     TMOD|=0X20;
           ET1=1;  
     TH1=0x00;
     TL1=0x00;
#endif
#ifdef EN_OS_UART2         
        S2CON  = 0x50;  
        BRT           = 0xfb;  
        AUXR   |= 0x11;  
        IE2            = 0x01;      
#endif
#ifdef EN_OS_PCA0  
    CMOD = 0x80;         
    CCON = 0x00;   
    CL = 0;
    CH = 0;
        CCAP0H = 0xEF;
    CCAP0L = 0xD8;  
#endif
#ifdef EN_OS_PCA1         
    CMOD = 0x80;            
        CCON = 0x00;   
    CL = 0;
    CH = 0;  
    CCAP1H =0x01;
    CCAP1L =0x68;      
#endif
}
void main(void)
{
    init();
        start();                           
        while(1)
        {
       OS_ALLRun();
    }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表