用 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:...