基于单片机的sd卡录音笔设计与实现本科毕设论文

上传人:无*** 文档编号:218210773 上传时间:2023-06-18 格式:DOC 页数:74 大小:1.33MB
收藏 版权申诉 举报 下载
基于单片机的sd卡录音笔设计与实现本科毕设论文_第1页
第1页 / 共74页
基于单片机的sd卡录音笔设计与实现本科毕设论文_第2页
第2页 / 共74页
基于单片机的sd卡录音笔设计与实现本科毕设论文_第3页
第3页 / 共74页
资源描述:

《基于单片机的sd卡录音笔设计与实现本科毕设论文》由会员分享,可在线阅读,更多相关《基于单片机的sd卡录音笔设计与实现本科毕设论文(74页珍藏版)》请在装配图网上搜索。

1、基于单片机的SD卡录音笔设计与实现摘 要 本文介绍的是基于单片机的SD卡录音笔的设计与实现。首先介绍了SD卡和SPCE061A的技术应用,发展趋势和研究意义;然后深入分析了单片机录音笔的基本原理,同时全面介绍了实现基于单片机的SD卡录音笔所需要的硬件和软件;接下来是详细介绍了实现基于单片机的SD卡录音笔的硬件电路设计以及软件结构设计;最后对整个系统的性能进行测试和分析。 整个系统分为硬件设计和软件设计两大模块。硬件部分由凌阳公司的SPCE061A单片机,扬声器,电池组等构成;软件环境选择的是与硬件配套的unsp IDE 2.0.0。本系统能够实现对声音的多段录音、放音、删除等功能。关键词:nS

2、P IDE,SPCE061A,SD卡,录音笔Microcontroller-based SD Card Recorder Design AbstractThis article is based on the SD Card Recorder MCU Design and Implementation. First introduced the SD card and SPCE061A of technology, trends and research significance; then analyzed in depth the basic principles of single ch

3、ip voice recorder, while achieving a comprehensive introduction to microcontroller-based SD Card Recorder necessary hardware and software; followed by implementation details of the microcontroller-based SD Card Recorder hardware circuit design and software architecture design; Finally, overall syste

4、m performance testing and analysis.The whole system is divided into two major hardware and software design module. Hardware used by the microcontroller control chip Sunpluss SPCE061A development board, speaker, battery pack; software environment and hardware choices are supporting unsp IDE 2.0.0. Th

5、e system can realize the multi sound recording, playback, delete and so on.Keyword: nSP IDE,SPCE061A,SD Card,Recorder目 录1 绪论11.1 SD卡录音笔概论11.2 录音器的发展历史31.2.1 留声机31.2.2 钢丝录音和磁带31.2.3 数码录音笔41.3 SD卡录音笔的发展趋势51.3.1 提高录音质量51.3.2 多功能于一身51.3.3 降低成本减小体积51.4 基于单片机的SD卡录音笔研究意义62 录音笔功能分析及开发环境72.1 功能概述72.1.1 SPCE0

6、61A对SD卡的读写功能72.1.2 录/放音及删除功能72.2 设计环境介绍82.2.1 系统硬件环境介绍82.2.2 软件工作环境NSP IDE介绍92.2.3 工程的操作132.2.3.1 创建工程过程132.2.3.2 开发操作过程133 录音笔总体设计方案及硬件设计153.1 总体设计方案153.1.1 硬件设计总体框图153.1.2 系统软件设计架构163.2 系统硬件设计173.2.1 系统硬件连接实物图173.2.2 SPCE061A最小系统173.2.3 按键电路193.2.4 音频输出电路193.2.5 SD卡模组电路204 系统软件设计214.1 主程序设计214.2 按

7、键处理程序流程234.3 按键扫描程序294.4 语音录/放在SD卡上的实现314.5 语音文件操作管理程序364.6 录/放音程序375 系统测试及性能分析395.1 喇叭测试395.2 程序下载及运行405.3 系统功能测试41结论42致谢43参考文献44附录45附录1 主程序代码(MAIN.C)45外文资料翻译(附原文)56II1 绪论1.1 SD卡录音笔概论SD卡录音笔,数字录音器的一种,特点是机身小巧精致,携带方便,录音笔是通过SD卡的方式来存储音频的。比较于以前的录音机和磁带录音方式来讲,录音笔通过对模拟信号的采样、编码将模拟信号通过数模转换器转换为数字信号,并进行一定的压缩后进行

8、存储,音质效果也要比传统的录音机好一些,而数字信号即使经过多次复制,声音信息也不会受到损失,保持原样不变,由于是数字的录制方式,因此数码录音笔的播放、定位、查找都非常的方便,并且可以实现循环播放。SD卡是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机和多媒体播放器等。大小犹如一张邮票的SD记忆卡,重量只有2克,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。除了体积极小之外,SD卡的存储特点是可以经受上百万次的反复擦写,因此反复使用的成本是零。而且SD卡容量越大,录音时间也就越长。从现在的情况来看,1GB闪存可以存储大约272小时录音

