2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩52頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  基于單片機(jī)的聲音頻譜FFT分析顯示系統(tǒng)</p><p><b>  摘要</b></p><p>  課題完成了基于單片機(jī)的聲音頻譜FFT分析顯示系統(tǒng)的設(shè)計(jì)制作。課題是使用增強(qiáng)型的STC12系列單片機(jī)作為核心控制芯片,通過(guò)編寫程序完成了復(fù)雜的FFT快速傅里葉變換運(yùn)算以及外圍電路的控制,包括譯碼電路和列驅(qū)動(dòng)電路,且該單片機(jī)自帶AD轉(zhuǎn)換功能,既簡(jiǎn)化了

2、電路,又節(jié)約了成本;顯示部分采用8×8點(diǎn)陣屏級(jí)聯(lián)作為顯示載體,能很好的達(dá)到顯示效果;聲音播放由音箱完成,因此基本完成課題要求。論文主要介紹了所用單片機(jī)的特點(diǎn)和功能,AD采集和轉(zhuǎn)換以及LED點(diǎn)陣屏的結(jié)構(gòu)和驅(qū)動(dòng)電路等相關(guān)知識(shí)。在軟件方面,由于C語(yǔ)言模塊化和可移植性好,所以使用C語(yǔ)言進(jìn)行程序開發(fā)設(shè)計(jì)。</p><p>  關(guān)鍵詞:?jiǎn)纹瑱C(jī),快速傅里葉變換,AD轉(zhuǎn)換,頻譜 </p><p&g

3、t;  System of FFT Analysis And System of Display for Sound Spectrum Based on Microcontroller </p><p><b>  Abstract</b></p><p>  The subject completed the system of FFT analysis and s

4、ystem of display for sound spectrum based on microcontroller. This topic uses enhanced STC12 series microcontroller as the core control chip,to complete complex FFT Fast Fourier Transform operations and control periphera

5、l circuits including a column decoding circuit and a drive circuit by writing a program.The microcontroller with AD conversion not only simplifies the circuit, but also saves costs. Display part uses 8 × 8 dot matri

6、x display s</p><p>  Key Words microcontroller Fast Fourier Transform AD conversion spectrum目錄</p><p><b>  1.緒論5</b></p><p>  1.1 課題研究?jī)?nèi)容5</p><p>  1.2

7、 國(guó)內(nèi)外研究及應(yīng)用現(xiàn)狀5</p><p>  1.3 應(yīng)用實(shí)例6</p><p><b>  2. 整體設(shè)計(jì)7</b></p><p>  2.1 研究的問(wèn)題7</p><p>  2.2 系統(tǒng)方案設(shè)計(jì)7</p><p>  2.3 具體研究手段7</p><

8、;p><b>  3 硬件設(shè)計(jì)9</b></p><p>  3.1 單片機(jī)選型及功能9</p><p>  3.1.1 單片機(jī)選型9</p><p>  3.1.2 STC12C5A60S2單片機(jī)簡(jiǎn)介9</p><p>  3.1.3 管腳說(shuō)明10</p><p>  3

9、.1.4 A/D轉(zhuǎn)換器的結(jié)構(gòu)13</p><p>  3.1.5 主要特性14</p><p>  3.1.6 STC12C5A60S2 單片機(jī)的工作過(guò)程和工作方式15</p><p>  3.2 AD模塊16</p><p>  3.3 LED顯示模塊16</p><p>  3.4 硬件原理

10、19</p><p>  4 軟件設(shè)計(jì)20</p><p>  4.1 流程圖21</p><p>  4.2 初始化函數(shù)設(shè)計(jì)21</p><p>  4.3 FFT算法及其實(shí)現(xiàn)23</p><p>  4.4 中斷服務(wù)函數(shù)29</p><p>  4.5 顯示函數(shù)29&

11、lt;/p><p>  4.6 主函數(shù)31</p><p>  5 系統(tǒng)驗(yàn)證32</p><p>  5.1 硬件調(diào)試33</p><p>  5.2 軟件調(diào)試34</p><p><b>  結(jié) 論36</b></p><p><b>  致

12、謝38</b></p><p>  參 考 文 獻(xiàn)38</p><p>  附錄A:核心程序40</p><p>  附錄B:原理圖53</p><p><b>  1.緒論</b></p><p>  1.1 課題研究?jī)?nèi)容</p><p>  本課題是

13、基于單片機(jī)的聲音頻譜FFT分析顯示系統(tǒng),首先對(duì)聲音信號(hào)進(jìn)行采集,并將模擬聲音信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),然后將數(shù)字信號(hào)經(jīng)單片機(jī)進(jìn)行FFT快速傅里葉變換,得到頻譜,經(jīng)單片機(jī)的控制電路輸出到已焊接好的點(diǎn)陣屏上。這個(gè)課題用來(lái)將無(wú)形音樂(lè)顯示在屏幕上,制作音樂(lè)播放器,使音樂(lè)變得可見。</p><p>  1.2 國(guó)內(nèi)外研究及應(yīng)用現(xiàn)狀</p><p>  在現(xiàn)如今,國(guó)內(nèi)國(guó)外很多機(jī)構(gòu)都在研究基于單片機(jī)的音樂(lè)頻譜

14、FFT顯示系統(tǒng),因?yàn)橛眠@個(gè)技術(shù)可以很好地實(shí)現(xiàn)音樂(lè)的播放。因?yàn)閱纹瑱C(jī)價(jià)格便宜,所以可以縮小制作生產(chǎn)的成本,當(dāng)用于生產(chǎn)開發(fā)時(shí)可以賺取很大的利潤(rùn)。雖然制作起來(lái)成本很便宜,但是卻絲毫不會(huì)影響最終的效果?;趩纹瑱C(jī)的音樂(lè)頻譜顯示系統(tǒng)的音質(zhì)還是非常好的,最終的用戶體驗(yàn)還是很樂(lè)觀的,所以這項(xiàng)技術(shù)是很值得推廣擴(kuò)散的。這種技術(shù)可以很好地應(yīng)用于車載音樂(lè)播放器,在汽車的小小的顯示屏上,應(yīng)用這種技術(shù)實(shí)現(xiàn)音樂(lè)的播放和可視化,效果美觀實(shí)惠。這個(gè)方面是國(guó)內(nèi)外都要深入

15、研究的領(lǐng)域??傊畣纹瑱C(jī)在現(xiàn)代社會(huì)上應(yīng)用的特別的廣泛,而且在頻譜顯示上應(yīng)用的例子也是很多很多。</p><p>  這種基于FFT算法的音頻播放設(shè)備功能很多、價(jià)格低廉、而且外部電路非常簡(jiǎn)化,正因?yàn)檫@些優(yōu)點(diǎn),這種技術(shù)深受音樂(lè)喜愛者的追捧,以及音樂(lè)設(shè)備制造商的熱愛?,F(xiàn)在市場(chǎng)上很多的基于的單片機(jī)音樂(lè)頻譜顯示設(shè)備都能完成音樂(lè)頻譜的解碼播放的過(guò)程,而且支持的格式也是越來(lái)越多。有業(yè)內(nèi)人士預(yù)言:“業(yè)內(nèi)人士預(yù)言單片機(jī)將是未來(lái)集成電

