語音錄放源程序_第1頁
語音錄放源程序_第2頁
語音錄放源程序_第3頁
語音錄放源程序_第4頁
語音錄放源程序_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、/* SPI 操作ISD1760* SPI 操作ISD1760*/#include<SPI.H>uchar bdata SR0_L;uchar bdata SR0_H;uchar bdata SR1;uchar ID,APCL=0,APCH=0;/* 函數(shù)原型: void ISD_Init(void);* 功 能: 初始化*/void ISD_Init(void)ISD_Reset();doISD_PU();RdStatus();DogReset();while(SR0_L&0x01)|(!(SR1&0x01); /if(SR0_L0=1)system Err<

2、;CMD_Err=1>SBUF=RD_DevID();/讀取芯片ID,1760 為0xa0ClrInt();ISD_WR_APC2(0xaf);RdAPC();/* 函數(shù)原型: void ISD_PU(void);* 功 能: 空間檢查*/void ISD_CHK_MEM(void)ISD_SendData(CHK_MEM);ISD_SendData(0x00);SS=1;delay_ms(10);/* 函數(shù)原型: void ISD_PU(void);* 功 能: 上電 */void ISD_PU(void)ISD_SendData(PU);ISD_Sen

3、dData(0x00);SS=1;delay_ms(50);/* 函數(shù)原型: void ISD_Stop(void);* 功 能: 停止*/*void ISD_Stop(void)ISD_SendData(STOP);ISD_SendData(0x00);SS=1;delay_ms(50);/* 函數(shù)原型: void ISD_Reset(void);* 功 能: 復(fù)位*/void ISD_Reset(void)ISD_SendData(RESET);ISD_SendData(0x00);SS=1;delay_ms(50);/* 函數(shù)原型: void ISD_PD(void);* 功 能: 掉電

4、*/*void ISD_PD(void)ISD_SendData(PD);ISD_SendData(0x00);SS=1;/* 函數(shù)原型: void ISD_SendData(uchar BUF_ISD);* 功 能: 發(fā)送數(shù)據(jù)*/uchar ISD_SendData(uchar BUF_ISD)uchar i,dat=BUF_ISD;SCLK=1;SS=0;for(i=0;i<8;i+)SCLK=0;I_delay();if(dat&0x01)MOSI=1;elseMOSI=0;dat>>=1;if(MISO)dat|=0x80;SC

5、LK=1;I_delay();MOSI=0;/ SS=1;return(dat);/* 函數(shù)原型: void RdStatus(void);* 功 能: 讀取狀態(tài)*/void RdStatus(void)ISD_SendData(RD_STATUS);ISD_SendData(0x00);ISD_SendData(0x00);SS=1;delay_ms(10); /延遲10msSR0_L =ISD_SendData(RD_STATUS);SR0_H =ISD_SendData(0x00);SR1 =ISD_SendData(0x00);SS=1;delay_ms(10);/* 函數(shù)原型: vo

6、id RdStatus(void);* 功 能: 讀取ID*/uchar RD_DevID(void)ISD_SendData(RD_DEVID);ISD_SendData(0x00);ISD_SendData(0x00);SS=1;delay_ms(10); /延遲10msSR0_L =ISD_SendData(RD_DEVID);SR0_H =ISD_SendData(0x00);ID =ISD_SendData(0x00);SS=1;delay_ms(10);return(ID);/* 函數(shù)原型: void RD_APC(void);* 功 能: 讀取APC*/void RdAPC(vo

7、id)ISD_SendData(RD_APC);ISD_SendData(0x00);ISD_SendData(0x00);ISD_SendData(0x00);SS=1;delay_ms(10); /延遲10msSR0_L =ISD_SendData(RD_APC);SR0_H =ISD_SendData(0x00);APCL =ISD_SendData(0x00);APCH =ISD_SendData(0x00);SS=1;delay_ms(10); /延遲10ms/*SBUF=SR0_L;delay_ms(1);SBUF=SR0_H;delay_ms(1);SBUF=APCL;delay

8、_ms(1);SBUF=APCH;*/* 函數(shù)原型: void ClrInt(void);* 功 能: 清除中斷*/void ClrInt(void)ISD_SendData(CLI_INT);ISD_SendData(0x00);SS=1;delay_ms(10); /延遲10ms/* 函數(shù)原型: void ISD_WR_APC2(uchar voiceValue);* 功 能: 設(shè)置APC2*/void ISD_WR_APC2(uchar voiceValue)ISD_SendData(WR_APC2);ISD_SendData(0xa8|voiceValue); /0xa8 聲音最大,0