9、信息。对于传统的磁带式录音方式来说,简直是天方夜谭。本课题是在SD卡和凌阳SPCE061A单片机的基础上设计一款录音笔。凌阳SPCE061A单片机具有的数字信号处理功能及其所提供的音频压缩函数库来实现语音信号的实时采样与压缩;通过RS232接口,将采集到的语音信号实时上传到SD卡中存储。SD卡数码录音笔主要由下列二部分组成: SPCE061A开发板,SD卡模组。SD卡数码录音笔的技术要求主要是:录制语音,播放语音,删除语音。 SPCE061A开发板:SPCE061A是一款16 位微控制器,内嵌32K 的闪存(FLASH)。SPCE061A为语音产品而集成了ADC、DAC、AGC 等,还具有n

10、项内积运算指令,较高的处理速度使unSP 能够非常容易快速地处理复杂的数字信号,是数字语音识别应用领域的一种最经济选择。 SPCE061A精简开发板配有调试功能;结合集成开发环境不需外界任何仿真、调试器即可以完成编程、仿真、调试功能。本课题利用SPCE061A的语音处理功能,以及其强大的处理能力,再配合SD卡模组,很容易实现了大容量超长录音功能。SD卡模组:SD卡座模组为单片机提供了SD卡的插接装置,以SPI总线方式与单片机通讯,同时,提供卡检测、写保护检测等检测端口,以便用户可以方便灵活的为单片机外扩SD卡存储设备。 还包括:外置扬声器,外置电源。SD卡数码录音笔广泛应用于社会各个部分,是当

11、今最为常见的录音设施之一。录音笔也由笔形逐渐发展成为各种形状,趋于小巧实用。1.2 录音器的发展历史1.2.1 留声机1877年8月15日,爱迪生发明了留声机。这台留声机由金属大圆桶、曲轴、受话机和膜板构成,如上图。金属圆桶上面刻有螺旋的槽纹,并安装在一个长的曲轴上,曲轴一端是手柄,摇动手柄圆通就随之转动。受话器其实是一根金属小管,管的一头有一张振膜,振膜上贴着一个有金属钝头的细针,另一头是受话端。录音的时候,先在圆桶上贴一张锡箔,然后将受话器细针端对准圆桶,匀速转动圆桶,对受话器的另一端说话,声音则被振动的细针记录在锡箔上。回放的时候,将细针端再拿回到圆桶的最开始处,转筒圆桶,声音就被原样播

12、放出来。1.2.2 钢丝录音和磁带爱迪生的留声机是纯机械录音技术,在这之后,录音技术发展为光学录音、磁性录音和电子录音。其中,光学录音顾名思义就是将声音信号转变为光学信号,记录在感光底片上的一种技术,最初应用在有声电影的研究上,并在最早的电影领域取得了广泛的应用。在电影胶片的一侧有一条窄条,叫做声带,播放时由播放机转变为同步的声音信号予以伴音。需要说明的是,光学录音由于对制作技术环节要求较高,且不可擦写,所以当时除了电影伴音这部分应用广泛发展外,其他应用面较为狭窄。磁性录音是应非常广泛的录音技术,最具代表性的革新就是1900年钢丝录音机的发明。钢丝录音机利用磁性录音原理,将受话器与电磁铁连接,

13、将声音信号首先转换为不断变化的磁信号,然后将钢丝与电磁铁紧密贴在一起并匀速转动,这样钢丝上就形成了强度随声音信号变化而变化的磁场,回放的时候只需要把钢丝重新在电磁铁上经过一次,声音就被还原出来,磁带录音机就是钢丝录音机的改进版本,只是现代人把钢丝改为了软质的塑料磁带而已。1.2.3 数码录音笔21世纪初,数码录音技术(也称电子录音)诞生,这是通过对模拟信号的采样、编码将模拟信号通过数模转换器转换为数字信号,并进行一定的压缩后进行存储的技术。而数字信号即使经过多次复制,声音信息也不会受到损失,保持原样不变。通常数码录音笔的音质效果要比传统的录音机要好一些。录音笔通常标明有SP,LP等录音模式,S

14、P表示ShotPlay即短时间模式,这种方式压缩率不高,音质比较好,但录音时间短。而数码录音笔品牌分布图LP表示LongPlay,即长时间模式,压缩率高,音质会有一定的降低。因此,数码录音笔迅速取代之前所有录音产品,成为当今录音领域的“专家”。1.3 SD卡录音笔的发展趋势从首款SD卡录音笔上市到现在,短短4年内成为销量最大的随身录音设备,证明其有着极高的性能和质量,价格而比较合理。随着电子录音技术的发展和消费者使用需求的提高,数码录音笔的革新也是势在必行。1.3.1 提高录音质量一方面,随着科技的发展,录音笔的录音质量将会提升,高清录音笔,超长时间录音笔将会面世。1.3.2 多功能于一身近几

