關(guān)于我們
單片機(jī)如何控制語(yǔ)音芯片?
產(chǎn)品開發(fā)中單片機(jī)如何控制語(yǔ)音芯片播放?下面具體說(shuō)一下。首先我們?cè)陂_發(fā)產(chǎn)品時(shí)需要用到很多少聲音,一般常用語(yǔ)音芯片如SK080 SK040 SK020等支持的段數(shù)為32或63段先我們把一些重復(fù)使用的語(yǔ)音先分好段編好地址盡量精簡(jiǎn)。然后用單機(jī)片程序組合成我們需要的語(yǔ)句。如“1-9”,“十”,“百”,“千”,“元”...現(xiàn)在我們要發(fā)“100元”的語(yǔ)音,我們先發(fā)一個(gè)“1”再發(fā)“百”為再發(fā)“元”就可以了,下面討論一下程序怎么樣處理。 1.單片機(jī)控制接線圖如下:
2.時(shí)序圖: 單片機(jī)每次控制語(yǔ)音芯片放音前先發(fā)一個(gè)RST信號(hào)把語(yǔ)音芯片里的計(jì)數(shù)器清0,然后DATA腳發(fā)N個(gè)100US的脈沖高電平,就控制放第N個(gè)里的語(yǔ)音。 3.程序:
include "REG_MPC82L52.H" #include void delay_ms(unsigned int count) ; void delay_us(unsigned int count); void Speech(unsigned char cnt); void WBusy(void); void Speechs(void); /**************端口定義*****************/ sbit RST=P3^0; //P3.0是脈沖復(fù)位腳 sbit DATA=P3^1; //P3.1是脈沖數(shù)據(jù)腳 sbit BUSY=P3^2; //P3.2是放音BUSY腳 unsigned int sp[3]; //定義一個(gè)組合語(yǔ)音用的數(shù)組變量 /*************主程序****************/ main (void) { DATA=0; RST=1; delay_us(100); //上電復(fù)位防止干擾發(fā)聲芯片放音 RST=0; delay_us(100); sp[0]=0; sp[1]=0; sp[2]=0; while(1) { sp[0]=1; sp[1]=11; sp[2]=12; Speechs(); //組合1,11,12地址段放音‘100元‘ delay_ms(5000); //延時(shí)放音時(shí)間5秒 } } /************************************** ;延時(shí)X毫秒 ;不同的工作環(huán)境,需要調(diào)整此函數(shù) ;入口參數(shù):count ;出口參數(shù):無(wú) **************************************/ void delay_ms(unsigned int count) { unsigned int i,j; for(i=0;i { for(j=0;j<500;j++); } } /************************************** ;延時(shí)X微秒 ;不同的工作環(huán)境,需要調(diào)整此函數(shù) ;入口參數(shù):count ;出口參數(shù):無(wú) **************************************/ void delay_us(unsigned int count) { unsigned int i,j; for(i=0;i { for(j=0;j<2;j++); } } /************************************** ;控制地址段放音 ;入口參數(shù):cnt; ;出口參數(shù):無(wú) **************************************/ void SC_Speech(unsigned char cnt) { unsigned char i; RST=1; delay_us(100); RST=0; delay_us(100); for(i=0;i < cnt;i++) { DATA=1; //數(shù)據(jù)脈沖高 delay_us(100); //延時(shí)100US DATA=0; //數(shù)據(jù)脈沖低 delay_us(100); //延時(shí)100US } } /************************************** ;控制地址段組合放音 ;入口參數(shù):無(wú) ;出口參數(shù):無(wú) **************************************/ void Speechs(void) { Speech(sp[0]); WBusy(); Speech(sp[1]); WBusy(); Speech(sp[2]); sp[0]=0; sp[1]=0; sp[2]=0; } /************************************** ;等待BUSY信號(hào)變低; ;入口參數(shù):無(wú) ;出口參數(shù):無(wú) **************************************/ void WBusy(void) { unsigned int times; for(times=0;times<50;times++) //等待超過(guò)5秒最長(zhǎng)語(yǔ)音段自動(dòng)退出; { delay_ms(100); //調(diào)節(jié)組合語(yǔ)音間隔 if(BUSY==0) break; } }
上一條: 語(yǔ)音flash芯片樣版接線圖
|