9、xaf 聲音最小ISD_SendData(0x0c); /D11=1,在SETPLAY 模式下,執(zhí)行到EOM 自動結(jié)束?;蛘咴谶B續(xù)兩個(gè)SET_PLAY 命令后,執(zhí)行到第一個(gè)EOM 自動跳到第二段開始SS=1;delay_ms(10); /延遲10msISD_WR_NVCFG(); /永久寫入寄存器/* 函數(shù)原型: void ISD_WR_NVCFG(void);* 功 能: 永久寫入寄存器*/void ISD_WR_NVCFG(void)ISD_SendData(WR_NVCFG);ISD_SendData(0x00);SS=1;delay_ms(10); /延遲10ms/* 函數(shù)原型: vo

10、id GetToneAdd(uchar cNum, Uint * ipStartAdd, Uint * ipEndAdd);* 功 能: 取出當(dāng)前語音的首末地址*/*void GetToneAdd(uchar cNum, uint * ipStartAdd, uint * ipEndAdd)*ipStartAdd=caToneAddcNum*2;*ipEndAdd=caToneAddcNum*2+1;/* 函數(shù)原型: void SetPLAY(uchar cNum);* 功 能: 定點(diǎn)播放*/void SetPLAY(uchar cNum)uint Add_ST, Add_ED;uchar A

11、dd_ST_H, Add_ST_L, Add_ED_H, Add_ED_L;doRdStatus();DogReset();while(SR0_L&0x01)|(!(SR1&0x01); /if(SR0_L0=1)system Err<CMD_Err=1>ClrInt();GetToneAdd(cNum, &Add_ST, &Add_ED);Add_ST_L=(uchar)(Add_ST&0x00ff);Add_ST_H=(uchar)(Add_ST>>8)&0x00ff);Add_ED_L=(uchar)(Add_ED&

12、amp;0x00ff);Add_ED_H=(uchar)(Add_ST>>8)&0x00ff);/*delay_ms(1);SBUF=Add_ST_L;delay_ms(1);SBUF=Add_ST_H;delay_ms(1);SBUF=Add_ED_L;delay_ms(1);SBUF=Add_ED_H;delay_ms(1);*/ISD_SendData(SET_PLAY);ISD_SendData(0x00);ISD_SendData(Add_ST_L); /S7:S0 開始地址ISD_SendData(Add_ST_H); /S10:S8ISD_SendData(A

13、dd_ED_L); /E7:E0 結(jié)束地址ISD_SendData(Add_ED_H); /E10:E8ISD_SendData(0x00);SS=1;delay_ms(10); /延遲10msdoRdStatus();DogReset();while(SR0_L&0x01)|(SR1&0x04); /if(SR0_L0=1)system Err<CMD_Err=1>/* 函數(shù)原型: void SetREC(uchar cNum);* 功 能: 定點(diǎn)錄音*/void SetREC(uchar cNum)uint Add_ST, Add_ED;uchar Add_ST

14、_H, Add_ST_L, Add_ED_H, Add_ED_L;doRdStatus();DogReset();while(SR0_L&0x01)|(!(SR1&0x01); /if(SR0_L0=1)system Err<CMD_Err=1>ClrInt();GetToneAdd(cNum, &Add_ST, &Add_ED);Add_ST_L=(uchar)(Add_ST&0x00ff);Add_ST_H=(uchar)(Add_ST>>8)&0x00ff);Add_ED_L=(uchar)(Add_ED&0

15、x00ff);Add_ED_H=(uchar)(Add_ST>>8)&0x00ff);ISD_SendData(SET_REC);ISD_SendData(0x00);ISD_SendData(Add_ST_L); /S7:S0 開始地址ISD_SendData(Add_ST_H); /S10:S8ISD_SendData(Add_ED_L); /E7:E0 結(jié)束地址ISD_SendData(Add_ED_H); /E10:E8ISD_SendData(0x00);SS=1;delay_ms(10); /延遲10msdoRdStatus();DogReset();/ whi