15、年,数码产品都朝着多功能化发展,随着技术的不断发展,数码产品的整合绝对是将来的一个大方向,现在很多录音笔都已经支持MP3播放功能,已经从单纯的录音发展到具备听MP3音乐,U盘,复读以及电话录音等多项功能。此外,录音笔将发展到一个全新的阶段,录音/复读,MP3播放,影像记录,图片浏览(数码伴侣),TXT文档阅读,移动存储等多功能于一身的录音笔将会出现。1.3.3 降低成本减小体积降低成本是任何技术商业化的重要前提,一般的途径是通过规模生产来摊薄成本。录音笔的成本在于技术和原材料两个方面,而技术的发展势必在成本上很难降低,所以,相信通过生产原材料价格的走低,录音笔也会渐渐便宜。既多功能,又小巧实用

16、,外观精致创新,也是录音笔外形的发展趋势。1.4 基于单片机的SD卡录音笔研究意义 本课题主要是研究基于单片机的SD卡录音笔设计,本课题是以单片机SPCE061A来实现一个录音笔系统。SPCE061A该款单片机资源丰富,有强大的数字语音处理功能可应用与语音播放和语音识别领域,内置有2路DA转换,8路AD转换及在线仿真等丰富的功能,这些都为实现数码录音和播放提供了良好的方便条件。 长期以来,以Flash Memory为存储体的SD 卡因具备体积小、功耗低、可擦写以及非易失性等特点而被广泛应用于消费类电子产品中特别是近年来,随着价格不断下降且存储容量不断提高,它的应用范围日益增广。当数据采集系统需

17、要长时间地采集、记录海量数据时,选择SD 卡作为存储媒质是开发者们一个很好的选择在电能监测以及无功补偿系统中,要连续记录大量的电压、电流、有功功率、无功功率以及时间等参数,当单片机采集到这些数据时可以利用SD 作为存储媒质。因此,基于单片机的SD卡录音笔将会是今后最常见的录音工具。2 录音笔功能分析及开发环境2.1 功能概述随着数字存储技术的发展,大容量存储设备充斥着电子应用的方方面面。对于嵌入式系统来说,功能的增强,也需要大容量存储设备做支撑。SD卡是一种轻便的大容量的存储设备。它使用方便,工作稳定,可以为嵌入式系统提供大容量的数据存储扩展,使得系统有强大的录音功能。利用SPCE061A为主

18、控芯片,SD卡做为存储介质,实现单片机的超长时间录放音功能。2.1.1 SPCE061A对SD卡的读写功能(1)SPCE061A对SD卡的操作方式为SPI模式;(2)提供SD卡插入检测功能,并进行语音提示;(3)提供SD卡写保护检测功能,并进行语音提示;(4)可以对SD卡进行初始化、扇区写、扇区读、扇区擦除、得到SD卡的容量信息等操作。2.1.2 录/放音及删除功能(1)录音数据存储在SD卡中;(2)支持多段录音;(3)放音支持“上一曲”、“下一曲”;(4)可以删除所有的录音片断,重新开始录音。2.2 设计环境介绍2.2.1 系统硬件环境介绍本系统的硬件部分采用的是SPCE061A单片机。SP

19、CE061A单片机是一个16位结构的微控制器。以下是它的性能简介:(1)16位的高性能unSP内核单片机(2)CPU时钟范围:0.32MHz49MHz(3)片内32K字的Flash程序存储器、2K字的SRAM数据存储器(4)4个16位I/O端口(5)14个中断源(6)1通道专用音频AD转换通道,7通道AD转换通道(7)内置MIC放大电路和自动增益(AGC)放大电路(8)2路电流输出型的DA转换通道(9)2个16位通用定时器/计数器(10)实时实钟(RTC)(11)低电压复位、低电压监测(12)内置在线仿真接口(ICE)(13)具有保密功能(14)具有Watchdog功能SPCE061A片内结构

20、,主要包括SPCE061A时钟电路,PPL锁相环及外围电路,SPCE061A系统时钟和Watchdog。图2.1为SPCE061A片内结构图。图2.1 SPCE061A片内结构2.2.2 软件工作环境nSP IDE介绍本系统的软件设计使用的是nSP IDE集成开发环境。unSP IDE集成开发环境支持汇编语言和C语言混合编程进行程序开发,集程序的编辑、编译、链接、调试以及仿真等功能为一体并且支持软件仿真和调试的功能。unSP IDE的主要特点是:提供了友好的交互界面、易于操作,使调试工作方便且高效。工具界面主要分为主菜单,工具栏,工作区窗口,编辑区窗口,输出区窗口。图2.2为工具界面参照图。图