16、路中發(fā)展最快的電子產(chǎn)品,它將徹底變革人們的工作、學(xué)習(xí)和生活的方方面面”。擴(kuò)展功能強(qiáng)大的音樂(lè)播放器是未來(lái)音樂(lè)播放器的發(fā)展方向。</p><p>  在當(dāng)今世界,電子技術(shù)也在飛速的向前發(fā)展。關(guān)于LED原件在我們?nèi)粘I钪械牡匚灰彩窃絹?lái)越高,成為重要的顯示媒體。各大機(jī)構(gòu)也在不斷深入研究LED,使其得到迅猛快速的發(fā)展。LED顯示器以其外形美觀大方,顯示內(nèi)容信息量大,操作使用靈活方便著稱,主要應(yīng)用在金融證券、廣告宣傳、公交

17、、車站、體育、軍事等許多領(lǐng)域。而且在我們?nèi)粘I钪?,這種LED顯示器件也是隨處可見。這種技術(shù)涉及的技術(shù)有很多,包括單片機(jī)和硬件之間的數(shù)據(jù)交互,還有顯示存儲(chǔ)技術(shù),以及軟件技術(shù),最后是硬件接口和驅(qū)動(dòng)之間交互技術(shù)。</p><p>  本課題使用LED顯示屏和單片機(jī)相結(jié)合,實(shí)現(xiàn)聲音頻譜的分析和顯示。</p><p><b>  1.3 應(yīng)用實(shí)例</b></p>

18、<p>  音樂(lè)噴泉是現(xiàn)代科學(xué)技術(shù)與藝術(shù)結(jié)合的產(chǎn)物,利用噴泉來(lái)表現(xiàn)音樂(lè)的美,令人賞心悅目。這種噴泉可以根據(jù)音樂(lè)的不同節(jié)奏產(chǎn)生不同的花樣。這種設(shè)計(jì)的核心就是FFT算法。通過(guò)對(duì)音樂(lè)信號(hào)的采集然后進(jìn)過(guò)放大處理,把放大的信號(hào)進(jìn)行濾波,去除雜波,接下來(lái)進(jìn)行A/D轉(zhuǎn)換,轉(zhuǎn)換成數(shù)字信號(hào)后,開始進(jìn)行FFT變換,變換后即可得到音樂(lè)信號(hào)的頻譜。最后將頻譜圖表現(xiàn)在噴泉的水柱上,這就是FFT算法在音樂(lè)噴泉上的利用。 </p>

19、<p><b>  2. 整體設(shè)計(jì)</b></p><p>  2.1 研究的問(wèn)題</p><p>  本課題要研究的是基于單片機(jī)的聲音頻譜的FFT分析與顯示,通過(guò)單片機(jī)的系統(tǒng)設(shè)計(jì)和研究,對(duì)于切實(shí)掌握單片機(jī)相關(guān)的知識(shí)具有重要的理論和實(shí)際意義。本課題設(shè)計(jì)的聲音頻譜的FFT分析與顯示是軟件和硬件的結(jié)合,高低音的表現(xiàn)形式就是頻率幅度的大小。通過(guò)單片機(jī)采集聲音信號(hào)

20、進(jìn)行模數(shù)轉(zhuǎn)換,然后進(jìn)行FFT變換,最后通過(guò)點(diǎn)陣屏顯示出來(lái)。</p><p>  2.2 系統(tǒng)方案設(shè)計(jì)</p><p>  系統(tǒng)方案設(shè)計(jì)如圖2.1所示。</p><p>  圖2.1 系統(tǒng)結(jié)構(gòu)圖</p><p>  該系統(tǒng)主要有單片機(jī)及最小系統(tǒng)模塊、驅(qū)動(dòng)電路、點(diǎn)陣屏等模塊。</p><p>  我用的單片機(jī)是增強(qiáng)版的S

21、TC12C5A60S2單片機(jī)。該單片機(jī)作為硬件核心控制部件,結(jié)合達(dá)林頓三極管的反向以及驅(qū)動(dòng)功能、74HC595的串轉(zhuǎn)并的功能、74HC138的譯碼功能、8塊8*8點(diǎn)陣模塊的連接共同構(gòu)成該聲音頻譜的FFT分析及顯示系統(tǒng)。</p><p>  2.3 具體研究手段</p><p> ?、俜治霎?dāng)前音樂(lè)頻譜顯示技術(shù)的背景及發(fā)展方向,確定本課題所研究系統(tǒng)架構(gòu),為課題的進(jìn)一步研究工作奠定基礎(chǔ);<

22、;/p><p> ?、诜治鰡纹瑱C(jī)的原理及應(yīng)用,確定系統(tǒng)的總體設(shè)計(jì)方案分析;</p><p> ?、墼诘诙降幕A(chǔ)上,通過(guò)去市場(chǎng)上調(diào)查,去了解市面上的自己所用的芯片的性能和價(jià)格等等,然后根據(jù)市場(chǎng)的實(shí)際的需求選擇滿足實(shí)際系統(tǒng)需要的各種芯片,進(jìn)行系統(tǒng)硬件單片機(jī)、LED點(diǎn)陣屏及各種芯片的選材;</p><p>  ④在系統(tǒng)硬件平臺(tái)的基礎(chǔ)上,進(jìn)行系統(tǒng)軟件部分的設(shè)計(jì),首先熟悉程序開

23、發(fā)軟件KEIL uVISION4的開發(fā)環(huán)境,熟悉單片機(jī)功能和各引腳作用,然后進(jìn)行單片機(jī)C語(yǔ)言程序的編寫;</p><p>  ⑤系統(tǒng)測(cè)試與分析,將搭建完成的系統(tǒng)進(jìn)行聲音頻譜顯示的測(cè)試;</p><p><b>  3 硬件設(shè)計(jì)</b></p><p>  3.1 單片機(jī)選型及功能</p><p>  3.1.1 單片

24、機(jī)選型</p><p>  對(duì)于單片機(jī)的選擇需要經(jīng)過(guò)綜合考量。因?yàn)镕FT算法會(huì)有很大的運(yùn)算量,所以對(duì)于單片機(jī)的性能要求是很高的,需要單片機(jī)的運(yùn)算速度要很高,要能很好的處理浮點(diǎn)運(yùn)算。我們選用STC12C5A60S2,該芯片具有1280字節(jié)的RAM,并且時(shí)鐘頻率高達(dá)33MHZ,在速度和內(nèi)存上都能滿足浮點(diǎn)運(yùn)算,并且控制方便,成本便宜,所以本系統(tǒng)采用8位STC12C5A60S2芯片。</p><p&g

25、t;  3.1.2 STC12C5A60S2單片機(jī)簡(jiǎn)介</p><p>  單片機(jī)全稱叫做單片微型計(jì)算機(jī)(英語(yǔ):single-chip microcomputer),又稱作為微控制器(microcontroller)。是把中央處理器、定時(shí)/計(jì)數(shù)器(timer/counter)、存儲(chǔ)器、各種輸入輸出接口等都集成在一塊的集成電路芯片。與自己個(gè)人用的電腦上的通用微處理器相比,它更注重的是價(jià)格便宜而且不用外接硬件。我們

