基于ISDl420的語音編輯器設(shè)計(jì)
系統(tǒng)控制芯片的PLAYE端口,平時(shí)為高電平,當(dāng)出現(xiàn)下降沿時(shí)開始錄音。
信號(hào)EOM是語音段結(jié)束標(biāo)志,當(dāng)錄音結(jié)束,若存儲(chǔ)器沒完,ISD1420會(huì)自動(dòng)為其加上EOM標(biāo)志符,表示該段錄音結(jié)束。放音時(shí),當(dāng)遇到EOM標(biāo)志符,EOM信號(hào)會(huì)由高電平輸出一個(gè)低脈沖。該信號(hào)連至單片機(jī)的T1/P3.5引腳,使單片機(jī)能夠及時(shí)知道該語音段結(jié)束,以便控制下一步操作。
2.4 單片機(jī)
這里選擇的89C51具有40個(gè)I/O口。系統(tǒng)不能采用簡單的最小系統(tǒng)連接,由上述可知,它無法滿足該系統(tǒng)的需求。該設(shè)計(jì)可利用它的開放總線連接更多的設(shè)備。
該設(shè)計(jì)將3個(gè)數(shù)碼管和語音芯片通過總線方式接入系統(tǒng)。低位地址不用,所以不用進(jìn)行低8位的地址擴(kuò)展。選擇A8,A9,A10分別作為3個(gè)數(shù)碼低電平的有效地址信號(hào),再與單片機(jī)的WR信號(hào)組合。以構(gòu)成帶地址信息的寫控制信號(hào)。這樣,程序便可像訪問存儲(chǔ)器一樣訪問這些端口,其地址為:FE00H,F(xiàn)D00H,F(xiàn)B00H。
語音芯片也是采用這種方式進(jìn)入系統(tǒng)的,其地址是7F00H。這種方式既可使電路簡單,也可使操作簡單。P1口作為系統(tǒng)的鍵盤掃描接口,連接如前述,這里不再贅述。
3 用戶界面
用戶界面如下:
鍵盤:0~9、[錄音]、[放音]、[組合]、[分段]。
顯示:3位7段數(shù)碼管。段號(hào)2位,以確定錄音、放音位置;計(jì)數(shù)器1位,9~O減l計(jì)數(shù)。
指令格式:參數(shù)表>命令>。
四個(gè)主要功能為:
(1)分段
操作:分段數(shù)+[分段]
(2)錄音
操作:欲錄音段號(hào)+[錄音]
顯示:當(dāng)按下[錄音]時(shí),欲錄音段號(hào)閃3下后,計(jì)數(shù)顯示9;錄音開始,計(jì)數(shù)器減l,直到O,錄音結(jié)束。
(3)回放
操作:欲放音段號(hào)+[放音]4)、組合放音:功能用于檢查組合放音效果。
操作:段號(hào)i+[組合]+段號(hào)j+[組合]+…+段號(hào)n+[組合]+[放音]
顯示:在組合時(shí),顯示段號(hào),閃爍,按下[組合]后顯示消失,再重復(fù);組合放音時(shí),顯示當(dāng)前放音段號(hào);計(jì)數(shù)器先顯示組合段總數(shù),每放完一段減1,直到O。
4 軟件方案
內(nèi)存分配如下:顯示緩沖為3個(gè)單元,第一、二單元用于存放段號(hào),第三單元用于存放計(jì)數(shù)器值。組合段緩沖為一個(gè)單元,為一個(gè)放音段地址??紤]單片機(jī)的存儲(chǔ)容量與系統(tǒng)成本。設(shè)計(jì)考慮10個(gè)單元,F(xiàn)F為組合結(jié)束標(biāo)志。當(dāng)?shù)谝粏卧扔贔F時(shí),為緩沖器空,ISD1420的段地址從該緩沖區(qū)取出。軟件流程圖如圖5所示。
為方便起見,系統(tǒng)采用平均分段管理方式。根據(jù)ISDl420語音芯片器件使用手冊可知,最多可分為160個(gè)段。其中,O~159為分段使用的有效地址。系統(tǒng)按1 s四個(gè)字的語速算,對于20 s的存儲(chǔ)空間來說,最多不能超過80個(gè)段,該時(shí)段空間最小為1個(gè)字。其分段范圍為1分段數(shù)80,在這個(gè)前提下,用戶可根據(jù)實(shí)際需求來分段,段號(hào)為O~79。在執(zhí)行[分段]命令時(shí),要將地址間隔計(jì)算出來,以便段號(hào)與語音芯片地址映射。地址間隔存于專用地址間隔單元spacing中。分段寄存器seg_num:存放執(zhí)行[分段]命令后的分段數(shù)。用戶進(jìn)行錄音、放音的段號(hào),程序必須驗(yàn)證在此范圍方可執(zhí)行,否則提示錯(cuò)誤信息“E”。系統(tǒng)默認(rèn)分段數(shù)seg_num為40,spacing為4,分段確定后,段地址可以由下式計(jì)算:
分段地址=seg_num×spacing
地址間隔=160/seg_num
暫存器temp:系統(tǒng)預(yù)留一個(gè)單元。用來以二進(jìn)制數(shù)方式存放段號(hào)。以temp_sign為暫存器標(biāo)志,用于指示按鍵輸入,其等于0時(shí),段號(hào)只有1位;等于1時(shí),段號(hào)有2位。前次數(shù)字鍵是十位,當(dāng)前數(shù)字鍵是個(gè)位。如果是兩位數(shù),程序要對這兩位二一十進(jìn)制數(shù)進(jìn)行計(jì)算,轉(zhuǎn)換成二進(jìn)制數(shù),即BCD十位×10+BCD個(gè)位。存入temp。當(dāng)執(zhí)行錄音、放音、分段操作時(shí),程序從temp取參數(shù),計(jì)算段地址。用戶在輸入段號(hào)時(shí),如果出現(xiàn)錯(cuò)誤,可重新輸入。第一次輸入的段號(hào),將被第二次輸入的段號(hào)覆蓋。
組合段緩沖ally_buf:系統(tǒng)預(yù)留1O個(gè)單元,只有執(zhí)行組合放音時(shí)才用。組合是所有段中任意選擇10個(gè)段構(gòu)成的隊(duì)列。系統(tǒng)用ally_point-er作為入隊(duì)地址指針,以ally_out作為出隊(duì)地址指針。組合放音時(shí),在該指針指示下,依次將錄音段從緩沖區(qū)中取出播放,以構(gòu)成短語,直到ally_out=ally_pointer。程序在沒有執(zhí)行[組合]功能時(shí),保持ally_pointer=O;當(dāng)用戶按下[組合]鍵時(shí),程序應(yīng)將暫存器temp的內(nèi)容傳入ally_buf中,并修改ally_pointer。在執(zhí)行[放音]時(shí),程序首先檢查ally_pointer是否等于0,是,執(zhí)行temp的段放音;否則。執(zhí)行ally_buf的段放音,直到FF標(biāo)志。用戶指令單元dictate;存放用戶指令。主程序從這里識(shí)別用戶命令,并執(zhí)行命令。命令標(biāo)志sign_dic:其等于O時(shí),當(dāng)前按鍵為數(shù)字鍵。等于1時(shí),當(dāng)前按鍵為命令鍵。命令與數(shù)字的識(shí)別:當(dāng)鍵盤碼大于7F時(shí),為數(shù)字按鍵,否則為命令按鍵。七段顯示:O~9,E為錯(cuò)誤提示。這里采用共陰極7段數(shù)碼管,如圖6所示。
出口如下:
temp為對應(yīng)段號(hào)的二進(jìn)制數(shù)??梢灾苯佑?jì)算段地址,最大范圍,小于分段數(shù)seg_num。
sign_dic等于1時(shí),請求執(zhí)行dictate中的命令。
dictate為命令代碼。
5 結(jié)語
按照該方法設(shè)計(jì)的語音編輯器可行性強(qiáng),操作簡單,界面清晰,在實(shí)際的生活中,該語音編輯器經(jīng)過改進(jìn)后可以很方便地應(yīng)用到MP3,DVD,錄音筆等音頻設(shè)備中,同時(shí)也可以用到遠(yuǎn)程語音控制中。與其他的相比,該語音編輯器具有價(jià)格更低廉,可單獨(dú)作為器件來實(shí)現(xiàn),因此具有一定的實(shí)用價(jià)值。
電子血壓計(jì)相關(guān)文章:電子血壓計(jì)原理
評論