CF語(yǔ)音存儲(chǔ)回放標(biāo)準(zhǔn)系統(tǒng)源碼_第1頁(yè)
CF語(yǔ)音存儲(chǔ)回放標(biāo)準(zhǔn)系統(tǒng)源碼_第2頁(yè)
CF語(yǔ)音存儲(chǔ)回放標(biāo)準(zhǔn)系統(tǒng)源碼_第3頁(yè)
CF語(yǔ)音存儲(chǔ)回放標(biāo)準(zhǔn)系統(tǒng)源碼_第4頁(yè)
CF語(yǔ)音存儲(chǔ)回放標(biāo)準(zhǔn)系統(tǒng)源碼_第5頁(yè)
已閱讀5頁(yè),還剩11頁(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、語(yǔ)音存儲(chǔ)回放一一系統(tǒng)軟件設(shè)計(jì)班級(jí):電科0801 姓需:學(xué)號(hào):語(yǔ)音存儲(chǔ)回放系統(tǒng)軟件的基本功能是通過(guò)按鍵控制系統(tǒng)實(shí)現(xiàn)錄音與放音。錄音(語(yǔ)音的 存儲(chǔ))時(shí),采集語(yǔ)音信號(hào)并將采集的數(shù)據(jù)存入M25P16中:放音(語(yǔ)音的回放)時(shí),從M25P16 中讀取數(shù)據(jù)送DAC.一、設(shè)計(jì)題目設(shè)計(jì)并制作一個(gè)數(shù)字化語(yǔ)音存儲(chǔ)與回放系統(tǒng),設(shè)計(jì)要求: 前置放大器增益可調(diào),功率放大器輸岀功率20. 5叭 帶通濾波器:通帶為300Hz3.4kHz。 ADC:采樣頻率fs二8kHz,字長(zhǎng)8位。 語(yǔ)音錄放時(shí)間$60s。 DAC:變換頻率fc二8kHz,字長(zhǎng)8位。 回放語(yǔ)音質(zhì)雖良好。 采用語(yǔ)音圧縮算法,增加錄放時(shí)間。在建立系統(tǒng)軟件的框架時(shí),

2、應(yīng)考慮以下幾個(gè)問(wèn)題匚人機(jī)接口的功能設(shè)計(jì)語(yǔ)音存儲(chǔ)與回放系統(tǒng)的人機(jī)接口功能比較簡(jiǎn)單,按照功能要求要求只需要3個(gè)功能鍵: “擦除”鍵、“錄音”鍵、“放音”鍵?!安脸辨I有效時(shí),單片機(jī)調(diào)用擦除子程序?qū)25P16 中數(shù)據(jù)整片擦除,以便進(jìn)行錄音操作?!颁浺簟辨I有效時(shí),單片機(jī)以8kHz的頻率采集語(yǔ)音 信號(hào),并將數(shù)據(jù)寫(xiě)入M25P16中。當(dāng)“放音”鍵有效時(shí),單片機(jī)通過(guò)讀數(shù)據(jù)子程序從M25P16 中取岀數(shù)據(jù)送入DAC輸岀語(yǔ)音信號(hào)。語(yǔ)音存儲(chǔ)與回放系統(tǒng)在工作時(shí)需要提示一些簡(jiǎn)單的信息,入顯示三種工作狀態(tài):錄音狀 態(tài)、放音狀態(tài)、擦岀狀態(tài),另外,需要顯示錄音和放音的時(shí)間。根據(jù)設(shè)訃方案,i耳音存儲(chǔ)與回放系統(tǒng)的單片機(jī)子系統(tǒng)采

3、用并行總線單片機(jī)最小系統(tǒng),人 機(jī)接口采用LCD模塊和矩陣式鍵盤(pán)。根據(jù)鍵盤(pán)的工作原理,當(dāng)鍵有效時(shí),單片機(jī)通過(guò)執(zhí)行 INTO中斷服務(wù)程序讀取鍵值。單片機(jī)根據(jù)讀取的鍵值,執(zhí)行相應(yīng)的鍵處理程序。這里需要 考慮的是,鍵處理程序放在INTO中斷服務(wù)程序中還是放在主程序中。如果將鍵處理程序放 在INTO中斷服務(wù)程序中,則單片機(jī)在執(zhí)行鍵處理程序時(shí),無(wú)法響應(yīng)同級(jí)別的中斷,影響程 序的效率和實(shí)時(shí)性。因此,將鍵處理程序放在主程序中INTO中斷服務(wù)程序只需要讀取鍵 值并設(shè)置一個(gè)鍵有效標(biāo)志。主程序則不斷循環(huán)檢測(cè)鍵有效標(biāo)志,如鍵有效標(biāo)志置1,則根據(jù) 鍵執(zhí)行響應(yīng)的鍵處理程序。每次檢測(cè)到鍵有效標(biāo)志置1后,應(yīng)立即將鍵有效標(biāo)志淸