26、所用的單片機(jī)體積很小,可以放在很多儀表的內(nèi)部,因此可以應(yīng)用于很多領(lǐng)域,這就是單片機(jī)的一個(gè)很大的優(yōu)勢(shì)。同時(shí),它又有缺點(diǎn),那就是存儲(chǔ)量不是很大,輸入輸出接口相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,功能還不是特別的強(qiáng)大。但是經(jīng)過(guò)幾十年的飛速發(fā)展,單片機(jī)也遠(yuǎn)比以前強(qiáng)大很多,速度變得更高速。</p><p>  經(jīng)過(guò)幾十年的發(fā)展,舊的單片機(jī)的概念已不能再滿足我們的認(rèn)識(shí),所以很多場(chǎng)合被稱為范圍更廣的微控制器。</p><p&g

27、t;  單片微型計(jì)算機(jī)簡(jiǎn)稱單片機(jī),是典型的嵌入式微控制器(Microcontroller Unit),常用的英文字母的縮寫MCU表示單片機(jī),單片機(jī)又稱單片微控制器,它不是完成某一個(gè)邏輯功能的芯片,而是把一個(gè)計(jì)算機(jī)系統(tǒng)集成到一個(gè)芯片上。單片機(jī)由運(yùn)算器、控制器、存儲(chǔ)器、輸入輸出設(shè)備構(gòu)成,相當(dāng)于一個(gè)微型的計(jì)算機(jī)(最小系統(tǒng)),和計(jì)算機(jī)相比,單片機(jī)缺少了外圍設(shè)備等。概括的講:一塊芯片就成了一臺(tái)計(jì)算機(jī)。它的體積小、質(zhì)量輕、價(jià)格便宜、為學(xué)習(xí)、應(yīng)用和開

28、發(fā)提供了便利條件。同時(shí),學(xué)習(xí)使用單片機(jī)是了解計(jì)算機(jī)原理與結(jié)構(gòu)的最佳選擇。它最早是被用在工業(yè)控制領(lǐng)域。</p><p>  由于單片機(jī)在工業(yè)控制領(lǐng)域的廣泛應(yīng)用,單片機(jī)由僅有CPU的專用處理器芯片發(fā)展而來(lái)。最早的設(shè)計(jì)理念是通過(guò)將大量外圍設(shè)備和CPU集成在一個(gè)芯片中,使計(jì)算機(jī)系統(tǒng)更小,更容易集成進(jìn)復(fù)雜的而對(duì)體積要求嚴(yán)格的控制設(shè)備當(dāng)中。</p><p>  STC12C5A60S2是單時(shí)鐘的單片機(jī)

29、,機(jī)器周期是1T的。這款單片機(jī)是增強(qiáng)型的單片機(jī),運(yùn)算速度很快,功耗還低,關(guān)鍵的是抗干擾能力非常強(qiáng)。雖然是新一代的單片機(jī),但是它內(nèi)部的指令代碼是完全兼容傳統(tǒng)的51單片機(jī)的,不同的地方就是速度比以前高了8-12倍。這款單片機(jī)相比其他單片機(jī)而言,尤其是相比傳統(tǒng)的單片機(jī),最大的特點(diǎn)就是內(nèi)部有10位的A/D轉(zhuǎn)換功能,而且速度非??臁S眠@款單片機(jī)能很好地簡(jiǎn)化電路,使用內(nèi)部程序?qū)崿F(xiàn)A/D的轉(zhuǎn)換。</p><p>  1、增強(qiáng)型

30、8051CPU,1T(1024G),單時(shí)鐘/機(jī)器周期 。</p><p>  2、工作電壓 5.5-3.5V </p><p>  3、1280字節(jié)RAM </p><p>  4、通用I/O口,復(fù)位后為:準(zhǔn)雙向口/弱上拉 </p><p>  5有EEPROM功能 </p&g

31、t;<p><b>  6、看門狗 </b></p><p>  7、內(nèi)部集成MAX810專用復(fù)位電路 </p><p>  8、外部掉電檢測(cè)電路 </p><p>  9、時(shí)鐘源:外部高精度晶體/時(shí)鐘,內(nèi)部R/C振蕩器 </p><p>  常溫下內(nèi)部R/C振蕩器頻

32、率為:5.0V單片機(jī)為:11~17MHz  3.3V 單片機(jī)為:8~12MHz </p><p>  10、4個(gè)16位定時(shí)器</p><p>  4個(gè)定時(shí)器中有兩個(gè)是與傳統(tǒng)的51單片機(jī)兼容的,  </p><p><b>  11、PWM2路 </b></p><p

33、>  12、A/D轉(zhuǎn)換,10位精度ADC,共8路,轉(zhuǎn)換速度可達(dá)250K/S </p><p>  13、通用全雙工異步串行口(UART) </p><p>  14、雙串口,RxD2/P1.2,TxD2/P1.3 </p><p>  15、工作范圍:-40~85 </p><p>  16、封裝

34、:LQFP-48,LQFP-44,PDIP-40,PLCC  </p><p>  3.1.3 管腳說(shuō)明</p><p>  單片機(jī)引腳圖如圖3.1所示。</p><p>  圖3.1 單片機(jī)引腳圖</p><p>  各引腳功能簡(jiǎn)單介紹如下:</p><p>  VCC:供電電壓; &

35、lt;/p><p><b>  GND:接地;</b></p><p>  P0.0~P0.7  P0:P0口既可以作為輸入/輸出口,也可以作為地址/數(shù)據(jù)復(fù)用總線使用。當(dāng)P0口作為輸入/輸出口時(shí),P0是一個(gè)8位準(zhǔn)雙向口,內(nèi)部有弱上拉電阻,無(wú)需外接上拉電阻。當(dāng)P0作為地址/數(shù)據(jù)復(fù)用總線使用時(shí),是低8位地址線A0~A7,數(shù)據(jù)線D0~D7 <

36、/p><p>  P1.0/ADC0/CLKOUT2 </p><p>  是標(biāo)準(zhǔn)的IO口。ADC輸入通道0、獨(dú)立波特率發(fā)生器的時(shí)鐘輸出,可通過(guò)設(shè)置WAKE_CLKO[2]位/BRT-CLKO將該管腳配置為CLKOUT2</p><p>  P1.1/ADC1P1.2/ADC2/ECI/RxD2 標(biāo)準(zhǔn)IO口、ADC輸入通道-1</p><

37、p>  P1.2/ADC2/ECI/RxD2 </p><p>  是標(biāo)準(zhǔn)的IO口。也是ADC輸入通道-2 。P1.2是PCA計(jì)數(shù)器的外部脈沖輸入腳。它還是第二串口數(shù)據(jù)接收端 </p><p>  P1.3/ADC3/CCP0/TxD2 ADC󰀃</p><p>  P1.3是輸入通道-3。外部信號(hào)捕獲、高速脈沖輸出及脈寬調(diào)