21、2.2 工具界面参照图Workspace窗口,如图2.3。Workspace窗口由FileView和ResourceView两个视窗组成。单击FileView标签,用户可以方便浏览到工程内的各文件。FileView视窗用层次图排列出当前工程的所有文件的逻辑关系。Files文件夹包含了源程序、程序接口和说明硬件配置情况的文件。Resource文件夹包括了各种资源文件(rc)。Source Files文件夹用于保存源文件。Head Files文件夹用于保存头文件。External Dependencies文件夹用于保存对工程的一些标注信息。ResourceView视窗列出当前工程用到的所有资源。可

22、以单击视窗内分支顶部旁边的和号展开和收缩层次图。Workspace窗口所体现的逻辑位置不是指文件在硬盘上的物理位置,而是指一种逻辑从属关系。用户可用拖曳的办法改变文件的逻辑位置。在Workspace窗口内,不同类型的文件有不同的图标表现。图2.3 Workspace窗口Output窗口,如图2.4。Output窗口用于显示编译、调试和查找的结果。在窗口底部有几个视窗标签:Build、Debug和Find in Files等。用鼠标单击这些标签,可以激活相应的视窗。Build:显示编译和链接过程里产生的信息,包括文件编辑过程里的错误和警告信息等。Debug:显示程序调试过程里出现的信息。Find

23、 in Files:显示在文件中查找字符的结果。 Edit 窗口:在Edit窗口里,文件的打开格式有两种:用户可用文本格式打开文件,也可以用二进制代码格式打开文件。图2.4 Output窗口 文件编辑器,如图2.5。文本编辑器可以用来打开汇编语言程序和C语言程序。图2.5 文件编辑器二进制代码编辑器,如图2.6。二进制代码编辑器让用户在Edit窗口里以十六进制数/ASCII字符的形式来编辑二进制代码的资源文件。图2.6 二进制代码编辑器2.2.3 工程的操作2.2.3.1 创建工程过程(1)选择FileNew,打开New对话框如图2.7,选择Project标签;(2)在File文本框内输入工程

24、名称;(3)在Location文本框内输入工程文件的路径;(4)在Select Body Here区域内选择Probe;(5)单击OK,创建工程。图2.7 创建工程对话窗口2.2.3.2 开发操作过程从开始菜单内启动工具;选择FileOpen Project,在打开对话框内选择所要打开的工程;窗口(工作区窗口)显示在工具的左半边,在这个窗口内,用户可以看到当前工程所包含的所有文件;选择BuildRebuild All,进行源文件的编译和链接。 编译过程里的语法错误显示在Output窗口内;选择BuildStart DebugDownload,把程序加载到RAM,然后,用户可以用Debug菜单内

25、所提供的调试命令来优化和运行程序。选择6、BuildStart DebugGo,在调试器内运行程序。3 录音笔总体设计方案及硬件设计3.1 总体设计方案3.1.1 硬件设计总体框图系统采用SPCE061A做为主控制器,使用其通用I/O口控制SD卡设备,实现存储器扩展;利用电路板上的三个按键对录放音进行控制;利用SPCE061A带有AGC的专用A/D转换通道做为音频输入,完成语音录制功能;利用SPCE061A的D/A进行音频输出,实现语音播放功能。图 3.1为硬件总体框图。 输入指令麦克风扬声器电源线录音放音 电源SD卡SPCE061A储存或删除数字信号提取数字信号按键键盘图3.1 硬件总体框图

26、3.1.2 系统软件设计架构 软件系统包括以下部分:主程序:完成系统的初始化,处理按键信息,并根据按键,在语音文件操作管理程序的配合下,创建语音文件进行录音,或控制读取语音文件进行回放。按键扫描程序:完成对IOA口低八位的18按键进行扫描,并完成去抖、判断长/短按键等功能。SD卡驱动程序:该部分完成对SD卡的初始化、得到卡的容量信息、读写操作、擦除操作等。语音文件操作管理程序:该部分完成对多段录音的管理。每增加一段录音,程序会将起始地址、终止地址等相关信息保存,以便可以回放。录/放音程序:实现对A/D采样数据的编码和存储,以及从SD卡读取录音数据并解码然后送至D/A播放等操作。3.2 系统硬件