16、le(SR0_L&0x01)|(SR1&0x08); /if(SR0_L0=1)system Err<CMD_Err=1>while(SR0_L&0x01)|(!(SR1&0x01); /if(SR0_L0=1)system Err<CMD_Err=1>/* 函數(shù)原型: void SetERASE(uchar cNum);* 功 能: 定點(diǎn)刪除,容易破壞存儲結(jié)構(gòu)(CMA),所以不用*/*void SetERASE(uchar cNum)uchar Add_ST_H, Add_ST_L, Add_ED_H, Add_ED_L;Add_ST_

17、L=(uchar)(Add_ST&0xff);Add_ST_H=(uchar)(Add_ST>>8);Add_ED_L=(uchar)(Add_ED&0xff);Add_ED_H=(uchar)(Add_ED>>8);ISD_SendData(SET_ERASE);ISD_SendData(0x00);ISD_SendData(Add_ST_L); /S7:S0 開始地址ISD_SendData(Add_ST_H); /S10:S8ISD_SendData(Add_ED_L); /E7:E0 結(jié)束地址ISD_SendData(Add_ED_H); /E1

18、0:E8ISD_SendData(0x00);/ SS=1;/ delay_ms(120);/* 函數(shù)原型: void Erase_All(void);* 功 能: 全部刪除*/void Erase_All(void)ISD_SendData(G_ERASE);ISD_SendData(0x00);SS=1;delay_ms(100); /延遲10ms/* END* END*/以下是SPI.H#ifndef _SPIEX_#define _SPIEX_#include<STC89C58.h>#include "typedef.h"#define PU 0x01#

19、define STOP 0x02#define RESET 0x03#define CLI_INT 0x04#define RD_STATUS 0x05#define RD_PLAY_PTR 0x06#define PD 0x07#define RD_REC_PTR 0x08#define RD_DEVID 0x09#define G_ERASE 0x43#define RD_APC 0x44#define WR_APC1 0x45#define WR_APC2 0x65#define WR_NVCFG 0x46#define CHK_MEM 0x49#define SET_PLAY 0x80

20、#define SET_REC 0x81#define SET_ERASE 0x82#define HIGH 1#define LOW 0/*#define RIGHT 1#define ERROR 0/#define SET_BIT(x,y) (x|=(1<<y) /x 的y 位置1/#define CLR_BIT(x,y) (x&=(1<<y) /清x 的y 位/#define GET_BIT(x,y) (x&(1<<y) /讀x 的y 位/*/SR0_L 0 1 2 3 4 5 6 7/ CMD_Err FULL PU EOM INT

21、A0 A1 A2/SR0_H 8 9 10 11 12 13 14 15/ A3 A4 A5 A6 A7 A8 A9 A10/SR1 0 1 2 3 4 5 6 7/ RDY ERASE PLAY REC SE1 SE2 SE3 SE4/APC 0 1 2 3 4 5 6 7/ VOL0 VOL1 VOL2 MON_IN MIX_IN SE_EDIT SPI_FT AUD/AUX(AUD 線路輸出,AUX 直接驅(qū)動喇叭)/APC 8 9 10 11/ PWM_SPK PU_AO VALERT EOM_EN(在SETPLAY 模式下,置1 遇到EOM 則結(jié)束,否則繼續(xù)播放)*/*sbit INT

22、_1700 = SR0_L4;sbit EOM = SR0_L3;sbit PU_1700 = SR0_L2;sbit FULL = SR0_L1;sbit CMD_ERR = SR0_L0;sbit REC_1700 = SR13;sbit PLAY_1700 = SR12;sbit ERASE_1700 = SR11;sbit RDY = SR10;*/sbit SS = P43;sbit SCLK = P42;sbit MOSI = P41;sbit MISO = P40;extern void I_delay(void);extern void delay_ms(register ui

23、nt Count);extern void DogReset(void) reentrant;/* 函數(shù)原型: void GetToneAdd(uchar cNum, Uint * ipStartAdd, Uint * ipEndAdd);* 功 能: 取出當(dāng)前語音的首末地址*/void GetToneAdd(uchar cNum, uint * ipStartAdd, uint * ipEndAdd);/* 函數(shù)原型: void ISD_Init(void);* 功 能: 初始化*/void ISD_Init(void);/* 函數(shù)原型: void ISD_PU(void);* 功 能: 上

24、電*/void ISD_CHK_MEM(void);/* 函數(shù)原型: void ISD_Up(void);* 功 能: 上電*/void ISD_PU(void);/* 函數(shù)原型: void ISD_Stop(void);* 功 能: 停止*/void ISD_Stop(void);/* 函數(shù)原型: void ISD_Reset(void);* 功 能: 復(fù)位*/void ISD_Reset(void);/* 函數(shù)原型: void ISD_PD(void);* 功 能: 掉電*/void ISD_PD(void);/* 函數(shù)原型: void ISD_SendData(uchar BUF_ISD

25、);* 功 能: 發(fā)送數(shù)據(jù)*/uchar ISD_SendData(uchar BUF_ISD);/* 函數(shù)原型: void RdStatus(void);* 功 能: 讀取狀態(tài)*/void RdStatus(void);/* 函數(shù)原型: void RdStatus(void);* 功 能: 讀取ID*/uchar RD_DevID(void);/* 函數(shù)原型: void RD_APC(void);* 功 能: 讀取APC*/void RdAPC(void);/* 函數(shù)原型: void ClrInt(void);* 功 能: 清除中斷*/void ClrInt(void);/* 函數(shù)原型: v

26、oid ISD_WR_APC2(uchar voiceValue);* 功 能: WR_APC2*/void ISD_WR_APC2(uchar voiceValue);/* 函數(shù)原型: void ISD_WR_NVCFG(void);* 功 能: 永久寫入寄存器*/void ISD_WR_NVCFG(void);/* 函數(shù)原型: void SetPLAY(uchar cNum);* 功 能: 定點(diǎn)播放*/void SetPLAY(uchar cNum);/* 函數(shù)原型: void SetREC(uchar cNum);* 功 能: 定點(diǎn)錄音*/void SetREC(uchar cNum);

27、/* 函數(shù)原型: void SetERASE(uchar cNum);* 功 能: 定點(diǎn)刪除*/*void SetERASE(uchar cNum);/* 函數(shù)原型: void Erase_All(void);* 功 能: 全部刪除*/void Erase_All(void);/* END* END*/#endif 李佳旭,丁鵬飛 (西安電子科技大學(xué)電子工程學(xué)院,陜西 西安 )0 引言語音費(fèi)額顯示器是用于普通和高速公路收費(fèi)車道向應(yīng)繳費(fèi)車輛和人員顯示車型及收費(fèi)金額等信息的一種機(jī)電設(shè)備。通常安裝于收費(fèi)車道出入口的側(cè)部,可顯示車型、金額、余額及漢字信息等,同時(shí)具有通行指示、語音提示等功能。本文以SS

28、T89V58單片機(jī)和語音芯片ISD1760為核心,給出了一種語音費(fèi)額顯示器的設(shè)計(jì)方法。1 語音芯片ISDl760簡介ISDl760是華邦公司新推出的單片優(yōu)質(zhì)語音錄放電路ISDl700系列芯片中的一款。該芯片可用來替代已經(jīng)停產(chǎn)的ISD2560芯片。用戶可利用振蕩電阻來自已設(shè)定芯片的采樣頻率,從而決定芯片的錄放時(shí)間(40120 s)和錄放音質(zhì)(412kHz)。相比過去的ISD2560芯片,ISDl760在功能上集成了錄放功能,并增加了一些更加人性化的提示功能以及對存儲空間的精確操作功能,而且音質(zhì)也有了明顯的提高。ISDl760芯片提供的多項(xiàng)新功能包括內(nèi)置多信息管理系統(tǒng)、新信息提示(vAlert)、

29、雙運(yùn)作模式(獨(dú)立模式和SPI模式)以及可定制的信息操作指示音效等。芯片內(nèi)部包含有自動增益控制、麥克風(fēng)前置擴(kuò)大器、揚(yáng)聲器驅(qū)動線路、振蕩器與內(nèi)存等全方位整合系統(tǒng)功能。此外,該芯片還具有專利技術(shù)的模擬處理存儲方式,且錄放音質(zhì)極佳,背景噪音很小,語音內(nèi)容保存時(shí)間長且不易丟失。非常適用于公路收費(fèi)站和公交車等場合進(jìn)行語音播報(bào)。ISDl760有獨(dú)立模式和SPI模式兩種工作模式。本系統(tǒng)采用SPI工作模式,其中單片機(jī)為主機(jī),ISDl760作為從機(jī)。主控單片機(jī)主要通過四線(SCLK,MOSI,MISO,SS)SPI協(xié)議來與ISDl760掛行串行通信,而且?guī)缀跛械牟僮鞫伎梢酝ㄟ^SPI協(xié)議來完成。2 語音費(fèi)額顯示器