38、制輸出、第二串口數(shù)據(jù)發(fā)送端 </p><p>  P1.4/ADC4/CCP1/SS非 SPI同步串行接口的從機(jī)選擇信號(hào) </p><p>  P1.5/ADC5/MOSI SPI同步串行接口的主出從入(主器件的輸入和從器件的輸出) P1.6/ADC6/MISO SPI同步串行接口的主入從出 (主器件的輸入和從器件的輸出) </p><p>  P1.7

39、/ADC7/SCLK ADC輸入通道-7、SPI同步串行接口的時(shí)鐘信號(hào)</p><p>  P2.0~P2.7 P2口內(nèi)部有上拉電阻,既可作為輸入輸出口(8位準(zhǔn)雙向口),也可作為高8位地址總線使用。 </p><p>  P3口:這個(gè)口也是雙向I/O口。內(nèi)部有上拉電阻。每個(gè)管腳可以接收輸出4個(gè)TTL門電流。當(dāng)想把P3口作為輸入端口時(shí),我們需要在P3口寫“1”,這樣P3口的內(nèi)部上拉電阻

40、就會(huì)被置為高電平。當(dāng)P3口作為輸入端口使用時(shí),將會(huì)輸出電流(ILL)。原因就是上拉電阻。因?yàn)橥獠肯吕瓰榈碗娖?。P3口也有特殊的第二功能,顯示如下:</p><p>  P3.0 RXD(串行輸入口) </p><p>  P3.1 TXD(串行輸出口) </p><p>  P3.2 INT0(外部中斷0) 

41、;</p><p>  P3.3 INT1(外部中斷1) </p><p>  P3.4 T0(記時(shí)器0外部輸入)</p><p>  P3.5 T1(記時(shí)器1外部輸入) </p><p>  P3.6 WR(外部數(shù)據(jù)存儲(chǔ)器寫選通) </p><p>

42、;  P3.7 RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)</p><p><b>  RST:復(fù)位輸入。</b></p><p>  ALE/PROG:這個(gè)接口的作用是地址鎖存用的,用于P0口的擴(kuò)展并口或者存儲(chǔ)器時(shí)給鎖存器373(573)提供地址鎖存信號(hào)。還有一個(gè)功能就是燒錄程序時(shí)用到,但有ISP功能后,這個(gè)功能就沒(méi)用了。但是這個(gè)引腳還有一個(gè)非常有用的功能往往被很多人給

43、忽視了,那就是當(dāng)非訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),ALE以六分之一振蕩頻率固定輸出正脈沖,8051一個(gè)機(jī)器周期=6個(gè)狀態(tài)周期=12個(gè)振蕩周期,若采用6MHz的晶體振蕩器,則ALE會(huì)發(fā)出1MHz的固定的正脈沖。因此它可以用來(lái)做外部時(shí)鐘或定時(shí)。如果我們把這個(gè)功能應(yīng)用與實(shí)際,可能給我們的設(shè)計(jì)帶來(lái)簡(jiǎn)化,降低生產(chǎn)成本。ALE腳是在使用MOVX、MOVC指令時(shí)才會(huì)變成有效(這些指令都使用到外部RAM或ROM的地址。這些指令都有一個(gè)特點(diǎn):地址和數(shù)據(jù)分時(shí)出現(xiàn)在P

44、0口)。使用C寫程序時(shí),要使用它有效,可用訪問(wèn)內(nèi)部RAM地址的方法。如:uVariable=*((char *)0x12C),把0x12C地址的內(nèi)容給uVariable變量。這個(gè)過(guò)程有效的腳為ALE、RD。</p><p>  這個(gè)信號(hào)線的信號(hào)生成是MCU硬件電路實(shí)現(xiàn)的,不可以人工控制。在某些內(nèi)置TOM的MCU里,可以關(guān)閉ALE信號(hào)輸出,以降低EMI。</p><p>  PSEN:PS

45、EN為程序存取器選擇端,高電平,程序從內(nèi)部執(zhí)行,就是單片機(jī)內(nèi)部的程序存儲(chǔ)器有效,接低電平,程序從外面擴(kuò)展的ROM開始執(zhí)行。當(dāng)讀寫數(shù)據(jù)在外部時(shí),單片機(jī)首先要有一個(gè)信號(hào)來(lái)控制外部ROM芯片的使能腳,使其工作。這個(gè)信號(hào)就由PSEN來(lái)負(fù)責(zé)。</p><p>  EA/VPP:EA: 程序存儲(chǔ)器選擇 EA=1 時(shí),CPU執(zhí)行內(nèi)部程序存儲(chǔ)器的程序,超出內(nèi)部程序存儲(chǔ)器的部分再到外部程序存儲(chǔ)器,當(dāng)EA=0時(shí), CPU 執(zhí)行外部

46、程序存儲(chǔ)器的程序.。VPP: 內(nèi)部程序存儲(chǔ)器擦除和寫入時(shí)提供編程脈沖.。</p><p>  XTAL1:外接時(shí)鐘引腳。XTAL1為片內(nèi)震蕩電路的輸入端;</p><p>  XTAL2:外接時(shí)鐘引腳。XTAL1為片內(nèi)震蕩電路的輸出端;</p><p>  3.1.4 A/D轉(zhuǎn)換器的結(jié)構(gòu)</p><p>  ADC模塊就是把模擬電壓轉(zhuǎn)換成數(shù)

47、字表達(dá)的一種模塊。它的英文全稱是:analog digital converter。</p><p>  STC12C5A60S2的結(jié)構(gòu)是逐取比較型ADC。</p><p>  逐次逼近型ADC由比較器、D/A轉(zhuǎn)換器、緩沖寄存器和若干控制邏輯電路構(gòu)成。原理是從高位到低位逐位比較,首先將緩沖寄存器各位清零;轉(zhuǎn)換開始后,先將寄存器最高位置1,把值送入D/A轉(zhuǎn)換器,經(jīng)D/A轉(zhuǎn)換后的模擬量送入比較

48、器,稱為 Vo,與比較器的待轉(zhuǎn)換的模擬量Vi比較,若Vo<Vi,該位被保留,否則被清0。然后,再置寄存器次高位為1,將寄存器中新的數(shù)字量送D/A轉(zhuǎn)換器,輸出的 Vo再與Vi比較,若Vo<Vi,該位被保留,否則被清0。循環(huán)此過(guò)程,直到寄存器最低位,得到數(shù)字量的輸出。逐取比較型A/D轉(zhuǎn)換器框圖如圖3.2所示。</p><p>  圖3.2 逐取比較型A/D轉(zhuǎn)換器框圖</p><p>

49、;  STC12C5A60S2單片機(jī)擁有十位精度的A/D模塊。</p><p>  ADC模塊的精度一般有8位、10位、12位、16位、24位。</p><p>  以5V的ADC模塊為例介紹:8位的精度:把0~5V分成256份,每份表示5/256=0.02V;10位的精度:把0~5V分成1024份,每份表示5/1024=0.005V;</p><p>  A/

50、D轉(zhuǎn)換器的主要性能指標(biāo)如下:(雖然這些指標(biāo)在設(shè)計(jì)選片時(shí)很主要,對(duì)于維修而言意義不大,但了解一下還是很有必要的)</p><p>  1.分辨率:例如10位的ADC能分辨出滿刻度的1/1024.</p><p><b>  2.量化誤差。</b></p><p><b>  3.偏移誤差。</b></p>&l