4、零,以免 鍵處理程序重復(fù)執(zhí)行。M25P16的讀寫(xiě)方案設(shè)計(jì)由于對(duì)M25P16寫(xiě)一字節(jié)數(shù)據(jù)和寫(xiě)一頁(yè)(256字節(jié))數(shù)據(jù)所需編程時(shí)間是相同的,約需 0.64mso語(yǔ)音存儲(chǔ)與回放系統(tǒng)的數(shù)據(jù)采樣頻率為8kHz,采樣周期為uO. 125ms.如果每采集 一字節(jié)數(shù)據(jù)就立即寫(xiě)入M25P16,顯然M25P16在寫(xiě)操作時(shí)間上是不能滿足要求的。因此, 在程序設(shè)計(jì)中,采集的語(yǔ)音數(shù)據(jù)先存放在C8051F360內(nèi)部的XRAM中,待采滿256字節(jié)數(shù) 據(jù),調(diào)用M25P16頁(yè)編程子程序?qū)?shù)據(jù)寫(xiě)入M25P16.由于采集256字節(jié)數(shù)據(jù)需要32ms的 時(shí)間,可以滿足M25P16對(duì)寫(xiě)操作時(shí)間的需求。(3)A/D和D/A轉(zhuǎn)化器的控制為了精

5、確控制采樣頻率,DAc由左時(shí)器2控制,在左時(shí)器2中斷服務(wù)程序中向DAC 送一字節(jié)數(shù)據(jù),將數(shù)字化的語(yǔ)音信號(hào)轉(zhuǎn)化成模擬信號(hào)。ADC由左時(shí)器3溢出啟動(dòng)A/D轉(zhuǎn)化 (注意需要禁止左時(shí)器3溢出中斷),A/D轉(zhuǎn)化結(jié)朿后產(chǎn)生中斷,通過(guò)ADC中斷服務(wù)程序 讀取采樣值。為了提高立時(shí)精確,立時(shí)器2和定時(shí)器3均采用16為自動(dòng)重裝工作方式。(4)C8051F360單片機(jī)內(nèi)部資源的使用在語(yǔ)音存儲(chǔ)回放系統(tǒng)中,需要使用C8051F360單片機(jī)的ADC、DAC、SPIO、XRAM、 N時(shí)器等資源。由于C8O51F36O單片機(jī)具有豐富的片上外設(shè),除了人機(jī)接口和大容量的存 儲(chǔ)器外,不需要擴(kuò)展其他外部設(shè)備,大大簡(jiǎn)化了系統(tǒng)硬件電路的

6、設(shè)計(jì)。根據(jù)上述分析,語(yǔ)音存儲(chǔ)與回放系統(tǒng)的軟件框架由主程序、鍵盤(pán)中斷服務(wù)程序、上時(shí) 器2服務(wù)程序、ADC中斷服務(wù)程序組成。1.主程序流程圖主程序的流程圖如圖。在主程序中首先執(zhí)行C8051F360單片機(jī)和M25P16的初始化程 序。C8051F360單片機(jī)的初始化包括I/O 口初始化、內(nèi)部振蕩器初始化、ADC初始化、DAC 初始化、SPIO初始化、左時(shí)器初始化、中斷系統(tǒng)初始化、M25P16的初始化主要目的是通過(guò) 寫(xiě)狀態(tài)字消除M25P16的寫(xiě)保護(hù)。主程序?qū)嶋H上是一個(gè)循環(huán)程序,不斷的檢測(cè)有無(wú)按鍵輸入。有鍵輸入時(shí)根據(jù)鍵值做相 應(yīng)的處理。主程序中設(shè)置了兩個(gè)工作狀態(tài):錄音狀態(tài)和放音狀態(tài),分別用兩個(gè)標(biāo)志位來(lái)表

7、示。 在錄音狀態(tài)下,數(shù)據(jù)每采集滿256個(gè)字節(jié),就調(diào)用頁(yè)編程子程序,將XRAM中的數(shù)據(jù)寫(xiě)入 M25P16中。在放音狀態(tài)下,每轉(zhuǎn)化完成256個(gè)字節(jié)的數(shù)據(jù),就再?gòu)腗25P16中讀取下一頁(yè) 數(shù)據(jù)。在錄音和放音的過(guò)程中,還需要顯示錄音和放音的時(shí)間。由于采樣頻率是固立的, M25P16的存儲(chǔ)地址的變化是與錄音與放音時(shí)間是相關(guān)的,因此,可以用M25P16的存儲(chǔ)地 址換算后可得錄音和放音的時(shí)間。2.鍵盤(pán)中斷(INTO)服務(wù)程序流程圖當(dāng)有鍵按下時(shí),鍵盤(pán)接口電路產(chǎn)生INTO中斷信號(hào)。鍵盤(pán)中斷服務(wù)程序的功能十分簡(jiǎn)單: 讀取4位鍵值,置鍵有效標(biāo)志位。其流程圖如圖所示:3 .A/D中斷服務(wù)程序流程圖A/D轉(zhuǎn)化的啟動(dòng)通過(guò)