27、设计3.2.1 系统硬件连接实物图 系统主要由SPCE061A单片机,麦克风,扬声器,电源及储存器构成。SPCE061A单片机控制板作为整个系统的主控板,对麦克风采集来的声音信号进行数字处理并储存号功能。图3.3为硬件连接实物图。3.3 系统硬件连接实物图3.2.2 SPCE061A最小系统本设计选用的单片机模块为SPCE061A单片机模块,该模块包括SPCE061A芯片(MCU)、片内FLASH和其外围的基本模块。外围模块有:电机驱动电路板、锁相环外围电路(PLL)、复位电路(RESET)等。SPCE061A的主控芯片,负责构建语音录放的数据结构,并在单片机内部Flash中保存有语音内容和相

28、关语音信息。SPCE061A控制端口输出控制信息,并控制喇叭输出声音信息。实现对整个系统的控制。通过本系统中的音频输入电路和MIC,可以采集语音信号并处理。图3.4为SPCE061A最小系统图。图3.4 SPCE061A最小系统图3.2.3 按键电路 本系统使用三个按键完成录放音控制。图3.5为按键电路图。Key1为“下一曲”键,Key2为“上一曲”键,Key3为“录音键”。图3.5 按键电路图3.2.4 音频输出电路 SPCE061A内置2路10位精度的DAC,只需要外接功放电路即可完成语音的播放。电路中SPY0030是凌阳公司一款音频放大芯片。它和LM386相比,LM386工作电压需在4V

29、以上, SPY0030仅需2.4V即可工作(两颗电池即可工作);LM386输出功率100mW以下, SPY0030约700mW。图3.6为音频输出电路图。图3.6 音频输出电路图3.2.5 SD卡模组电路在本系统中,SPCE061A通过SPI总线实现对SD卡设备的访问。SD卡模组同时提供卡插入检测和写保护检测接口。图 3.7为SD卡模组电路图。图3.7 SD卡模组电路图4 系统软件设计4.1 主程序设计主程序采用的是汇编语言和C语言混合编程。主程序流程图如图4.1。 系统初始化 检测SD卡是否插入?否 检查SD卡是否写保护?置写保护标志播放“SD卡写保护”是否初始化SD卡按键处理系统状态处理是

