用51系列单片机实现语音输出

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用51 系列单片机实现语音输出

本文是一编介绍如何通过 51 系列单片机来实现语音输出的文章,相信现在大家可以轻松地在网上,各种书本上找到如何用单片机来实现音乐及各种报警声的输出。当我在撑握了各音乐及报警声的输出技巧后,我就一直在想,是否可以用单片机实现语音的输出?且要如何才能实现语音的输出?后来在我查找和学习了各方面的资料后,终于找到了一种可以使单片机实用语音输出的方法,并且是一种很简单的方法,下面我就同大家分享我的成果。

原理在这样的,先在电脑中用COOL EDIT PRO 2.0 来记录我的语音,记录完成后再进行一定的编辑和处理,把一些多余的声音删去(因为在这里一秒的语音数据就要占去 8k 的空间)。然后再通过这个软件把我所要的语音信号输出转换为取样率为 8k 的数据(为文本格式),然后再编程使单片机每间隔 1/8k 秒输出一字节的数据。这样每一次输出的 8 位数据通过 DAC0800 数模转换,转换成相应的电流信号,然后再通过运放 LM358 转换成电压信号来驱动扬声器来发出语音信号。下面就一步一步详细教大家如何完成这些工作。

1.硬件

我们先按图(1)用面包板焊接好所需的线图(我就是用面包板做的),有条件的朋友可以自已做热转印板或请 PCB 厂家加工。只要大家的元零焊接正确且参数正确,硬件部份是没问题的。元零的参数如下:

R1 R2 R4 R5 R6——1k

R3———2k

C1 C2———30P

C3———100P

C4———10uF

Y1———12M

U1———89C52

U2———DAC0800

U3———LM358

图(1)

2.软件

写入到单片机中的程式如下面所示。每个指令我做了注释,相信大家应都可在看得明的了。

******************************

dac_out equ p2 ;定义 p2 口为 DAC 的数据输出端口;

*****************************

org 00h

jmp start ;程式从 100 开始

org 0100h

start:

out_loop:

mov p2,#0h ;清 p2 口

mov dptr,#dac0800_table ;取 DAC 输出数据的首址到 dptr 中

mov a,#0h ;清累加器 A

movc a,@a+dptr ;取 A+dptr 所指位置的数据到累加器 A 中

mov dac_out,a ;把刚才取出的数据送到 DAC 输出口 p2

call delay_125us ;延时 125us,也即是 1/8k

inc dptr ;dptr 指针加一

cjne a,#255d,out_loop ;识别到了数据的结尾,不是则继续。

jmp $ ;送完所有的语音数据后,程式运行到此

delay_125us: ;延时 125us 的子程式

mov r5,#55

djnz r5,$

ret

dac0800_table: ;DAC 数据的首址

;***************************星号之间是处理好的数据

db 119

db 120

db 121

db 122

。。。。。。。。。。

。。。。。。。。。。

。。。。。。。。。。

db 107

db 114

;***************************

db 255 ;此 255 是数据结束标志

end

大家要注意的是,在程式中 db 119 到 db 114 之间的数据(为十进制)是我从 cool edit pro 2.0 中转出来的语音数据,而 db 255 这一行是我自已加入去的数据结束示志位,而不是数据。因为单片机的空间有限,所以我的程式的取样率定的是 8K(我觉用 8K 的取样率语音质量也不差了),比较小(但一秒钟也有 8000 行数据),所以程式每输出一行数据要延时 125US(1/8K),如果延时时间不对,语音会变调,大家到时可以试试,很爽的。

另如果在软件 COOL EDIT PRO 2.0 中的数据取样率有所变动,在单片机的程式中的延时时间也要相映变动。取样率越大数据所占的空间就会越大,这里就是为什么我选用 AT89C52 的原因了,52 有8K 的程式空间,而一秒钟的数据也是 8K,当我取不到一秒钟的数据时再加上几十个字节的程式空间,就刚可以放入到 52 中去了。大家可能觉一秒钟的语音太少了,不够爽。那怎么办?有两个为法,一是选用空间更大的单片机,另一办法是扩展外部的数据空间,外接一个 EEPROM 这样就行了。扩展多大你就看着办吧,呵呵!是不是。

3.语音数据的处理

在 PC 机中可以进行语音数据处理的工具软件实用太多了,但我试了各种软件,还是觉得 COOL EDIT PRO 2.0(大家可以在网上下载这个软件,我用的就是汉化版的)这个工具软件用得比较顺手,所以下面我就按这个软件来价绍如何进语音数据的处理。图(2)就是这个软件的界面,不错吧!

图(2)

(1)打开此软件后,点击软件左上角的“文件”菜单选择“新建“命令就可进到图(3)所示的选项界面。

图(3)

(2)进入图(3)的选项界面后,按图中所示的选项进行设定就可以了。点击“确定”按钮后就完成了对将要采样的语音信号的格式定义,如图(4)所示就是确认后的界面。这样下一步就可以开始记录我们需要的语音信号了。

图(4)

(3)在开始录音之前,大家要做的工作就是先在电脑上插上一个话筒(大家可以在电脑市场买到,如果有条件也可以自已做一个,很简单的,找来一个驻极体话筒,焊上两根线,其中与话筒的外壳相连的是地,另一为信号输出端,再在线的另一端焊上一个立体声插头就可以了),接着确认你的话筒是否能正常工作。

(4)完成输入设备话筒的准备工作后,大家就可以开始录音了。点击图(5)中红色的录音按钮就可以开始录音,这时你就可以对着话筒说话。这样此软件就会记录下你的语音信息了,再次点击红色的按钮你就完成了语音输入的工作,数据如图(6)所示。

相关文档
最新文档