8、左時(shí)器3的溢出實(shí)現(xiàn)。當(dāng)A/D轉(zhuǎn)化結(jié)朿以后,啟動(dòng)一次中斷。在 A/D轉(zhuǎn)化中斷服務(wù)程序中首先判斷是否處于錄音狀態(tài),如果岀于錄音狀態(tài),將高8位數(shù)據(jù) (ADC0H)存入C8O51F36O單片機(jī)內(nèi)部XRAMo注意.ADC中斷標(biāo)志必須軟件淸零。A/D 中斷服務(wù)程序流程圖如圖所示:4定時(shí)器T2終端服務(wù)流程圖左時(shí)器T2每中斷一次,單片機(jī)向DAC寫(xiě)一字節(jié)的語(yǔ)音數(shù)蘿根拯8kHz的采樣頻率, 可以計(jì)算T2定時(shí)常數(shù)為FF83H (0.125ms)。由于定時(shí)時(shí)間很短,定時(shí)器采用16位自動(dòng)加 載工作方式,既提高了定時(shí)精度,又簡(jiǎn)化了程序設(shè)計(jì)。T2中斷服務(wù)程序流程圖如圖在DAC中斷服務(wù)程序流程圖和定時(shí)器T2中斷服務(wù)程序流程圖

9、中,需要單片機(jī)對(duì)XRAM 的讀寫(xiě)操作。單片機(jī)對(duì)XRAM的讀寫(xiě)有16位MOVX指令和8位MOVX指令。由于在程 序中只需要對(duì)256字節(jié)的XRAM操作,因此,采用8位MOVX指令可大大簡(jiǎn)化程序設(shè)計(jì)。SFRPAGE=0x0fo0SCICL=0SCICL+4oOSCICN=Oxc2oOSCXCN=OxOOoCLKSEL=OxOOaSFRPAGE=OxOOareturn o)/外部數(shù)據(jù)存儲(chǔ)器初始化void xramjnit(void)SFRPAGE=0x0foEMI0CF=0x07cSFRPAGE=0x00areturn o/外部中斷初始化void int01_init(void)IT01CF=0x65

10、oIT0=loITl = kEX0=loEXl=0oreturn o)/定時(shí)器初始化void timerjnit(void)TMOD=OXlloCKCON=OXOOoTH0=(65536-10000)/256c/TO 定時(shí) lOMsTL0=(65536-10000)%256c/ TLl=0X0Co/ TH1=OXFE,TMR2CN=0X04TMR2RLL=OX83a/T3 T3 定時(shí) 0.125msTMR2RLH=0XFFoTMR3CN=0X0CoTMR3RLL=OX83TMR3RLII=0XFFo/ TR0=la/TRl = loreturn o/中斷系統(tǒng)初始化void intemipt_i

11、nit(void)EX0=lo/允許INTO中斷PX0=lc/INTO島優(yōu)先級(jí)ET0=lc/ETl=LES0=lo/IE0=0oEA=l areturn a)/PCA 初始化void pca_init(void)PCA0CN=0X40c return o/異步串口通信接口初始化void uarjnit(void)SCONO=OXOOc return o)時(shí)子程序void delay(unsigned int t) unsigned int i.jofor(i=0o it . i+)for(j=Oc jreturn Q/LCD 寫(xiě)抬令子程序void Write_Com(unchar n)unch

12、ar xdata *addrcCheck_Lcd()oaddr=WC0MADDRo*addr=nreturn o)/LCD 寫(xiě)數(shù)據(jù)子程序void Write_Data(unchar m)unchar xdata *addrcCheck_Lcd()o addr=WDATADDR.addr=mcreturn o/LCD 初始化void LCDJnilOWrite_Com(0x30)oWrite_Com(0x01)oWrite_Com(0x0c)oreturn o“/“/顯示漢字子程序void DispJIan(unchar code *a.unchar nrunchar k) unchar dal

