基于某单片机地语音录放模块
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实用标准文档
单片机原理与应用
课程设计报告
题目:基于单片机的语音录放模块
学生名字:
学生班级:
学生学号:
指导老师:
课题组其他成员名字:
成绩:
2014年12月12日
从20世纪开始,持续更新换代的电子科技产品的不断问世,加速了电子行业的发展,而数码技术的不断完善,更让电子科技产品走向多功能化和专业化。
基于单片机的语音录放模块运用单片机的简便性和实用性,被广泛应用于各种语言警示装置、留言装置、高档玩具和电子礼品等方面,为人们的生活增添了多姿多彩的一笔。
本次单片机实验的基于单片机的语音录放模块主要是实现一段声音的录放功能。
它在设计上采用四个模块,分别是电源转换模块、控制电路模块、语音芯片模块、音频功放模块。
其中电源转换模块采用LM7805和LM1117进行转换电压,分别产生5V和3.3V的电压。
语音芯片模块采用ISD4002芯片,音频功效模块实现运放的功能是通过采用LM386来完成。
关键词:电子科技产品;语音;简便;实用
一、引言........................................................ - 3 -
1.设计意义.................................................. - 3 -
2.设计目的.................................................. - 3 -
3.设计原理概述.............................................. - 3 -
二、设计任务及要求.............................................. - 3 -
三、硬件介绍.................................................... - 3 -
1 STC89C5
2 .................................................. - 4 -
2 ISD4002 ................................................... - 4 -
3 LM386 ..................................................... -
4 -
四、设计内容.................................................... - 5 -
4.1 总体设计方案图.......................................... - 5 -
4.2各模块的设计电路图....................................... - 5 -
1)电源转换模块.......................................... - 5 - 2)控制电路模块.......................................... - 6 - 3)语音芯片模块.......................................... - 6 - 4)音频功放模块.......................................... - 7 -
4.3 整体电路图.............................................. - 8 -
4.4器件清单................................................. - 8 -
五、测试结果及分析.............................................. - 9 -
六.总结与体会.................................................. - 10 -
七、源程序..................................................... - 10 -
一、引言
1.设计意义
单片机本来就以它的高可靠性、低功耗和低电压等优点被广泛运用于仪器仪表的测量、家用电器、医用设备甚至是高科技领域中的航空航天等领域。
而本次试验就是利用单片机的这些优势,利用STC89C52单片机进行编程,再根据ISD4002的强记忆能力和较长时间的录音功能来实现语音的录放,此次实验具有重大意义,既对通讯设备的研发和电子科技产品的研究有很大的帮助,同时又可以节省相关电子产品的生产和研发成本。
2.设计目的
本次设计的主要目的是将单片机课程的书本理论知识运用到实际应用上,学会融会贯通,掌握单片机的相关技能,掌握基于单片机的语音录放模块的原理以及设计方法,并掌握电子仪器的正确使用方法,为以后的毕业设计打好基础。
3.设计原理概述
基于单片机的语音录放模块采用STC89C52单片机为控制核心,通过编程的实现,利用按键的断开和闭合,控制语音芯片的录音和放音;语音芯片采用ISD4002芯片,利用LM386实现音频的运放功能。
二、设计任务及要求
基于单片机的语音录放模块的设计任务是实现一段不多于8分钟的语音的录制与播放,通过用话筒输入一段语音,语音芯片模块对其进行录制,在经过音频功放模块对语音进行控制,再通过扬声器播放语音。
三、硬件介绍
1 STC89C52
STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。
STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
2 ISD4002
ISD4004 系列工作电压3V,单片录放时间8 至16 分钟,音质好,适用于移动电话及其他便携式电子产品中。
芯片采用CMOS 技术,内含振荡器、防混淆滤波器、平滑滤波器、音频放大器、自动静噪及高密度多电平闪烁存贮陈列。
3 LM386
LM386是一种音频集成功放,具有自身功耗低、更新内链增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点的功率放大器,广泛应用于录音机和收音机之中。
四、设计内容
4.1 总体设计方案图
4.2各模块的设计电路图
1)电源转换模块
电源转换模块采用LM1117来对电压进行转换,分别产生5V和3.3V的电压。
控制电路
(STC89C52)
语
音
芯
片
话筒输
入
电源
音频功放
(LM386)
扬声器
(16 Ω)
5V
3.3V
5V
(ISD4002)
2)控制电路模块
控制电路模块是整个语音录放模块的控制中心,通过89C52单片机的编程实现,控制整体电路的运行。
3)语音芯片模块
语音芯片模块采用ISD4002芯片,对外来输入的语音进行录制。
音频功放模块采用LM386,对语音信号的功率进行放大。
4.3 整体电路图
4.4器件清单
五、测试结果及分析实物图如下所示
六.总结与体会
本设计是一种基于51单片机控制的语音录音/放音系统,采用ISD单片语音录音/放音集成电路系列中的ISD4002实现语音的存储和播放。
通过对语音录放模块的设计,认识到了理论与实际联系的重要性与真实性。
通过对本次课程的设计,不但知道了一些以前不知道的理论知识,也巩固了学会了的知识。
最重要的是能在实践中理解书本上的知识,只会基础而不会运用到实际上操作是没用的,我们学习的最终目的是要与实际结合,明白了我们要学以致用,也了解到课程设计的重要性。
这是能提高我们的实际操作能力的一次体验。
在整个设计过程中,我主要负责电路排版焊接这个部分,我觉得最难的是焊接前的排版布线这个过程,看别人排版好像很容易,但是到了自己做的时候发觉不是那么简单。
如果排版不好,可能会影响到整个电路的美观和焊接时的难度,既要使电路看起来美观又要使其焊接难度降到最低,需要一定的时间,而且电路的连接也会影响其实际运作的准确性。
我开始就是没有注意到这些问题,所以焊接电路上用了好多的时间,我按照自己能看否清楚的电路模块焊接,看起来也不美观。
电路美不美观取决于焊接的手工,这个也不是一时间能完成的好,也需要时间去练习,焊接时要按一定顺序去焊,焊接后一定要测试电路有没有短路、虚焊、漏焊,第一次调试就因为我的一个小小的错误,焊接错了,导致运行不了,不过最后检查还是能查出问题。
七、源程序
#include <reg52.h>
sbit SS = P1^0; //片选
sbit SCLK = P1^3; //ISD4003时钟
sbit MOSI = P1^1; //数据输入
sbit MISO = P1^2; //数据输出
sbit LED = P1^7; //指示灯
sbit ISD_INT = P3^3; //中断
sbit AN = P1^6; //执行
sbit STOP = P1^5; //复位
sbit PR = P1^4; //PR=1录音 PR=0放音
void delay(unsigned int time) //延迟n微秒
{
while(time!=0)
{
time-- ;
}
}
void delayms(unsigned int time) //延迟n毫秒
{
TMOD=0x01;
for(time;time>0;time--)
{
TH0=0xfc;
TL0=0x18;
TR0=1;
while(TF0!=1)
{;}
TF0=0;
TR0=0;
}
}
//************************************
//ISD4002 spi串行发送子程序,8位数据
//************************************
void spi_send(unsigned char isdx)
{
unsigned char isx_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;
delay(2);
}
}
//******************************* //发送stop指令
//******************************* void isd_stop(void)
{
delay(10);
spi_send(0x30);
SS=1;
delayms(50);
}
//******************************* //发送上电指令,并延迟50ms
//******************************* void isd_pu(void)
{
delay(10);
SS=0;
spi_send(0x20);
SS=1;
delayms(50);
}
//*******************************
//********发送掉电指令,并延迟50ms void isd_pd(void)
{
delay(10);
spi_send(0x10);
SS=1;
delayms(50);
}
//*******************************
//发送play指令
//*******************************
void isd_play(void)
{
LED=0;
spi_send(0xf0);
SS=1;
}
//*******************************
//发送rec指令
//*******************************
void isd_rec(void)
{
LED=0;
spi_send(0xb0);
SS=1;
}
//*******************************
//发送setplay指令
//*******************************
void isd_setplay(unsigned char adl,unsigned char adh) {
spi_send(adl); //发送放音起始地址低位
adh=adh|0xe0;
spi_send(adh); //发送放音起始地址高位
SS=1;
}
//*******************************
//发送setrec指令
void isd_setrec(unsigned char adl,unsigned char adh) {
spi_send(adl); //发送放音起始地址低位
adh=adh|0xa0;
spi_send(adh); //发送放音起始地址高位
SS=1;
}
//************************************
//芯片溢出,LED闪烁提醒停止录音
//************************************
void isd_overflow(void)
{
while(AN==0)
{
LED=1;
delayms(300);
LED=0;
delayms(300);
}
}
//************************************
//检查芯片是否溢出(读OVF,并返回OVF值)
//************************************
unsigned char chk_isdovf(void)
{
SS=0;
delay(2);
SCLK=0;
delay(2);
SCLK=1;
SCLK=0;
delay(2);
if (MISO==1)
{
SCLK=0;
SS =1; //关闭spi通信端
isd_stop(); //发送stop指令
return 1; //OVF为1,返回1
}
else
{
SCLK=0;
SS =1; //关闭spi通信端
isd_stop(); //发送stop指令
return 0; //OVF为0,返回0
}
}
//************************************************************************ //主程序
//功能:1.录音时,按住AN键,LED点亮开始录音,松开AN即可停止录音
// 再次按下AN键,LED点亮开始录第二段音,依次类推,直到芯片溢出。
// 按stop键芯片复位
// 2.放音时,按一下AN键,即播放一段语音。
按stop键芯片复位。
//************************************************************************
void main(void)
{
unsigned char ovflog;
while(1)
{
P0=P1=P2=P3=0xff; //初始化
while (AN==1) //等待AN键按下
{
if (AN==0) //按键防抖动
{delayms(20);}
}
delayms(300);
delayms(300);delayms(300);delayms(300);delayms(300);delayms(300);
isd_pu(); //AN键按下,ISD上电并延迟50ms
isd_pd();
isd_pu();
delayms(300);
if (PR==1) //如果PR=1则转入录音部分
{
delayms(500); //延迟录音
isd_setrec(0x00,0x00); //发送0x0000h地址的setplay指令
do
{
isd_rec(); //发送rec指令
delay(20);
while(AN==0) //等待录音完毕
{
if (ISD_INT==0) //如果芯片溢出,进行LED闪烁提示,
isd_overflow(); //如果取消录音(松开AN键)则停止录音,芯片复位
}
if (ISD_INT==0) break;
LED=1; //录音完毕,LED熄灭
isd_stop(); //发送停止命令
while(AN==1) //如果AN再次按下,开始录制下一段语音
{
if(STOP==0) //如果按下STOP按键,则芯片复位
break;
if (AN==0)
delayms(500);
}
}while(AN==0);
}
else //如果PR==0则转入放音部分
{
while(AN==0){;}
isd_setplay(0x4f,0x00); //发送setplay指令,从0x0000地址开始放音 //0019 002c 003f
do
{
isd_play(); //发送放音指令
delay(20);
while(ISD_INT==1) //等待放音完毕的EOM中断信号
{;}
LED=1;
isd_stop(); //放音完毕,发送stop指令
if (ovflog=chk_isdovf()) //检查芯片是否溢出,如溢出则停止放音,芯片复位
isd_stop();;
while(AN==1) //等待AN键再次按下
{
if (STOP==0) delayms(20);
if (STOP==0) break;
if (AN==0) delayms(20);
}
LED=0;
}while(AN==0); // AN键再次按下,播放下一段语音
}
isd_stop();
isd_pd();
}
七、参考文献
[1]鞠剑平陈朝大.《单片机应用技术教程》.华中科技大学出版社, 2012
[2]李小坚赵山林冯晓君龙怀冰.《Protel DXP电路设计与制版实用教程(第
2 版)》.人民邮电出版社, 2011
[3]孙惠芹《单片机项目设计教程》电子工业出版社。