基于單片機的聲音頻譜fft分析顯示系統(tǒng)-畢業(yè)設(shè)計正文完畢版_第1頁
已閱讀1頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

8、;p><b>  3 硬件設(shè)計9</b></p><p>  3.1 單片機選型及功能9</p><p>  3.1.1 單片機選型9</p><p>  3.1.2 STC12C5A60S2單片機簡介9</p><p>  3.1.3 管腳說明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 單片機的工作過程和工作方式15</p><p>  3.2 AD模塊16</p><p>  3.3 LED顯示模塊16</p><p>  3.4 硬件原理

10、19</p><p>  4 軟件設(shè)計20</p><p>  4.1 流程圖21</p><p>  4.2 初始化函數(shù)設(shè)計21</p><p>  4.3 FFT算法及其實現(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)驗證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>  參 考 文 獻38</p><p>  附錄A:核心程序40</p><p>  附錄B:原理圖53</p><p><b>  1.緒論</b></p><p>  1.1 課題研究內(nèi)容</p><p>  本課題是

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

33、>  12、A/D轉(zhuǎn)換,10位精度ADC,共8路,轉(zhuǎn)換速度可達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 管腳說明</p><p>  單片機引腳圖如圖3.1所示。</p><p>  圖3.1 單片機引腳圖</p><p>  各引腳功能簡單介紹如下:</p><p>  VCC:供電電壓; &

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

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

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

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

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

40、就會被置為高電平。當(dāng)P3口作為輸入端口使用時,將會輸出電流(ILL)。原因就是上拉電阻。因為外部下拉為低電平。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(記時器0外部輸入)</p><p>  P3.5 T1(記時器1外部輸入) </p><p>  P3.6 WR(外部數(shù)據(jù)存儲器寫選通) </p><p>

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

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

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

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

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

47、字表達的一種模塊。它的英文全稱是: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)此過程,直到寄存器最低位,得到數(shù)字量的輸出。逐取比較型A/D轉(zhuǎn)換器框圖如圖3.2所示。</p><p>  圖3.2 逐取比較型A/D轉(zhuǎn)換器框圖</p><p>

49、;  STC12C5A60S2單片機擁有十位精度的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è)計選片時很主要,對于維修而言意義不大,但了解一下還是很有必要的)</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.絕對精度。</b></p><p><b>  7.相對精度。</b></p><p><b>  8.轉(zhuǎn)換速率

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

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

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

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

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

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

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

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

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

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

62、M中,也有的固化在片外EPROM張,因而開機即可執(zhí)行指令。</p><p><b>  3.2 AD模塊</b></p><p>  本次設(shè)計采用的A/D轉(zhuǎn)換模塊式STC12C5A60S2單片機內(nèi)部的A/D轉(zhuǎn)換口,STC12C5A60S2單片機的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口,通過軟件可設(shè)置將P1口任何一位為A/D轉(zhuǎn)換位。</p><p>  3.3 LED顯示模塊</p><p>  顯示部分原理圖如圖3.3所示,用芯片74HC244來單片機提高I/O口供電不足的情況。</p><p>  圖3.3 74HC244連接圖</p><p>  用P2口做為輸出數(shù)據(jù)端口接到LED點陣屏,并接

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

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

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

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

68、序采用模塊化設(shè)計,流程圖如圖4.1所示。</p><p><b>  N</b></p><p><b>  圖4.1 流程圖</b></p><p>  4.2 初始化函數(shù)設(shè)計</p><p>  在初始化函數(shù)部分,主要是對各個寄存器以及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è)置總中斷、定時器0中斷、定時器1中斷和外部中斷的開閉;其中對于定時器1初始值的設(shè)定是用來達到每中斷一次刷新一次點陣屏的功能。</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定時</p><p>  CCAP0L = 0xF0; </p><p>

73、  //CCAPM0 = 0x49; //設(shè)置PCA0為16位定時器,允許PCA模塊0中斷</p><p>  CCAP1L =0x90;//160US定時 </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; //每中斷一次刷新一次點陣屏</p><p>  TH1 = 0xC1;</p><p>  ET0=1; //定時器0 打開</p><p>  TR0=0; //關(guān)閉定時器</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)先級</p><p>  EA=1; //總中斷打開</p><p><b>  }</b></p><p>  4.3 FFT算法及其實現(xiàn)</p><p>  離散傅里葉變換(Discrete Fourier Transform,DFT)是數(shù)字信號處理最重要的基石

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

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

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

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

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

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

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

87、抽取的。在計算出之后要把倒位序變成順序。</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); //碟式運算,用于計算 隔多少行計算 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ù)存儲到 Fft_Real數(shù)組中,按LIST_TAB表里的順序,進行存儲采樣值,共采集128個點,去做fft運算,當(dāng)采集完畢后,關(guān)閉定時器,防止fft運算。核心函數(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;// 定時器關(guān)閉</p><p>  } </p><p><b>

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

111、時間,然后通過for循環(huán)往點陣屏填充一行的數(shù)據(jù),同時設(shè)置SHCP = 1、SHCP = 0實現(xiàn)移位鎖存,從而實現(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//定時器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>  //往點陣屏填充一行的數(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ù)編寫過程中,充分利用了C語言的模塊化的優(yōu)勢,定義了初始化函數(shù)init()、中斷函數(shù)ADC_Finish()、顯示函數(shù)LED_Dis

121、play()、快速傅里葉變換函數(shù)FFT()以及延遲函數(shù)delay()等等。在主函數(shù)中,通過調(diào)用其中某些函數(shù)以及一些基本配置,即可完成功能的實現(xiàn)。</p><p>  其中通過執(zhí)行while(1)這個死循環(huán),不斷的實現(xiàn)A/D的采集與轉(zhuǎn)換。對于jjj變量的設(shè)置,是為了防止A/D采集的超時。</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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論