基于单片机的语音录放模块文档格式.docx
《基于单片机的语音录放模块文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的语音录放模块文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
语音;
简便;
实用
一、引言
1.设计意义
单片机本来就以它的高可靠性、低功耗和低电压等优点被广泛运用于仪器仪表的测量、家用电器、医用设备甚至是高科技领域中的航空航天等领域。
而本次试验就是利用单片机的这些优势,利用STC89C52单片机进行编程,再根据ISD4002的强记忆能力和较长时间的录音功能来实现语音的录放,此次实验具有重大意义,既对通讯设备的研发和电子科技产品的研究有很大的帮助,同时又可以节省相关电子产品的生产和研发成本。
2.设计目的
本次设计的主要目的是将单片机课程的书本理论知识运用到实际应用上,学会融会贯通,掌握单片机的相关技能,掌握基于单片机的语音录放模块的原理以及设计方法,并掌握电子仪器的正确使用方法,为以后的毕业设计打好基础。
3.设计原理概述
基于单片机的语音录放模块采用STC89C52单片机为控制核心,通过编程的实现,利用按键的断开和闭合,控制语音芯片的录音和放音;
语音芯片采用ISD4002芯片,利用LM386实现音频的运放功能。
二、设计任务及要求
基于单片机的语音录放模块的设计任务是实现一段不多于8分钟的语音的录制与播放,通过用话筒输入一段语音,语音芯片模块对其进行录制,在经过音频功放模块对语音进行控制,再通过扬声器播放语音。
三、硬件介绍
1STC89C52
STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
STC89C52使用经典的MCS-51核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
2ISD4002
ISD4004系列工作电压3V,单片录放时间8至16分钟,音质好,适用于移动及其他便携式电子产品中。
芯片采用CMOS技术,含振荡器、防混淆滤波器、平滑滤波器、音频放大器、自动静噪及高密度多电平闪烁存贮列。
3LM386
LM386是一种音频集成功放,具有自身功耗低、更新链增益可调整、电源电压围大、外接元件少和总谐波失真小等优点的功率放大器,广泛应用于录音机和收音机之中。
四、设计容
4.1总体设计方案图
4.2各模块的设计电路图
1)电源转换模块
电源转换模块采用LM1117来对电压进行转换,分别产生5V和3.3V的电压。
2)控制电路模块
控制电路模块是整个语音录放模块的控制中心,通过89C52单片机的编程实现,控制整体电路的运行。
3)语音芯片模块
语音芯片模块采用ISD4002芯片,对外来输入的语音进行录制。
4)音频功放模块
音频功放模块采用LM386,对语音信号的功率进行放大。
4.3整体电路图
4.4器件清单
名称
数量
STC90C54
1
轻触开关
4
10K排阻
1K电阻
5
10K电位
按键开关
LED
3
12M晶振
33pf
2
47uf电解电容
10K电阻
40脚芯片底座
ISD400408
28脚芯片底座
4K7电阻
1uf电解电容
0.1uf电容
6
话筒
2K电阻
300K电阻
2N3904
10UF
1.5K电阻
50电位器
47nf
220uf电解电容
喇叭
单头线
470uf电解电容
0.1电解电容
LM1117
五、测试结果及分析
实物图如下所示
六.总结与体会
本设计是一种基于51单片机控制的语音录音/放音系统,采用ISD单片语音录音/放音集成电路系列中的ISD4002实现语音的存储和播放。
通过对语音录放模块的设计,认识到了理论与实际联系的重要性与真实性。
通过对本次课程的设计,不但知道了一些以前不知道的理论知识,也巩固了学会了的知识。
最重要的是能在实践中理解书本上的知识,只会基础而不会运用到实际上操作是没用的,我们学习的最终目的是要与实际结合,明白了我们要学以致用,也了解到课程设计的重要性。
这是能提高我们的实际操作能力的一次体验。
在整个设计过程中,我主要负责电路排版焊接这个部分,我觉得最难的是焊接前的排版布线这个过程,看别人排版好像很容易,但是到了自己做的时候发觉不是那么简单。
如果排版不好,可能会影响到整个电路的美观和焊接时的难度,既要使电路看起来美观又要使其焊接难度降到最低,需要一定的时间,而且电路的连接也会影响其实际运作的准确性。
我开始就是没有注意到这些问题,所以焊接电路上用了好多的时间,我按照自己能看否清楚的电路模块焊接,看起来也不美观。
电路美不美观取决于焊接的手工,这个也不是一时间能完成的好,也需要时间去练习,焊接时要按一定顺序去焊,焊接后一定要测试电路有没有短路、虚焊、漏焊,第一次调试就因为我的一个小小的错误,焊接错了,导致运行不了,不过最后检查还是能查出问题。
七、源程序
#include<
reg52.h>
sbitSS=P1^0;
//片选
sbitSCLK=P1^3;
//ISD4003时钟
sbitMOSI=P1^1;
//数据输入
sbitMISO=P1^2;
//数据输出
sbitLED=P1^7;
//指示灯
sbitISD_INT=P3^3;
//中断
sbitAN=P1^6;
//执行
sbitSTOP=P1^5;
//复位
sbitPR=P1^4;
//PR=1录音PR=0放音
voiddelay(unsignedinttime)//延迟n微秒
{
while(time!
=0)
{
time--;
}
}
voiddelayms(unsignedinttime)//延迟n毫秒
{
TMOD=0x01;
for(time;
time>
0;
time--)
TH0=0xfc;
TL0=0x18;
TR0=1;
while(TF0!
=1)
{;
TF0=0;
TR0=0;
//************************************
//ISD4002spi串行发送子程序,8位数据
voidspi_send(unsignedcharisdx)
unsignedcharisx_counter;
SS=0;
//ss=0,打开spi通信端
SCLK=0;
for(isx_counter=0;
isx_counter<
8;
isx_counter++)//先发低位再发高位,依次发送。
{
if((isdx&
0x01)==1)
MOSI=1;
else
MOSI=0;
isdx=isdx>
>
1;
SCLK=1;
delay
(2);
SCLK=0;
//*******************************
//发送stop指令
voidisd_stop(void)
delay(10);
spi_send(0x30);
SS=1;
delayms(50);
//发送上电指令,并延迟50ms
voidisd_pu(void)
{
spi_send(0x20);
//********发送掉电指令,并延迟50ms
voidisd_pd(void)
spi_send(0x10);
//发送play指令
voidisd_play(void)
LED=0;
spi_send(0xf0);
//发送rec指令
voidisd_rec(void)
spi_send(0xb0);
//发送setplay指令
voidisd_setplay(unsignedcharadl,unsignedcharadh)
spi_send(adl);
//发送放音起始地址低位
adh=adh|0xe0;
spi_send(adh);
//发送放音起始地址高位
//发送setrec指令
voidisd_setrec(unsignedcharadl,unsignedcharadh)
adh=adh|0xa0;
//芯片溢出,LED闪烁提醒停止录音
voidisd_overflow(void)
while(AN==0)
LED=1;
delayms(300);
LED=0;
//***************************