30、播放“注意SD卡没有插入” 检测SD卡是否插入?否是播放“就绪”语音提示程序开始图4.1 主程序流程图 主程序完成系统初始化后检测SD卡是否插入以及是否有写保护,并有相应的语音提示,告知用户当前的系统状态。如果SD卡正确插入,则系统根据用户的不同按键进行录/放音控制。同时,在循环中对系统当前的状态进行检测,控制系统在录制语音时不至于超出存储器容量限制,或控制系统在放音时播放至文件尾部自动停止播放。部分程序如下:SACM_DVR1600_Initial();/ 语音初始化if(0 = SD_ChkCard() / 检测卡是否插入PlaySnd(VOICE_ATTENTION, DAC1 + DA

31、C2);PlaySnd(VOICE_SDCARDNOTINSERT, DAC1 + DAC2);while(0 = SD_ChkCard();/等待卡插入if(1 = SD_ChkCardWP()/检测卡是否有写保护WriteProtect = 1;elseFS_Init();/没有写保护,执行初始化操作PlaySnd(VOICE_READY, DAC1 + DAC2); / 播放就绪/-while(1)KeyProcess();/按键处理StatusProcess();/系统状态处理SACM_DVR1600_ServiceLoop();/录/放音服务4.2 按键处理程序流程 按键处理程序中,

32、当检测到有SD卡写保护时,会播放“卡有写保护”的提示音,对按键不做处理。按键处理流程图如图 4.2。初始化 判断是否有写保护标志?否 判断按键Key3录音键是Key2上一曲键Key1下一曲键返回开始图4.2 按键处理流程图部分程序如下:Key = KeyScan_GetKey(&KeyType);if(1 = WriteProtect)/卡有写保护,拒绝按键操作if(C_SReleaseKeyState = KeyType) | (C_LReleaseKeyState = KeyType)return; switch(Key) 当按下录音键时,若为短按键且SD卡未满,提示录音开始并置录音标志,

33、开始录音。“录音”按键处理程序的流程图如图4.3所示。 正在播放? 短按键?是是停止播放,关闭读取SD卡系统状态置空闲 SD卡已满?否是否 系统空闲?否启动写入SD卡,开始录音系统状态置录音否是 正在录音?结束录音,录音收尾是否开始返回图4.3 录音键流程图部分程序如下:case C_Record: / Recordif(C_SReleaseKeyState = KeyType) / 短按键,录/放音控制if(PLAY = Status)SACM_DVR1600_Stop();/如果正在放音,则先停止播放FS_CloseOpenFile();Status = IDLE;if(IDLE = St

34、atus)if(g_FileNum = FS_MAX_FILENUM) | (FS_GetUnusedSecNum() 0)if(PLAY = Status)/如果正在放音,则先停止播放SACM_DVR1600_Stop();FS_CloseOpenFile();else if(RECORD = Status)/如果正在录音则不处理if(C_LReleaseKeyState = KeyType)/长按键,停止当前播放Status = IDLE;else if(C_SReleaseKeyState = KeyType)/短按键,播放下一曲系统状态处理程序主要完成在录音时判断是否超出SD卡容量限制

35、,或者在放音时当前语音是否播放完毕。系统状态流程图如图4.6。 检查SD卡是否已满? 是否正在录音? 播放是否结束?停止录音系统状态置空闲 是否正在播放?停止读取系统状态置空闲是否否否是是是否返回开始图4.7 系统状态处理流程图部分程序如下:switch(Status)case RECORD:if(FS_GetUnusedSecNum() 1)/检测是否超出SD卡容量范围SACM_DVR1600_Stop(); Status = IDLE;case PLAY:if(FS_CheckFileEnd()/检测当前语音是否播放完毕SACM_DVR1600_Stop();FS_CloseOpenFil

36、e();Status = IDLE;4.3 按键扫描程序系统使用1024Hz时基中断对IOA口低八位进行扫描,并进行去抖、长短按键判断等工作。时基中断中的按键扫描服务程序采用了状态机的形式对按键状态进行判断。使用变量KeyScanState记录当前按键的扫描状态,并对扫描状态进行计时,通过判断计时变量KeyCount的值来判断按键的类型KeyState(短按键、长按键等)。 通常状况下,没有键按下,KeyScanState处于First状态。当有键被按下后,KeyScanState便进入Debounce去抖状态,此时KeyCount开始每1/1024秒计时累加一次。当KeyCount超过去抖规

37、定的时间后(通常为几十毫秒),便进入Repeat状态,这时候可以认为一个短按键被按下(KeyState = SKey)。此时如果检测到键抬起,则进入ReleaseDebounce状态,对按键抬起进行去抖,去抖成功后则可以认为形成了一个抬起的短按键(KeyState = SKeyRelease)。相反,如果在Repeat状态下超过了一个长按键规定的时间(1秒)后按键仍未抬起,则认为一个长按键被按下(KeyState = LKey),此时进入AfterLKey状态,无需再进行计时操作,只需等待按键抬起即可。当按键抬起时,则从AfterLKey状态进入ReleaseDebounce状态,去抖后得到一

38、个抬起的长按键(KeyState = LKeyRelease)。按键扫描程序提供如下API函数按键功能:void KeyScan_Init();功 能:按键扫描初始化。调用该函数将同时初始化按键扫描使用的I/O口。void DrvKeyInit(void)*P_KEY_Dir &= KEY_PORT_MASK;*P_KEY_Attrib &= KEY_PORT_MASK;#if KEY_COM*P_KEY_Buffer &= KEY_PORT_MASK;#else*P_KEY_Buffer |= KEY_PORT_MASK;#endifunsigned int KeyScan_GetKey(u

39、nsigned int *KeyType);功 能:该函数将返回当前按键的键值,并通过入口参数KeyType返回该按键的类型。unsigned int KeyScan_GetKey(unsigned int *KeyType)unsigned int Key;if(C_NullKey = ui_KeyState)Key = C_Null;elseKey = ui_KeyID;*KeyType = ui_KeyState;if(C_KeyStateFirst = ui_KeyScanState)ui_KeyID = C_Null;ui_KeyState = C_NullKey;return(Ke

40、y);4.4 语音录/放在SD卡上的实现 在语音录/放的过程中,存储/读取语音资源主要是调用F_USER_DVR1600_WriteData和F_USER_DVR1600_GetData两个函数实现的。通过自行定义这两个函数,即可将语音库录制的语音资料存储至SD卡,或从SD卡读取语音资料给语音库解码播放。 F_USER_DVR1600_WriteData函数主要完成存储录音数据至用户存储器的作用。这里需要调用“向语音文件写入多个word数据的函数”FS_WritingFile()以完成此功能。F_USER_DVR1600_GetData函数主要完成从用户存储器读取语音资料至缓冲区的作用。这里,

41、需要调用“从语音文件中读取多个word数据的函数”FS_ ReadingFile ()以完成从SD卡中读取数据。部分程序如下:F_USER_DVR1600_GetData:F_USER_WriteWordBlock:/Start Adr:R1; Length:R2push r1, r5 to sppush r2 to sppush r1 to spcall _FS_ReadingFilesp += 2pop r1, r5 from spRETF;F_USER_DVR1600_WriteData:F_USER_ReadWordBlock:/Start Adr:R1; Length:R2push

42、r1, r5 to sppush r2 to sppush r1 to spcall _FS_WritingFilesp += 2pop r1, r5 from spRETF; 单片机通过SPI总线向SD卡发送命令,控制SD卡的动作,并通过SPI总线读取SD卡返回的数据。 SD卡上电后工作在具有1bit数据总线宽度的SD模式。而本系统中,需要令SD卡工作于SPI模式。单片机通过使连接SD卡CS脚的I/O口输出低电平,并发送CMD0命令,即可使SD卡进入SPI模式工作。 SD卡进入SPI模式后,用户可以通过调用SD_SendCmd()函数发送命令对SD卡进行控制。 SD卡每次写入(读取)数据,都

43、需要以Block为单位。但是,在语音录制过程中,编码器是以帧为单位向SD卡内写入数据的,而帧的长度并不刚好是Block Size个。在语音播放过程中类似,解码器每次解码的数据量也并不刚好是Block Size个。为了解决这个矛盾,需要首先来看一下SD卡Block读写的过程。单片机从SD卡读取Block数据的过程。 首先,单片机发送CMD17命令以及希望读取的Block的地址参数给SD卡,然后SD卡返回一个byte的响应数据,告知单片机该操作是否可以正常进行。 然后,单片机从SPI总线上读取Block Size个数据,这些数据就是SD卡发送来的Block数据; 最后,SD卡发送CRC校验给单片机

44、,单片机结束SPI总线的接收操作,至此,一个Block被正确读入单片机内。读Block操作:1)发送CMD17,启动读Block操作;2)接收数据,直至接收完毕Block Size个数据;3)接收CRC校验,结束读Block操作。.public _SPI_SendByte_SPI_SendByte:.procr1 = sp + 3r1 = r1r2 = 8?L_SPI_SendByte_Lop:test r1, 0x0080jz ?L_SPI_SendByte_Bit8_0SPI_DOUT_SETjmp ?L_SPI_SendByte_Bit8_End?L_SPI_SendByte_Bit8_

