光立方畢業(yè)設(shè)計論文_第1頁
光立方畢業(yè)設(shè)計論文_第2頁
光立方畢業(yè)設(shè)計論文_第3頁
光立方畢業(yè)設(shè)計論文_第4頁
光立方畢業(yè)設(shè)計論文_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

..基于STC12C5A60S2的光立方設(shè)計【摘要】本次設(shè)計使用512個LED燈制作8*8*8的LED立方體,命名為光立方。采用STC12C5A60S2芯片作為主控,8個74HC573鎖存器和一個ULN2803芯片擴展I/O口,作為外圍控制。通過編程控制I/O口,點亮指定的LED燈,使得顯示不同的畫面。8*8*8光立方因點亮LED燈將會形成各種圖形,如愛心、數(shù)字、雨滴、正方體等十幾種畫面。整個立體呈現(xiàn)不同的造型和圖案,動畫銜接完美,使其變得美輪美奐、絢麗多彩,立體感十足。此外,我們還可以外接音頻輸入,通過AD采樣,快速傅里葉變換FFT,可以讓光立方顯示音頻頻譜。經(jīng)過系統(tǒng)測試,最終到達設(shè)計要求。【關(guān)鍵詞】光立方STC12C5A60S274HC573ULN2803BasedonSTC12C5A60S2oftheLightCubeDesign【Abstract】:The8*8*8LEDcubeismadeof512LEDlights,namedLightCubewhichusedSTC12C5A60S2asmaincontrolchip,ithas874HC573latchesextendedI/Oports,andaULN2803chipasoutcontrol.ThroughprogrammingcontrolI/Oport,theLEDlight.8*8*8cubiclightforlightledswillformavarietyofgraphics,suchasloveheart,numbers,rain,cubeandsoon.animation,cohesionisperfect,stereosenseisdye-in-the-wood.Inaddition,wealsocanexternalaudioinput,throughtheADsampling,fastFouriertransformFFT,canletlightcubedisplayaudiospectrum.Afterthesystemtest,finallytomeetthedesignrequirements.【Keywords】:TheLightCubeSTC12C5A60S274HC573ULN2803目錄13570【摘要】218094【Abstract】216307目錄328875第一章引言169951.1光立方的研究意義1120331.2開展歷程和現(xiàn)狀1143551.3光立方的功能和特點158171.4光立體的優(yōu)越性以及主要應(yīng)用131394第二章控制模塊設(shè)計3181862.1系統(tǒng)總框圖3210842.2總體方案的選擇351092.2.1主控芯片3176492.2總體方案的選擇3121162.2.1主控芯片371882.2.2電源選擇498052.2.3元件選擇422947第三章光立方顯示局部概述7162053.1光立方的制作7282223.1.1光立方的原理7258073.1.2LED燈的選用7198103.1.3LED燈的焊接8275243.2顯示局部檢測94991第四章硬件設(shè)計12139754.1最小系統(tǒng)12219284.2按鍵模塊1248894.3功放模塊12122324.3.1功放原理圖13112374.4呼吸指示燈1334604.5豎排控制電路14167554.6光立方層控制電路15192534.7硬件電路焊接16280194.8元件清單1930619第五章系統(tǒng)軟件設(shè)計20143845.1軟件設(shè)計總體思路2010775.1.1程序設(shè)計框圖20138295.1.2顯示程序設(shè)計213033圖5-3伸縮動畫流程圖22107445.1.3音頻信號頻譜分析2322485第六章系統(tǒng)調(diào)試與測試結(jié)果2588976.1軟件調(diào)試25155876.2光立方初步調(diào)試26216266.2.1檢查電源2660606.3光立方最終調(diào)試27154636.4光立方測試遇到的問題287862結(jié)論3029690致語3130347參考文獻3217136附錄334069附錄1:實物圖3318247附錄2:系統(tǒng)總原理圖3426707附錄3:呼吸燈PCB352508附錄4:光立方主程序35第一章引言本章簡要介紹了光立方的研究意義、開展和現(xiàn)狀,以及所設(shè)計光立方的功能特點,光立方的優(yōu)越性,并依此提出了本論文研究的主要容。1.1光立方的研究意義LED點陣顯示屏已經(jīng)應(yīng)用到了我們生活中的方方面面,科技開展的腳步一直向前,3D電影給人帶來了震撼的視覺體驗,于是想設(shè)計出一種3D顯示屏。通過學(xué)習(xí)"單片機原理與應(yīng)用〔第二版〕"一書,知道LED靜態(tài)顯示和動態(tài)顯示,以及兩種顯示的控制方法。LED點陣顯示屏的特點有比數(shù)碼管實用、廉價、亮度高等優(yōu)點,而且做出來的LED顯示很耐用。具有亮度高、工作電壓低、功耗低、小型化、壽命長、耐沖擊和性能穩(wěn)定等優(yōu)點。LED顯示屏開展前景極為廣闊,利用LED做成3D顯示屏,3DLED顯示不僅可以像LED點陣一樣顯示平面動態(tài)或靜態(tài)圖案,同時還可以立體顯示動態(tài)或靜態(tài)圖案,打破了傳統(tǒng)平面顯示的方式。更是給人不同視覺盛宴。1.2開展歷程和現(xiàn)狀二十一世紀將是平板顯示的時代,根底材料產(chǎn)業(yè)化,使LED燈生產(chǎn)工藝更加完善,本錢更低,應(yīng)用加快開展。LED產(chǎn)品性能的提高,使全彩顯示屏的亮度、色彩、白平衡均到達了比擬理想的效果,完全可以滿足各種相對復(fù)雜的壞境條件要求。同時,由于全彩色顯示屏價格性能比的優(yōu)勢,預(yù)計在未來幾年中的開展中,全彩LED3D顯示屏在戶外廣告媒體中越來越多的代替?zhèn)鹘y(tǒng)的磁翻板、燈箱、霓虹燈等產(chǎn)品,體育場館、舞臺的顯示方面全彩LED3D顯示屏更會成為主流產(chǎn)品。全彩色LED3D顯示屏的廣泛應(yīng)用會是LED3D顯示產(chǎn)業(yè)如開展的一個新的增長點。未來LED3D顯示屏?xí)蛑?guī)化、標準化、產(chǎn)品構(gòu)造多樣化等方向開展。目前,我國主要的LED廣告大屏幕制造廠商主要集中在華北、華東、華南區(qū)域,大型制造商的市場圍幾乎覆蓋了整個中國市場。國產(chǎn)LED大屏幕性價比比擬高,以其獨有的優(yōu)勢占據(jù)了很大一局部市場份額。我國LED顯示屏產(chǎn)業(yè)的快速開展,逐步形成了一批具有一定規(guī)模的骨干企業(yè),而且產(chǎn)品不斷推出新,使LED顯示屏產(chǎn)業(yè)成為我國電子信息產(chǎn)業(yè)的重要組成局部,也是平板顯示領(lǐng)域唯一立足國形成的民族高科技產(chǎn)業(yè)。1.3光立方的功能和特點1、8*8*8的LED陣列立體顯示器。2、連貫圖形顯示效果,渾然一體,一氣呵成,能給欣賞者帶來立體的可視的震撼視覺效果。3、超炫的立體動態(tài)顯示,多種顯示樣式,如面平移、數(shù)字倒計時、方框伸縮、心跳動、雨滴等十多種動畫。4、具有音頻頻譜顯示模式,可隨音頻同步顯示,給欣賞者視覺和聽覺雙重體驗。5、全開放式用戶自定義操控,用戶可根據(jù)自己的喜好自行編寫對應(yīng)的程序。6、光立方置兩種模式:圖形自動播放模式、音頻顯示模式,K2選擇音頻模式,K3選擇圖形自動播放模式。1.4光立體的優(yōu)越性以及主要應(yīng)用1.3D以其亮度高,功耗低,視角大,壽命長,可視距離遠等優(yōu)點而具有極為廣闊的開展前景。隨著人們生活水平的提高,3DLED逐漸應(yīng)用于各行各業(yè)。人們對其的要求也越來越高,已經(jīng)不再滿足于二維平面,進而轉(zhuǎn)向三維平面。3DLED的出現(xiàn)是一個很好的契機。2.LED光立體極具欣賞性,人們可以根據(jù)自己的要求,設(shè)計不同的圖案,展現(xiàn)不同的立體效果??梢哉f它是變幻無窮的。因其極欣賞性,使人們在承受信息,數(shù)據(jù)的同時更加印象深刻,使信息的傳輸更有效率。3.隨著3D技術(shù)的逐步開展,3DLED被廣泛應(yīng)用于現(xiàn)實生活中,比方LED顯示屏,LED圖像,LED立體攝影。這些技術(shù)在我們的生活中隨處可見,電影院,會議場合,舞臺設(shè)計,以及各種娛樂場所。第二章控制模塊設(shè)計2.1系統(tǒng)總框圖光立方系統(tǒng)主要框圖如圖2-1所示,主要包括主控局部、LED顯示局部、電源模塊、功放模塊、以及呼吸指示燈模塊五局部。電源開關(guān)翻開后,呼吸指示燈工作,系統(tǒng)初始化完成后,等待選擇音頻顯示還是動畫自動播放模式,進入音頻模式后可伴隨音頻顯示"跳舞〞動畫。圖2-1圖系統(tǒng)方框圖2.2總體方案的選擇主控光立方系統(tǒng)主要框圖如圖2-1,主要包括主控局部、LED顯示局部、電源模塊、運放模塊、以及呼吸指示燈模塊五局部。整個系統(tǒng)又分軟件局部和硬件局部,良好的硬件設(shè)計為軟件的執(zhí)行提供支撐,為系統(tǒng)工作提供硬件實體;軟件為系統(tǒng)的工作提供各種算法,軟件與硬件的的結(jié)合,是系統(tǒng)高效工作的根底。2.2總體方案的選擇主控芯片本次設(shè)計首先要實現(xiàn)光立方的立體掃描,產(chǎn)生出特定的顯示效果。通過設(shè)計多種多樣的動態(tài)圖畫,給人一種絢麗多彩的效果。此外還要求顯示效果能依音樂節(jié)奏而跳動,這就要求對音樂進展采集。對音樂采集可以采用獨立AD芯片,或者選用帶AD轉(zhuǎn)換功能的MCU。為此,有三種選擇。選擇一:采用STC89C52單片機作為主控,獨立AD0808或者AD0804芯片用做音頻采集。選擇二:采用紅晶科技公司的STC12C5A60S2芯片作為主控。STC12C5A60S2芯片有以下幾個特點:〔1〕其和8051指令、管腳完全兼容。片的具有大容量程序存儲器且是FLASH工藝的。低功耗設(shè)計,擦寫次數(shù)10萬次以上。自帶高達60K字節(jié)FLASHROM,這種工藝的存儲器用戶可以用電的方式瞬間擦除、改寫,具有串口燒寫編程功能。I/O口驅(qū)動電流均可到達20mA,但整個芯片最大不得超過100mA。另外同樣晶振的情況下,速度是普通51單片機的8~12倍,有8路10位ADC,采樣速度可到達25萬次/秒,且超強抗干擾。選擇三:采用DSP芯片作為主控。DSP又叫數(shù)字信號處理器。顧名思義,DSP主要用于數(shù)字信號處理領(lǐng)域,非常適合重復(fù)運算,高密度及大數(shù)據(jù)容量的信號處理?,F(xiàn)在已經(jīng)廣泛應(yīng)用于通信、便攜式儀表、便攜式計算機和雷達、圖像、家用電器、醫(yī)療設(shè)備等領(lǐng)域。其優(yōu)點有:DSP具有硬件乘法器以及特殊指令,依靠硬件乘法器單周期完成乘法運算。具有專門的信號處理指令,相對于其他微處理器用軟件實現(xiàn)各種算法速度快好多倍。芯片置544字的高速SRAM。通過分析以上三種方案,都有其各自優(yōu)點而且都可以實現(xiàn)控制過程。DSP的強大數(shù)據(jù)處理能力和高運行速度,是最值得稱道的兩大特色,價格較高,本次設(shè)計也沒必要那么高的處理速度。單片機的技術(shù)門檻較低,開發(fā)本錢也較低。STC89C52芯片本錢很低,在處理速度上較STC12C5A60S2慢的多,容量也小,。同時為實現(xiàn)本次設(shè)計,還需外加AD采集芯片,加大硬件設(shè)計難度。由于光立方的動畫效果和程序量比擬大,而且要求相比照擬高??紤]到價格,性能方面因素,最終選取處理速度較快、存儲較大且價格適中的STC12C5A60S2芯片作為核心控制芯片。2.2.2電源選擇直接采用5V移動電源。2.2.3元件選擇〔1〕由于燈的個數(shù)比擬多,每層64個LED并聯(lián)共陰,這樣分流到每個LED的電流會變得非常小,會造成無法點亮或者半亮,影響顯示效果。因此所需要的電流相對也比擬大,可以選擇ULN2003或者ULN2803,兩者都是反向輸出,輸出能力可達500mA/50V,可用來做光立方共陰層驅(qū)動。但前者只能驅(qū)動七位,而后者可以驅(qū)動八位,所以選擇ULN2803驅(qū)動。ULN2803是八重達林頓晶體管陣列,1腳至8腳為8路輸入,11到18腳為8路輸出,應(yīng)用時9腳接地,要是驅(qū)動感性負載,10腳接負載電源V+。其部構(gòu)造如圖2-2。其特點有:1、可直接驅(qū)動繼電器。3、可用于電平轉(zhuǎn)換。4、輸入的電平信號為上下電平〔5V或0V〕,輸入低電平時,輸出達林頓管截止。輸入為高電平時,輸出達林頓飽和。圖2-2ULN2803部構(gòu)造〔2〕要做到光立方每一個LED可以自由控制,就需要64列共陽腳都要控制,而STC12C5A60S2單片機I/O顯然不夠,為了單片機送出下一組顯示數(shù)據(jù)時不會立刻丟掉前一次顯示數(shù)據(jù)而造成圖像不完整,本人選用帶有數(shù)據(jù)鎖存功能的74HC573芯片,如圖2-3所示74HC引腳圖。八個鎖存器都是透明的D型鎖存器,當使能〔G〕為高電平時,Q輸出將隨數(shù)據(jù)〔D〕輸入而變。當使能為低電平時,輸出將鎖存在已建立的數(shù)據(jù)電平上。輸出控制不影響鎖存器的部工作,即老數(shù)據(jù)可以保持,甚至當輸出被關(guān)閉時,新的數(shù)據(jù)也可以置入。特別適用于緩沖存放器,I/O通道,雙向總線驅(qū)動器和工作存放器。對它的使用也比擬成熟,因此在驅(qū)動局部使用了熟悉的74HC573,其控制邏輯如圖2-4所示。其優(yōu)點有:1.高阻態(tài);就是輸出既不是高電平,也不是低電平,而是高阻抗的狀態(tài);在這種狀態(tài)下,可以多個芯片并聯(lián)輸出。2.數(shù)據(jù)鎖存;當輸入的數(shù)據(jù)消失時,在芯片的輸出端,數(shù)據(jù)仍然保持。3.數(shù)據(jù)緩沖;加強驅(qū)動能力。LE為鎖存控制端OE為使能端1腳三態(tài)允許控制端低電平有效1D~8D為數(shù)據(jù)輸入端1Q~8Q為數(shù)據(jù)輸出端輸入輸出OE′LEDQLHHHLHLLLLXQ0HXXZ圖2-374HC573引腳圖2.2.4光立方顯示電路的根本框圖LED光立方主要用到了STC12C5A60S2單片機中的P0口、P2口、P3口、串行輸入輸出端以及外接晶體引線端XTAL1和XTAL2。I/O口分配如圖2-5所示。圖2-5I/O分配圖P0口作為數(shù)據(jù)輸出端,單片機控制數(shù)據(jù)傳送到8個74HC573鎖存器的輸入端,而8個74HC573鎖存器輸出端分別控制一排8列LED陽極引腳。P2口作為數(shù)據(jù)輸出端,單片機送出數(shù)據(jù)控制使能端而實現(xiàn)鎖存器的數(shù)據(jù)輸出與鎖存,從而控制數(shù)據(jù)在某一時刻輸出到指定某一排或某幾排。P3口作為數(shù)據(jù)輸出端,單片機部輸出控制數(shù)據(jù)傳送到ULN2803的輸入端,進而控制每一層。通過ULN2803數(shù)據(jù)沒有發(fā)生任何變化,只是電流前后有很大差異,這時候電流將增大很多。第三章光立方顯示局部概述3.1光立方的制作3.1.1光立方的原理借鑒LED點陣控制原理,將光立方可以看做是8個8*8點陣屏的層疊一起。點陣屏的顯示便是光立方一層的顯示,只要通過程序再次控制8個層,便可以實現(xiàn)光立方的顯示,由于人眼的視覺暫留,使我們感覺到看到的東西是一起在亮的,這樣我們就可以看到一個完整圖像,這是本次設(shè)計的根本原理。設(shè)計3D圖形,需要有新的思維方式,發(fā)現(xiàn)三維空間中點、線、面、體的算法規(guī)律。展示3D效果的超炫表現(xiàn)力,讓人享受各種視覺上的沖擊,迎合3D顯示時代的到來。光立方分解為8個8*8LED點陣疊成8層,再用8個引腳來充當8個點陣的開關(guān)。單片機P0、P2、P3實現(xiàn)控制XYZ空間立體控制來顯示特定圖案。3.1.2LED燈的選用本次設(shè)計旨在讓光立方動畫顯示更加絢麗多彩,因此使用2*5*7霧狀散光扁方形磨砂LED〔紅、黃、藍三種〕,紅和黃分別三豎排,剩余兩排用藍色LED。這種燈型更容易看到光點,以獲得更好的視覺效果。額定電壓圍3.0~3.2v,額定電流15~18mA,管腳長度27-29mm,實物圖如圖3-1所示:圖3-1LED實物圖首先,要進展LED燈立體矩陣的搭建。LED搭接過程還是比擬困難的,8*8*8=512LED,分為8層,每層8列,每列8個LED燈,列共陽,層共陰,如圖3-2所示。為使光立方外形的美觀,每一片的LED陣列都要求排列整齊,互相看齊,這對焊接的能力有一定的要求。圖3-2光立方焊接示意圖第一步:水平折彎。這個因為LED本身管腳上有個結(jié),可以徒手完成。本次設(shè)計是層共陰,同時為了視覺效果更好,本人將陰極管腳在水平方向折彎90°,并使之與LED面垂直,如圖3-3所示。同樣的方法,將512個LED燈的陰極都水平折彎。為了焊接的統(tǒng)一性,在折彎的時候盡量保持角度一致。圖3-3LED水平折彎圖3-4LED垂直折彎第二步:垂直折彎??衫眉庾煦Q將LED燈陽極管腳向外折一次再折回原來的方向,如圖3-4所示。這個彎,一定不要太大,正好露出LED外圍2mm打彎適宜,LED的正極折彎后留下的引腳長度必須大于LED的間距25.4mm,以確保有足夠的重合位置以便焊接。LED燈上下之間焊接的時候就就會發(fā)現(xiàn)這一步是非常必要的。3.1.3LED燈的焊接為了方便焊接,自制簡易模具,模具孔位間隔要提前量好,保證在管腳搭接時不要太多或者不能焊接。然后按照單獨8豎排分別焊接,每一排8列,如圖3-5所示。接著將折好的LED燈插入一列,其陰極管腳正好搭接在一起,完成焊接如圖3-6和圖3-7。在這里本人發(fā)現(xiàn)有非常值得注意的一點,因為LED比擬脆弱,在焊接過程中很容易因為高溫而燒毀LED燈,對于這一點,應(yīng)該盡量縮短電烙鐵接觸時間。同時為了確保每一個LED都沒有問題,在完成一層后都要檢查是否可以點亮。圖3-5LED布局示意圖圖3-6LED焊接圖圖3-7LED焊接圖3.2顯示局部檢測對于焊接完成的檢測這一步非常重要,如果安裝完成后再更換LED燈是非常麻煩的事。分別焊接完8豎排LED燈后,將每一豎排LED的都進展檢查,確保每一個LED都可以點亮。這里本人直接在電腦USB輸出口引出電源。這里值得注意一點,USB輸出電源最低3.3V(USB轉(zhuǎn)串口),最高5V左右〔本人用數(shù)字萬用表測了一次是5.16V〕。而LED燈壓降不超過3V,為了因電壓過高燒毀LED燈,在測試之前我們可以選擇了一個適中電阻接在電源一端。(a)(b)〔c〕〔d〕圖3-8檢測過程接下來將電源正極接在第一列LED陽極引腳,負極端依次觸碰各行陰極管腳,觀察并記錄壞掉的LED,如圖3-8-1所示。然后將電源正極接到第二列,負極端依次觸碰各行陰極管腳,如圖〔a〕、〔b〕、〔c〕、〔d〕用同樣的方法,將8豎排全部檢測完成。最后將更換新的LED燈再檢查一遍。另外,還可以將一豎排同時點亮的方式進展檢測,這樣做可能會出現(xiàn)某些LED燈因電流太小無法點亮出現(xiàn)誤判的情況。雖然逐個點亮這樣的檢測方式效率很慢,但可以有效防止上述誤判現(xiàn)象,防止后期發(fā)現(xiàn)給更換帶來更大的不便。在一定程度來說,這樣做也是在提高工作效率。圖3-9LED立方體焊接最后將完成后的8個面進展組成立體焊接,其方法將之前8個面上同一層上陰極依次焊接一起,形成層共陰,用8條細導(dǎo)線分別連接8個層與ULN2803輸出端相連。底層留下64個陽極引腳與8個74HC573輸出端分別焊接一起。如圖3-9所示。第四章硬件設(shè)計4.1最小系統(tǒng)單片機最小系統(tǒng)如圖4-1所示,包括時鐘電路和復(fù)位電路。時鐘電路用于產(chǎn)生單片機工作時必須的控制信號,單片機部電路正是在時鐘信號的控制下,嚴格按照時鐘時序指令進展工作。復(fù)位電路是為了單片機初始化操作準備的,同時也是為了程序在執(zhí)行過程中出現(xiàn)跑飛后快速重新啟動。圖4-1最小系統(tǒng)4.2按鍵模塊圖4-2系統(tǒng)按鍵K1為確定鍵。翻開電源快關(guān)后,可根據(jù)K2和K3鍵選擇進入哪種模式,如圖4-2所示。如果按下K2按鍵,進入音頻頻譜模式;按下K3按鍵時,呼吸燈亮,此時按下K1確定鍵,進入程序執(zhí)行模式,開場動畫完成后會停留"L〞字界面,按下K2顯示"E〞,兩個字母分別代表模擬音頻動畫、自動執(zhí)行模式。4.3功放模塊本人使用手機耳機輸出音頻,因其輸出功率太小,單片機在有些頻段采集不到,所以使用功放將其放大。另外外接喇叭,可以在播放音樂的同時體驗動感的視覺效果。這里我們采用專用功放芯片LM386,這是專為低損耗電源所設(shè)計的功率放大器集成電路。部機構(gòu)如圖4-3所示:圖4-3LM386引腳圖4.3.1功放原理圖透過LM386的1和8腳位間串聯(lián)電容,增益最高可達200,電容。LM386可使用電池為供給電源,無作動時僅消耗4mA電流,且失真低。功放原理圖如圖4-4所示,TBL2為音頻接入口。圖4-4功放電路圖在電路設(shè)計中,前端加一個22uF〔沒有嚴格要求〕的低頻濾波電容,以便濾除帶外噪聲。4.4呼吸指示燈采用555定時芯片,外接幾個電阻、電容,構(gòu)成電容充放電電路,實現(xiàn)LED緩慢亮滅,形象稱做呼吸燈。本人在光立方底座四角各焊接一個LED燈,在接通電源時呼吸燈閃爍,如夏日里的螢火蟲一閃一閃亮晶晶,作為電源指示燈,同時配合LED動畫顯示,使視覺效果趣味更佳。原理圖如圖4-5所示。圖4-5呼吸燈原理圖4.5豎排控制電路單片機P0口同時輸出控制8個74HC573鎖存器輸入端,P2口通過給8個74HC573鎖存器11腳LE上下電平控制是否將數(shù)據(jù)輸出,8個CON8分別代表8豎排LED燈。通過編程控制P0和P2,從而控制數(shù)據(jù)在某一時刻輸出到指定某一排或某幾排。原理圖如圖4-6圖一所示,具體連接電路4-6圖二所示。圖一圖二圖4-6豎排控制電路原理圖4.6光立方層控制電路前面介紹到利用74HC573來控制光立方的每排〔即每一個豎面〕,但如何控制每一豎面的某一層就需要用到層控制芯片ULN2803了,P0口輸出某層數(shù)據(jù)后,控制ULN2803芯片選通該層,即可看到該層相應(yīng)的點的LED燈亮。因光立方層共陰,單片機輸出的電流信號特別小無法直接驅(qū)動大的負載,也就是不能同時驅(qū)動一層或多層LED燈。ULN2803用來功率放大的驅(qū)動芯片,所以可以用ULN2803來實現(xiàn)單片機與負載的連接。單片機P3口輸出數(shù)據(jù)到ULN2803輸入端,經(jīng)過功率放大后輸出控制8個LED層,這里CON8代表LED8個共陰層,如圖4-7圖一所示,與LED燈電路如圖4-7圖二所示。圖一圖4-7光立方層控制電路4.7硬件電路焊接本次硬件焊接直接使用萬用板手工完成。采用標準2.54mm間距布滿焊盤,可根據(jù)電路構(gòu)造合理插裝元器件及連線的洞洞板。相比專業(yè)PCB制版,萬用板具有以下優(yōu)勢:價格低廉、使用方便,不像PCB板出現(xiàn)電路問題時重新制版,另外比擬擴展靈活。在焊接洞洞板之前需要準備足夠的細導(dǎo)線用于走線。本人將硬件局部焊接分上下兩層,上層分布8個74HC573和一個ULN2803以及64個LED陣列插孔,下層安裝單片機、按鍵、呼吸燈模塊以及I/O口引出排插。每一層分正反兩面,正面元件,反面走線。圖4-9主控布局圖4-10主控走線焊接在萬用板正面安裝元器件,按照原理圖,合理擺放元件,同時將模塊電路局部放在一起,不要太過凌亂,如圖4-9所示。盡量使整體布局美觀,布線方便而且有利于在后期檢查。主控局部線路可以實現(xiàn)無穿插分布,所以可以直接用焊錫焊盤完成走線,如圖4-10所示。最后在四角分別焊接一個貼片式LED燈,做呼吸燈,用來電源指示。圖4-1174HC573焊接圖4-12光立方組裝8個74HC573鎖存器分別對應(yīng)LED燈陣列的8豎排,因此在芯片安插的時候按照一定順序擺放,如圖4-11所示。細導(dǎo)線質(zhì)地柔軟,焊接后顯得較為雜亂,所以焊接完成每一條走線的時候用萬用表測試是否斷路。最后為防止屢次檢查而弄斷走線,可以用熱熔膠適當固定一下。焊接完成后將上下兩層用四根銅柱固定。通過四個銅柱卡位,可以使排插和排針正好鑲接在一起,這樣做的好處就是方便拆卸,能夠后期檢查以及功能擴展,如圖4-12所示。另外,在這里值得指出的一個亮點是,本人在LED電源附近加了一個104瓷片電容,如圖4-9所示。因為硬件焊接完成后,檢查硬件電路無誤后,安裝LED燈陣列,通過不斷測試發(fā)現(xiàn)光立方會全亮或者不亮。無意想起玩具小車電路上在電源上加了電容,本人試了一下,結(jié)果動畫才可以完美顯示了。通過上網(wǎng)查資料才知道,平時所用電腦USB接口或者移動電源并不是很穩(wěn)定,容易因為形成干擾。連接電容,主要用于降低電源阻,改善電源帶動負載的能力,濾除低頻干擾等。第五章系統(tǒng)軟件設(shè)計5.1軟件設(shè)計總體思路本次光立方設(shè)計中,要求通過軟件編程控制P0、P2和P3口各個位上下實現(xiàn)對每一個LED燈的亮滅控制,在程序中運用for或while循環(huán)、if語句、帶參函數(shù)等方法,用最少的語句到達最正確的顯示效果。為了能夠增強顯示效果吸引觀眾眼球,可以選擇編寫多種顯示模式。最簡單的顯示模式是靜態(tài)顯示。與靜態(tài)顯示模式相對應(yīng),就有動態(tài)顯示模式,它們所顯示的圖文都是能夠變化的。按照圖文運動的特點又可以分為雨滴、翻轉(zhuǎn)、旋轉(zhuǎn)、縮放等多種顯示模式,這就需要建立各種動畫代碼數(shù)組。但是為了顯示很多種不同動畫,并不意味著一定要重新編寫顯示數(shù)據(jù),可以通過一定的算法從原來的顯示數(shù)據(jù)直接生成,這樣程序編寫就不會過于繁瑣和重復(fù)。5.1.1程序設(shè)計框圖光立方程序設(shè)計主要是控制P0、P2、P3口通過上下電平組合,不同時刻點亮不同LED,在這里就需要考慮數(shù)據(jù)刷新率的問題。我們知道當顯示器播放速率大于15幀的動畫,才會在人眼中形成流暢的效果,為此就需要一個準確的時間基準來一次點亮光立方的每一層,這個值有單片機定時器設(shè)置,同時很可能還需要其他數(shù)據(jù)的采集和處理,所以也應(yīng)該使用多種中斷。開場系統(tǒng)初始化開場系統(tǒng)初始化按鍵掃描按鍵K3"按鍵K2"鍵盤掃描按鍵K1"音頻頻譜動畫AD初始化NNYN自動播放模式自動播放模式頻譜顯示完畢開場動畫播放圖5-1系統(tǒng)主程序流程圖本次設(shè)計采用Keil4軟件編寫C語言程序,C語言簡潔靈活、通俗易懂、兼容性高、編譯方便快捷。并且將整個程序分成多個子函數(shù),例如單片機初始化、主程序、按鍵掃描、顯示程序四局部進展編寫。初始化過程包括中斷初始化、中斷優(yōu)先級配置、定時器配置、AD初始化。在編寫程序時,為了方便屢次調(diào)試,首先可以將每個子程序編寫成一個可以獨立執(zhí)行的完整程序,編譯沒有錯誤后下載到單片機進展驗證。各個子程序都測試成功后整合成一個綜合程序,編譯完成后,再次下載到單片機進展整體測試。5.1.2顯示程序設(shè)計顯示程序本人主要建立多個動畫數(shù)組,這個可以用已有的取模軟件提取動畫代碼,同時也要自己編一些個性動畫代碼。采用動態(tài)掃描方式調(diào)用顯示函數(shù)。所謂動態(tài)掃描顯示就是一個完整的畫面分成好幾幀顯示,每一時刻只顯示畫面的一幀,如果顯示間隔很小,人眼的視覺無法分辨,利用人眼暫留原理,就可以看到一幅完整圖像。自動播放動畫流程圖menu是K1按鍵,通過K1按下次數(shù)選擇執(zhí)行不同動畫模式,程序見附錄四中模塊一。開場開場按鍵選擇while〔1〕case1:case2:模擬音頻動畫MODE_Music()自動播放動畫完畢Switch(menu)圖5-2自動播放模式流程圖1.1動畫一:面平移流程圖光立方動畫顯示,就必須不斷在每個完整圖像顯示后延時一會,再次刷入新的數(shù)據(jù),不斷刷新不同圖像數(shù)據(jù),就可以看到圖像動起來了。圖像之間切換速度很快,在人們眼中顯示的效果便是流暢的動畫。開場開場系統(tǒng)初始化顯示數(shù)據(jù)送P0P2選通列,鎖存器輸出選通數(shù)據(jù)左移左移次數(shù)>8顯示完成子程序返回圖5-2面平移顯示流程圖1.2動畫二:方框伸縮動畫流程圖如5-3所示,程序見附錄四中子模塊二。go:上次動畫執(zhí)行完畢標記go=1,否那么go=0。動畫顯示動畫顯示下一動畫開場go=1go=0;進入shensuo()執(zhí)行伸縮代碼庫if〔go〕圖5-3伸縮動畫流程圖至此,其他動畫流程圖就不再一一列舉了。5.1.3音頻信號頻譜分析FFT是根據(jù)離散傅氏變換的奇、偶、虛、實等特性,對離散傅立葉變換的算法進展改良獲得的。它對傅氏變換的理論并沒有新的發(fā)現(xiàn),但是對于在計算機系統(tǒng)或者說數(shù)字系統(tǒng)中應(yīng)用離散傅立葉變換,可以說是進了一大步。設(shè)x(n)為N項的復(fù)數(shù)序列,由DFT變換,任一X〔m〕的計算都需要N次復(fù)數(shù)乘法和N-1次復(fù)數(shù)加法,而一次復(fù)數(shù)乘法等于四次實數(shù)乘法和兩次實數(shù)加法,一次復(fù)數(shù)加法等于兩次實數(shù)加法,即使把一次復(fù)數(shù)乘法和一次復(fù)數(shù)加法定義成一次"運算〞〔四次實數(shù)乘法和四次實數(shù)加法〕,那么求出N項復(fù)數(shù)序列的X〔m〕,即N點DFT變換大約就需要N^2次運算。當N=1024點甚至更多的時候,需要N2=1048576次運算,在FFT中,利用WN的周期性和對稱性,把一個N項序列〔設(shè)N=2k,k為正整數(shù)〕,分為兩個N/2項的子序列,每個N/2點DFT變換需要〔N/2〕2次運算,再用N次運算把兩個N/2點的DFT變換組合成一個N點的DFT變換。這樣變換以后,總的運算次數(shù)就變成N+2*〔N/2)^2=N+〔N^2〕/2,轉(zhuǎn)換過程如圖5-3所示圖5-3N=8DFT-FFT首先,我們用ADC去采樣一個模擬信號之后,使之變?yōu)閿?shù)字信號。假設(shè)我們N個采樣點,經(jīng)過FFT運算之后,就可以得到N個點的FFT結(jié)果。但通常為了方便進展FFT運算常N取2的整數(shù)次方。而本次光立方設(shè)計可以采集16便可以滿足要求,由于FFT結(jié)果的對稱性,通常只使用前N/2個采樣點的結(jié)果?;?-FFT算法是倒位序存儲,但算法完成后結(jié)果按正序輸出,將原始采樣數(shù)據(jù)放在數(shù)組tab[16]中,tab[0]存放第一次讀取的AD轉(zhuǎn)換數(shù)據(jù),tab[1]存放第二次讀取的AD轉(zhuǎn)換值,一次類推,完成16次轉(zhuǎn)換呢值得存放,倒敘輸出存放在tab1[16]數(shù)組中,F(xiàn)FT算法如下:X〔k〕=X′〔k〕+X′〔k+b〕WNp〔1〕X〔k+b〕=X′〔k〕-X′〔k+b〕WNp〔2〕式中,WNp=cos〔2πP/N〕-jsin〔2πP/N〕。將式〔1〕化簡成實部和虛部的形式,得到:XR〔k〕=XR′〔k〕+XR′〔k+b〕cos〔2πP/N〕+XI′〔k+b〕sin〔2πP/N〕〔3〕XI〔k〕=XI′〔k〕-XR′〔k+b〕sin〔2πP/N〕+XI′〔k+b〕cos〔2πP/N〕〔4〕同理,式〔2〕化簡得到:XR〔k+b〕=XR′〔k〕-XR′〔k+b〕cos〔2πP/N〕-XI′〔k+b〕sin〔2πP/N〕〔5〕XI〔k+b〕=XI′〔k〕+XR′〔k+b〕sin〔2πP/N〕-XI′〔k+b〕cos〔2πP/N〕〔6〕可見每個蝶形運算的輸出都是由其輸入值與某一正弦函數(shù)和余弦函數(shù)的乘積累加得到的。經(jīng)過FFT變換,然后取某些頻率項的幅值,量化顯示,驅(qū)動LED點陣,點亮相應(yīng)的LED燈。流程圖如圖5-4所示,程序見附錄四中模塊三。開場開場AD初始化啟動AD采集是否16個值開場采集中斷處理〔FFT〕頻譜顯示完畢圖5-4頻譜顯示流程圖第六章系統(tǒng)調(diào)試與測試結(jié)果一個完整的電子設(shè)計,無論模塊設(shè)計如何準確,最終整體系統(tǒng)都要進展不斷的測試和調(diào)試。在本次光立方設(shè)計中,先進展軟件局部調(diào)試,最后將程序下載到單片機進展整體調(diào)試。軟件局部調(diào)試主要將編寫好的C語言程序編譯產(chǎn)生單片機可讀取的.HEX二進制文件;整機調(diào)試主要是看編寫程序端口控制與硬件設(shè)計是否匹配,顯示結(jié)果是否按程序設(shè)計執(zhí)行。6.1軟件調(diào)試首先本人編寫一段簡單程序,要現(xiàn)點亮全部LED燈,以及可以通過按鍵選擇顯示"U〞形字樣。只要P0口8位全部輸出高電平,P3同樣輸出高電平〔ULN2803是電平轉(zhuǎn)換功能〕,也就是語句P0=0xff;P3=0xff;就可以實現(xiàn)光立方的全部點亮。而輸出"U〞形字樣需要將其分解成多幀掃描顯示,如圖6-1所示。圖6-1U型分解圖圖6-2測試程序調(diào)試程序編譯成功產(chǎn)生.hex文件,結(jié)果如圖6-2所示。本人此次編寫這段簡短程序有兩個目的。第一:編程點亮所有LED燈,可以用軟件控制方法再次檢查是否有壞掉的LED燈。第二:通過編程"U〞字樣程序控制,檢查顯示是否按程序設(shè)計執(zhí)行,同時可以確定I/O口上下位分別對應(yīng)控制的行與列,可以防止編程所顯示的圖像都是倒立的或者不是所要設(shè)計的畫面。6.2光立方初步調(diào)試檢查電源用5V移動電源用于單片機,功放模塊供電,并接到主控扳上,檢查電源指示燈是否閃爍,單片機能否正常工作。將編譯好的程序下載到單片機進展整體檢測圖6-4LED全亮圖6-5"U〞型字樣下載完成后,翻開電源,通過按鍵K2,發(fā)現(xiàn)有一列燈沒有亮,由于光立方每一層共陰,每一列LED共陽接法,根據(jù)此原理本人檢查發(fā)現(xiàn)接頭沒有插好,重新插緊,問題解決了,顯示效果如圖6-4所示,接著按下K3可以看到顯"U〞型字樣,可能由于點亮排數(shù)太少,或者拍攝角度不對造成顯示效果不是太好,如圖6-5所示??傊敬螠y試根本符合要求。6.3光立方最終調(diào)試經(jīng)初步測試無誤后,開場編寫光立方整程序。為了便于后期方便讀懂程序以及再次填加某些動畫,本人將程序分三局部編寫,分別是主程序,音頻采集與現(xiàn)實模塊,動畫自動播放模塊。主程序主要實現(xiàn)鍵盤掃描并確定執(zhí)行哪種模式現(xiàn)實。經(jīng)過屢次編譯、修改,程序編譯結(jié)果如圖6-6所示。圖6-6完整程序編譯結(jié)果圖6-7顯示效果將完成編譯程序下載到單片機上,可以發(fā)現(xiàn)還是有很多問題的。比方延時太慢造成的圖像顯示亮度不均勻,如圖6-7所示?;蛘邉赢嬨暯硬贿B貫,出現(xiàn)不適宜的停頓。6.4光立方測試遇到的問題〔1〕發(fā)現(xiàn)動畫顯示一段時間后跳出到開場界面,為此糾結(jié)很長時間,但最后發(fā)現(xiàn)用的電源〔USB〕電流不穩(wěn)定,后來換用5V移動電源供電,光立方正常運行程序顯示動畫?!?〕光立方正常運行時發(fā)現(xiàn)頂層LED燈亮度與其他各層不同。以為驅(qū)動電路有問題,就把8個74HC573芯片仔細檢查一遍,發(fā)現(xiàn)驅(qū)動模塊工作正常,最后檢查LED焊接發(fā)現(xiàn)頂層陰極斷路。問題解決后,亮度一致,光立方動畫顯示正常?!?〕光立方動畫顯示不連貫,有明顯停頓,造成這樣顯示一般是延時過長。通過改小延時函數(shù)參數(shù),動畫完美顯示。結(jié)論本次光立方設(shè)計主要通過單片機控制512個LED燈的自由點亮,從而可以實現(xiàn)各種動畫顯示,在設(shè)計過程期間出現(xiàn)很多錯誤,都被及的發(fā)現(xiàn)并改正。下載程序檢測時發(fā)現(xiàn)圖案不完整,檢查程序后發(fā)現(xiàn),原來是在送完P(guān)0口數(shù)據(jù)后,就立馬加了個延時,再送P2口數(shù)據(jù),再延時,這樣導(dǎo)致P0口與P2口之間的顯示效果在視覺上慢了半拍,達不到預(yù)期圖案要顯示的效果,最后將中間的那個延時程序調(diào)到送完P(guān)2口數(shù)據(jù)之后再給其進展延時,通過調(diào)試發(fā)現(xiàn)能夠正常顯示。在編寫各種圖案顯示代碼的時候,讓我深刻的體會到,要想編好相應(yīng)的代碼,雖然可以配合取模軟件,但光立方的三維空間的想象能力還是比擬重要,512個燈到底是要求哪個燈給高電平哪個燈給低電平,還要根據(jù)顯示要求組合好。以防出現(xiàn)亂碼顯示情況。本次設(shè)計硬件局部相對簡單,主要是動畫編寫,因此熟練應(yīng)用定時器、中斷等編程方式,可以大大減少程序冗余。在做音頻頻譜過程中,由于不會實時處理漂浮點下落速度,從而使頻譜顯示顯示變化高度一致,沒有到達想要的顯示效果,這也是本次設(shè)計的一個缺乏之處。致語接近半年的畢業(yè)設(shè)計完畢了,在這段時間的設(shè)計和學(xué)習(xí)過程中,我得到了很多人的幫助,學(xué)到了很多東西,由衷的感一直以來關(guān)心和幫助我的教師與同學(xué)。首先,感我的指導(dǎo)教師任志山和其他指導(dǎo)過我的教師們。在選定設(shè)計課題的時候,任教師給我們每個同學(xué)分析近幾年的開展趨勢,引出了以"實用〞、"創(chuàng)新〞為特色的設(shè)計要求,并給我們每個指出了設(shè)計課題的大方向。在設(shè)計過程中,教師以自己精專的知識,不斷地啟發(fā)我,使我的設(shè)計得以順利進展。有了教師們的監(jiān)視和指導(dǎo),讓我很好地把所學(xué)的專業(yè)知識得以應(yīng)用,在實踐中再次提高。而且大大培養(yǎng)了自己的動手能力,這對我以后的工作會有很大的幫助。另外,每個畢業(yè)的學(xué)生都要面臨畢業(yè)論文的問題,一個優(yōu)秀的設(shè)計論文,需要注意的細節(jié)很多,而學(xué)生很難一次性做到位。比方在寫論文時,存在論文布局、容、格式等方面的問題,教師給我一一講解與修改,花費了教師的很多時間,任教師以其淵博的學(xué)識、嚴謹?shù)闹螌W(xué)態(tài)度、敏捷的思維、的工作作風(fēng)以及飽滿的工作熱情給我留下了深刻的影響,是我終生學(xué)習(xí)的典范。在這里我特別我的指導(dǎo)教師——任志山。再次,我要感同學(xué)對我?guī)椭椭笇?dǎo),在設(shè)計中不懂的請教同學(xué)時,總是很熱心的幫我發(fā)現(xiàn)問題,尋找更好的解決方法。最后,祝你們身體安康,工作順利。參考文獻[1]"單片機、DSP、PLD、EDA的介紹、比擬和分析"電子技術(shù)王海林王瑋2004年[2]"新概念51單片機C語言教程[M]"電子工業(yè)郭天祥2009[3]"基于單片機的數(shù)據(jù)采集與控制系統(tǒng)[J]"中國新通信馬凱2014.9[4]"常用電子元件及其應(yīng)用"人民郵電永甫2005[5]"單片機實現(xiàn)音頻頻譜顯示的快速算法研究"高等教育吳吉發(fā)特放2009.11[6]"基于單片機的LED點陣顯示系統(tǒng)的設(shè)計[J]"計算機與數(shù)字工程戴祿君戰(zhàn)峰2014.4[7]"基于單片機的夢幻光立方3D顯示器設(shè)計與制作[J]"電腦編程技巧與維護魯宛生王林景王林生2013.14.[8]"國外家用LED燈簡介及我國相關(guān)產(chǎn)業(yè)開展對策"瑞西工業(yè)大學(xué)2010.15[9]"KeilSoftware_Cx51pilerUser’sGuide"09.2001[10]"國慶60周年聯(lián)歡晚會"光立方"的設(shè)計與實施[J]"演藝科技白明2009.06[11]"基于STC單片機的8×8×8LED光立方系統(tǒng)設(shè)計[J]"自然科學(xué)版肖英行杰2013.06附錄附錄1:實物圖圖一圖二圖三附錄2:系統(tǒng)總原理圖附錄3:呼吸燈PCB附錄4:光立方主程序#include<STC12C5A60S2.h>#include<display.h>#include<FFT.h>ucharfunction_tab=0;/*************主函數(shù)******************/voidmain(){ while(1) { P3=0x00; if(!keyamenu)//判斷K2是否按下 { delay(30);//按鍵驅(qū)抖 if(!keyamenu) {function_tab=1;FFT_Deal();}//標記1音頻顯示動畫 } if(!keyout)//判斷K3是否按下 { delay(30);//按鍵驅(qū)抖 if(!keyout) {function_tab=2;dis();}//標記2自動播放模式 } }}模塊一/**********動畫播放模式選擇********/voiddis(){ inti,j; chargo; delay(800); init(); //初始化函數(shù)////////////////////////呼吸燈 P2=0xff; P0=0; P2=0x80; P3=1; while(!menu) { for(i=0;i<400;i++) { key_menu_scan(); if(menu) break; P0=0x80; delay1(i); P0=0; delay1(400-i); if(i<200) { j=2; while(j--) { P0=0x80; delay1(i); P0=0; delay1(400-i); } } } for(i=0;i<401;i++) { if(menu) break; key_menu_scan(); P0=0x80; delay1(400-i); P0=0; delay1(i); if(i>200) { j=2; while(j--) { P0=0x80; delay1(400-i); P0=0; delay1(i); } } } }//P3M0=0x00;///////////////////////////開機掃描 turn_on(9); H_scan(5); V_scan(5); W_scan(5);/////////////////主菜單項選擇項 while(1) { hy(number+37*8,2); while(!amenu) { W_side(number+(36+menu)*8,1,45); } switch(menu){ case1://模擬音譜顯示 delay(400); while(!out) { TR0=1; MODE_Music();//模擬音頻 } TR0=0; break; case2://動畫顯示 delay(400); amenu=0;//menu=1; go=1; cut(); go=1; while(go) //動畫1:倒計時 { for(i=0;i<10;i++) hy(number+27*8+i*8,3); if(out) go=1; else go=0; } go=1; //字母旋轉(zhuǎn) while(go) { zimu(number,19,12,1); if(out) go=1; else go=0; } go=1; //方框縮放 while(go) { for(i=0;i<2;i++) for(j=0;j<2;j++) cube(0,j,6); for(i=0;i<2;i++) for(j=0;j<2;j++) cube(1,j,6); if(out) go=1; else go=0; } go=1; //上升沿 while(go) { rain(1,10,9); if(out) go=1; else go=0; } go=1; while(go) //旋轉(zhuǎn)條 { xuanzhuantiao(1,4,4); xuanzhuantiao(1,3,5); xuanzhuantiao(1,2,6); xuanzhuantiao(1,1,7); if(out) go=1; else go=0; } go=1; //雪花旋轉(zhuǎn) while(go) { donghua(bianxing_table,11,1,24); xzcube(); donghua(y_table,6,5,5); donghua(x_table,6,5,5); donghua(z_table,6,5,5); link00(); if(out) go=1; else go=0; } go=1; while(go) //伸縮 { shensuo(5); if(out) go=1; else go=0; } go=1; while(go) //波浪 { donghua(sin_cube_table,14,22,5); if(out) go=1; else go=0; } go=1; //方框縮放 while(go) { for(i=0;i<3;i++) for(j=0;j<3;j++) cube(0,j,6); for(i=0;i<3;i++) for(j=0;j<3;j++) cube(1,j,6); if(out) go=1; else go=0; } go=1; while(go) //愛心跳動 { donghua(hart_table,2,10,32); if(out) go=1; else go=0; } go=1; while(go) //閃點樓梯 { for(i=1;i>0;i--) shandian(i); if(out) go=1; else go=0; } go=1; while(go) //字母上升9-0 { szfc0(10); if(out) go=1; else go=0; } go=1; //上升沿 while(go) { rain(1,10,9); rain(0,10,9); if(out) go=1; else go=0; } break; } out=0; amenu=0; menu=1; }}模塊二:/*************伸縮程序***********/voidshensuo(ucharv){ chari,j; uchara[64]={0}; for(i=0;i<64;i++) a[i]=0xff; for(i=0;i<7;i++) { move(a,0,0,1); zhen(a,v); } for(i=0;i<7;i++) { move(a,0,1,1); for(j=0;j<64;j++) a[j]|=0x01; zhen(a,v); } for(i=0;i<7;i++) { move(a,2,0,1); zhen(a,v); } for(i=0;i<7;i++) { move(a,2,1,1); for(j=0;j<8;j++) a[j]|=0xff; zhen(a,v); } for(i=7;i>0;i--) { for(j=0;j<8;j++) a[j*8+i]=0; zhen(a,v); } for(i=1;i<8;i++) { for(j=0;j<8;j++) a[j*8+i]|=0xff; zhen(a,v); }}模塊三/***********音頻顯示**********/voidFFT(){ intxdatai,bb,j,k,p; intmax,a[6]; intxdataTR,TI,temp; for(i=0;i<64;i++) {Real[BRTable[i]]=STC_ADC();Image[i]=0; }for(i=1;i<=6;i++){bb=1;bb<<=(i-1);for(j=0;j<=bb-1;j++){p=1;p<<=(6-i);p=p*j;for(k=j;k<64;k=k+2*bb){ key_amenu_scan(); key_out_scan();TR=Real[k]; TI=Image[k]; temp=Real[k+bb];Real[k]=Real[k]+((Real[k+bb]*cos_tabb[p])>>7)+((Image[k+bb]*sin_tabb[p])>>7);Image[k]=Image[k]-((Real[k+bb]*sin_tabb[p])>>7)+((Image[k+bb]*cos_tabb[p])>>7);Real[k+bb]=TR-((Real[k+bb]*cos_tabb[p])>>7)-((Image[k+bb]*sin_tabb[p])>>7);Image[k+bb]=TI+((temp*sin_tabb[p])>>7)-((Image[k+bb]*cos_tabb[p])>>7);Real[k]>>=1;Image[k]>>=1;Real[k+bb]>>=1;Image[k+bb]>>=1;}}} max=0; for(i=0;i<6;i++) { a[i]=sqrt_16((Real[i+1]*Real[i+1]+Image[i+1]*Image[i+1])>>1); if(a[i]<2) a[i]=0; else a[i]-=2; if(max<a[i]) max=a[i]; } if(max>7) { max/=7; for(i=0;i<6;i++) { a[i]/=max; } } for(i=0;i<6;i++) c[i]=a[i];}/*********AD初始化函數(shù)**********/voidADC_Init(){ P1ASF=0X01;//P1.0音頻采樣 AUXR1|=0X04; ADC_CONTR=0X88;//AD電源開啟 EA=1; EADC=1;//AD采樣開場}/*********音頻顯示模式******/voidFFT_Deal(){ uintADC_result_deal=0,i=0; GPIO_Init();//I/O口初始化 ADC_Init();//AD初始化 while(1) { if(temp>=20) { temp=0; ADC_result_deal=ADC_result/20;//去20個數(shù)的平均值 ADC_result=0; switch(ADC_result_deal*20/256) { case8:display_dat_deal(0xff,0);break; case7:display_dat_deal(0x7f,0);break; case6:display_dat_deal(0x3f,0);break; case5:display_dat_deal(0x1f,0);break; case4:display_dat_deal(0x0f,0);break; case3:display_dat_deal(0x07,0);break; case2:display_dat_deal(0x03,0);break; case1:display_dat_deal(0x01,0);break; default:display_dat_deal(0x00,0);break; } } }}/********AD轉(zhuǎn)換中斷******/voidadc()interrupt5{ temp++; ADC_CONTR&=0X00;//關(guān)閉AD轉(zhuǎn)換 ADC_result+=ADC_RESL; ADC_CONTR|=0X88;//開啟AD轉(zhuǎn)換}/**********局部動畫代碼*********/ucharcodeyc_table[]={//2幀,yinchu函數(shù)使用 0x00,0x00,0x00,0x7e,0x7e,0x00,0x00,0x00,//1I 0x00,0x00,0x00,0x7e,0x7e,0x00,0x00,0x00, 0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00, 0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00, 0x00,0x00,0x00,0x18,0x18,0x00,0x00

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論