51、t;p><b>  4.滿刻度誤差。</b></p><p><b>  5.線性度。</b></p><p><b>  6.絕對(duì)精度。</b></p><p><b>  7.相對(duì)精度。</b></p><p><b>  8.轉(zhuǎn)換速率

52、。</b></p><p>  一般而言,第1、8項(xiàng)最為重要,在設(shè)計(jì)選片時(shí)需要首先考慮。</p><p>  STC12C5A60AD/S2系列帶A/D轉(zhuǎn)換的單片機(jī)的A/D轉(zhuǎn)換口在P1口,有8路10位高速A/D轉(zhuǎn)換器,速度可達(dá)到250KHz(25萬(wàn)次/秒)。</p><p>  3.1.5 主要特性</p><p>  普通I/

53、O口既作為輸入又作為輸出: </p><p>  傳統(tǒng)8051單片機(jī)I/O口電壓,由高變低或由低變高,以及讀外部狀態(tài)都是12個(gè)時(shí)鐘,跑現(xiàn)在8051單片機(jī)跑行相應(yīng)的跑作是4個(gè)時(shí)鐘。相應(yīng)的指令相應(yīng)的指令跑行完以后,I/O口還沒(méi)有變高,要再過(guò)一個(gè)時(shí)鐘之后,該I/O口才可以變高.故建議此狀況下增跑2個(gè)空跑作延時(shí)指令再讀外部口的狀態(tài)。</p><p><b>  P4口:</b>