30、的硬件設(shè)計(jì)一個(gè)語音費(fèi)額顯示系統(tǒng)可由主控制模塊、存儲模塊、語音模塊、功放模塊,串口通信模塊、驅(qū)動模塊和顯示模塊等模塊組成,其主控系統(tǒng)框圖如圖1所示。費(fèi)額顯示器的通信命令來源于收費(fèi)系統(tǒng)的車道控制計(jì)算機(jī)。計(jì)算機(jī)可將根據(jù)車型、軸載重量、行駛公里數(shù)、計(jì)費(fèi)標(biāo)準(zhǔn)等數(shù)學(xué)計(jì)算公式得到的最終數(shù)據(jù),通過串口發(fā)送給費(fèi)額顯示器的RS-232通信芯片,再由RS-232通信芯片將數(shù)據(jù)輸入單片機(jī)進(jìn)行處理。單片機(jī)處理后的數(shù)據(jù)可分兩路輸出,其中一路輸出至解碼、驅(qū)動芯片,以用于驅(qū)動數(shù)碼管的費(fèi)額顯示;另一路則輸出奎語音芯片,以用于進(jìn)行同步語音報(bào)價(jià)。由于本系統(tǒng)采用的是2MB的串行FLASH芯片SST25LF020A來存儲字庫內(nèi)容,故可