45、0:SPI_DOUT_CLR?L_SPI_SendByte_Bit8_End:SPI_SCK_CLRSPI_SCK_SETr1 = r1 lsl 1r2 -= 1jnz ?L_SPI_SendByte_Lopretf.endp 单片机从SD卡写入Block数据的过程。首先单片机发送CMD24命令以及希望写入的Block的地址参数给SD卡,然后,SD卡返回一个byte的响应数据,告知单片机该操作是否可以正常进行。 然后,单片机通过SPI总线发送Block Size个数据,这些数据被SD卡接收,并缓存。最后,单片机发送CRC校验,并等待SD卡完成这些数据的烧写。写Block操作:1)发送CMD24

46、,启动写Block操作;2)发送数据给SD卡,直至写满Block Size个数据;3)发送CRC校验,等待SD卡完成内部烧写,结束写Block操作。.public _SPI_RecByte_SPI_RecByte:.procr1 = 0r2 = 8?L_SPI_RecByte_Loop:SPI_SCK_CLRSPI_SCK_SETr1 = r1 lsl 1r3 = SD_BUS_Datatest r3, SD_BUS_Dinjz ?L_SPI_RecByte_NoAddr1 += 1?L_SPI_RecByte_NoAdd:r2 -= 1jnz ?L_SPI_RecByte_Loopretf.

47、endp4.5 语音文件操作管理程序 语音文件操作管理程序主要完成对语音文件的管理,以及在录/放音的过程中对写入SD卡的数据进行控制,保证数据按照Block为单位写入。 程序中使用一个简单的结构体保存每个语音文件在SD卡中的位置信息:typedef struct _SD_FSunsigned long int StartSec; / 语音文件的起始Block地址unsigned long int EndSec; / 语音文件的结束Block地址unsigned int Offset; / 语音文件在最后一个Block中的使用量 FileList;FileList g_FileListArray

48、FS_MAX_FILENUM; / 文件索引表语音文件操作管理相关函数中通过定义一个全局变量CurOffset存储当前Block已经写入的数量,以便在写入(读取)新的数据时对是否超出Block进行判断。当连续读取(写入)数量超过一个Block的大小时将读完(写满)本Block并自动切换至下一Block继续读取(写入)剩余数据。同时,程序中规定语音文件在存储的时候如果最后一个Block没有使用完,则下一段语音从下一个Block的起始地址开始存储。4.6 录/放音程序SPCE061A是16位单片机,具有DSP功能,有很强的信息处理能力,最高时钟频率可达到49MHz,具备运算速度高的优势等等,这些都

49、无疑为语音的播放、录放、合成及辨识提供了条件。压缩算法中SACM-A1600、SACM-S530、SACM-S480/S720、SACM-S200主要是用来放音,可用于语音提示,而DVR1600则用来录/放音。部分程序如下:.include spce061a.inc.public F_USER_DVR1600_EndRecord/.public _USER_DVR1600_SetStartAddr/.public F_USER_DVR1600_SetStartAddr.public F_USER_DVR1600_GetData.public F_USER_DVR1600_WriteData/.