54、;</p><p>  最新STC12系列單片機(jī)P4口地址在P4口地址在口地址在C0H,有完整的P4口(有完整的P4口(P4口(口((P4.0-P4.7),擴(kuò)展外部INT2/INT3中斷</p><p>  傳統(tǒng)STC89系列單片機(jī)的P4口地址在P4口地址在口地址在E8H,P4口只有(P4.0-P4.3),P4有擴(kuò)展外部有擴(kuò)展外部INT2/INT3中斷。</p><p&

55、gt;  外部時(shí)鐘和內(nèi)部時(shí)鐘:</p><p>  外部時(shí)鐘是外接晶振(準(zhǔn)確),內(nèi)部時(shí)鐘一般是R/C振蕩器(有誤差)。一般在系統(tǒng)復(fù)位之后都是內(nèi)部振蕩器先開始工作,讓系統(tǒng)運(yùn)轉(zhuǎn)起來(lái),等到外部晶振穩(wěn)定之后再切換到外部時(shí)鐘工作。有時(shí)為了節(jié)省成本在不需要精確定時(shí)及及計(jì)數(shù)的情況下可以不用外部時(shí)鐘。</p><p>  而我作用的STC12C5A60S2單片機(jī)含有內(nèi)部R/C振蕩器。這個(gè)振蕩器就可以作為

56、系統(tǒng)時(shí)鐘。還可以引入晶振作為外部時(shí)鐘。</p><p><b>  功耗:</b></p><p>  功耗由2部分組成,晶體振蕩器放大電路的功耗和單片機(jī)的數(shù)字電路功耗組成,晶體振蕩器放大電路的功耗:最新STC12C5Axx系列單片機(jī)比STC89xx系列低。</p><p>  本課題所用的單片機(jī)在頻率一樣的情況下,指令運(yùn)行速度比傳統(tǒng)STC89

57、系列單片機(jī)快3-24倍,但是頻率越高的話,功耗也會(huì)更大,故可用較低的時(shí)鐘頻率工作,這樣功耗更低.建議低功耗設(shè)計(jì)系統(tǒng)外接4-6MHz的晶體或用內(nèi)部R/C振蕩器作為系統(tǒng)時(shí)鐘,并利用內(nèi)部的時(shí)鐘分頻器對(duì)時(shí)鐘進(jìn)行分頻,以較低的頻率工作,這樣單片機(jī)的功耗更低。</p><p><b>  掉電喚醒:</b></p><p>  掉電模式是通過(guò)電源控制寄存器PCON設(shè)定的,一般掉電

58、并不是切斷電源,而是你有備用電源供RAM或者數(shù)據(jù)保留。掉電模式由PD控制,通過(guò)軟件將PD=0時(shí),片內(nèi)振蕩器停止工作,單片機(jī)所有運(yùn)行狀態(tài)都停止,僅片內(nèi)RAM的數(shù)據(jù)被保存起來(lái),此時(shí)VCC可降低到2V,以減小芯片功耗。退出掉電模式只能用按鈕復(fù)位。同時(shí)退出掉電模式之前需保證供給單片機(jī)的電壓正常,比如5V電壓正常供給。另外,STC12C5Axx系列掉電喚醒延時(shí)時(shí)間可選:32768/16384/8192/4096個(gè)時(shí)鐘,STC89系列固定是1024

59、個(gè)時(shí)鐘。</p><p>  3.1.6 STC12C5A60S2 單片機(jī)的工作過(guò)程和工作方式</p><p>  單片機(jī)有復(fù)位、程序執(zhí)行、掉電操作、低功耗等工作方式。</p><p>  復(fù)位就是按下復(fù)位鍵后,單片機(jī)會(huì)恢復(fù)到最開始的狀態(tài),然后從這個(gè)狀態(tài)繼續(xù)開始工作。復(fù)位電路的原理是單片機(jī)RST引腳接收到2US以上的電平信號(hào),只要保證電容的充放電時(shí)間大于2US,即

60、可實(shí)現(xiàn)復(fù)位,所以電路中的電容值是可以改變的。按鍵按下系統(tǒng)復(fù)位,是電容處于一個(gè)短路電路中,釋放了所有的電能,電阻兩端的電壓增加引起的。單片機(jī)在震蕩期正在運(yùn)行的情況下,復(fù)位是依靠在RST/或RST引腳上施加2個(gè)機(jī)器周期(即24個(gè)振蕩周期)的高電平來(lái)實(shí)現(xiàn)的。單片機(jī)復(fù)位時(shí)不產(chǎn)生ALE和信號(hào),即ALE=1和=1。這表明單片機(jī)復(fù)位期間不會(huì)有任何取值操作。</p><p>  單片機(jī)在正常運(yùn)行時(shí),片內(nèi)RAM由供電。當(dāng)?shù)綦姇r(shí),將

61、會(huì)丟失RAM和寄存器中的信息如果想避免這種情況,可以把HMOS型的8051單片機(jī)RST/引腳作為備用電源端,以低功耗保持片內(nèi)RAM數(shù)據(jù),稱為掉電保護(hù)。</p><p>  單片機(jī)的工作過(guò)程實(shí)際上是執(zhí)行程序的過(guò)程,而執(zhí)行程序的過(guò)程又歸納為執(zhí)行一個(gè)有序指令的過(guò)程,執(zhí)行指令又是一個(gè)取指令、分析指令和執(zhí)行指令的周而復(fù)始的過(guò)程。</p><p>  單片機(jī)的程序一般事先都已固化在片內(nèi)ROM或EPRO

62、M中,也有的固化在片外EPROM張,因而開機(jī)即可執(zhí)行指令。</p><p><b>  3.2 AD模塊</b></p><p>  本次設(shè)計(jì)采用的A/D轉(zhuǎn)換模塊式STC12C5A60S2單片機(jī)內(nèi)部的A/D轉(zhuǎn)換口,STC12C5A60S2單片機(jī)的A/D轉(zhuǎn)換口在P1口(P1.0~P1.7)有10位8路高速A/D轉(zhuǎn)換器,A/D是電壓輸入型,轉(zhuǎn)換速度250KHZ。復(fù)位后P

63、1口為弱上拉型I/O口,通過(guò)軟件可設(shè)置將P1口任何一位為A/D轉(zhuǎn)換位。</p><p>  3.3 LED顯示模塊</p><p>  顯示部分原理圖如圖3.3所示,用芯片74HC244來(lái)單片機(jī)提高I/O口供電不足的情況。</p><p>  圖3.3 74HC244連接圖</p><p>  用P2口做為輸出數(shù)據(jù)端口接到LED點(diǎn)陣屏,并接

64、74LS138作為點(diǎn)陣屏的行選,電路如圖3.4所示。</p><p>  圖3.4 LED點(diǎn)陣屏行驅(qū)動(dòng)原理圖</p><p>  通過(guò)74HC595做為點(diǎn)陣屏的列驅(qū)動(dòng),電路如圖3.5所示,單片機(jī)通過(guò)控制P1和P2控制點(diǎn)陣屏的動(dòng)態(tài)掃描。</p><p>  圖3.5 LED點(diǎn)陣屏列驅(qū)動(dòng)原理圖</p><p>  顯示屏由八塊8 * 8的點(diǎn)陣

65、屏組成,電路圖如圖3.6所示。</p><p>  圖3.6 顯示屏電路圖</p><p><b>  3.4 硬件原理</b></p><p>  本系統(tǒng)的功能是完成模擬信號(hào)的采集并將該信號(hào)經(jīng)過(guò)AD轉(zhuǎn)換以及FFT變換,最終由單片機(jī)控制顯示在LED點(diǎn)陣屏上。</p><p>  控制板電路圖如圖3.7所示,音頻信號(hào)通過(guò)

66、P1.1輸入到單片機(jī)內(nèi),完成AD轉(zhuǎn)換后,經(jīng)過(guò)系統(tǒng)的FFT變換輸出到芯片74HC244控制譯碼器74LS138控制LED點(diǎn)陣屏的行,信號(hào)經(jīng)74HC244輸出到74HC595控制點(diǎn)陣屏的列。</p><p>  圖3.7 控制板原理圖</p><p><b>  4 軟件設(shè)計(jì)</b></p><p>  軟件設(shè)計(jì)就是根據(jù)我的硬件結(jié)構(gòu)和實(shí)際需求編寫

67、程序。首先要明確使用什么語(yǔ)言進(jìn)行編寫,哪種語(yǔ)言能更好的完成實(shí)際的需求,有很好兼容性和適配性。其次要進(jìn)行整體的思路的構(gòu)建,劃分模塊,設(shè)計(jì)出程序的流程圖,最后根據(jù)每個(gè)模塊的功能,進(jìn)行具體程序的編寫。最后把各個(gè)模塊整合起來(lái),也就是主函數(shù)的編寫。最終燒錄到單片機(jī)中進(jìn)行驗(yàn)證,觀察現(xiàn)象是不是所要的。</p><p><b>  4.1 流程圖</b></p><p>  主程

68、序采用模塊化設(shè)計(jì),流程圖如圖4.1所示。</p><p><b>  N</b></p><p><b>  圖4.1 流程圖</b></p><p>  4.2 初始化函數(shù)設(shè)計(jì)</p><p>  在初始化函數(shù)部分,主要是對(duì)各個(gè)寄存器以及A/D轉(zhuǎn)換口的設(shè)置。</p><p&

69、gt;  P1M1 = 0x01是把用于A/D轉(zhuǎn)換的P1.1口,先設(shè)為開漏,斷開內(nèi)部上拉電阻;CCON = 0x00用于清中斷標(biāo)志;EA、ET0、ET1和EX0分別設(shè)置總中斷、定時(shí)器0中斷、定時(shí)器1中斷和外部中斷的開閉;其中對(duì)于定時(shí)器1初始值的設(shè)定是用來(lái)達(dá)到每中斷一次刷新一次點(diǎn)陣屏的功能。</p><p><b>  具體程序如下所示。</b></p><p>  /

70、************************************************</p><p><b>  初始化函數(shù)</b></p><p>  *************************************************/</p><p>  void Init()</p><p&

71、gt;<b>  { </b></p><p><b>  uchar t;</b></p><p>  SCON = 0x50;</p><p>  BRT = 0xf8; </p><p>  CMOD = 0x80; //12分頻</p><p>  CCON

72、 = 0x00; //清中斷標(biāo)志</p><p><b>  CL = 0;</b></p><p><b>  CH = 0;</b></p><p>  CCAP0H = 0xFF; //40ms定時(shí)</p><p>  CCAP0L = 0xF0; </p><p>

73、  //CCAPM0 = 0x49; //設(shè)置PCA0為16位定時(shí)器,允許PCA模塊0中斷</p><p>  CCAP1L =0x90;//160US定時(shí) </p><p>  CCAP1H =0x01; </p><p>  IT0 = 1; //外部中斷為邊沿觸發(fā)</p><p>  EX0 = 1; //允許外部中斷 </p&

74、gt;<p>  P1ASF = 0x01;</p><p>  P1M0 = 0x01;</p><p>  P1M1 = 0x01; </p><p>  AUXR1 &=0xFB; //1111,1011, 令 ADRJ=0</p><p>  EADC=1; //AD中斷打開</p><

75、p>  ADC_CONTR = ADC_POWER | ADC_SPEEDHH | ADC_START | channel;</p><p>  for(t=0;t<64;t++)</p><p><b>  {</b></p><p>  LED_TAB[t]=0;</p><p><b> 

76、 }</b></p><p>  AUXR &= 0x7F;</p><p>  TMOD=0X12; </p><p>  TH0=0x98; // 52us 采樣頻率 </p><p><b>  TL0=0x98;</b><

77、;/p><p>  AUXR &= 0xBF; </p><p>  TL1 = 0x80; //每中斷一次刷新一次點(diǎn)陣屏</p><p>  TH1 = 0xC1;</p><p>  ET0=1; //定時(shí)器0 打開</p><p>  TR0=0; //關(guān)閉定時(shí)器</p><p>

78、<b>  ET1=1;</b></p><p><b>  TR1=1;</b></p><p><b>  PT1=0;</b></p><p><b>  PT0=1;</b></p><p>  IPH=PADCH|PPCAH;</p>

79、<p>  IP=PADC; //中斷優(yōu)先級(jí)</p><p>  EA=1; //總中斷打開</p><p><b>  }</b></p><p>  4.3 FFT算法及其實(shí)現(xiàn)</p><p>  離散傅里葉變換(Discrete Fourier Transform,DFT)是數(shù)字信號(hào)處理最重要的基石

80、之一,也是對(duì)信號(hào)進(jìn)行分析和處理時(shí)最常用的工具之一。在200多年前法國(guó)數(shù)學(xué)家、物理學(xué)家傅里葉提出后來(lái)以他名字命名的傅里葉級(jí)數(shù)之后,用DFT這個(gè)工具來(lái)分析信號(hào)就已經(jīng)為人們所知。歷史上最偉大的數(shù)學(xué)家之一。</p><p>  FFT快速傅里葉變換是離散傅里葉變換(DFT)的快速算法??梢詫⒁粋€(gè)信號(hào)變換到頻域。有些信號(hào)在時(shí)域上是很難看出什么特征的,但是如果變換到頻域之后,就很容易看出特征了。這就是很多信號(hào)分析采用FFT變

81、換的原因。另外,F(xiàn)FT可以將一個(gè)信號(hào)的頻譜提取出來(lái),這在頻譜分析方面也是經(jīng)常用的。 雖然很多人都知道FFT是什么,可以用來(lái)做什么,怎么去做,但是卻不知道FFT之后的結(jié)果是什意思、如何決定要使用多少點(diǎn)來(lái)做FFT。</p><p>  假設(shè)采樣頻率為Fs,信號(hào)頻率F,采樣點(diǎn)數(shù)為N。那么FFT之后結(jié)果就是一個(gè)為N點(diǎn)的復(fù)數(shù)。每一個(gè)點(diǎn)就對(duì)應(yīng)著一個(gè)頻率點(diǎn)。這個(gè)點(diǎn)的模值,就是該頻率值下的幅度特性。具體跟原始信號(hào)的幅度

82、有什么關(guān)系呢?假設(shè)原始信號(hào)的峰值為A,那么FFT的結(jié)果的每個(gè)點(diǎn)(除了第一個(gè)點(diǎn)直流分量之外)的模值就是A的N/2倍。而第一個(gè)點(diǎn)就是直流分量,它的模值就是直流分量的N倍。而每個(gè)點(diǎn)的相位呢,就是在該頻率下的信號(hào)的相位。第一個(gè)點(diǎn)表示直流分量(即0Hz),而最后一個(gè)點(diǎn)N的再下一個(gè)點(diǎn)(實(shí)際上這個(gè)點(diǎn)是不存在的,這里是假設(shè)的第N+1個(gè)點(diǎn),也可以看做是將第一個(gè)點(diǎn)分做兩半分,另一半移到最后)則表示采樣頻率Fs,這中間被N-1個(gè)點(diǎn)平均分成N等份,每個(gè)點(diǎn)的頻率

83、依次增加。例如某點(diǎn)n所表示的頻率為:Fn=(n-1)*Fs/N。由上面的公式可以看出,F(xiàn)n所能分辨到頻率為為Fs/N,如果采樣頻率Fs為1024Hz,采樣點(diǎn)數(shù)為1024點(diǎn),則可以分辨到1Hz。1024Hz的采樣率采樣1024點(diǎn),剛好是1秒,也就是說(shuō),采樣1秒時(shí)間的信號(hào)并做FFT,則結(jié)果可以分析到1Hz,如果采樣2秒時(shí)間的信號(hào)并做FFT,則結(jié)果可以分析到0.5Hz。如果要提高頻率分辨力</p><p><b&

84、gt;  正變換的計(jì)算如下:</b></p><p><b>  由定義</b></p><p>  把分成兩半,即和,代入上式得</p><p><b>  由于</b></p><p><b>  上式兩項(xiàng)又可合并為</b></p><p&g

85、t;  當(dāng)為偶數(shù)時(shí),注意到,,上式變?yōu)?lt;/p><p>  當(dāng)為奇數(shù)時(shí), ,上式變?yōu)?lt;/p><p>  這樣就把一個(gè)點(diǎn)序列()的點(diǎn)()計(jì)算化成了兩個(gè)點(diǎn)序列(和)的點(diǎn)(和)計(jì)算。由劃分成</p><p>  和的計(jì)算量為個(gè)加,即和</p><p><b>  和個(gè)乘,即</b></p><p> 

86、 由于算出的點(diǎn),是的點(diǎn)()中為偶數(shù)的那一半,由算出的則是為偶數(shù)的那一半,故需要把偶數(shù)的抽出來(lái)放在一起作為的()輸出,同時(shí)把奇數(shù)的抽出來(lái)放在一起作為的()輸出。由于是頻域變量,故這種算法稱為頻域抽取的算法。8點(diǎn)FFT計(jì)算流圖如圖4.2所示。</p><p>  圖4.2 頻域抽取的8點(diǎn)FFT計(jì)算流圖</p><p>  一般情況下,由于做了次分奇偶的抽取,此算法最后的個(gè)兩點(diǎn)計(jì)算出的不是順序

87、抽取的。在計(jì)算出之后要把倒位序變成順序。</p><p>  FFT函數(shù)如下所示。</p><p>  /************************************************</p><p><b>  FFT函數(shù)</b></p><p>  *************************

88、************************/</p><p>  void FFT()</p><p>  { </p><p>  for( i=1; i<=7; i++) </p><p><b>  { </b></p><p><b>  b

89、=1;</b></p><p>  b <<=(i-1); //碟式運(yùn)算,用于計(jì)算 隔多少行計(jì)算 for( j=0; j<=b-1; j++) </p><p><b>  {</b></p><p><b>  p=1;</b></p>

90、<p>  p <<= (7-i); </p><p><b>  p = p*j;</b></p><p>  for( k=j; k<128; k=k+2*b) /* for (3) 基二fft */</p><p><b>  {</b></p><

91、;p>  Temp_Real = Fft_Real[k]; </p><p>  Temp_Imag = Fft_Image[k]; </p><p>  temp = Fft_Real[k+b];</p><p>  Fft_Real[k] = Fft_Real[k] + ((Fft_Real[k+b]*COS_TAB[p])>>7) + ((F

92、ft_Image[k+b]*SIN_TAB[p])>>7);</p><p>  Fft_Image[k] = Fft_Image[k] - ((Fft_Real[k+b]*SIN_TAB[p])>>7) + ((Fft_Image[k+b]*COS_TAB[p])>>7);</p><p>  Fft_Real[k+b]= Temp_Real -

93、 ((Fft_Real[k+b]*COS_TAB[p])>>7) - ((Fft_Image[k+b]*SIN_TAB[p])>>7);</p><p>  Fft_Image[k+b] = Temp_Imag + ((temp*SIN_TAB[p])>>7) - ((Fft_Image[k+b]*COS_TAB[p])>>7); </p>&

94、lt;p>  // 移位.防止溢出. 結(jié)果已經(jīng)是本值的 1/64 </p><p>  Fft_Real[k] >>= 1; </p><p>  Fft_Image[k] >>= 1; </p><p>  Fft_Real[k+b] >>= 1;

95、 </p><p>  Fft_Image[k+b] >>= 1; </p><p><b>  } </b></p><p><b>  } </b></p&g

96、t;<p><b>  } </b></p><p>  Fft_Real[0]=Fft_Image[0]=0;//去掉直流分量</p><p>  //Fft_Real[63]=Fft_Image[63]=0;</p><p>  j_value=32;</p><p>  for(j=0;j<j_

97、value;j++) //量化處理</p><p><b>  {</b></p><p>  TEMP1=((((Fft_Real[j]* Fft_Real[j]))+((Fft_Image[j]*Fft_Image[j]))));</p><p>  if(TEMP1<4)</p><p

98、><b>  TEMP1=0;</b></p><p>  else if(TEMP1<9)</p><p><b>  TEMP1=1;</b></p><p>  else if(TEMP1<16)</p><p><b>  TEMP1=2;</b>&

99、lt;/p><p>  else if(TEMP1<25)</p><p><b>  TEMP1=3;</b></p><p>  else if(TEMP1<36)</p><p><b>  TEMP1=4;</b></p><p>  else if(TEMP

100、1<49)</p><p><b>  TEMP1=5;</b></p><p>  else if(TEMP1<55)</p><p><b>  TEMP1=6;</b></p><p>  else if(TEMP1<60)</p><p><b

101、>  TEMP1=7;</b></p><p>  else if(TEMP1<65)</p><p><b>  TEMP1=8;</b></p><p>  else if(TEMP1<70)</p><p><b>  TEMP1=9;</b></p>

102、<p>  else if(TEMP1<75)</p><p><b>  TEMP1=10;</b></p><p>  else if(TEMP1<80)</p><p><b>  TEMP1=11;</b></p><p>  else if(TEMP1<96

103、)</p><p><b>  TEMP1=12;</b></p><p>  else if(TEMP1<125)</p><p><b>  TEMP1=13;</b></p><p>  else if(TEMP1<156)</p><p><b>

104、;  TEMP1=14;</b></p><p>  else if(TEMP1<189)</p><p><b>  TEMP1=15;</b></p><p><b>  else</b></p><p><b>  TEMP1=15;</b></p

105、><p>  if(TEMP1>(LED_TAB[j]))</p><p>  LED_TAB[j]=TEMP1; </p><p><b>  }</b></p><p><b>  }</b></p><p>  4.4 中斷服務(wù)函數(shù)</p>

