当前位置:文档之家› 基于单片机的语音录放模块.doc

基于单片机的语音录放模块.doc

单片机原理与应用课程设计报告题目:基于单片机的语音录放模块学生名字:学生班级:学生学号:指导老师:课题组其他成员名字:成绩:2014年12月12日从20世纪开始,持续更新换代的电子科技产品的不断问世,加速了电子行业的发展,而数码技术的不断完善,更让电子科技产品走向多功能化和专业化。

基于单片机的语音录放模块运用单片机的简便性和实用性,被广泛应用于各种语言警示装置、留言装置、高档玩具和电子礼品等方面,为人们的生活增添了多姿多彩的一笔。

本次单片机实验的基于单片机的语音录放模块主要是实现一段声音的录放功能。

它在设计上采用四个模块,分别是电源转换模块、控制电路模块、语音芯片模块、音频功放模块。

其中电源转换模块采用LM7805和LM1117进行转换电压,分别产生5V和3.3V的电压。

语音芯片模块采用ISD4002芯片,音频功效模块实现运放的功能是通过采用LM386来完成。

关键词:电子科技产品;语音;简便;实用一、引言1.设计意义单片机本来就以它的高可靠性、低功耗和低电压等优点被广泛运用于仪器仪表的测量、家用电器、医用设备甚至是高科技领域中的航空航天等领域。

而本次试验就是利用单片机的这些优势,利用STC89C52单片机进行编程,再根据ISD4002的强记忆能力和较长时间的录音功能来实现语音的录放,此次实验具有重大意义,既对通讯设备的研发和电子科技产品的研究有很大的帮助,同时又可以节省相关电子产品的生产和研发成本。

2.设计目的本次设计的主要目的是将单片机课程的书本理论知识运用到实际应用上,学会融会贯通,掌握单片机的相关技能,掌握基于单片机的语音录放模块的原理以及设计方法,并掌握电子仪器的正确使用方法,为以后的毕业设计打好基础。

3.设计原理概述基于单片机的语音录放模块采用STC89C52单片机为控制核心,通过编程的实现,利用按键的断开和闭合,控制语音芯片的录音和放音;语音芯片采用ISD4002芯片,利用LM386实现音频的运放功能。

二、设计任务及要求基于单片机的语音录放模块的设计任务是实现一段不多于8分钟的语音的录制与播放,通过用话筒输入一段语音,语音芯片模块对其进行录制,在经过音频功放模块对语音进行控制,再通过扬声器播放语音。

三、硬件介绍1 STC89C52STC89C52是公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash存储器。

STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。

在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

2 ISD4002ISD4004 系列工作电压3V,单片录放时间8 至16 分钟,音质好,适用于移动电话及其他便携式电子产品中。

芯片采用CMOS 技术,内含振荡器、防混淆滤波器、平滑滤波器、音频放大器、自动静噪及高密度多电平闪烁存贮陈列。

3 LM386LM386是一种音频集成,具有自身功耗低、更新内链增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点的功率放大器,广泛应用于录音机和收音机之中。

四、设计内容4.1 总体设计方案图4.2各模块的设计电路图1)电源转换模块电源转换模块采用LM1117来对电压进行转换,分别产生5V 和3.3V 的电压。

控制电路(STC89C52)语音芯片话筒输入 电源 音频功放 (LM386) 扬声器 (16 Ω) 5V 3.3V 5V(ISD4002)2)控制电路模块控制电路模块是整个语音录放模块的控制中心,通过89C52单片机的编程实现,控制整体电路的运行。

3)语音芯片模块语音芯片模块采用ISD4002芯片,对外来输入的语音进行录制。

4)音频功放模块音频功放模块采用LM386,对语音信号的功率进行放大。

4.3 整体电路图4.4器件清单名称数量STC90C54 1轻触开关 4 10K排阻 11K电阻 5 10K电位 1按键开关 1 LED 3 12M晶振 1 33pf 2 47uf电解电容 4 10K电阻 3 40脚芯片底座 1 ISD400408 1 28脚芯片底座 14K7电阻 31uf电解电容 1 0.1uf电容 6 话筒 1 2K电阻 1 300K电阻 1 2N3904 2 10UF 1 1.5K电阻 1 50电位器 1 47nf 1 220uf电解电容 1 喇叭 1 单头线 1 470uf电解电容 2 0.1电解电容 1 LM1117 1五、测试结果及分析实物图如下所示六.总结与体会本设计是一种基于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;elseMOSI=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点亮开始录第二段音,依次类推,直到芯片溢出。

相关主题