首页 基于凌阳单片机制作的简易复读机

基于凌阳单片机制作的简易复读机

举报
开通vip

基于凌阳单片机制作的简易复读机基于凌阳单片机制作的简易复读机 毕 业 论 文 学生姓名 学 号 院 (系) 电子与电气工程系 专 业 电子信息科学与技术 题 目 基于凌阳单片机制作的简易复读机 指导教师 2009 年 5 月 摘 要: 复读机是一种在市面上热卖的用于语言学习的电子产品,特别是学生人群不可缺少的学习用具之一。不过由于大多数复读机采用语音芯片,致使声音效果有所欠缺,并且由于内存小不能支持长时间大容量的录音。本文将介绍由台湾凌阳科技开发的SPCE061A单片机与SD卡组成的录放音系统,利用SPCE061A强大的语音处理功能...

基于凌阳单片机制作的简易复读机
基于凌阳单片机制作的简易复读机 毕 业 论 文 学生姓名 学 号 院 (系) 电子与电气工程系 专 业 电子信息科学与技术 题 目 基于凌阳单片机制作的简易复读机 指导教师 2009 年 5 月 摘 要: 复读机是一种在市面上热卖的用于语言学习的电子产品,特别是学生人群不可缺少的学习用具之一。不过由于大多数复读机采用语音芯片,致使声音效果有所欠缺,并且由于内存小不能支持长时间大容量的录音。本文将介绍由台湾凌阳科技开发的SPCE061A单片机与SD卡组成的录放音系统,利用SPCE061A强大的语音处理功能,再配合SD卡很容易实现大容量超长录音功能,并且支持多段录音,便于用户对前后录音效果的比较。而SD卡易插拔,便于通过计算机对其进行读写操作。由本文制作的语音复读机具有长时间、大容量、支持多段录音、结构简单,价格便宜等优点,极具市场推广前景。 关键词:凌阳单片机,SD卡,复读机,录放系统 1 Abstract: The language repeater is one kind of electronic product that used to study language. It sales quite well in the current market, especially for our students, is an indispensable stationery. However most of language repeaters use voice chip, the effect of sound is not very perfect. Besides it can’t support long-time and large capacity voice record owing to its small memory. This thesis will introduce SPCE061A Single-chip Microcomputer and SD card model consisted of recording system, which is designed by Sunplus Technology in Taiwan. It use SPCE061A strong speech processing function, and combining SD card is easy to implement large capacity and long-time record function and support multi-stage record, then it is convenient for the users to compare the pre and post effect of records .What’s more, SD card is easy to plug-pull, so it is convenient to carry out read-write operation through a computer. The speech language repeater that we produced , has the long time ,large capacity and multi-stage record function .It also has the simple structure and cheap price advantages . On account of these,we have confidence it has perfect market promotion prospect. Keywords: sunplus single-chip microcomputer, SD card, language repeater, recording system 2 目 录 1 绪论………………………………………………………………….................4 1.1 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 背景…………………………………………………………………….4 1.2 设计目的…………………………………………………………………….4 2 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 的提出与比较…………………………………………………………….5 2.1 方案的提出………………………………………………………………….5 2.2 方案的比较………………………………………………………………….6 3 系统硬件设计………………………………………………………………….7 3.1 SPCE061A简介……………………………………………………………..7 3.2 SD卡模组……………………………………………………………………8 3.3 硬件电路………………………………………………………………….....8 4 系统软件设计………………………………………………………………...11 4.1 系统控制程序……………………………………………………………...11 4.2 主程序……………………………………………………………………...12 4.3 按键扫描程序……………………………………………………………...17 4.4 SD卡驱动程序简介………………………………………………………..18 4.5语音文件操作管理程序……………………………………………………22 4.6 录/放音程序………………………………………………………………..23 4.7 SD卡语音存储播放操作…………………………………………………..24 总结……………………………………………………………………………...25 参考文献………………………………………………………………………...26 致谢……………………………………………………………………………...27 附录A 主程序………………………………………………………………….28 附录B SPI模式介绍…………………………………………………………...35 3 1 绪论 1.1 设计背景 声音是人类表达思想和情感所不可缺少的媒介,众所周知,人类学习语言是从模仿开始的。幼儿出生后就受到周围的语音刺激,大概在两岁左右开始模仿发音。四岁左右就基本掌握了语言的基本技能,包括单词所对应的物体、语言中的代词等。但直到六岁才开始系统地、正规地学习文字。 而在我国的英语教学中,基本没有类似母语学习的那种环境,使得大多数中国学生觉得英语学习是非常困难的事情。很多人学习了10多年的英语,但如果不用,没有几年,英语就变得非常生涩。这种现象与英语的教与学模式有非常大的关系。 传统的 小学 小学生如何制作手抄报课件柳垭小学关于三违自查自纠报告小学英语获奖优质说课课件小学足球课教案全集小学语文新课程标准测试题 英语教学模式中,老师是主角,课堂中的大部分时间是老师在讲解:单词的意思、课文的意思、语法现象、领读与跟读、做练习讲解习题及讲解作业等。在这种教学模式中,存在以下的缺陷: 1.学生在课堂上的角色是被动的。学生主动发音,说的机会太少。 2.学习英语的大量时间花在作业及听讲解上,效率不高。 3.不能根据学生进行个性化教学,每个学生听讲同样的 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 。 4.教师的准确发音不能很好地传递到学生的听觉神经中,传递中各种因素的影响导致学生形成“中国英语”。 中小学生听觉灵敏,善于模仿,是进行语音训练的最好阶段。所以,听说能力的培养是小学英语教学中的重要的和首要的任务。国家教育部颁布的《英语课程标准》对中小学英语教学中的听说能力培养提出了明确而又严格的要求。而借助多种手段创设直观情境,利用多媒体技术丰富教学内容和形式,能有效地抓住中小学生的心理,符合他们的年龄特点和思维规律,营造轻松、愉快的气氛,既进行了综合语言训练,又体会到了学习的乐趣。 1.2 设计目的 传统的外语学习类产品只注重阅读或笔译的传统学习方式,早已不适应学习或工作的需要,如何让学生全面地学好英语,即具备较强的听、说、读、写能力,营造一个轻松、自然的英语学习条件或环境,不用带书,不用磁带,可随时听,随时检测纠正读音,使学习者充分提高学习效率。目前,市面上已有的英语学习机产品,如:随身听,语言复读机,电子辞典,都难以满足需要~旧式复读机及某些复读机产品随身听具有不抗震动、磁带易热胀冷缩、脱粉、绞带,一段时间后,语音混浊不清,体积大、功耗大、不便随身携带学 4 习等缺点。 SPCE061A是台湾凌阳公司生产的一种新型的十六位单片机,该款单片机资源丰富,具有极高的性价比。SPCE061A具有可编程的音频处理功能,同时又具有串口输入输出端口SIO(它提供了一个1位的串行接口,用于与其它设备进行数据通讯)利用SPCE061A的这两个资源和SD卡来开发数码录音及播放系统,具有极好的可行性。能实现大容量超长录音,并支持最多5段录音。而SD卡易插拔,可以通过计算机写入语音资源,或通过计算机读出SD卡上的内容。因而这款基于凌阳单片机制作的简易语音复读机结构简单,方便实用,极具市场推广前景。 2 方案提出与比较 2.1方案提出 方案一利用51单片机对ISD4004语音芯片的控制实现对语音的录、放。ISD4004 芯片自带 A/D 转换和压缩功能,能直接把声音信号存储在芯片内的闪存寄存器中,无需电源即可保存数据长达100年,重复记录100000 次以上,8.0kHz采样录音可达8分钟。 ISD芯片由于直接采用模拟信号存储信息, 因此, 其存储量相当于传统数字信息存储法的10倍,由于ISD芯片内部高度集成,有些电路例如时钟、放大、功放、采样保持等全部集成在芯片内,因此其外电路是很简单的,只须外接一个麦克风(MIC)、一个扬声器和几个电阻、电容就可构成一台完整的语音录放系统。本方案的系统框图如图2-1所示 图2-1 方案一系统框图 方案二使用SPCE061A单片机自带的MicIN输入,不使用凌阳SACM库提供的DVR函数,直接将ADC的结果进行数字滤波,然后存放到SPR4096中,播放时从SPR4096 5 中读取数据,直接送到SPCE061A自带的DAC进行播放。本方案的原理框图如图2-2所示: 图2-2 方案二系统框图 方案三系统采用SPCE061A做为主控制器,使用其通用I/O口控制SD卡设备,实现存储器扩展;利用61板上的三个按键对录放音进行控制;利用SPCE061A带有AGC的专用A/D转换通道做为音频输入,完成语音录制功能;利用SPCE061A的D/A进行音频输出,实现语音播放功能。本方案的系统框图如图2-3所示 图2-3 方案三系统框图 2.2方案比较 方案二SPCE061A单片机为主控制器,电路和程序都非常简单,音质也很好,但是由于SPR4096的容量有限,只有几分钟。方案一利用51单片机控制,电路比较简单,程序比较复杂,由于ISD4004语音芯片比较贵,容量也和方案二一样受到限制,录音的时间比较短,从设计的角度与现在的需求来看不是太受欢迎,因此不采用。 而方案三就解决了前面两个的缺点,以SD卡作为数据的存储已经得到广泛的使用,本设计只要SD卡的容量足够大,就可以录足够长的时间。 所以本设计还是采用方案三来实现语音录放。 6 3系统硬件设计 3.1 SPCE061A简介 SPCE061A是凌阳科技研发的性价比很高的一款十六位单片机,使用它可以非常方便灵 路10位精度的ADC,其中一路为音频转换通道,并活的实现语音的录放系统,该芯片拥有8 且内置有自动增益电路。这为实现语音录入提供了方便的硬件条件。两路10精度的DAC,只需要外接功放(SPY0030A)即可完成语音的播放。另外凌阳十六位单片机具有易学易用的效率较高的一套指令系统和集成开发环境。在此环境中,支持标准C语言,可以实现C语言与凌阳汇编语言的互相调用,并且,提供了语音录放的库函数,只要了解库函数的使用,就会很容易完成语音录放,这些都为软件开发提供了方便的条件: SPCE061A片内还集成了一个ICE(在线仿真电路)接口,使得对该芯片的编程、仿真都变得非常方便,而ICE接口不占用芯片上的硬件资源,结合凌阳科技提供的集成开发环境(u’nSP IDE)用户可以利用它对芯片进行真实的仿真;而程序的下载(烧写)也是通过该接口进行下载。 (注:ICE_SCK接ICE的时钟接口,ICE_SDA为ICE的数据写入口) 图3-1 SPCE061A的结构 7 3.2 SD卡模组 3.2.1 功能简介 ?提供SD卡接口,支持全系列SD卡 ?与单片机的接口为SPI模式 3.2.2 结构示意图 SD卡模组结构示意图如图3-2所示 图3-2 SD卡模组结构示意图 在使用时,只需将SD卡模组插接在61板的IOB低八位即可。 3.3硬件电路 3.3.1 SPCE061A最小系统 本方案使用61板做为单片机最小系统。61板包括SPCE061A芯片及其外围的基本模块。外围模块包括:晶振输入模块、PLL倍频电路、复位电路、指示灯等。如图3-3所示。 8 图3-3 SPCE061A最小系统 3.3.2 SPCE061A板按键电路 本系统使用61板上的三个按键完成语音录放控制。按键电路如图3-4所示。 Key3:开始/停止录音切换 Key2:单按播放上一首录音,按住1秒钟清除已录语音 Key1:单按播放下一首录音,按住1秒钟停止播放 9 图3-4 按键电路原理图 3.3.3 音频输出电路 图3-5是音频输出电路图。SPCE061A内置2路10位精度的DAC,只需要外接功放电路即可完成语音的播放。电路中SPY0030是凌阳公司一款音频放大芯片。它和LM386相比,LM386工作电压需在4V以上, SPY0030仅需2.4V即可工作(两颗电池即可工作);LM386输出功率100mW以下, SPY0030约700mW。 图3-5 音频输出电路原理图 3.3.4 SD卡模组电路 图3-6是SD卡模组的电路原理图。在本系统中,SPCE061A通过SPI总线实现对SD卡的访问。SD卡模组同时提供卡插入检测和写保护检测接口。 10 图3-6 SD卡模组的电路原理图 各引脚功能见表3-1 管脚 标号 功 能 管脚 标号 功 能 1 VCC 电源 6 CD 卡检测 2 CLK SPI 总线时钟 7 WP 写保护检测 3 Din 单片机数据输入 8 Dout 单片机数据输出 4 NC 空 9 NC 空 5 CS 片选 10 GND 地 表3-1 SD卡模组各引脚功能表 4系统软件设计 4.1系统控制程序 本系统包括以下部分: 按键扫描程序:完成对IOA口低八位,其中接在低三位的61板上的三位按键完成基本 录/放音功能。 SD卡驱动程序:该部分完成对SD卡的初始化、得到卡的容量信息、读写操作、擦除操 11 作等。 语音文件操作管理程序:该部分完成对多段录音的管理。每增加一段录音,程序会将起始地址、终止地址等相关信息保存,以便可以回放。 录/放音程序:在凌阳科技公司为SPCE系列芯片量身定做的语音编解码库sacmv40的基础上,实现对A/D采样数据的编码和存储,以及从SD卡读取录音数据并解码然后送至D/A播放等操作。 主程序:完成系统的初始化,处理按键信息,并根据按键,在语音文件操作管理程序的配合下,创建语音文件进行录音,或控制读取语音文件进行回放。 4.2主程序 主程序流程如图4-1所示。 图4-1 主程序流程图 12 主程序完成系统初始化后检测SD卡是否插入以及是否有写保护,并有相应的语音提示,告知用户当前的系统状态。如果SD卡正确插入,则系统根据用户的不同按键进行录/放音控制。同时,在循环中对系统当前的状态进行检测,控制系统在录制语音时不至于超出存储器容量限制,或控制系统在放音时播放至文件尾部自动停止播放。 在按键处理程序中,如果写保护标志被置位,当检测到有按键事件发生时,会播放“卡有写保护”的提示音,对按键不做处理。按键处理程序流程如图4-2所示。 图4-2 按键处理流程图 其中,“录音”按键处理程序的流程图如图4-3所示,“上一曲”按键处理程序的流程图如图4-4所示,“下一曲”按键处理程序的流程如图4-5所示。 13 图4-3 “录音”按键处理程序流程图 14 图4-4 “上一曲”按键处理程序流程图 15 图4-5 “下一曲”按键处理程序流程图 系统状态处理程序主要完成在录音时判断是否超出SD卡容量限制,或者在放音时当前 -6所示。 语音是否播放完毕。流程如图4 16 图4-6 系统状态处理流程图 4.3按键扫描程序 系统使用1024Hz时基中断对IOA口低八位进行扫描,并进行去抖、长短按键判断等工作。 时基中断中的按键扫描服务程序采用了状态机的形式对按键状态进行判断。使用变量KeyScanState记录当前按键的扫描状态,并对扫描状态进行计时,通过判断计时变量KeyCount的值来判断按键的类型KeyState(短按键、长按键等)。 通常状况下,没有键按下,KeyScanState处于First状态。当有键被按下后,KeyScanState便进入Debounce去抖状态,此时KeyCount开始每1/1024秒计时累加一次。当KeyCount超过去抖规定的时间后(通常为几十毫秒),便进入Repeat状态,这时候可以认为一个短按键被按下(KeyState = SKey)。此时如果检测到键抬起,则进入ReleaseDebounce状态,对按键抬起进行去抖,去抖成功后则可以认为形成了一个抬起的短按键(KeyState = SKeyRelease)。相反,如果在Repeat状态下超过了一个长按键规定的时间(1秒)后按键仍未抬起,则认为一个长按键被按下(KeyState = LKey),此时进入AfterLKey状态,无需再进行计时操作,只需等待按键抬起即可。当按键抬起时,则从AfterLKey状态进入 17 ReleaseDebounce状态,去抖后得到一个抬起的长按键(KeyState = LKeyRelease)。 按键扫描程序提供如下三个API函数以供用户使用按键功能: ? void KeyScan_Init(); 入口参数:无 出口参数:无 功 能:按键扫描初始化。调用该函数将同时初始化按键扫描使用的I/O口 ? void KeyScan_ServiceLoop(); 入口参数:无 出口参数:无 功 能:按键扫描后台服务程序。该函数一般被安置在1KHz时基中断中。 ? unsigned int KeyScan_GetKey(unsigned int *KeyType); 入口参数:按键类型 出口参数:键值 功 能:该函数将返回当前按键的键值,并通过入口参数KeyType返回该按键的类型。 4.4 SD卡驱动程序简介 SD卡与单片机通信的总线形式有SPI模式和SD模式两种。本方案中使用SPI模式进行通信。由于SPCE061A没有SPI接口,故我们需要使用I/O口来模拟SPI的时序对SD卡进行操作。SD卡的SPI时序如图4-7所示。 图4-7 SD卡SPI总线时序图 可以看到,接收数据时的采样点是在SCK的上升沿。发送数据时在上升沿处数据稳定。 使用I/O口模拟SPI时序,就是使用I/O口不断输出高、低电平模拟一系列的上升、下降沿的过程。模拟SPI总线发送一个byte数据的流程如图4-8所示。其中,Data是待发送数据。 18 图4-8 I/O口模拟SPI总线发送一个byte的程序流程图 模拟SPI总线接收一个byte数据的流程如图4-9所示。其中,接收到的数据存储在Data中。 19 图4-9 I/O口模拟SPI总线接收一个byte的程序流程图 单片机通过SPI总线向SD卡发送命令,控制SD卡的动作,并通过SPI总线读取SD卡返回的数据。SD卡上电后工作在具有1bit数据总线宽度的SD模式。而本系统中,我们需要令SD卡工作于SPI模式。单片机通过使连接SD卡CS脚的I/O口输出低电平,并发送CMD0命令,即可使SD卡进入SPI模式工作。 SD卡进入SPI模式后,用户可以通过SD_SendCmd()函数发送命令对SD卡进行控制。 SD卡Block读写的流程。图4-10所示的是单片机从SD卡读取Block数据的过程。 20 首先,单片机发送CMD17命令以及希望读取的Block的地址参数给SD卡,然后SD卡返回一个byte的响应数据,告知单片机该操作是否可以正常进行; 然后,单片机从SPI总线上读取Block Size个数据,这些数据就是SD卡发送来的Block数据; 最后,SD卡发送CRC校验给单片机,单片机结束SPI总线的接收操作,至此,一个Block被正确读入单片机内。 图4-10 单片机读取Block数据示意图 图4-11所示的是单片机写入数据到SD卡的流程。 首先单片机发送CMD24命令以及希望写入的Block的地址参数给SD卡,这时,SD卡返回一个byte的响应数据,告知单片机该操作是否可以正常进行; 然后,单片机通过SPI总线发送Block Size个数据,这些数据被SD卡接收,并缓存; 最后,单片机发送CRC校验,并等待SD卡完成这些数据的烧写。 图4-11 单片机写入Block数据示意图 这里可以把对Block的操作拆分为三步: 写Block操作: 发送CMD24,启动写Block操作; 发送数据给SD卡,直至写满Block Size个数据; 21 发送CRC校验,等待SD卡完成内部烧写,结束写Block操作。 读Block操作: 发送CMD17,启动读Block操作; 接收数据,直至接收完毕Block Size个数据; CRC校验,结束读Block操作。 接收 通过拆分后的SD卡读写操作函数来完成上述操作。 这样,可以采用如下的形式,将Block Size个数据分几次写入SD卡,最终完成一个完整Block的写操作: unsigned char Buf[128]; SD_WriteNewBlock(BlockAddr); // 启动一次完整的Block写操作 SD_WritingBlockData(256, Buf);// 每次写入的数据量并不一定是Block Size个 SD_WritingBlockData(256, Buf); SD_WriteFinished();// 完成一次完整的Block写操作 4.5 语音文件操作管理程序 语音文件操作管理程序主要完成对语音文件的管理,以及在录/放音的过程中对写入SD卡的数据进行控制,保证数据按照Block为单位写入。 程序中使用一个简单的结构体保存每个语音文件在SD卡中的位置信息: typedef struct _SD_FS{ unsigned long int StartSec; // 语音文件的起始Block地址 unsigned long int EndSec; // 语音文件的结束Block地址 unsigned int Offset; // 语音文件在最后一个Block中的使用量 } FileList; FileList g_FileListArray[FS_MAX_FILENUM]; // 文件索引表 语音文件操作管理程序提供操作函数以供语音程序在录/放音过程中调用: 语音文件操作管理相关函数中通过定义一个全局变量CurOffset存储当前Block已经写入的数量,以便在写入(读取)新的数据时对是否超出Block进行判断。当连续读取(写入)数量超过一个Block的大小时将读完(写满)本Block并自动切换至下一Block继续读取(写入)剩余数据。同时,程序中规定语音文件在存储的时候如果最后一个Block没有使用完,则下一段语音从下一个Block的起始地址开始存储。 22 4.6 录/放音程序 4.6.1 凌阳音频概述 语音处理大致可以分为A/D采样输入、编码处理、存储、解码处理以及D/A等; SPCE061解决方案: 将A/D、编码算法、解码算法、存储及D/A作成相应的模块,对于每个模块都有其应用 ,用户只需了解每个模块所要实现的功能及其参数的内容,然后调用该API函程序接口API 数即可实现语音处理功能。 表4-1是不同音频质量等级的编码技术标准(频响): 表4-1 音频质量等级编码技术标准 信号类型 频率范围(Hz) 采样率(kHz) 量化精度(位) 电话话音 200,3400 8 8 宽带音频 (AM质量) 50,7000 16 16 调频广播 (FM质量) 20,15k 37.8 16 高质量音频(CD质量) 20,20k 44.1 16 凌阳音频压缩算法处理的语音信号的范围是200Hz,3.4KHz的电话话音。 4.6.2 凌阳语音的录制、播放 凌阳的SPCE061A是16位单片机,具有DSP功能,有很强的信息处理能力,最高时钟频率可达到49MHz,具备运算速度高的优势等等,这些都无疑为语音的播放、录放、合成及辨识提供了条件。 凌阳压缩算法中SACM-A1600、SACM-S530、SACM-S480/S720、SACM-S200主要是用来放音,可用于语音提示,而DVR1600则用来录/放音(8KHz采样率)。 4.6.3 语音录/放在SD卡上的实现 在语音录/放的过程中,存储/读取语音资源主要是靠手动方式下调用。 F_USER_DVR1600_WriteData和F_USER_DVR1600_GetData两个函数实现的。通过自行定义这两个函数,即可将语音库录制的语音资料存储至SD卡,或从SD卡读取语音资料给语音库解码播放。 F_USER_DVR1600_WriteData函数主要完成存储录音数据至用户存储器的作用。这里需 23 要调用“向语音文件写入多个word数据的函数”FS_WritingFile()以完成此功能。 F_USER_DVR1600_GetData函数主要完成从用户存储器读取语音资料至缓冲区的作用。这里,需要调用“从语音文件中读取多个word数据的函数”FS_ ReadingFile ()以完成从SD卡中读取数据。 4.7 SD卡语音存储播放操作 步骤一:将SD卡模组电路与61板连接; 步骤二:打开电源; 步骤三:程序运行后,如果SD卡没有插入,会提示“注意,SD卡没有插入”,并等待SD卡 插入后进行下一步操作; 步骤四:如果SD卡被写保护,则会提示“注意,SD卡写保护”,此后,所有按键均无效, 按下任意键会提示“SD卡写保护”。此时,用户需要去除SD卡写保护,并重新运 行程序; 步骤五:如果SD卡正常插入并且没有写保护,等待SD卡初始化成功后会有“就绪”的提示 音; 步骤六:SD卡正常初始化后,可以按S1、S2、S3按键进行操作; 步骤七:按下Key3键,启动录音,此时,会有“开始录音”的提示音。再次按下Key3键结 束本次录音,此时,会有“结束录音”的提示音; 步骤八:停止录音后,按下Key2播放上一段录音,按下Key1播放下一段录音; 步骤九:长按Key2键将清除所有已录语音,此时会有“SD卡已擦除”的提示音; 步骤十:长按Key1键将停止放音。 24 总 结 在本次毕业设计中,我选择了用凌阳单片机来制作实物,我认为选择单片机做毕业设计是一个学习的好机会,而选择了大家相对不熟悉的凌阳单片机就更是一大挑战了。学习单片机知识之初,我的确遇到一些困难,尤其是软件编程部分,我必须从头学起。但我没有灰心,遇到不懂的问题,就上网或去图书馆查找资料,指导老师也给了我很大的帮助,使我基本掌握了凌阳单片机的一些知识。然后,我通过 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 一些现有的程序来理解单片机的编程技巧。 凌阳公司的SPCE061A的结构特点及其相关的开发平台,为开发带语音特色的产品方案带来了很大的方便,用SPCE061A扩展SD卡以增强存储能力,体现了SPCE061A的通用性和较快的处理速度,同时体现了其语音的特色。 当然,这款语音复读机还有可以改进的地方,如:引入FAT文件系统代替现有的简单文件索引表管理程序,使得以文件为单位对SD卡进行读写操作更方便,更稳定,同时也可以实现与PC的数据共享;扩充录/放音系统的功能,在按键处理部分添加暂停、恢复、音量控制等功能。 25 参考文献 [1]罗亚非等. 凌阳16位单片机应用基础[M].北京:北京航空航天大学出版社,2003.12:113-149 华臻,陈书谦等.单片机原理及应用[M].北京:电子工业出版社,2005.8:149-163 [2]张鑫, [3]谭浩强.C程序设计(第三版)[M].北京:清华大学出版社,2005.7:335-343 [4]康华光等.电子技术基础模拟部分(第四版)[M].北京:高等教育出版社,1998.8:394-411 [5]谢嘉奎,宣月清,冯军等.电子线路非线性部分(第四版)[M].北京:高等教育出版社,2000.5:142-145 [6]马忠梅.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社,1998.6:148-157 26 致 谢 在我进行毕业设计期间,张老师给予了我耐心的辅导和热情的帮助,对于一些疑难问题更是耐心、不嫌其烦的给予解答。在这期间,通过此毕业设计,使我加深了对以前所学知识的理解,拓宽了知识面,开阔了眼界,提高了对知识的综合能力;此次毕业设计也是对我的基本素质的训练和培养,它使我更加耐心、更加谨慎、更加细致和灵活,更有创新性,真是受益匪浅。老师在百忙之中对论文进行了仔细的审阅,提出了不少极为宝贵的修改意见。 在此,我再次对在此次毕业设计过程中给予我很大帮助的张老师表示衷心的感谢~ 27 附录A 主程序 //============================================================ 工程名称: SD_Recording_Demo // // 功能描述: 61板与SD卡相连 // 按下Key3键开始录音,再次按下停止录音 支持多段录音,Key2为播放上一曲,Key1为播放下一曲 // // 长按Key1停止播放,长按Key2擦除录音 // 涉及的库: CMacro.lib // clib.lib // SACM_DVR1600_V40a.lib // SDDriver_061A.lib // 硬件连接: 将SD卡座模组插接到61板的IOB口的低八位 //=============================================== #include "SD_Recording_Demo.h" #include ".\Driver\SD\SD_Driver.h" #include ".\FS\fs.h" #include ".\DVRSystem\sacmV40.h" #include ".\DVRSystem\PlaySnd.h" #include ".\System\SetInterruptStatus.h" #include ".\Driver\KEY\Key.h" #define ADC_Channel Mic // 0~7 (Mic, Line_In1 ~ Line_In6) void KeyProcess(); void StatusProcess(); SysStatus Status; //系统状态,SysStatus定义在SDDVR.h中 int SpeechIndex; int WriteProtect; //============================================================= // 语法格式: int main(void) // 实现功能: 主函数 // 参数: 无 // 返回值: 无 28 //============================================================= int main() { SpeechIndex = 0; WriteProtect = 0; Status = IDLE; DrvKeyInit(); SD_IOInit(); SetINTStatus(C_IRQ5_2Hz); SetINTStatus(C_IRQ4_1KHz); __asm("IRQ ON"); SACM_DVR1600_Initial(); // 语音初始化 if(0 == SD_ChkCard()) { // 检测卡是否插入 PlaySnd(VOICE_ATTENTION, DAC1 + DAC2); PlaySnd(VOICE_SDCARDNOTINSERT, DAC1 + DAC2); while(0 == SD_ChkCard()); // 等待卡插入 } if(1 == SD_ChkCardWP()) // 检测卡是否有写保护 { WriteProtect = 1; PlaySnd(VOICE_ATTENTION, DAC1 + DAC2); PlaySnd(VOICE_SDCARDWRITEPROTECT, DAC1 + DAC2); } else { FS_Init(); // 没有写保护,执行初始化操作 PlaySnd(VOICE_READY, DAC1 + DAC2); } //------------------------------------------------------------ while(1) 29 { KeyProcess(); // 按键处理 StatusProcess(); // 系统状态处理 SACM_DVR1600_ServiceLoop(); // 录/放音服务 } return 0; } //============================================================= // 语法格式: int StatusProcess(void) // 实现功能: 系统状态处理函数 // 参数: 无 // 返回值: 无 //============================================================= void StatusProcess() { switch(Status) { case RECORD: if(FS_GetUnusedSecNum() < 1) // 检测是否超出SD卡容量范围 { SACM_DVR1600_Stop(); Status = IDLE; } break; case PLAY: if(FS_CheckFileEnd()) // 检测当前语音是否播放完毕 { SACM_DVR1600_Stop(); FS_CloseOpenFile(); Status = IDLE; } 30 default: break; } } //============================================================= // 语法格式: int KeyProcess(void) // 实现功能: 按键处理函数 // 参数: 无 // 返回值: 无 //============================================================= void KeyProcess() { unsigned int Key, KeyType; Key = KeyScan_GetKey(&KeyType); if(1 == WriteProtect) // 卡有写保护,拒绝按键操作 { if((C_SReleaseKeyState == KeyType) || (C_LReleaseKeyState == KeyType)) { PlaySnd(VOICE_SDCARDWRITEPROTECT, DAC1 + DAC2); } return; } switch(Key) { case C_Record: // Record if(C_SReleaseKeyState == KeyType) { // 短按键,录/放音控制 if(PLAY == Status) { SACM_DVR1600_Stop(); // 如果正在放音,则先停止播放 FS_CloseOpenFile(); 31 Status = IDLE; } if(IDLE == Status) { if((g_FileNum>=FS_MAX_FILENUM)||(FS_GetUnusedSecNum() <= 0)) { // 文件已满,退出 PlaySnd(VOICE_DANG, DAC1 + DAC2); break; } PlaySnd(VOICE_START, DAC1 + DAC2); FS_CreatFile(); FS_WriteFile(0); // 为语音长度跳过两个word FS_WriteFile(0); SACM_DVR1600_Rec(RceMonitorOff,ADC_Channel,BIT_RATE_24K); Status = RECORD; } else if(RECORD == Status) { SACM_DVR1600_Stop(); while(RECORD == Status) // 等待完成录音收尾工作 SACM_DVR1600_ServiceLoop(); PlaySnd(VOICE_OVER, DAC1 + DAC2); SpeechIndex = g_FileNum - 1; } } break; case C_Prev: // Play Prev if((C_SReleaseKeyState!=KeyType)&& C_LReleaseKeyState != KeyType)) break; if(g_FileNum > 0) { 32 if(PLAY == Status) // 如果正在放音,则先停止播放 { SACM_DVR1600_Stop(); FS_CloseOpenFile(); } else if(RECORD == Status) // 如果正在录音则不处理 { break; } if(C_LReleaseKeyState == KeyType) { // 长按键,擦除所有语音段 FS_Init(); PlaySnd(VOICE_SDCARDERASED, DAC1 + DAC2); Status = IDLE; break; } else if(C_SReleaseKeyState == KeyType) { // 短按键,播放上一曲 if(--SpeechIndex <= 0) { SpeechIndex = g_FileNum; } FS_OpenFile(SpeechIndex); SACM_DVR1600_Play(Manual_Mode_Index, DAC1 + DAC2, Ramp_Up + Ramp_Dn); Status = PLAY; } } break; case C_Next: // Play Next if((C_SReleaseKeyState!=KeyType)&&(C_LReleaseKeyState != KeyType)) break; 33 if(g_FileNum > 0) { if(PLAY == Status) // 如果正在放音,则先停止播放 { SACM_DVR1600_Stop(); FS_CloseOpenFile(); } else if(RECORD == Status) // 如果正在录音则不处理 { break; } if(C_LReleaseKeyState == KeyType) { // 长按键,停止当前播放 Status = IDLE; break; } else if(C_SReleaseKeyState == KeyType) { // 短按键,播放下一曲 if(++SpeechIndex > g_FileNum) {SpeechIndex = 1; } FS_OpenFile(SpeechIndex); SACM_DVR1600_Play(Manual_Mode_Index, DAC1 + DAC2, Ramp_Up + Ramp_Dn); Status = PLAY; } } break; default: break; } } 34 附录B SPI模式介绍 在SPI模式包括一个二级通信协议而提供的Flash为基础的SD内存卡。此模式的一个子集,SD记忆卡议定书,旨在沟通 同一个SPI通道,常见于摩托罗拉(和最近其他一些供应商的)微控制器。该接口是在第一选择复位命令后功率(CMD0)和不能一旦改变部分开机。的SPI标准定义的物理联系只,而不是完整的数据传输协议。自毁记忆卡的SPI实施的一个子集,使用SD记忆卡议定书和指挥设置的优势,SPI模式的能力是使用现成的数据,从而减少设计在最低限度。缺点是失去效能的SPI模式与的SD模式(例如,单一的数据线和硬件组成对齐信号)。 而SD记忆卡的渠道是基于命令和数据开始由起始位和终止停止位的SPI通道字节导向。每一个命令或数据块内置的8位字节,是字节组成对齐信号(即长度为8的倍数时钟周期)。SD记忆卡中醒来的SD模式。将进入SPI模式的组成对齐信号,如果信号是声明(负)在接待的复位命令(CMD0)和卡是在闲置状态 。卡认为在SD模式需要它不会响应的控制和确定在SD模式。如果SPI模式需要卡将切换到SPI和响应与SPI模式R1响应。只有这样,才能返回的SD模式是通过输入功率周期。在SPI模式的SD记忆卡状态机的协议下是无法察觉。所有的SD记忆卡的命令支持SPI模式总是可用的。 每一个SD记忆卡向总线上传输的循环冗余检查。在SPI模式SD记忆卡提供了一个非保护模式,使系统建设提供可靠的数据链接,排除硬件或固件需要执行的循环冗余检查生成和确定功能。 35
本文档为【基于凌阳单片机制作的简易复读机】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_731942
暂无简介~
格式:doc
大小:409KB
软件:Word
页数:0
分类:生活休闲
上传时间:2018-09-21
浏览量:11