106、<p>  首先設(shè)置ADC_CONTR,等待ADC轉(zhuǎn)換完畢,然后將數(shù)據(jù)存儲(chǔ)到 Fft_Real數(shù)組中,按LIST_TAB表里的順序,進(jìn)行存儲(chǔ)采樣值,共采集128個(gè)點(diǎn),去做fft運(yùn)算,當(dāng)采集完畢后,關(guān)閉定時(shí)器,防止fft運(yùn)算。核心函數(shù)如下所示。</p><p>  /************************************************</p><p>

107、;<b>  中斷服務(wù)函數(shù)</b></p><p>  *************************************************/</p><p>  void ADC_Finish() interrupt 5</p><p><b>  { </b></p><p>

108、;  ADC_CONTR &= !ADC_FLAG;</p><p>  Fft_Real[LIST_TAB[ADC_Count]]=(int)((ADC_RES*2)<<2)+(ADC_RESL)*6;</p><p>  if(ADC_Count<=127) </p><p>  ADC_Count++;</p>&l

109、t;p><b>  else </b></p><p><b>  {</b></p><p>  EADC=0;// 中斷關(guān)閉</p><p>  TR0=0;// 定時(shí)器關(guān)閉</p><p>  } </p><p><b>

110、;  }</b></p><p><b>  4.5 顯示函數(shù)</b></p><p>  這部分主要是利用74HC595的串入并出的功能來(lái)實(shí)現(xiàn)的。我通過(guò)函數(shù)控制74HC595的移位、鎖存的開閉。</p><p>  將顯示函數(shù)放在了定時(shí)器1的中斷里,每中斷一次,顯示一行。首先設(shè)置定時(shí)器1的初始值TH1和TH1,以這個(gè)值決定著刷新

111、時(shí)間,然后通過(guò)for循環(huán)往點(diǎn)陣屏填充一行的數(shù)據(jù),同時(shí)設(shè)置SHCP = 1、SHCP = 0實(shí)現(xiàn)移位鎖存,從而實(shí)現(xiàn)數(shù)據(jù)的顯示。</p><p><b>  核心函數(shù)如下所示。</b></p><p>  /************************************************</p><p><b>  LED

112、顯示函數(shù)</b></p><p>  *************************************************/</p><p>  void LED_Display() interrupt 3//定時(shí)器1中斷一次 顯示一行</p><p><b>  { </b></p><p

113、><b>  uchar j;</b></p><p>  TL1 = 0x80;</p><p>  TH1 = 0xC1;</p><p>  LED_TAB1[0]=LED_TAB1[1];</p><p>  LED_TAB[0]=LED_TAB[1]; </p><p>

114、;  G_value=0;</p><p>  for(G=G_value;G<fractional_frequency+G_value;G++)</p><p>  //往點(diǎn)陣屏填充一行的數(shù)據(jù) </p><p><b>  {</b></p><p>  if(LED_TAB[G]&l

115、t;=LINE)</p><p><b>  SDA_R=1;</b></p><p><b>  else </b></p><p><b>  SDA_R=0;</b></p><p><b>  SHCP = 1;</b></p>&l

