版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 本科畢業(yè)論文</b></p><p><b> (20 屆)</b></p><p> LED音樂頻譜設(shè)計與制作</p><p> 所在學(xué)院 </p><p> 專業(yè)班級 自動化
2、 </p><p> 學(xué)生姓名 學(xué)號 </p><p> 指導(dǎo)教師 職稱 </p><p> 完成日期 年 月 </p><p> 畢業(yè)設(shè)計(論文)任務(wù)書</p><
3、;p> 學(xué)士學(xué)位論文原創(chuàng)性聲明</p><p> 本人聲明,所呈交的論文是本人在導(dǎo)師的指導(dǎo)下獨立完成的研究成果。除了文中特別加以標(biāo)注引用的內(nèi)容外,本論文不包含法律意義上已屬于他人的任何形式的研究成果,也不包含本人已用于其他學(xué)位申請的論文或成果。對本文的研究作出重要貢獻的個人和集體,均已在文中以明確方式表明。本人完全意識到本聲明的法律后果由本人承擔(dān)。</p><p> 作者簽名:
4、 日期: 年 月 日</p><p> 學(xué)位論文版權(quán)使用授權(quán)書</p><p> 本學(xué)位論文作者完全了解學(xué)校有關(guān)保留、使用學(xué)位論文的規(guī)定,同意學(xué)校保留并向國家有關(guān)部門或機構(gòu)送交論文的復(fù)印件和電子版,允許論文被查閱和借閱。本人授權(quán)南昌航空大學(xué)科技學(xué)院可以將本論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫進行檢索,可以采用影印、縮印或
5、掃描等復(fù)制手段保存和匯編本學(xué)位論文。</p><p> 作者簽名: 日期: 年 月 日</p><p> 導(dǎo)師簽名: 日期: 年 月 日</p><p> LED音樂頻譜設(shè)計與制作</p><p>
6、摘要:電子信息技術(shù)幾乎主宰了整個電器行業(yè)的發(fā)展,隨著電子技術(shù)的進步發(fā)展在功率放大器的設(shè)計上功能也不斷更新。功率放大器在家電、數(shù)碼產(chǎn)品中的應(yīng)用也越來越廣泛,與我們?nèi)粘I钣兄芮嘘P(guān)系。隨著生活水平的提高,人們越來越注重視覺,音質(zhì)的享受。音頻頻譜顯示器不但能夠直觀的顯示信號輸入的狀況,而且在美學(xué)方面給予人好的視覺享受和,在某一方面來說頻譜顯示器賦予了音樂的動態(tài)美,讓原本抽象的電信號,具體化,實質(zhì)化。</p><p>
7、 本文通過使用單片機和數(shù)字信號處理技術(shù),實現(xiàn)了單片機控制的音樂頻譜顯示系統(tǒng)。系統(tǒng)分為,聲音采集單元,聲音處理單元和顯示單元。其中聲音采集單元包括聲音接收和 A/D 轉(zhuǎn)換系統(tǒng)。聲音接收單元接收到的音頻模擬信號,經(jīng)過 A/D 轉(zhuǎn)換為數(shù)字信號,送給下一級處理單元處理。聲音處理單元采用C52單片機進行快速傅立葉變換處理。顯示單元接收處理后的信號,控制16*16LED板進行顯示。軟件方面使用單片機進行DFT,從而判斷出該時間段音頻信號的主譜,跟
8、隨著音樂節(jié)拍和強弱的變化來控制LED亮度和暗滅的實時變化,實現(xiàn)音樂的頻譜分析并加以燈光顯示。</p><p> 關(guān)鍵字:單片機 功率放大器 A/D轉(zhuǎn)換 快速傅立葉變換</p><p><b> 指導(dǎo)老師簽名:</b></p><p> LED Design and Production of the Music Spe
9、ctrum</p><p> Abstract:Electronic information technology has occupied almost the entire appliance industry, with the advances and development of electronic technology on the design of power amplifier featur
10、es are constantly updated. Closely related to our daily life, power amplifiers in applications of home appliances and digital products are increasingly widespread. With the improvement of living standards, there is a gro
11、wing emphasis on visual and audio enjoyment. Audio spectrum display can not only show th</p><p> This paper discusses that using the single-chip and digital signal processing technology could make music spe
12、ctrum display system controlled by single-chip microcomputer possible. The system is divided into voice acquisition unit, the voice processing unit and display unit. Voice acquisition unit includes the sonic receiving an
13、d A/D conversion system. The audio analog signal which is received by sonic receiver unit is transformed by A/D conversion system to be a digital signal and, after that, i</p><p> Keywords: SCM singlechip
14、 power amplifier A/D conversion </p><p> Fast Fourier Transform Algorithm</p><p> Signature of Supervisor :</p><p><b> 目 錄</b></p><p
15、><b> 1 引言1</b></p><p> 2 LED音樂頻譜設(shè)計2</p><p><b> 2.1設(shè)計思路2</b></p><p> 2.2硬件及電路設(shè)計部分2</p><p> 2.2.1單片機電路設(shè)計2</p><p> 2.2
16、.2 16*16LED顯示板設(shè)計5</p><p> 2.2.3 A/D轉(zhuǎn)換模塊設(shè)計6</p><p> 2.2.4行驅(qū)動器7</p><p> 2.2.5 列驅(qū)動器8</p><p> 2.2.6 音頻放大電路9</p><p> 2.2.7 繼電器切換電路10</p><p
17、> 3 程序設(shè)計部分11</p><p> 3.1 音頻信號的采集和預(yù)處理11</p><p> 3.1.1 采樣頻率11</p><p> 3.1.2 樣本大小11</p><p> 3.2 音頻頻譜算法11</p><p> 3.2.1 倒位序及其優(yōu)化算法11</p>&
18、lt;p> 3.2.2 蝶形運算及其優(yōu)化算法12</p><p> 3.3 源程序設(shè)計13</p><p> 3.3.1 快速傅立葉變換程序13</p><p> 3.3.2 AD采樣控制程序14</p><p> 3.3.3 系統(tǒng)初始化和循環(huán)控制部分15</p><p> 3.3.4 文字
19、滾動程序15</p><p><b> 4 設(shè)計總結(jié)25</b></p><p><b> 參考文獻26</b></p><p><b> 致 謝27</b></p><p><b> 附 錄28</b></p>
20、<p> LED音樂頻譜設(shè)計與制作</p><p><b> 1 引言</b></p><p> LED燈已經(jīng)充斥于人們生活中的方方面面,例如廣場、火車站、機場等公共場所顯示重要信息的LED顯示屏;商場、電影院外設(shè)的LED廣告屏;工廠生產(chǎn)線的指示器;人們生活中用到的手電筒等等。因此LED作為一種能耗低,亮度高,壽命長的燈具,在今后一定會成為主流產(chǎn)品。
21、而單片機作為一個已經(jīng)發(fā)展了很久的微型計算機,已經(jīng)具有可靠性高,處理功能強,速度快,低電壓,低功耗,控制功能強等特點。本課題為基于單片機的LED音樂頻譜顯示器的設(shè)計與制作,利用了單片機的處理能力強等特點,通過聲音采集,聲音處理之后在LED顯示屏上顯示出跳動的音符。聲音采集單元收集音頻信號,送給A/D轉(zhuǎn)換器進行處理,隨之輸出不同電壓的電信號給作為主處理器的89C52單片機。通過設(shè)計并輸入程序,是這些電信號在單片機內(nèi)部進行快速傅立葉變換(主要
22、運算方法為蝶形運算)。在經(jīng)過運算處理之后,由行列驅(qū)動器驅(qū)動16*16LED點陣,控制LED燈的明暗。這樣一來人們聽到的音頻就成功的轉(zhuǎn)化為可以被視覺接受的跳動的圖像畫面。</p><p> 本次設(shè)計中,不僅僅可以顯示音樂的頻譜,還額外添加了圖文顯示功能。圖文顯示功能是通過動態(tài)掃描來完成的。利用人眼的視覺暫留現(xiàn)象,快速的刷新LED的明滅次序,這樣就可以展現(xiàn)出一個穩(wěn)定或者滾動的文字圖形。開機的滾動文字,和圖形變換,可
23、以根據(jù)輸入單片機的程序來改變,這樣一來就使使器件更具人性化,也使得設(shè)計提升一個檔次。下面就詳細介紹該課題的設(shè)計與制作過程。</p><p> 2 LED音樂頻譜設(shè)計</p><p><b> 2.1設(shè)計思路</b></p><p> 本次設(shè)計的目的是顯示音樂頻譜,因此設(shè)計電路分成以下幾個部分:(1)單片機;(2)LED顯示屏;(3)行、
24、列驅(qū)動器;(4)A/D轉(zhuǎn)換器;(5)顯示電路。</p><p> 原理方框圖如圖2.1:</p><p><b> 2</b></p><p> 圖2.1 音樂頻譜顯示器原理方框圖</p><p> 2.2硬件及電路設(shè)計部分</p><p> 2.2.1單片機電路設(shè)計</p>
25、<p> 2.2.1.1 STC89C52單片機</p><p> 本次設(shè)計利用STC89C52單片機,這是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲器,擁有8位CPU以及在系統(tǒng)可變成Flash。其具有以下標(biāo)準功能:8K字節(jié)Flash,512字節(jié)RAM,32位I/O口線,看門狗定時器,內(nèi)置4KB EEPROM,MAX810復(fù)位電路,三個16 位 定時器/計
26、數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口。</p><p> 圖2.2 89C52引腳說明</p><p> 2.2.1.2電源電路設(shè)計</p><p> 單片機的供電運用LM78L05穩(wěn)壓芯片配合直流穩(wěn)壓電源構(gòu)成。直流輸入低于15V的電源,輸出為5V(誤差小于5%),這樣一來就可以滿足單片機和其他芯片的供電要求。</p><p>
27、 單片機的電源電路如圖2.3:</p><p> 圖2.3 單片機電源電路</p><p> 2.2.1.3 晶振電路設(shè)計</p><p> 時鐘電路設(shè)計一般有內(nèi)部時鐘方式和外部時鐘方式兩種。此次設(shè)計中采用內(nèi)部時鐘方式,將XTAL1與XTAL2之間跨接一個石英晶振和一個微調(diào)電容,形成一個穩(wěn)定的自激震蕩器。電容值取30pF左右,它的大小會影響震蕩頻率、振蕩器穩(wěn)定
28、和起振的速度。為了減少導(dǎo)線之間的寄生電容,晶振和電容必須盡可能靠近單片機來安裝,這樣才能保證晶振能夠穩(wěn)定可靠的工作。</p><p> 單片機晶振電路如圖2.4:</p><p> 圖2.4 單片機晶振電路</p><p> 2.2.1.4 復(fù)位電路設(shè)計</p><p> 復(fù)位電路是用來維持單片機最小系統(tǒng)運行的基本電路。復(fù)位電路分為上
29、電復(fù)位和手動復(fù)位兩種方式。</p><p> 圖2.5 上電復(fù)位 圖2.6 手動復(fù)位</p><p> 有的時候系統(tǒng)在運行過程中會出現(xiàn)程序出錯的情況,在程序開發(fā)過程中,經(jīng)常需要手動復(fù)位。所以設(shè)計中一般選擇手動復(fù)位。</p><p> 高頻率的時鐘有利于程序更快的運行,也可以實現(xiàn)更高的信號采樣率,也能夠?qū)崿F(xiàn)更多的功
30、能。但這樣也對系統(tǒng)本身的要求更高,而且功耗比較大,運行環(huán)境的條件也更多。因為單片機本身用于一般工業(yè)控制時,并非高速信號采樣處理,所以選取合適的頻率即可。合適頻率的晶振對于選頻信號強度與準確度都有好處,本次設(shè)計采用8.000M無源晶振接入XTAL1和XTAL2兩個管腳。并聯(lián)兩個30pF瓷片電容來幫助起振。</p><p> 在本次設(shè)計中,采用上電復(fù)位電路,通過對外部復(fù)位電路的電容充電,使得電源Vcc的上升時間不超
31、過1ms來完成復(fù)位。該電路采用一個1K左右的電阻和一個10μF的電容串聯(lián)完成,如圖2.7:</p><p><b> 圖2.7 復(fù)位電路</b></p><p> 2.2.2 16*16LED顯示板設(shè)計</p><p> 本設(shè)計中的LED顯示板是由共196個發(fā)光二極管(即LED)組成,形成一個16*16矩陣的LED顯示屏。之前所提及的行列
32、驅(qū)動器的設(shè)計在此進行說明。引16根行驅(qū)動器線接至發(fā)光二極管的正極,引16根列驅(qū)動器線接至發(fā)光二極管的負極。這樣就能完成單片機對LED顯示屏的控制。其原理圖見附錄A。</p><p> 2.2.2.1 圖文顯示</p><p> 圖文顯示是通過動態(tài)掃描來完成的。動態(tài)掃描就是一列一列輪流點亮LED燈。首先輸出對應(yīng)第一列發(fā)光管亮滅的數(shù)據(jù)并保持,然后選通第一列,使其點亮一定時間之后熄滅;再送出
33、第二列的數(shù)據(jù)并保持,之后選通第二列使其點亮相同的時間,熄滅;以此類推,第十六列之后,再重新點亮第一列,如此循環(huán)。當(dāng)這樣循環(huán)的速度足夠快的時候(每秒24次以上),因為人眼有視覺暫留現(xiàn)象,所以可以看到LED顯示屏上穩(wěn)定的圖文信息。</p><p> 2.2.3 A/D轉(zhuǎn)換模塊設(shè)計</p><p> 本設(shè)計采用TLC0820型A/D轉(zhuǎn)換器。TLC0820是采用先進LinCMOS工藝制造的8位
34、A/D轉(zhuǎn)換器 ,它由2個4位的閃速(FLASH)轉(zhuǎn)換器 ,1個4位的數(shù)模轉(zhuǎn)換器 ,1個計算誤差放大器 ,控制邏輯電路和結(jié)果鎖存電路組成。其特點為:(1)采用8位并行輸出;(2)讀方式最快轉(zhuǎn)換時間為2.5µs;(3)不需要外部時鐘和震蕩元件;(4)片內(nèi)具有跟蹤和保持電路;(5)單電源供電。</p><p> 在本設(shè)計中,單片機的P2口A/D會讀入轉(zhuǎn)換完成的數(shù)據(jù),同時,它也控制控制16*16點陣行線。 在
35、模式0中,只需顯示漢字,不用讀取D轉(zhuǎn)換器輸出的數(shù)據(jù),為使A/D轉(zhuǎn)換器的輸出不影響P2口輸出,所以必須將A/D轉(zhuǎn)換器輸出置高阻態(tài);在模式1-3中,A/D轉(zhuǎn)換器將采集數(shù)據(jù),P2口要先將A/D轉(zhuǎn)換器所采集到的數(shù)據(jù)讀入單片機,經(jīng)由單片機處理后,通過P2口輸出。因為在讀取A/D轉(zhuǎn)換器數(shù)據(jù)時,LED顯示屏仍然要正常顯示,所以一定要把P2口讀取A/D轉(zhuǎn)換器以前輸出的數(shù)據(jù)進行鎖存。當(dāng)單片機把數(shù)據(jù)處理完成之后,P2口才送出顯示數(shù)據(jù)。</p>
36、<p> 下面說明一下模式0時和模式1-3時的設(shè)置。電路工作在模式0的時候,不讀A/D轉(zhuǎn)換器數(shù)據(jù),可令OE=1,這樣A/D轉(zhuǎn)換器輸出將不會影響P2的輸出。而當(dāng)電路工作在模式1-3時,讀A/D轉(zhuǎn)換器數(shù)據(jù)之前,令LE=0,把P2口輸出的數(shù)據(jù)鎖存,然后讓OE=0,P2口讀A/D轉(zhuǎn)換器輸出的數(shù)據(jù),數(shù)據(jù)讀完之后再使OE=1,等單片機數(shù)據(jù)處理完畢后,P2口輸出數(shù)據(jù),這時可令LE=1,點陣顯示P2口送出的數(shù)據(jù)。</p>&
37、lt;p><b> 電路圖如圖2.8:</b></p><p> 圖2.8 A/D轉(zhuǎn)換器電路圖</p><p><b> 2.2.4行驅(qū)動器</b></p><p> 由于單片機引腳的驅(qū)動能力有限,故12行線用74系列芯片驅(qū)動,前八行用74LS573驅(qū)動,后四行由CMOS的 四2輸入與門74HC08驅(qū)動。 7
38、4LS573原理:74LS573 的八個鎖存器都是透明的D 型鎖存器,當(dāng)電平為高時,Q 輸出將隨數(shù)據(jù)(D)輸入而變。當(dāng)電平為低時,輸出將鎖存在已建立的數(shù)據(jù)電平上。輸出控制不影響鎖存器的內(nèi)部工作,即老數(shù)據(jù)可以保持,甚至當(dāng)輸出被關(guān)閉(OE=1)時,新的數(shù)據(jù)也可以置入。這種電路可以驅(qū)動大電容或低阻抗負載,可以直接與系統(tǒng)總線接口并驅(qū)動總線,而不需要外接口。特別適用于緩沖寄存器,I/O 通道,雙向總線驅(qū)動器和工作寄存器。 在本設(shè)計中由于P2口需分
39、時復(fù)用,所以74LS573的輸入數(shù)據(jù)需要鎖存,鎖存控制端由單片機控制。74HC08為四輸入與門,在本設(shè)計中將兩輸入端并在一起,相當(dāng)于一個緩沖器的功能。74LS573,7HC08輸出高點平為5V,所以驅(qū)動發(fā)光二級管中間串了一個電阻限流。 </p><p> 行驅(qū)動器原理圖如圖2.9:</p><p> 圖2.9 行驅(qū)動器電路圖</p><p> 2.2.5 列驅(qū)
40、動器</p><p> 74LS138 為3 線-8 線譯碼器,其工作原理如下: </p><p> (1)當(dāng)一個選通端(E1)為高電平,另兩個選通端((E2)和(E3))為低電平時,可將地址端(A0、A1、A2)的二進制編碼在Y0至Y7對應(yīng)的輸出端以低電平譯出。比如:A2A1A0=110時,則Y6輸出端輸出低電平信號。(2)利用 E1、E2和E3可級聯(lián)擴展成 24 線譯碼器;
41、若外接一個反相器還可級聯(lián)擴展成 32 線譯碼器;(3)若將選通端中的一個作為數(shù)據(jù)輸入端時,74LS138還可作數(shù)據(jù)分配器;(4)可用在8086的譯碼電路中,擴展內(nèi)存。 在采用掃描方式顯示時,由于每列要帶動十六個二極管,每列電流較大。若每個二極管安5mA計算,十六個二極管就得80mA電流,超出單片機管腳的承受范圍,因此每列都加有一個驅(qū)動器,如果列驅(qū)動用十六個PNP型三極管。三極管的發(fā)射極接5V電壓,集電極接點陣的列線,而它的基級接單片機,
42、但該接線方式占用為了十六個單片機管腳,為了節(jié)省單片機管腳,本設(shè)計中的16*16點陣的16列由74LS138驅(qū)動。只需4個引腳即可驅(qū)動16列線。 因一個74LS138只有8個譯碼輸出端,所以可用兩個3-8譯碼器接成4-16譯碼器,其原理圖如圖2.10所示:</p><p> 圖2.10 列驅(qū)動器電路圖</p><p> 由圖可得:當(dāng)A3=0時,U4被關(guān)閉,U4的8位輸出全部為高,但U3正
43、常工作,即可正常譯出輸入碼A3A2A1A0為0000-0111的八種碼,即實現(xiàn)3線-8線譯碼功能;當(dāng)A3=1時,U3被關(guān)閉,U3的8位輸出全部為高,但U4正常工作,即可正常譯出輸入碼A3A2A1A0為1000-1111的八種碼,即實現(xiàn)3線-8線譯碼功能。所以該電路可譯出輸入碼A3A2A1A0為0000-1111的16種碼,即實現(xiàn)4線-16線譯碼功能。本設(shè)計電路中點陣有16列,故16位譯碼輸出分別對應(yīng)輸入碼A3A2A1A0為:0000-1
44、111。</p><p> 2.2.6 音頻放大電路</p><p> 手機音頻信號只有10幾毫伏,所以必須要經(jīng)過合適的放大后才能供ADC采集和驅(qū)動揚聲器。TPA741是一款TI公司的低壓供電的音頻功率放大器。該TPA741是一個橋式推挽(BTL)音頻功率放大器,可以驅(qū)動RL = 8 ?的揚聲器負載,其內(nèi)部結(jié)構(gòu)如圖2.11所示:</p><p> 圖2.11
45、TPA741內(nèi)部結(jié)構(gòu)電路圖</p><p> 由圖可知到:其輸出是差分的;所以該放大器的放大倍為A=-2*(Rf/R1);在本設(shè)計中,R1=10K,Rf為100K的滑動變阻器,最大放大倍數(shù)為20倍。因為該運放是差分輸出的,且輸出的交流分量輸出信號峰值還沒達到5V,不能直接送給ADC,所以在TPA741后接了一個三極管放大電路,一方面將雙端信號變?yōu)閱味诵盘枺硪环矫鎸⑿盘栠M一步放大,以達到ADC的采樣要求。<
46、;/p><p> 三極管與TPA741輸出采用交流耦合方式,經(jīng)過調(diào)試之后,選擇R16=7.7K,R14=R17=1.2K,可使三極管放大電路靜態(tài)時的Vc=1.2V。這樣可使沒有外接手機信號時,供AD采樣的電壓為1.2V,對應(yīng)的點陣點亮最低四位。 </p><p> 音頻放大電路原理圖如圖2.12:</p><p> 圖2.12 音頻放大電路</p>
47、<p> 2.2.7 繼電器切換電路</p><p> 在本設(shè)計中音頻信號有兩個來源,在不同的電路模式中,將對不同的音頻信號進行采集,所以可通過繼電器切換來改變音頻信號。 使用的繼電器是5V驅(qū)動的內(nèi)阻為160?的繼電器,正常工作的電流為31mA;單片機無法驅(qū)動繼電器,所以可用三極管來驅(qū)動?;鶚O電阻R11=20K,當(dāng)Relay為高電平時,基極電流為Ib=[(5-0.7)/20]mA=0.215mA,三
48、極管放大倍數(shù)B=140,所以可得Ic=B*Ib=30.1mA,可以正常驅(qū)動繼電器。</p><p> 繼電器切換電路如圖2.13:</p><p> 圖2.13 繼電切換電路</p><p><b> 3 程序設(shè)計部分</b></p><p> 3.1 音頻信號的采集和預(yù)處理</p><p&g
49、t; 3.1.1 采樣頻率</p><p> 根據(jù)香農(nóng)采樣定理,一般采樣頻率至少應(yīng)為所采樣音頻信號最高頻率的2倍。由于人耳能夠感受的頻率為20Hz~20kHz,所以理論上采樣頻率最高取40kHz。目前工業(yè)上廣泛采用的采樣頻率大致有三種:44kHz、16bit的聲音叫做CD音質(zhì);22kHz、16bit的聲音效果近似于立體聲廣播的廣播音質(zhì);11kHz、8bit的聲音被稱為電話音質(zhì)。在此次設(shè)計當(dāng)中,為了提高頻譜計算
50、的精度,決定采用40kHz的采樣頻率和8bit的數(shù)據(jù)位長。</p><p> 3.1.2 樣本大小</p><p> 采樣頻率確定后,還需確定樣本值,即完成一次FFT運算所需的采樣點數(shù)。根據(jù)數(shù)字信號處理的基本原理,假設(shè)采樣頻率為Fs,采樣點數(shù)為N,則FFT運算后,第n點所表示的頻率為:</p><p><b> ?。?.1)</b><
51、/p><p> Fn若要精確到Hz,則需采樣長度為(1/f)s的信號。提高頻率分辨率,需增加采樣點數(shù),但這在一些實際應(yīng)用中是不現(xiàn)實的,則采用有頻率細分法,即采樣比較短時間的信號,然后在后面補充一定數(shù)量的0,使其長度達到所需的點數(shù),再作FFT,這在一定程度上能夠提高頻率分辨率。由于該系統(tǒng)是將音頻信號頻譜劃分成14段顯示,因此采用16點FFT運算,去掉第1點和第16點的結(jié)果即可。</p><p>
52、; 3.2 音頻頻譜算法</p><p> 音頻頻譜值的計算采用快速傅立葉算法FFT(Fast Fourier Transform),為了提高顯示器的刷新頻率,系統(tǒng)每隔10ms讀取16次A/D轉(zhuǎn)換值,得到16點實數(shù)序列,緊接著完成16點FFT運算得到16點復(fù)數(shù)序列。</p><p> 3.2.1 倒位序及其優(yōu)化算法</p><p> 基2
53、-FTT算法將原始數(shù)據(jù)倒位序存儲,但運算后的結(jié)果則按正常順序輸出。原始采樣數(shù)據(jù)放在數(shù)組float datalm[16]中,datalm[0]存放第1次讀取的A/D轉(zhuǎn)換值,datalm[1]存放第2次讀取的A/D轉(zhuǎn)換值,以此類推,可見第n(n=(b3b2b1b0)b)次讀取的A/D轉(zhuǎn)換值存放在dataIm[n]中。倒序操作后采樣數(shù)據(jù)存儲在float dataRe[16]中,原來第n次讀取的A/D轉(zhuǎn)換值存放在datalm
54、[n](n=(b0b1b2b3)b)中。根據(jù)樣本大小在系統(tǒng)代碼段中建立倒序表數(shù)組,利用查表方式來實現(xiàn)快速倒序操作,比移位操作等方法的運算速度相比,查表方式的預(yù)算速度明顯加快。 </p><p> 3.2.2 蝶形運算及其優(yōu)化算法</p><p> 根據(jù)基2-FFT算法,N點FFT運算可以分成log2N級,每一級都有N/2個蝶形運算,如圖3.2.2所示。 </p><
55、p><b> 圖3.1 蝶式運算</b></p><p> 蝶形運算公式的推導(dǎo)過程如下:</p><p> (3.2) (3.3)</p><p><b> 式中,。</b></p><p> 將式(3.2)化簡成實部與虛部的形式
56、得:</p><p><b> (3.4)</b></p><p><b> (3.5)</b></p><p> 同理,將(3.3)式簡化可得:</p><p><b> (3.6)</b></p><p><b> (3.7)&l
57、t;/b></p><p> 可見每個蝶形運算的輸出都是由其輸入值與某一正弦函數(shù)和余弦函數(shù)的乘積累加得到的。由式(3.4)~式(3.7)編制正弦和余弦表,每次做蝶形運算時可查表加快運算速度。</p><p><b> 3.3 源程序設(shè)計</b></p><p> 本次設(shè)計中的源程序采用C語言進行設(shè)計。51系列單片機的編程語言常用的有
58、二種,一種是匯編語言,一種是C語言。匯編語言的機器代碼生成效率很高但可讀性卻并不強,復(fù)雜一點的程序就更是難讀懂。而C語言作為一種編譯型程序設(shè)計語言,它具備了多種高級語言的特點,并且具有匯編語言的功能。C語言有功能強大的庫函數(shù)、運算速度快、編譯效率高、有良好的可移植性,而且可以直接實現(xiàn)對系統(tǒng)硬件的控制。C語言是一種結(jié)構(gòu)化程序設(shè)計語言,它支持當(dāng)前程序設(shè)計中廣泛采用的由頂向下結(jié)構(gòu)化程序設(shè)計技術(shù)。此外,C語言程序具有完善的模塊程序結(jié)構(gòu),從而為軟
59、件開發(fā)中采用模塊化程序設(shè)計方法提供了有力的保障。因此,使用C語言進行程序設(shè)計已成為軟件開發(fā)的一個主流。用C語言來編寫目標(biāo)系統(tǒng)軟件,會大大縮短開發(fā)周期,且明顯地增加軟件的可讀性,便于改進和擴充,從而研制出規(guī)模更大、性能更完備的系統(tǒng)。用單片機C語言程序設(shè)計是單片機開發(fā)與應(yīng)用的必然趨勢,因此,本次設(shè)計采用的C語言來設(shè)計開發(fā)程序。</p><p> 3.3.1 快速傅立葉變換程序</p><p>
60、; for(i=0;i<fft_control_2;i++){ //各級</p><p> gap=1<<i; //計算間隔</p><p> or(j=0;j<=gap-1;j++){ //蝶形運算1,間隔中的各蝶形</p&g
61、t;<p> wn=j*(1<<(fft_control_2-1-i)); //旋轉(zhuǎn)因子序數(shù)</p><p> for(k=j;k<fft_control_1;k+=gap<<1){ //蝶形運2</p><p> Temp_Real1=Fft_Real[k];</p><p>
62、Temp_Image1=Fft_Image[k];</p><p> Temp_Real2=Fft_Real[k+gap];</p><p> Temp_Image2=Fft_Image[k+gap];</p><p> Real_buffer=((Temp_Real2*FFT_costable[wn]))-((Temp_Image2*FFT_sintable
63、[wn]));</p><p> Image_buffer=((Temp_Real2*FFT_sintable[wn]))+((Temp_Image2*FFT_costable[wn]));</p><p> Fft_Real[k]=Temp_Real1+Real_buffer;</p><p> Fft_Image[k]=Temp_Image1+Image_
64、buffer;</p><p> Fft_Real[k+gap]=Temp_Real1-Real_buffer;</p><p> Fft_Image[k+gap]=Temp_Image1-Image_buffer;</p><p> Fft_Image[k]/=2;</p><p> Fft_Real[k]/=2;</p>
65、;<p> Fft_Image[k+gap]/=2;</p><p> Fft_Real[k+gap]/=2;}</p><p><b> }</b></p><p><b> }</b></p><p> 3.3.2 AD采樣控制程序</p><p>
66、; #defineADC_Sample_F40000L //采用頻率宏定義</p><p> #defineStart_Tim0()TR0=1 //定時器0啟動</p><p> #defineStop_Tim0()TR0=0 //定時器0停
67、止計時</p><p> #defineadc_point64 //采樣點數(shù)</p><p> #definegain4 //去干擾系數(shù)</p><p> /**************ADC中斷服務(wù)函數(shù)*************
68、**/</p><p> voidADC_1_ISR(void)interrupt5using1{</p><p> unsignedchartempl,temph,t;</p><p> templ=ADC_RESL;</p><p> temph=ADC_RES;</p><p> t=FFT_Inver
69、_Table[counter++];//查倒序表,counter為全局變量,計數(shù)當(dāng)前點</p><p> Fft_Real[t]=(unsignedint)(templ&0x3|((unsignedint)(temph)<<gain))-512;</p><p> if(counter==adc_point){ //判斷是否達到規(guī)定
70、的采樣點數(shù)</p><p> counter=0;Stop_Tim0(); //關(guān)閉控制頻率定時器</p><p> flat=1;} //用于標(biāo)記,采集完成</p><p> ADC_CONTR&=~0X10;
71、 //清楚中斷標(biāo)志位}</p><p> /**********使用定時器0控制采樣頻率************/</p><p> voidTim0_ISR(void)interrupt1using1 //工作在8位自動重載方式</p><p><b> {</b></p><p> A
72、DC_CONTR|=0X08; //啟動ADC轉(zhuǎn)換</p><p><b> ?。?lt;/b></p><p> 3.3.3 系統(tǒng)初始化和循環(huán)控制部分</p><p> voidmain(void){</p><p> Systim_CLK_Config();
73、 //STC時鐘配置</p><p> Peripheral_Init(); //包括定時器0,1,ADC模塊的初始化工作</p><p> fft_init(); //fft運算初始化暫存數(shù)據(jù)</p><p> my_GPIO_Init();
74、//STCIO口配置</p><p> LCD_Init(); //OLED顯示配置</p><p> LCD_CLS(); //清屏</p><p> counter=0; //全局變量初始化</p><p>&
75、lt;b> flat=0;</b></p><p><b> EA=1;</b></p><p> Start_Tim0(); //啟動定時器</p><p> 0Start_Tim1(); //啟動定時器</p><p>
76、 1Start_ADC(); //啟動ADC模塊</p><p><b> while(1){</b></p><p> if(flat){ //采集完成后進行FFT運算</p><p><b> flat=0;</b></p>&
77、lt;p><b> FFT();</b></p><p> fft_init();</p><p> Start_Tim0(); //重新開始定時器0</p><p><b> }</b></p><p><b> }}</b></p&
78、gt;<p> 3.3.4 文字滾動程序</p><p> /**************16*16點陣屏的移動顯示****************/</p><p> #include <reg51.h></p><p> #include <intrins.h></p><p> #def
79、ine uchar unsigned char</p><p> #define DATE_OUT P1 //指定P1口做為輸出</p><p> sbit DATA_595=DATE_OUT^0; //列數(shù)據(jù)輸出位</p><p> sbit RCK_595=DATE_OUT^1;
80、 //列掃描時鐘位</p><p> sbit SCK_595=DATE_OUT^2; //列數(shù)據(jù)鎖存位</p><p> sbit CLK_164=DATE_OUT^3; //行數(shù)據(jù)輸出位</p><p> sbit AB_164 =DATE_OUT^4; //行掃
81、描時鐘位</p><p> unsigned char date[32]; //32字節(jié)RAM做為16*16點陣屏顯示緩存</p><p> void display(); //做為點陣掃描函數(shù),將顯示緩存的數(shù)據(jù)輸出到點陣屏</p><p> void display_t
82、ime(unsigned int timer); //指定時間掃描顯示</p><p> void displaymove(unsigned char *lp,unsigned char c,unsigned char timer); //顯示漢字內(nèi)容的移動效果,LP指向要顯示第一</p><p> 個字的首地址,C表示顯示字的個數(shù),tim
83、er是移</p><p><b> 動的速度</b></p><p> void displaymovetb(unsigned char din,unsigned char *lp,unsigned char timer); //上下移動內(nèi)容,din:1為向下,0為向上,lp</p><p>
84、 指向要移入的內(nèi)容,timer為移動速度</p><p> void delay(unsigned int a); //延時子函數(shù)</p><p> code uchar gan[32]={ //感 </p><p> 0x00,0x50,
85、0x00,0x48,0x7F,0xFC,0x40,0x40,0x7F,0xC0,0x40,0x48,0x5F,0x48,0x51,0x50,0x51,0x22,0x5F,0x52,0x90,0x8E,0x02,0x00,0x29,0x90,0x28,0xAC,0x48,0x24,0x07,0xE0};</p><p> code uchar xie[32]={
86、 //謝</p><p> 0x02,0x08,0x44,0x88,0x2F,0xC8,0x28,0x88,0x0F,0x88,0x08,0xFE,0xEF,0x88,0x28,0x88,0x28,0xC8,0x3F,0xA8,0x21,0xA8,0x2A,0x88,0x34,0x88,0x28,0x88,0x12,0xA8,0x01,0x10};</p><p> c
87、ode uchar shi[32]={ //使</p><p> 0x10,0x40,0x10,0x44,0x1F,0xFE,0x20,0x40,0x27,0xFC,0x64,0x44,0xA4,0x44,0x24,0x44,0x27,0xFC,0x24,0x44,0x22,0x40,0x21,0x80,0x20,0xC0,0x21,0x30,
88、0x26,0x0E,0x28,0x04};</p><p> code uchar yong[32]={ //用</p><p> 0x00,0x08,0x3F,0xFC,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0
89、xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x41,0x08,0x41,0x28,0x80,0x10};</p><p> code uchar yin[32]={ //音</p><p> 0x02,0x00,0x01,0x10,0x3F,0xF8,0x08,0x20,0x04,0x20,0x
90、04,0x44,0xFF,0xFE,0x00,0x10,0x1F,0xF8,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10};</p><p> code uchar yue[32]={ //樂</p><p> 0x00,0x2
91、0,0x00,0xF0,0x1F,0x00,0x10,0x00,0x11,0x00,0x11,0x00,0x21,0x04,0x7F,0xFE,0x01,0x00,0x01,0x00,0x09,0x20,0x09,0x10,0x11,0x08,0x21,0x0C,0x45,0x04,0x02,0x00};</p><p> code uchar pin[32]={
92、 //頻</p><p> 0x10,0x04,0x13,0xFE,0x54,0x20,0x5E,0x44,0x51,0xFE,0x55,0x04,0xFF,0x24,0x11,0x24,</p><p> 0x55,0x24,0x55,0x24,0x55,0x24,0x95,0x24,0x08,0x20,0x10,0x50,0x20,0x8C,0x43,0x04};
93、</p><p> code uchar pu[32]={ //譜</p><p> 0x01,0x10,0x40,0xA0,0x27,0xFC,0x20,0xA0,0x02,0xA8,0x01,0xB0,0xEF,0xFE,0x20,0x08,0x23,0xFC,0x22,0x08,0x22,0x08,0x23,0x
94、F8,0x2A,0x08,0x32,0x08,0x23,0xF8,0x02,0x08};</p><p> code uchar xian[32]={ //顯</p><p> 0x00,0x10,0x1F,0xF8,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x10,0x10,0x1
95、F,0xF0,0x14,0x50,0x44,0x44,0x34,0x4C,0x14,0x50,0x04,0x40,0x04,0x44,0xFF,0xFE,0x00,0x00};</p><p> code uchar si[32]={ //示</p><p> 0x00,0x10,0x3F,0xF8,0x00,0x00
96、,0x00,0x00,0x00,0x00,0x00,0x04,0xFF,0xFE,0x01,0x00,0x01,0x00,0x09,0x20,0x19,0x18,0x21,0x0C,0x41,0x04,0x01,0x00,0x05,0x00,0x02,0x00};</p><p> code uchar qi[32]={ //器</p&g
97、t;<p> 0x3E,0xF8,0x22,0x88,0x22,0x88,0x22,0x88,0x3E,0xF8,0x01,0x20,0x01,0x14,0xFF,0xFE,0x02,0x80,0x0C,0x60,0x30,0x18,0xFE,0xFE,0x22,0x88,0x22,0x88,0x22,0x88,0x3E,0xF8};</p><p> void main(void)
98、 //主入口函數(shù)</p><p><b> {</b></p><p> unsigned char i=0,j=0;</p><p> for(i=0;i<32;i++)</p><p> date[i]=gan[i];
99、 //將"感"復(fù)制到顯示緩存</p><p><b> while(1){</b></p><p> display_time(2); //顯示約2秒</p><p> displaymove(xie,10,7); //將從"謝&
100、quot;開始的四個漢字從右向左移動</p><p> display_time(1); //等持約1秒</p><p> displaymovetb(1,0,10); //將點陣上顯示的內(nèi)容向下以10的速度移出,補上0,即清空顯示屏</p><p> display_time(1);
101、 //等待1秒</p><p> displaymovetb(0,gan,10); //將"感"字以10的速度向上移動</p><p> displaymovetb(0,xie,10); //將"謝"字以10的速度向上移動</p><p> displaymovet
102、b(0,shi,10); //將"使"字以10的速度向上移動</p><p> displaymovetb(0,yong,10); //將"用"字以10的速度向上移動</p><p> displaymovetb(0,yin,10); //將"音"字以10的速度向上移動</p><
103、p> displaymovetb(0,yue,10); //將"樂"字以10的速度向上移動</p><p> displaymovetb(0,pin,10); //將"頻"字以10的速度向上移動</p><p> displaymovetb(0,pu,10); //將"譜"字以10的
104、速度向上移動</p><p> displaymovetb(0,xian,10); //將"顯"字以10的速度向上移動</p><p> displaymovetb(0,si,10); //將"示"字以10的速度向上移動</p><p> displaymovetb(0,qi,10); //將&qu
105、ot;器"字以10的速度向上移動</p><p> displaymovetb(0,0,10); //以10的速度向上清空</p><p> display_time(1); //等待1秒</p><p> displaymovetb(1,gan,10); //將"gan"字以1
106、0的速度向下移動</p><p><b> }</b></p><p><b> }</b></p><p> void display() //顯示</p><p><b> {</b><
107、/p><p> unsigned char i,ia,j,tmp; //定義變量</p><p> DATE_OUT=0XFF; //置位高電平做準備</p><p> AB_164=0; //行數(shù)據(jù)位清0,準備移位</p><p> for(i
108、=0;i<16;i++){ //循環(huán)輸出16行數(shù)據(jù)</p><p> CLK_164=0; //行移位</p><p> RCK_595=0; //列鎖存</p><p> for(ia=2;ia>0;){
109、 //每行16個點,循環(huán)位移兩個字節(jié)</p><p> ia--; //循環(huán)兩次</p><p> tmp=~date[i*2+ia]; //讀取點陣數(shù)據(jù)做輸出,是先讀取點陣數(shù)據(jù)的第二位字節(jié),因一行16個點由兩個字節(jié)組成,電路中的移位寄存器最后一位對應(yīng)最后一列,所以要先輸出一行中的第二個字節(jié)數(shù)據(jù)&
110、lt;/p><p> for(j=0;j<8;j++){ //循環(huán)兩次,每次移一個字節(jié),</p><p> SCK_595=0; //為列移位做準備</p><p> DATA_595=tmp&0x01; //將數(shù)據(jù)低位做輸出,由電路圖可知,移位寄存器的最后
111、一位對應(yīng)最后一列,因此先移最后一位</p><p> tmp>>=1; //將數(shù)據(jù)緩沖右移一位,為下次輸出做準備</p><p> SCK_595=1; //將DATA上的數(shù)據(jù)移入寄存器</p><p> } //移入單字節(jié)結(jié)束</p>
112、<p> } //移入兩個字節(jié)結(jié)束</p><p> DATE_OUT|=0X0A; //此句可以用以下兩句來理解,如果不將兩句合為一句,將出現(xiàn)拖影現(xiàn)像</p><p> RCK=1; //RCK拉高,行數(shù)據(jù)移位,相應(yīng)行拉低,三極管導(dǎo)通輸
113、出電量到相應(yīng)行點陣管陽極(共陽)</p><p> CLK=1; //CLK拉高,將數(shù)據(jù)鎖存輸出到相應(yīng)列的點陣發(fā)光管顯示,顯示一行后將保持到下一行顯示開始</p><p> AB_164=1; //行數(shù)據(jù)位只在第一行時為0,其它時候都為1,當(dāng)將這個0移入寄存器后,從第一位開始一直移位最后一
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- led音樂頻譜設(shè)計與制作【畢業(yè)論文】
- led音樂頻譜設(shè)計與制作
- LED音樂頻譜設(shè)計與制作論文正文.doc
- 開題報告led音樂頻譜設(shè)計與制作
- led燈具的設(shè)計機械工程及其自動化畢業(yè)論文
- 自動化畢業(yè)論文
- 電氣工程與自動化畢業(yè)論文led點陣全彩屏的設(shè)計
- 基于pc機控制的led顯示系統(tǒng)設(shè)計【自動化畢業(yè)論文】
- 電氣自動化畢業(yè)論文---助聽器設(shè)計
- 水泵自動化畢業(yè)論文
- 電氣自動化畢業(yè)論文
- 車床自動化設(shè)計加工畢業(yè)論文
- 電氣自動化畢業(yè)論文
- 電氣自動化畢業(yè)論文
- 水泵自動化畢業(yè)論文
- 電器自動化畢業(yè)論文
- 電氣自動化畢業(yè)論文
- 自動化立體倉庫輸送系統(tǒng)設(shè)計【自動化畢業(yè)論文】
- 電氣自動化畢業(yè)論文
- 畢業(yè)論文(電氣自動化)
評論
0/150
提交評論