50、public F_USER_WriteWordBlock/*/.public F_USER_ReadWordBlock/*.external _FS_ReadingFile.external _FS_WritingFile.external _FS_EndEncodevoid FS_WritingFile(unsigned int *Buf, unsigned int Len)unsigned int i;Len = (SD_BLOCKSIZE - CurOffset)SD_WritingBlockData(unsigned long int)(SD_BLOCKSIZE - CurOffset

51、), (unsigned char *)Buf);SD_WriteFinished();CurFileSec+;CurFileEndSec = CurFileSec;i = SD_BLOCKSIZE - CurOffset;CurOffset = Len - i;i = 1;SD_WriteNewBlock(CurFileSec);SD_WritingBlockData(unsigned long int)CurOffset , (unsigned char *)&Bufi);elseSD_WritingBlockData(unsigned long int)Len, (unsigned ch

52、ar *)Buf);CurOffset += Len;void FS_ReadingFile(unsigned int *Buf, unsigned int Len)unsigned int i;Len = (SD_BLOCKSIZE - CurOffset)SD_ReadingBlockData(unsigned long int)(SD_BLOCKSIZE - CurOffset), (unsigned char *)Buf);SD_ReadFinished();if(CurFileSec = 1;SD_ReadNewBlock(CurFileSec);SD_ReadingBlockDat

53、a(unsigned long int)CurOffset, (unsigned char *)&Bufi);elseSD_ReadingBlockData(unsigned long int)Len, (unsigned char *)Buf);CurOffset += Len;5 系统测试及性能分析系统的硬件部分和软件部分完成以后,应对系统进行严格的测试及性能分析。为了保证系统功能的实现,系统的测试按照主程序流程所设计的方案依次对各模块进行测试。系统测试流程图如图5.1。喇叭测试主程序下载运行控制模块测试音频输入音频输出图5.1 系统测试流程图5.1 喇叭测试目的:测试喇叭能否正常工作条件

54、:只连接喇叭和电路板,噪音相对较小的室内环境。步骤1:接通电源,用万用表测量喇叭的正负极看是否有电压。步骤2:将一个最简单的语音播放程序下载并运行。现象1:万用表可以测量出电压。 结论:喇叭无损环,电路连接正常。现象2:程序下载并运行后,声音能正常播放。结论:喇叭可以正常工作。5.2 程序下载及运行在程序下载前,先按照硬件连接图3.3连接好硬件,然后把3节五号电池装入电池盒并把电源线与系统连接。下载线的一边(25针插座)与PC后面的并行接口相接,另一边的五针接头与电路板上标有“EZ-Probe”的插座(J11)相接,并用J11接口边上的S5跳线把S5的2和3管脚短接。打开电池盒开关,POWER

55、指示灯和LCD液晶显示屏上的电源指示灯都被点亮,证明系统连接正常,可以开始下载。用IDE打开设计好的工程文件,并确认以选定了“USE ICE”按钮。选择“USE ICE”如图5.2。图5.2 选择“USE ICE”当程序处于下载状态时,会弹出一个进度框。下载进程如图5.3。图5.3 下载进程对话框下载完成后关闭电池盒开关,断开“EZ-Probe”下载线并把S5跳线的1、2管脚短接。这时程序下载完成,打开电池盒开关运行。5.3 系统功能测试系统运行后,如果SD卡没有插入,会提示“注意,SD卡没有插入”,并等待SD卡插入后进行下一步操作;如果SD卡被写保护,则会提示“注意,SD卡写保护”,此后,所

56、有按键均无效,按下任意键会提示“SD卡写保护”。此时,用户需要去除SD卡写保护,并重新运行程序;如果SD卡正常插入并且没有写保护,等待SD卡初始化成功后会有“就绪”的提示音。SD卡正常初始化后,可以按照各按键功能进行操作;按下Key3键,启动录音,此时,会有“开始录音”的提示音。再次按下Key3键结束本次录音,此时,会有“结束录音”的提示音; 停止录音后,按下Key2播放上一段录音,按下Key1播放下一段录音;长按Key2键将清除所有已录语音,此时会有“SD卡已擦除”的提示音;长按Key1键将停止放音。结论:实现录音,放音,删除功能,测试成功。结论本课题是基于单片机的SD卡录音笔设计与实现,根据课题的要求设计了SD卡数码录音笔,在设计中主要完成了以下几个方面的内容:系统硬件结构设计:SPCE061A开发板,SD卡模组。系统软件架构设计:完成了语音文件的录制,播放和删除,写入,读取及擦除SD卡。在本课题中,用SPCE061A开发板上的MIC作为语音信号采集器,喇叭作语音播放器,通过单片机内部存储器

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!