116、t;p><b>  SHCP = 0;</b></p><p><b>  }</b></p><p>  for(j=0;j<fractional_frequency/16;j++) </p><p><b>  {</b></p><p>  if(LED_TA

117、B[COUNT]>0)</p><p>  LED_TAB[COUNT]--; //柱狀遞減,</p><p>  if(COUNT>0)</p><p><b>  COUNT--;</b></p><p><b>  else </b></p><p>&l

118、t;b>  {</b></p><p>  COUNT=fractional_frequency-1;</p><p><b>  } </b></p><p><b>  }</b></p><p><b>  STCP=1;</b></p>

119、<p><b>  STCP=0;</b></p><p>  scan(15-LINE);</p><p>  if(LINE>0)</p><p><b>  LINE--;</b></p><p><b>  else </b></p>&l

120、t;p><b>  LINE=15;</b></p><p><b>  }</b></p><p><b>  4.6 主函數(shù)</b></p><p>  在函數(shù)編寫過(guò)程中,充分利用了C語(yǔ)言的模塊化的優(yōu)勢(shì),定義了初始化函數(shù)init()、中斷函數(shù)ADC_Finish()、顯示函數(shù)LED_Dis

121、play()、快速傅里葉變換函數(shù)FFT()以及延遲函數(shù)delay()等等。在主函數(shù)中,通過(guò)調(diào)用其中某些函數(shù)以及一些基本配置,即可完成功能的實(shí)現(xiàn)。</p><p>  其中通過(guò)執(zhí)行while(1)這個(gè)死循環(huán),不斷的實(shí)現(xiàn)A/D的采集與轉(zhuǎn)換。對(duì)于jjj變量的設(shè)置,是為了防止A/D采集的超時(shí)。</p><p><b>  具體函數(shù)如下所示。</b></p>&l

122、t;p>  /************************************************</p><p><b>  主函數(shù)</b></p><p>  *************************************************/</p><p>  void main()</p>

123、<p><b>  {</b></p><p><b>  uchar i;</b></p><p>  uint jjj=10000;</p><p>  P4M1=0x00;</p><p>  P4M0=0x72;</p><p><b>  

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論