版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、语音存储回放一一系统软件设计班级:电科0801 姓需:学号:语音存储回放系统软件的基本功能是通过按键控制系统实现录音与放音。录音(语音的 存储)时,采集语音信号并将采集的数据存入M25P16中:放音(语音的回放)时,从M25P16 中读取数据送DAC.一、设计题目设计并制作一个数字化语音存储与回放系统,设计要求: 前置放大器增益可调,功率放大器输岀功率20. 5叭 带通滤波器:通带为300Hz3.4kHz。 ADC:采样频率fs二8kHz,字长8位。 语音录放时间$60s。 DAC:变换频率fc二8kHz,字长8位。 回放语音质虽良好。 采用语音圧缩算法,增加录放时间。在建立系统软件的框架时,
2、应考虑以下几个问题匚人机接口的功能设计语音存储与回放系统的人机接口功能比较简单,按照功能要求要求只需要3个功能键: “擦除”键、“录音”键、“放音”键。“擦除”键有效时,单片机调用擦除子程序将M25P16 中数据整片擦除,以便进行录音操作。“录音”键有效时,单片机以8kHz的频率采集语音 信号,并将数据写入M25P16中。当“放音”键有效时,单片机通过读数据子程序从M25P16 中取岀数据送入DAC输岀语音信号。语音存储与回放系统在工作时需要提示一些简单的信息,入显示三种工作状态:录音状 态、放音状态、擦岀状态,另外,需要显示录音和放音的时间。根据设讣方案,i耳音存储与回放系统的单片机子系统采
3、用并行总线单片机最小系统,人 机接口采用LCD模块和矩阵式键盘。根据键盘的工作原理,当键有效时,单片机通过执行 INTO中断服务程序读取键值。单片机根据读取的键值,执行相应的键处理程序。这里需要 考虑的是,键处理程序放在INTO中断服务程序中还是放在主程序中。如果将键处理程序放 在INTO中断服务程序中,则单片机在执行键处理程序时,无法响应同级别的中断,影响程 序的效率和实时性。因此,将键处理程序放在主程序中INTO中断服务程序只需要读取键 值并设置一个键有效标志。主程序则不断循环检测键有效标志,如键有效标志置1,则根据 键执行响应的键处理程序。每次检测到键有效标志置1后,应立即将键有效标志淸
4、零,以免 键处理程序重复执行。M25P16的读写方案设计由于对M25P16写一字节数据和写一页(256字节)数据所需编程时间是相同的,约需 0.64mso语音存储与回放系统的数据采样频率为8kHz,采样周期为uO. 125ms.如果每采集 一字节数据就立即写入M25P16,显然M25P16在写操作时间上是不能满足要求的。因此, 在程序设计中,采集的语音数据先存放在C8051F360内部的XRAM中,待采满256字节数 据,调用M25P16页编程子程序将数据写入M25P16.由于采集256字节数据需要32ms的 时间,可以满足M25P16对写操作时间的需求。(3)A/D和D/A转化器的控制为了精
5、确控制采样频率,DAc由左时器2控制,在左时器2中断服务程序中向DAC 送一字节数据,将数字化的语音信号转化成模拟信号。ADC由左时器3溢出启动A/D转化 (注意需要禁止左时器3溢出中断),A/D转化结朿后产生中断,通过ADC中断服务程序 读取采样值。为了提高立时精确,立时器2和定时器3均采用16为自动重装工作方式。(4)C8051F360单片机内部资源的使用在语音存储回放系统中,需要使用C8051F360单片机的ADC、DAC、SPIO、XRAM、 N时器等资源。由于C8O51F36O单片机具有丰富的片上外设,除了人机接口和大容量的存 储器外,不需要扩展其他外部设备,大大简化了系统硬件电路的
6、设计。根据上述分析,语音存储与回放系统的软件框架由主程序、键盘中断服务程序、上时 器2服务程序、ADC中断服务程序组成。1.主程序流程图主程序的流程图如图。在主程序中首先执行C8051F360单片机和M25P16的初始化程 序。C8051F360单片机的初始化包括I/O 口初始化、内部振荡器初始化、ADC初始化、DAC 初始化、SPIO初始化、左时器初始化、中断系统初始化、M25P16的初始化主要目的是通过 写状态字消除M25P16的写保护。主程序实际上是一个循环程序,不断的检测有无按键输入。有键输入时根据键值做相 应的处理。主程序中设置了两个工作状态:录音状态和放音状态,分别用两个标志位来表
7、示。 在录音状态下,数据每采集满256个字节,就调用页编程子程序,将XRAM中的数据写入 M25P16中。在放音状态下,每转化完成256个字节的数据,就再从M25P16中读取下一页 数据。在录音和放音的过程中,还需要显示录音和放音的时间。由于采样频率是固立的, M25P16的存储地址的变化是与录音与放音时间是相关的,因此,可以用M25P16的存储地 址换算后可得录音和放音的时间。2.键盘中断(INTO)服务程序流程图当有键按下时,键盘接口电路产生INTO中断信号。键盘中断服务程序的功能十分简单: 读取4位键值,置键有效标志位。其流程图如图所示:3 .A/D中断服务程序流程图A/D转化的启动通过
8、左时器3的溢出实现。当A/D转化结朿以后,启动一次中断。在 A/D转化中断服务程序中首先判断是否处于录音状态,如果岀于录音状态,将高8位数据 (ADC0H)存入C8O51F36O单片机内部XRAMo注意.ADC中断标志必须软件淸零。A/D 中断服务程序流程图如图所示:4定时器T2终端服务流程图左时器T2每中断一次,单片机向DAC写一字节的语音数蘿根拯8kHz的采样频率, 可以计算T2定时常数为FF83H (0.125ms)。由于定时时间很短,定时器采用16位自动加 载工作方式,既提高了定时精度,又简化了程序设计。T2中断服务程序流程图如图在DAC中断服务程序流程图和定时器T2中断服务程序流程图
9、中,需要单片机对XRAM 的读写操作。单片机对XRAM的读写有16位MOVX指令和8位MOVX指令。由于在程 序中只需要对256字节的XRAM操作,因此,采用8位MOVX指令可大大简化程序设计。SFRPAGE=0x0fo0SCICL=0SCICL+4oOSCICN=Oxc2oOSCXCN=OxOOoCLKSEL=OxOOaSFRPAGE=OxOOareturn o)/外部数据存储器初始化void xramjnit(void)SFRPAGE=0x0foEMI0CF=0x07cSFRPAGE=0x00areturn o/外部中断初始化void int01_init(void)IT01CF=0x65
10、oIT0=loITl = kEX0=loEXl=0oreturn o)/定时器初始化void timerjnit(void)TMOD=OXlloCKCON=OXOOoTH0=(65536-10000)/256c/TO 定时 lOMsTL0=(65536-10000)%256c/ TLl=0X0Co/ TH1=OXFE,TMR2CN=0X04TMR2RLL=OX83a/T3 T3 定时 0.125msTMR2RLH=0XFFoTMR3CN=0X0CoTMR3RLL=OX83TMR3RLII=0XFFo/ TR0=la/TRl = loreturn o/中断系统初始化void intemipt_i
11、nit(void)EX0=lo/允许INTO中断PX0=lc/INTO岛优先级ET0=lc/ETl=LES0=lo/IE0=0oEA=l areturn a)/PCA 初始化void pca_init(void)PCA0CN=0X40c return o/异步串口通信接口初始化void uarjnit(void)SCONO=OXOOc return o)时子程序void delay(unsigned int t) unsigned int i.jofor(i=0o it . i+)for(j=Oc jreturn Q/LCD 写抬令子程序void Write_Com(unchar n)unch
12、ar xdata *addrcCheck_Lcd()oaddr=WC0MADDRo*addr=nreturn o)/LCD 写数据子程序void Write_Data(unchar m)unchar xdata *addrcCheck_Lcd()o addr=WDATADDR.addr=mcreturn o/LCD 初始化void LCDJnilOWrite_Com(0x30)oWrite_Com(0x01)oWrite_Com(0x0c)oreturn o“/“/显示汉字子程序void DispJIan(unchar code *a.unchar nrunchar k) unchar dal
13、.i.j.lengtho length=k/2c Wriie_Com(m)a for(i=0a ilengtho i+)(j=2*iodat=a|jcWrile_Data(dat)o dat=a|j+ljo Write_Data(dat)oreturn Q/SPI初始化void SPInit( )SPI0CFG=0x70oSPI0CN=0x0d.SPI0CKR=0x02./2、M25P16 读写void Check_SPIF()while(SPIF!=l). 等待完成数据发送SPIF=0c读取状态字,査看是否擦写完成void Check_Busy()unsigned char mem_stal
14、us=0x01 NSSMD0=0.SPI0DAT=0x05o送读状态寄存器命令Check_SPIF()o while(mem_status=0x01)(SPI0DAT=0xff. 査看Chcck_SPIF()mem_status=SPIODAT&OxO 1 检査 spiO 完成数据发 void Flash_Init()NSSMD0=0.SPI0DAT=0x06oCheck_SPIF()aNSSMD0=UNSSMD0=0.SPI0DAT=0x0IoCheck_SPIF()oSPI0DAT=0x00oCheck.SPIFOoNSSMD0=loNSSMD0=lo 禁止 M25P16;选通 M25P1
15、6送写允许命令送写状态字命令送状态字.将BP2BP0S0Check_Busy()ovoid Erase_All()选通 M25P16送写允许命令送整片擦除命令NSSMD0=0.SPI0DAT=0x06oCheck_SPIF()oNSSMD0=loNSSMD0=0oSPI0DAT=0xc7oCheck_SPIF()oNSSMD0=loCheck_Busy()ovoid Page_Program(unsigned long ADDR)unsigned int i。unsigned char lcmp3。NSSMDO=Oa选通 M25P16SPI0DAT=0x06o送写允许命令Check.SPIFO
16、oNSSMD0=UNSSMD0=().SPI0DAT=0x02o送贞编程命令Check.SPIFO-for(i=0o i3o 2+)tempi i=ADDR(8*(2-i)oSPIODAT=tempioCheck.SPIFOofor(i=0o i256a i+)(SPIODAT=Data_b)leiJoCheck.SPIFOoNSSMD0=lovoid Read_Flash(unsigned long ADDR)unsigned im 仁选通 M25P16送写允许命令送读数据命令unsigned char tempi 3 oNSSMDO=0SPI0DAT=0x()6oCheck.SPIFOoN
17、SSMD0=loNSSMD0=0.SPI0DAT=0x03oCheck_SPIF()o for(i=0a i3o i+)teinp|il=ADDR(8*(2-i)oSPIODAT=temphoCheck.SPIFOafor(i=0o iCheck_SPIF()oDsla_byle i =SPI0DATcNSSMD0=K/AD初始化void AD_Program()SFRPAGE=0X0FcREF0CN=0x08oAMX0P=0x08cAMX0N=0xlFc/ ADC0CF=0xl4oADC0CF=0x2ccADCOCN=Ox85cSFRPAGE=0X00.)/DA初始化void DA_Prog
18、ram()SFRPAGE=0X0FcIDA0CN=0xA2oSFRPAGE=0X00./总初始化void devicenil(void)port_io_inil()。oscnil()。xramJnilOoin(01nit()olimerJnitOainterruptni()。pca_inil()。uarjnit()oSPInit()o/ Flash_Init()oAD_Program( )。/AD 初始化DA_Program( )。/DA 初始化return o)/时间显示void SH_time(unsigned int n)unchar figuerl unsigned int a.b.c
19、de。Write_Com(0x03)o/ Write_Com(OxO 1) Write_Com(0x0c)aWrite_Com(0x8A)oa=n0b=a/60c=a%60od=c/10oe=c%10ofiguerl=figuer|O|Write_Data(figuer 1 )ofiguerl =figuer|boWri te_Data(figuer 1) figuerl =figuer| 10。Write_Data(figuerl )ofiguerl=figuer|d|oWri te_Data( figuer 1) ofiguerl=figuer|eoWriie_Dala(figuerl)o
20、delay(10)oreturn o)/主函数void inainO unsigned int n。unchar code hanzil=*语音存储回放unchar code hanzi2=”按 KO 开始录音unchar code hanzi3=”按 KI 开始放音。unchar code hanzi4=”按 K2 擦除”。unchar code hanzi7=”正在录音”。unchar code hanzi8=”正在放音”。unchar code hanzi9|=”正在擦除” case 0x02:LCDJnitOoDisp_Han( hanzi9.0x92.0x08)。Erase_All()obreak.default :breako)while(shjime=l)TR0=loSH_lime(n)o if(n=0) sh_time=0o TR0=0a ET2=0c EIEl=0X00o limc_sign=l。)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024正式的地区代理合同范文
- 工程合同功能解析
- 水利工程维修贷款合同
- 2024医院药品供销合同
- 农业领域合作协议范本
- 2024年咨询顾问合作简单协议书
- 彩色钢板工程承包协议书
- 集装箱海运合同范本
- 2024建筑业合同范本范文
- 2024个人房产转让合同
- 小学综合实践活动-绿色出行教学课件设计
- 防校园欺凌-课件(共28张PPT)
- 第6章 智能网联汽车测评技术
- 单向板结构设计
- 《强化学习理论与应用》环境
- 普通高等学校学生转学申请表
- 房租、水、电费(专用)收据Excel模板
- 习近平总书记关于教育的重要论述研究学习通章节答案期末考试题库2023年
- 重症急性胰腺炎ppt恢复课件
- 2022江苏省沿海开发集团限公司招聘23人上岸笔试历年难、易错点考题附带参考答案与详解
- 乡镇卫生院6S管理内容和要求
评论
0/150
提交评论