31、采用帶有SPI接口的SST89V58單片機(jī)作為主控制芯片,并使用模擬SPI方式與ISD1760進(jìn)行串行通信。單片機(jī)上具有IO功能的四個(gè)管腳可分別與ISDl760上的SCLK、MOSI、MISO和SS連接;ISDl760的ROSC端可用一個(gè)80 k的電阻接地,即設(shè)置的采樣頻率為8 kHz。該采樣率下的最大錄放音時(shí)間為60 s;SP+、SP-端外接TDA2009A組成的功率放大電路可實(shí)現(xiàn)播報(bào)語音的音量控制。TDA2009A是雙路音頻功率放大器,它具有過熱保護(hù)電路,而且外接元件少,安裝簡單。費(fèi)額顯示器的語音播報(bào)內(nèi)容主要包括播報(bào)歡迎詞、車型、收費(fèi)金額、車重、警報(bào)音等。本系統(tǒng)使用ISD1700語音編程拷

32、貝機(jī)將錄制好的語音分段錄制到語音芯片中。另外,通過語音編程拷貝機(jī)也可以很方便地讀取每段語音信息的開始和結(jié)束地址,并可進(jìn)行多片芯片語音信息的拷貝。在語音錄制過程中,需要注意的問題首先是在燒錄語音前應(yīng)檢查電腦聲卡驅(qū)動,應(yīng)保證有驅(qū)動并且最新,最好將聲卡聲音輸出設(shè)置中的喇叭組態(tài)設(shè)置為耳機(jī),輸出音量大小設(shè)置到三分之二的狀態(tài);其次是在燒錄語音時(shí),電腦除了運(yùn)行燒錄語音的程序外,將其它的應(yīng)用軟件(如殺毒軟件等)關(guān)閉,以保證沒有噪音混入;最后,在燒錄語音芯片結(jié)束后,可循環(huán)播放試聽一下,如果對音質(zhì)不滿意,可使用Goldwave或者Adobe Audition等音頻編輯軟件再對語音文件進(jìn)行編輯,已達(dá)到滿意的效果。3 軟件程序設(shè)計(jì)語音費(fèi)額顯示器的系統(tǒng)軟件要實(shí)現(xiàn)的任務(wù)是處理收費(fèi)亭中收費(fèi)計(jì)算機(jī)發(fā)送的串行通信數(shù)據(jù),完成相應(yīng)的顯示功能并進(jìn)行語音播報(bào)。其中的語音處理程序主要判斷是否需要播報(bào)語音信息,以及找到相應(yīng)語音信息的存儲地址,播報(bào)制定段語音。其系統(tǒng)程序流程圖如圖2所示。下面是模擬SPI發(fā)送數(shù)據(jù)子程序和播放

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論