基于单片机的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。基于单片机的sd卡录音笔设计与实现毕业设计|荐|
相关推荐
率和发送波特率可以分别设置,而且,可以通过编程来指定。 RS232C标准: RS232C标准 对两个方面作了规定,即信号电平标准和控制信号线的定义。 RS232- C采用负逻辑规定逻辑电平,信号电平与通常的 TTL电平也不兼容, RS232C将 5V~ 15V 规定为“ 1”, +5V~ +15V 规定为“ 0”。 TTL 标准和 RS232C标准之间的电平转换 如图 9: 图 9 TTL标准和
NB=NBG,DX=NBG+H。 display()。 EA=1。 东北大学单片机课程设计 14 break。 } } } } /***********************************中断 1 处理程序 ******************** void int1(void) interrupt 2 //紧急情况 { /*东西南北红灯亮 */ EA=0。 TR0=!TR0。
7 用的以太网控制器接入以太网的。 对于单片机系统,在选择以太网控制器时,要考虑一下几个因素: 首先,要求所选的以太网控制器必须支持 8 位工作模式。 实际上,只有部分基于ISA 总线的以太网控制器才能满足此条件,所以基于 PCI 总线的不在此考虑之列。 其次,要 考虑以太网控制器的片上缓存,最好选用具有足够片上缓存的以太网控制器以简化系统设计。 再次,应考虑以太网控制器与主机的数据交换形式
设计 9 芯片除了低功耗特性之外,还具有功耗的可控性,使单片机可以工作在功耗精细管理状态。 这也是今后以 80C51取代 8051为标准 MCU芯片的原因。 因为单片机芯片多数是采用 CMOS(金属栅氧化物)半导体工艺生产。 CMOS电路的特点是低功耗、高密度、低速度、低价格。 采用双极型半导体工艺的 TTL电路速度快,但功耗和芯片面积较大。 随着技术和工艺水平的提高, 又出现了
它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。 中断系统: 89S51具备较完善的中断功能,有两个外中断、两个定时 /计数器中断和一个串行中断,可满足不同的控制要求,并具有 2级的优先级别选择。 时钟电路: 89S51 内置最高频率达 12MHz 的时钟电路,用于产生整个单片机运行的脉冲时序,但8051 单片机需外置振荡电容。 单片机的结构有两种类型
的,然后快速的显示完 16行,并重复 许多次。 但是如果 驱动电路和驱动程序设计不够好 ,容易造成亮度低,闪烁等问题。 事实上利用动态显示并不是让需要亮的灯常亮,而是因为发光二极管的余晖效应和人眼的视觉暂留,让我们感觉到他们是常亮的。 最关键的的是如何恰当的提取每个字符的字模。 目前有许许多多可以完成取模的软件,本次设计采用的是 pc2020取模软件。 打开软件后首先要最取模的