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

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用51系列单片机实现语音输出.doc

用 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?这一行是我自已加入去的

文档评论(0)

tangtianxu1 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档