基于单片机的sd卡录音笔设计与实现毕业设计|荐|内容摘要:

→[Open Project] ,在 „打开 ‟对话框内选择所要打开的工程; 14 窗口(工作区窗口)显示在工具的左半边,在这个窗口内,用户可以看到当前工程所包含的所有文件; 选择 [Build]→[Rebuild All] ,进行源文件的编译和链接。 编译过程里的语法错误显示在 Output 窗口内; 选择 [Build]→[Start Debug]→[Download] ,把程序加载到 RAM,然后,用户可以用 Debug 菜单内所提供的调试命令来优化和运行程序。 选择 [Build]→[Start Debug]→[Go] ,在 调试器内运行程序。 15 3 录音笔总体设计方案及硬件设计 总体设计方案 硬件设计总体框图 系统采用 SPCE061A 做为主控制器,使用其通用 I/O 口控制 SD卡设备,实现存储器扩展;利用电路板上的三个按键对录放音进行控制;利用 SPCE061A 带有 AGC 的专用 A/D 转换通道做为音频输入,完成语音录制功能;利用 SPCE061A 的 D/A 进行音频输出,实现语音播放功能。 图 为硬件总体框图。 图 硬件总体 框图 输入指令 麦克风 扬声器 电源线 录音 放音 电源 SD 卡 SPCE061A 储存或删除数字信号 提取数字信号 按键键盘 16 系统软件设计架构 软件 系统包括以下部分: 主程序:完成系统的初始化,处理按键信息,并根据按键,在语音文件操作管理程序的配合下,创建语音文件进行录音,或控制读取语音文件进行回放。 按键扫描程序:完成对 IOA 口低八位的 18 按键进行扫描,并完成去抖、判断长 /短按键等功能。 SD 卡驱动程序:该部分完成对 SD 卡的初始化、得到卡的容量信息、读写操作、擦除操作等。 语音文件操作管理程序:该部分完成对多段录音的管理。 每增加一段录音,程序会将起始地址、终止地址等相关信息保存,以便可以回放。 录 /放音程序:实现对 A/D 采样数据的编码和存储,以及从 SD 卡读取录音数据并解码然后送至 D/A 播放等操作。 17 系统硬件设计 系统硬件连接实物图 系统主要由 SPCE061A 单片机,麦克风,扬声器,电源及储存器构成。 SPCE061A 单片机控制板作为整个系统的主控板,对麦克风采集来的声音信号进行数字处理并储存号功能。 图 为硬件连接实物图。 系统硬件连接实物图 SPCE061A 最小系统 本设计选用的单片机模块为 SPCE061A 单片机模块,该模块包括SPCE061A 芯片( MCU)、片内 FLASH 和其外围的基本模块。 外围 18 模块有:电机驱动电路板、锁相环外围电路( PLL)、复位电路( RESET)等。 SPCE061A 的主控芯片,负责构建语音录放的数据结构,并在单片机内部 Flash 中保存有语音内容和相关语音信息。 SPCE061A 控制端口输出控制信息,并控制喇叭输出声音信息。 实现对整个系统的控制。 通过本系统中的音频输入电路和 MIC,可以采集语音信号并处理。 图 为 SPCE061A 最小系统图。 图 SPCE061A 最小系统图 19 按键电路 本系统使用三个按键完成录放音控制。 图 为按键电路图。 Key1 为 “下一曲 ”键, Key2 为 “上一曲 ”键, Key3 为 “录音键 ”。 图 按键电路图 音频输出电路 SPCE061A 内置 2 路 10 位精度的 DAC,只需要外接功放电路即可完成语音的播放。 电路中 SPY0030 是凌阳公司一款音频放大芯片。 它和 LM386 相比, LM386 工作电压需在 4V以上 , SPY0030 仅需 即可工作 (两颗电池即可工作 ); LM386 输出功率 100mW以下 , SPY0030约 700mW。 图 为音频输出电路图。 图 音频输出电路图 20 SD 卡模组电路 在本系统中, SPCE061A 通过 SPI 总线实现对 SD 卡设备的访问。 SD 卡模组同时提供卡插入检测和写保护检测接口。 图 为 SD 卡模组电路图。 图 SD 卡模组电路图 21 4 系统软件设计 主程序设计 主程序 采用的是汇编语言和 C 语言混合编程。 主程序 流程图 如 图。 图 主程序流程图 系统初始化 检测 SD 卡是否插入。 否 检查 SD 卡是否写保护。 置写保护标志 播放 “SD 卡写保护 ” 是 否 初始化 SD 卡 按键处理 系统状态处理 是 播放 “ 注意 SD 卡没有插入 ” 检测 SD 卡是否插入。 否 是 播放 “ 就绪 ” 语音 提示 程序 开始 22 主程序完成系统初始 化后检测 SD卡是否插入以及是否有写保护,并有相应的语音提示,告知用户当前的系统状态。 如果 SD 卡正确插入,则系统根据用户的不同按键进行录 /放音控制。 同时,在循环中对系统当前的状态进行检测,控制系统在录制语音时不至于超出存储器容量限制,或控制系统在放音时播放至文件尾部自动停止播放。 部分程序如下: 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。 else FS_Init()。 // 没有写保护,执行初始化操作 PlaySnd(VOICE_READY, DAC1 + DAC2)。 // 播放 就绪 // while(1) KeyProcess()。 // 按键处理 StatusProcess()。 // 系统状态处理 SACM_DVR1600_ServiceLoop()。 // 录 /放音服务 23 按键处理程序流程 按键处理程序中 , 当检测到有 SD 卡写保护 时,会播放 “卡有写保护 ”的提示音,对按键不做处理。 按键处理流程图如 图。 图 按键处理流程图 部分程序如下 : 初始化 判断是否有写保护标志。 否 判断按键 Key3 录音键 是 Key2 上一曲 键 Key1 下一曲 键 返回 开始 Key = KeyScan_GetKey(amp。 KeyType)。 if(1 == WriteProtect) // 卡有写保护,拒绝按键操作 if((C_SReleaseKeyState == KeyType) || (C_LReleaseKeyState == KeyType)) return。 switch(Key) 24 当按下录音键时,若为短按键且 SD 卡未满,提示录音开始并置录音标志,开始录音。 “录音”按键处理程序的流程图如图 所示。 图 录音键流程图 部分程序如下 : 正在播放。 短按键。 是 是 停止播放,关闭读取 SD 卡 系统状态置空闲 SD 卡已 满。 否 是 否 系统空闲。 否 启动写入 SD 卡,开始录音 系 统状态置录音 否 是 正在录音。 结束录音,录音收尾 是 否 开始 返回 case C_Record: // Record if(C_SReleaseKeyState == KeyType) // 短按键,录 /放音控制 if(PLAY == Status) 25 SACM_DVR1600_Stop()。 // 如果正在放音,则先停止播放 FS_CloseOpenFile()。 Status = IDLE。 if(IDLE == Status) if((g_FileNum = FS_MAX_FILENUM) || (FS_GetUnusedSecNum() = 0)) // 文件已满,退出 PlaySnd(VOICE_DANG, DAC1 + DAC2)。 Status = RECORD。 else if(RECORD == Status) SACM_DVR1600_Stop()。 while(RECORD == Status) // 等待完成录音收尾工作 SACM_DVR1600_ServiceLoop()。 PlaySnd(VOICE_OVER, DAC1 + DAC2)。 26 当按下上一曲键,短按键(小于一秒)播放上一曲,长按键清除SD 卡上所有录音。 “上一曲 ”按键处理程序的流程图 如 图。 图 上一曲键流程图 部分程序如下 : 正在录音。 正在播放。 是 判断是否有文件 ? 结束放音 是 否 短按键。 否 否 是 长按键。 是 清除 SD 卡内所有文件 系统状态置空闲 读取语音段,启动声音播放上一曲 系统状态置播放 否 是 否 开始 返回 if(PLAY == Status) // 如果正在放音,则先停止播放 27 当按下下一曲键,短按键(小于一秒)播放下一曲,长按键停止放音。 “下一曲 ”按键处理程序的流程图 如 图。 图 下一曲键流程图 正在录音。 当前有录音片段。 是 是 停止播放 正在播放。 否 否 短按键。 否 长按键。 否 系统状态置空闲 是 启动声音播放下一曲 系统状态置播放 否 是 是 开始 返回 SACM_DVR1600_Stop()。 FS_CloseOpenFile()。 else if(RECORD == Status) // 如果正在录音则不处理 if(C_LReleaseKeyState == KeyType)//长按键,擦除所有语音段 FS_Init()。 Status = IDLE。 else if(C_SReleaseKeyState == KeyType)// 短按键播放上一曲 28 部分程序如下 : 系统状态处理程序主要完成在录音时判断是否超出 SD 卡容量限制,或者在放音时当前语音是否播放完毕。 系统状态流程图如 图。 图 系统状态处理流程图 检查 SD 卡是否已满。 是否正在录音。 播放是否结束。 停止录音 系统状态置空闲 是否正在播放。 停止读取 系统状态置空闲 是 否 否 否 是 是 是 否 返回 开始 case C_Next: // Play Next if((C_SReleaseKeyState != KeyType) amp。 amp。 (C_LReleaseKeyState != KeyType)) if(g_FileNum 0) if(PLAY == Status) //如果正在放音,则先停止播放 SACM_DVR1600_Stop()。 FS_CloseOpenFile()。 else if(RECORD == Status) // 如果正在录音则不处理 if(C_LReleaseKeyState == KeyType)// 长按键,停止当前播放 Status = IDLE。 else if(C_SReleaseKeyState == KeyType)// 短按键,播放下一曲 29 部分程序如下: 按键扫描程序 系统使用 1024Hz 时基中断对 IOA 口低八位进行扫描,并进行去抖、长短按键判断等工作。 时基中断中的按键扫描服务程 序采用了状态机的形式对按键状态进行判断。 使用变量 KeyScanState。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。