13、.i.j.lengtho length=k/2c Wriie_Com(m)a for(i=0a ilengtho i+)(j=2*iodat=a|jcWrile_Data(dat)o dat=a|j+ljo Write_Data(dat)oreturn Q/SPI初始化void SPInit( )SPI0CFG=0x70oSPI0CN=0x0d.SPI0CKR=0x02./2、M25P16 讀寫(xiě)void Check_SPIF()while(SPIF!=l). 等待完成數(shù)據(jù)發(fā)送SPIF=0c讀取狀態(tài)字,査看是否擦寫(xiě)完成void Check_Busy()unsigned char mem_stal

14、us=0x01 NSSMD0=0.SPI0DAT=0x05o送讀狀態(tài)寄存器命令Check_SPIF()o while(mem_status=0x01)(SPI0DAT=0xff. 査看Chcck_SPIF()mem_status=SPIODAT&OxO 1 檢査 spiO 完成數(shù)據(jù)發(fā) void Flash_Init()NSSMD0=0.SPI0DAT=0x06oCheck_SPIF()aNSSMD0=UNSSMD0=0.SPI0DAT=0x0IoCheck_SPIF()oSPI0DAT=0x00oCheck.SPIFOoNSSMD0=loNSSMD0=lo 禁止 M25P16;選通 M25P1

15、6送寫(xiě)允許命令送寫(xiě)狀態(tài)字命令送狀態(tài)字.將BP2BP0S0Check_Busy()ovoid Erase_All()選通 M25P16送寫(xiě)允許命令送整片擦除命令NSSMD0=0.SPI0DAT=0x06oCheck_SPIF()oNSSMD0=loNSSMD0=0oSPI0DAT=0xc7oCheck_SPIF()oNSSMD0=loCheck_Busy()ovoid Page_Program(unsigned long ADDR)unsigned int i。unsigned char lcmp3。NSSMDO=Oa選通 M25P16SPI0DAT=0x06o送寫(xiě)允許命令Check.SPIFO

16、oNSSMD0=UNSSMD0=().SPI0DAT=0x02o送貞編程命令Check.SPIFO-for(i=0o i3o 2+)tempi i=ADDR(8*(2-i)oSPIODAT=tempioCheck.SPIFOofor(i=0o i256a i+)(SPIODAT=Data_b)leiJoCheck.SPIFOoNSSMD0=lovoid Read_Flash(unsigned long ADDR)unsigned im 仁選通 M25P16送寫(xiě)允許命令送讀數(shù)據(jù)命令unsigned char tempi 3 oNSSMDO=0SPI0DAT=0x()6oCheck.SPIFOoN

17、SSMD0=loNSSMD0=0.SPI0DAT=0x03oCheck_SPIF()o for(i=0a i3o i+)teinp|il=ADDR(8*(2-i)oSPIODAT=temphoCheck.SPIFOafor(i=0o iCheck_SPIF()oDsla_byle i =SPI0DATcNSSMD0=K/AD初始化void AD_Program()SFRPAGE=0X0FcREF0CN=0x08oAMX0P=0x08cAMX0N=0xlFc/ ADC0CF=0xl4oADC0CF=0x2ccADCOCN=Ox85cSFRPAGE=0X00.)/DA初始化void DA_Prog

18、ram()SFRPAGE=0X0FcIDA0CN=0xA2oSFRPAGE=0X00./總初始化void devicenil(void)port_io_inil()。oscnil()。xramJnilOoin(01nit()olimerJnitOainterruptni()。pca_inil()。uarjnit()oSPInit()o/ Flash_Init()oAD_Program( )。/AD 初始化DA_Program( )。/DA 初始化return o)/時(shí)間顯示void SH_time(unsigned int n)unchar figuerl unsigned int a.b.c

19、de。Write_Com(0x03)o/ Write_Com(OxO 1) Write_Com(0x0c)aWrite_Com(0x8A)oa=n0b=a/60c=a%60od=c/10oe=c%10ofiguerl=figuer|O|Write_Data(figuer 1 )ofiguerl =figuer|boWri te_Data(figuer 1) figuerl =figuer| 10。Write_Data(figuerl )ofiguerl=figuer|d|oWri te_Data( figuer 1) ofiguerl=figuer|eoWriie_Dala(figuerl)o

20、delay(10)oreturn o)/主函數(shù)void inainO unsigned int n。unchar code hanzil=*語(yǔ)音存儲(chǔ)回放unchar code hanzi2=”按 KO 開(kāi)始錄音unchar code hanzi3=”按 KI 開(kāi)始放音。unchar code hanzi4=”按 K2 擦除”。unchar code hanzi7=”正在錄音”。unchar code hanzi8=”正在放音”。unchar code hanzi9|=”正在擦除” case 0x02:LCDJnitOoDisp_Han( hanzi9.0x92.0x08)。Erase_All()obreak.default :breako)while(shjime=l)TR0=loSH_lime(n)o if(n=0) sh_time=0o TR0=0a ET2=0c EIEl=0X00o limc_sign=l。)

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論