《基于单片机的语音录放模块(6.29).pdf》由会员分享,可在线阅读,更多相关《基于单片机的语音录放模块(6.29).pdf(17页珍藏版)》请在金锄头文库上搜索。
1、学 海 无 涯 单片机原理与应用单片机原理与应用 课程设计报告课程设计报告 题题 目:目:基于单片机的语音录放模块基于单片机的语音录放模块 学生名字:学生名字: 学生班级:学生班级: 学生学号:学生学号: 指导老师:指导老师: 课题组其他成员名字:课题组其他成员名字: 成成 绩:绩: 2014 年年 12 月月 12 日日 学 海 无 涯 摘 要摘 要 从 20 世纪开始,持续更新换代的电子科技产品的不断问世,加速了电子行 业的发展,而数码技术的不断完善,更让电子科技产品走向多功能化和专业化。 基于单片机的语音录放模块运用单片机的简便性和实用性, 被广泛应用于各种语 言警示装置、留言装置、高档
2、玩具和电子礼品等方面,为人们的生活增添了多姿 多彩的一笔。 本次单片机实验的基于单片机的语音录放模块主要是实现一段声音 的录放功能。它在设计上采用四个模块,分别是电源转换模块、控制电路模块、 语音芯片模块、音频功放模块。其中电源转换模块采用 LM7805 和 LM1117 进行 转换电压,分别产生 5V 和 3.3V 的电压。语音芯片模块采用 ISD4002 芯片,音 频功效模块实现运放的功能是通过采用 LM386 来完成。 关键词:关键词: 电子科技产品;语音;简便;实用 学 海 无 涯 目 录目 录 学 海 无 涯 一、引言 1.1.设计意义设计意义 单片机本来就以它的高可靠性、 低功耗和
3、低电压等优点被广泛运用于仪器仪表的 测量、家用电器、医用设备甚至是高科技领域中的航空航天等领域。而本次试验 就是利用单片机的这些优势,利用 STC89C52 单片机进行编程,再根据 ISD4002 的强记忆能力和较长时间的录音功能来实现语音的录放,此次实验具有重大意 义,既对通讯设备的研发和电子科技产品的研究有很大的帮助,同时又可以节省 相关电子产品的生产和研发成本。 2.2.设计目的设计目的 本次设计的主要目的是将单片机课程的书本理论知识运用到实际应用上, 学会融 会贯通,掌握单片机的相关技能,掌握基于单片机的语音录放模块的原理以及设 计方法,并掌握电子仪器的正确使用方法,为以后的毕业设计打
4、好基础。 3.3.设计原理概述设计原理概述 基于单片机的语音录放模块采用 STC89C52 单片机为控制核心,通过编程的实 现, 利用按键的断开和闭合, 控制语音芯片的录音和放音; 语音芯片采用 ISD4002 芯片,利用 LM386 实现音频的运放功能。 二、设计任务及要求 基于单片机的语音录放模块的设计任务是实现一段不多于 8 分钟的语音的 录制与播放,通过用话筒输入一段语音,语音芯片模块对其进行录制,在经过音 频功放模块对语音进行控制,再通过扬声器播放语音。 三、硬件介绍 学 海 无 涯 1 STC89C52 STC89C52 是公司生产的一种低功耗、 高性能 CMOS8 位微控制器,
5、具有 8K 在 系统可编程 Flash 存储器。STC89C52 使用经典的 MCS-51 内核,但做了很多 的改进使得芯片具有传统51单片机不具备的功能。 在单芯片上, 拥有灵巧的8 位 CPU 和在系统可编程 Flash,使得 STC89C52 为众多嵌入式控制应用系统提供 高灵活、超有效的解决方案。 2 ISD4002 ISD4004 系列工作电压 3V,单片录放时间 8 至 16 分钟,音质好,适用于移动 电话及其他便携式电子产品中。芯片采用 CMOS 技术,内含振荡器、防混淆滤 波器、平滑滤波器、音频放大器、自动静噪及高密度多电平闪烁存贮陈列。 3 LM386 LM386 是一种音频
6、集成,具有自身功耗低、更新内链增益可调整、电源电压范 围大、外接元件少和总谐波失真小等优点的功率放大器,广泛应用于录音机和收 音机之中。 学 海 无 涯 四、设计内容 4.1 总体设计方案图 4.2 各模块的设计电路图 1)电源转换模块 电源转换模块采用LM1117来对电压进行转换, 分别产生5V和3.3V的电压。 控制电路 (STC89C52) 语 音 芯 片 话 筒 输 入 电源 音频功放 (LM386) 扬声器 (16 ) 5V 3.3V 5V (ISD4002) 学 海 无 涯 2)控制电路模块 控制电路模块是整个语音录放模块的控制中心,通过 89C52 单片机的编程 实现,控制整体电
7、路的运行。 3)语音芯片模块 语音芯片模块采用 ISD4002 芯片,对外来输入的语音进行录制。 学 海 无 涯 4)音频功放模块 音频功放模块采用 LM386,对语音信号的功率进行放大。 学 海 无 涯 4.3 整体电路图 4.4 器件清单 名称 数量 STC90C54 1 轻触开关 4 10K 排阻 1 1K 电阻 5 10K 电位 1 按键开关 1 LED 3 12M 晶振 1 33pf 2 47uf 电解电容 4 10K 电阻 3 40 脚芯片底座 1 ISD400408 1 28 脚芯片底座 1 4K7 电阻 3 学 海 无 涯 1uf 电解电容 1 0.1uf 电容 6 话筒 1
8、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 实现语音的存储和播放。通过对语音录 放模块的设计,认识到了理论与实际联系的重要性与真实性。通过对本次课程的 设计,不但知道了一些以前不知道的理论知识,也巩固了学会了的知识。最
9、重要 的是能在实践中理解书本上的知识,只会基础而不会运用到实际上操作是没用 的,我们学习的最终目的是要与实际结合,明白了我们要学以致用,也了解到课 程设计的重要性。这是能提高我们的实际操作能力的一次体验。 在整个设计过程中,我主要负责电路排版焊接这个部分,我觉得最难的是 焊接前的排版布线这个过程,看别人排版好像很容易,但是到了自己做的时候发 觉不是那么简单。 如果排版不好, 可能会影响到整个电路的美观和焊接时的难度, 既要使电路看起来美观又要使其焊接难度降到最低,需要一定的时间,而且电路 的连接也会影响其实际运作的准确性。我开始就是没有注意到这些问题,所以焊 接电路上用了好多的时间,我按照自己
10、能看否清楚的电路模块焊接,看起来也不 美观。电路美不美观取决于焊接的手工,这个也不是一时间能完成的好,也需要 时间去练习,焊接时要按一定顺序去焊,焊接后一定要测试电路有没有短路、虚 焊、漏焊,第一次调试就因为我的一个小小的错误,焊接错了,导致运行不了, 不过最后检查还是能查出问题。 七、源程序 #include sbit SS = P10; /片选 学 海 无 涯 sbit SCLK = P13; /ISD4003 时钟 sbit MOSI = P11; /数据输入 sbit MISO = P12; /数据输出 sbit LED = P17; /指示灯 sbit ISD_INT = P33;
11、/中断 sbit AN = P16; /执行 sbit STOP = P15; /复位 sbit PR = P14; /PR=1 录音 PR=0 放音 void delay(unsigned int time) /延迟 n 微秒 while(time!=0) time- ; void delayms(unsigned int time) /延迟 n 毫秒 TMOD=0 x01; for(time;time0;time-) TH0=0 xfc; TL0=0 x18; TR0=1; while(TF0!=1) ; TF0=0; TR0=0; /* /ISD4002 spi 串行发送子程序,8 位数
12、据 /* void spi_send(unsigned char isdx) unsigned char isx_counter; SS=0; /ss=0,打开 spi 通信端 SCLK=0; for(isx_counter=0;isx_counter1; SCLK=1; delay(2); SCLK=0; delay(2); /* /发送 stop 指令 /* void isd_stop(void) delay(10); spi_send(0 x30); SS=1; delayms(50); /* /发送上电指令,并延迟 50ms /* void isd_pu(void) delay(10)
13、; SS=0; spi_send(0 x20); SS=1; delayms(50); /* /*发送掉电指令,并延迟 50ms void isd_pd(void) delay(10); spi_send(0 x10); SS=1; delayms(50); 学 海 无 涯 /* /发送 play 指令 /* void isd_play(void) LED=0; spi_send(0 xf0); SS=1; /* /发送 rec 指令 /* void isd_rec(void) LED=0; spi_send(0 xb0); SS=1; /* /发送 setplay 指令 /* void isd_setplay(unsigned char adl,unsigned char adh) spi_send(adl); /发送放音起始地址低位 adh=adh|0 xe0; spi_send(adh); /发送放音起始地址高位 SS=1; /* /发送 setrec 指令 void isd_setrec(unsigned char adl,unsigned char adh) spi_