《基于单片机的语音存储与回放系统设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的语音存储与回放系统设计.doc(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、本科论文目 录摘 要IAbstractII引 言11 控制系统设计31.1 系统方案设计31.2 系统工作原理41.2.1 单片机的选择41.2.2 语音芯片的选择52 硬件电路设计62.1 时钟电路62.2 复位电路62.3 显示电路72.4 电源电路72.5 按键模块电路82.6 LM386功放电路82.7 总电路设计图93 软件设计103.1 编程工具软件Keil C51103.2 程序设计原理103.3 系统主程序设计114 系统调试134.1 硬件调试134.2 软件调试144.3 调试结果144.4 调试结果展示15结 论17参考文献18附录 源程序清单20致 谢33本科论文摘 要
2、在人类的历史长河中,语言的作用尤为重要,人们一直在思考一个问题,那就是如何把语言完全不差的记录下来。当今智能化的仪表仪器的自动控制装置中,如果能够添加语言功能,就可以非常好的提升操作便捷度,在日常生活中,人们在很多场合都需要语言的存储与回放技术,所以将这种技术与生活更好的结合在一起,是现在需要解决的一大难题。传统的语言记录装置体积庞大,使用不方便,在信息处理的过程中受到许多限制,为了解决这些问题,本项目将使用AT89C51单片机和ISD4004语音芯片来设计一款语音的录放系统。ISD4004语音芯片不需要数模转换和压缩就能够直接进行存储,不仅存储时间长,而且没有转换误差,还可以用于多次重复录放
3、。外围核心电路也相对来说十分简单。使用ISD4004语音芯片与单片机相结合,通过软件与硬件的控制,完全可以实现数字化语言的存储和回放。关键词:AT89C51单片机; 语音存储; 语音回放; ISD4004语音芯片 AbstractIn the long history of human beings, language plays a very important role. People have been thinking about a problem, that is, how to record the perfect language. Present automatic cont
4、rol device of intelligent instrument, if can add language functions, can be very good improve ease of operation, in daily life, people on many occasions require language of storage and playback technology, so this kind of technology and a better life together, is now a big problem to solve. The trad
5、itional language recording device is bulky, inconvenient to use, and is limited in the process of information processing. In order to solve these problems, this project will use AT89C51 microcontroller and ISD4004 voice chip to design a voice recording system. ISD4004 voice chip does not need digita
6、l to analog conversion and compression to be able to directly store, not only the storage time is long, and no conversion error, but also can be used for repeated recording and playback. The peripheral core circuit is also relatively simple. With the combination of ISD4004 voice chip and single chip
7、 microcomputer, the storage and playback of digital language can be realized completely through the control of software and hardware.Keywords: AT89C51 microcomputer; pronunciation; Audio playback; ISD4004 引 言人们生活节奏无时无刻都在加快,对于平时日常生活中使用的产品要求也在日益提高,智能化产品也开始普及。将语音录放功能添加到各种智能仪器仪表和工业控制系统中也成为了普遍的现象,在智能化的一期
8、医疗中添加此项功能,不仅可以使这些仪器操作更便捷,同时也方便了一些同时也方便了一些对某些操作有障碍的人,而且是生活节奏,再一次加快,进而使每个人都得到非常多的利益。语言服务行业正在变得越来越广泛,例如卫星导航系统、语音万用表和语音警报系统。可以说语言系统是社会生活中必不可少的东西,它的发展也将促进社会进步。由于产生了光学录音和磁带才结束了机械录音的时代,随着时代的发展,语音芯片也相应产生,这种方法不但需要软件的控制指令,还需要硬件的支持。语音的采集技术、存储技术、回放技术三个部分组成了云存储与回放系统,任何一个部分都是不可或缺的。那我们的问题也随之而来,怎样去存储语音,存储之后又怎么将其取出呢
9、?所以本次项目中选用了AT89C51单片机和ISD4004语音芯片。单片机的体积小、功耗低,但我们不能因此小看它的功能。原本准备采用A/D转换、D/A转换的方式来转换语音信号,这种方法十分的简单,但是这种方法有很多弊病,比如说操作复杂,语音信号也非常容易失真,在调试的过程中也非常不方便。所以选择了ISD4004语音芯片。ISD4004语音芯片包含了模拟输入输出,所以不需要再使用A/D和D/A转换器,在本次项目中,起初也是想通过先后转换的房子来完成,但由于现在的语音芯片已经可以完成信号转换的操作,所以还是选择了更加先进的语音芯片。而且语音芯片记录声音没有长度的限制,不需要接入电源就可以存储100
10、年。ISD语音芯片具有外围电路非常简单的优点,它可以和单片机完美相结合,而且它的重量和体积也非常小,可以通过单片机对他的控制完美的进行对语音的录制和放出。单片机主要起到对语音芯片的控制作用。所以基于单片机和语音芯片的语音系统也就相应的产生了。虽然目前的语音存储与回放技术已经很成熟了,但是我认为该项技术,还有很大的发展空间,比如说更快的速度和更高的质量以及加密方式。或者如何优化处理来进一步减少存储空间。而且智能语言将会是未来发展的主要路线。语言语音存储与回放系统与数学理论相结合,这些技术,在很多个领域随处可见,我们在生活中就可以看到语言存储和回放技术的重要性,这种技术提高了我们生活的质量,也推动
11、了社会的发展,所以此次研究是很有必要的。1 控制系统设计1.1 系统方案设计方案1:使用AT89C51单片机通过对语音信号的各种转换,来完成对语音的采集与回放。它的原理如图1-1所示。在录音的时候,单片机先将模拟信号转换为电信号,再通过音频的放大器将信号放大,通过滤波器进行滤波再由转换器转换为数字信号,送回到单片机中,然后将其存储。在需要放音的时候,相当于进行一次反向操作,首先读取出数字信号,然后经过模数转换,将数字信号转换成模拟信号,经过放大器进行放大再变成声音播放出来。这种方法虽然过程简单,但是语言信号非常容易受到外界的干扰,而且信号压缩也比较复杂,硬件电路的调试也非常困难。图1-1方案1
12、系统原理图方案2:使用AT89C51单片机来控制整个系统,配合ISD语音芯片完成语言的录放,系统原理图如图1-2所示。通过按键控制单片机,并将指令发送到语音芯片以完成录音和播放。当前的操作状态显示在显示屏上。这种处理方法不但使其抗干扰的能力更强,而且存储也更加方便,调试也更加简单。图1-2 方案2系统原理图1.2 系统工作原理本次项目使用单片机作为控制核心为基础,通过单片机来完成对按键和液晶显示屏等模块的响应,再控制语音芯片来存储和读取语音。系统结构如图1-3所示。图1-3 系统结构框图1.2.1 单片机的选择MCU的类型很多,例如PIC MCU,MCS-51 MCU和AVR ATmega12
13、8 MCU。因为目前大多数公司都已经推出了51系列单片机的兼容机型,所以它们固然会在很长一段时间内占领大量市场。由于在单个芯片中结合了多功能8位CTO和闪存,ATMEL的AT89C51和AT89C2051是高级微控制器。两个单片机的性能对比如1-1所示。表1-1 AT89C51和AT89C2051主要性能对比单片机型号对比项目AT89C51AT89C2051存储器4KB可编程Flash存储器2KB可编程Flash存储器存储器保密三级程序存储器保密两级程序存储器保密内部RAM128字节128字节静态工作频率0Hz24MHz0Hz24MHz定时/计数器2个16位定时/计数器2个16位定时/计数器串
14、行通讯口1个串行通讯口1个串行通讯口中断源6个中断源6个中断源I/O引线32条I/O引线15条I/O引线通过此表格可以看出,两个单片机性能基本上是相同的,但AT89C2051的IO口线较少,所以没有办法增添ROM和RAM,在这里,考虑到将来的扩展和其他设计,可以选择更多的扩展接口。可以在需要时升级AT89C51,同时扩展其他功能,因此我选择了AT89C51微控制器。1.2.2 语音芯片的选择ISD系列芯片在处理音频信号时不需要数模转换和编码压缩。这种存储技术没有A / D转换错误。因为它可以将采样值直接存储,所以在还原真实场景的声音时显得更加完美。它避免了电路引起的噪声、金属声音和音频失真。
15、ISD4004语音芯片比ISD系列芯片需要更长的时间来记录声音,因此该项目选择了ISD4004语音芯片。 ISD4004语音芯片的引脚如图1-4所示。图1-4 ISD4004引脚图片2 硬件电路设计该系统可分为三个部分:微控制器控制部分、语音记录和回放部分,功率放大器部分。采用51单片机为控制核心,采用ISD4004进行录音和播放。P0连接按钮用于记录和播放,并连接到LED,显示当前的记录和播放状态。2.1 时钟电路时钟电路由晶体振荡器和电容器组成,时钟电路就像平时家里用的时钟一样控制着任何工作的时间。时钟电路的用途很多,时钟电路被广泛使用,它的主要工作是产生与时钟一样精确的振荡器电路。任何工
16、作都按时间顺序排列。产生该时间的电路是时钟电路,如图2-1所示。图2-1 时钟电路2.2 复位电路复位电路在微型计算机系统中是非常简单的电路,但它非常重要。其主要功能是上电复位,以确保在打开电源后可以正确启动系统。当系统遭受导致系统故障的某些外部原因时,可以通过“重置”按钮将系统重置为正常工作状态。复位电路的电路图如图2-2所示。打开电源时,仅当VCC超过4.75V且低于5.25V时,复位信号才被清除,晶体振荡器稳定工作,微机电路开始正常工作。图2-2 复位电路2.3 显示电路本次项目使用的是LCD1602显示模块,它可以同时显示32个字符。1602通过D0D7的8位数据端子发送数据和命令。该
17、端口连接到微控制器的P0端口。V0端口用于调整显示器的对比度。一个10K可变电阻器连接到此端口,可以通过调整电阻的大小来控制显示屏的亮度。 RS是寄存器选择的控制端子。该端口连接到微控制器的P24引脚。该端口连接到微控制器的P25引脚。图2-3给出了电路原理图。图2-3 LCD1602电路原理图2.4 电源电路系统电源设计也是系统的重要组成部分。由于该系统的芯片主要由5V USB电源供电,为了获得稳定的DC电压信号,考虑到经济性和耐用性,该系统使用三端稳压器W7805输出+ 5V电压,并使用电容器用于减小输出纹波波形电压,如图2-4所示。图2-4 电源电路2.5 按键模块电路该项目中的按钮模块
18、使用多个独立的按钮,按钮的一端接地,另一端连接到IO端口。由于微控制器的IO端口具有内部上拉,因此当不按下按钮时,将在高功率下检测到IO。当按下按钮时,Ping等效于IO接地短路。因此,此时微控制器检测到的电平较低,可以通过在不同时间检测IO端口的状态来判断按下的按钮。这四个按钮代表以下功能,可用于控制MCU的记录、暂停、选择和播放操作。第一个是播放按钮,第二个是暂停按钮,第三个是录制按钮,第四个是选择按钮。如图2-5所示。图2-5 按键模块电路2.6 LM386功放电路在很多情况下,主机不能够通过自己的额定功率来维持整个系统的驱动。那么这个时候,就需要通过功率放大器来将功率进行放大,将不足的
19、功率补充完整。该产品中使用的LM386芯片具有很好的音频放大的功能,增益可以达到200,并且声音质量纯净且无噪音。 LM386可以使用电池作为电源。输入电压范围为4V到12V之间。LM386的内部电路图如图2-6所示。图2-6 LM386芯片电路图2.7 总电路设计图将以上各个电路图进行组合后为本次设计的最终设计电路图(利用National Instruments中的Multiuse绘制)。如图2-7所示。图2-7 总电路图3 软件设计该软件的设计基于硬件,并且要由该软件实现的功能基于常规硬件。如果硬件不能正常工作,则意味着没有好的软件可以实现任何功能。如果没有软件,那用再好的硬件也是毫无作用
20、的。将需要实现的功能确定之后,如果调试正确,就会可以开始设计本次项目需要的软件模块了。本次项目使用51单片机作为开发的基础,软件格式采用Keil C51来进行汇编语言的编译。3.1 编程工具软件Keil C51Keil C51集成开发环境是基于80C51内核的微处理器软件开发平台。他可以独立完成整个项目的建立,也就是完成整个开发过程。用于单片机应用系统的常用软件编写语言是汇编、C、BASIC、C +等。对于51单片机而言,使用最广泛的是汇编语言和C语言。使用Keil C需要以下五个步骤来开发单片机程序:(1)选择创建一个全新的项目,然后选择本次项目中使用的单片机机型。(2)Vision3中的文
21、件编辑器功能,可以用来编写源程序文件,并且需要将此文件添加到新建的这个项目中去。(3)通过Vision3的各种选项,配置Cx51编译器、Ax51宏汇编器、BL51/Lx51连接定位器以及Debug调试器的功能。(4)使用Vision3软件,将编写后的源程序将编写后的源程序代码进行编译,然后生成HEX格式的可执行文件,如果在编译过程中出现错误,那么就返回到第2步对源程序代码进行修改。(5)如果编译没有错误,那么就证明源程序代码没有错误,这时就可以将源程序代码导入仿真软件中进行仿真操作。本次项目中选用的汇编语言可以直接与计算机的底层软件进行交互,它可以直接访问硬件的存储器或者端口,并且没有局限性,
22、能够对二进制代码进行完美的操控,很好的发挥出硬件的优势,运行速度也会大大提高,所以本次项目我选用了汇编语言对这个项目进行调试。3.2 程序设计原理对软件的设计可以和硬件的设计相结合,因为不管哪个功能是由硬件完成的,哪个任务是由软件完成的,基本都可以在硬件设计完成后确定。软件的总体设计思路可以分为两类:其中一类是执行软件,这一类软件可以完成计算测量、显示、打印、输出等非常实质性操作,另一类是起到执行协调作用的监视软件,这是用来起到协调作用的,在整个软件系统中充当调度员的角色。所以软件的设计有两类,他们各具特色,并且软件的设计很偏重算法,还与硬件之间有很大的联系。在进行软件的设计时,应该将所有的模
23、块列举出来,然后通过数据结构规划好,所有的模块规划好之后,就可以进行监控了,编程比较容易,但是监控就比较难了,这就像是当一名员工容易,但是当一名领导就比较困难。3.3 系统主程序设计主程序的设计思路,是考虑到4个按键的接口,通过单片机循环扫描来检测是否有按键被按下去,当任何一个按键被按下后,都会去执行该按键的这个子程序。例如当单片机扫描识别到按键被按下时,这个时候单片机就会去执行录音的程序,当单片机扫描识别到放音按键被按下时,单片机就会停止录音程序,去运行放音的子程序,每个状态在执行时切换下一个状态时都需要按下停止按键清除状态标志。流程图如图3-1所示。图3-1 按键检测流程图单片机依次判断用
24、户按下的按键,因为不同按键在不同的界面有不同的功能,因此系统采用了一个Function Count来记录当前属于哪个界面,根据不同的界面下用户按下的不同按键执行对应的操作。语音播放流程图如图3-2所示。图3-2 语音播放流程图当系统处于播放模式下,单片机会根据当前语音的序号播放对应地址的语音。4 系统调试4.1 硬件调试通过单片机控制语音芯片完成的语音存储与回访系统的电路比较大,而且回涉及到很多的模块电路,比如会涉及到单片机的最小系统、时钟电路、液晶显示模块等等,所以在焊接时要十分注意,涉及到多种模块的这种电路,哪怕只要存在一处的焊接错误,就会导致整个系统的检测无法完成,因为电路中交叉的线路非
25、常多,所以在焊接过程中避免焊接错误和短路现象,如果电路连接错误,将给检测带来极大的不便,并且该电路具有更多的交叉线。请注意处理各种尖锐的针脚,否则会刺破被覆的电线并导致短路。检查正确性后,我们开始在通用板上焊接。 PCB图如图4-1所示。图4-1 PCB图在系统的硬件调试中遇到了许多问题。回想一下,只要仔细考虑,就可以避免这些问题。以下是主要问题:一开始,我认为微控制器无法正常驱动ISD4004,因此无法进行记录和播放。解决方案:搜索相关信息后,必须在微控制器的P0端口上添加一个上拉电阻,以正常驱动外部芯片。4.2 软件调试该系统是一个相对复杂的数字系统,因此其程序也相对复杂,因此在编写程序和
26、调试过程中存在许多问题。首先,为了更好地测试效果,在确认没有错误之后,我直接在PROTUES软件下启动了仿真,然后将程序刻录到实际环境中运行。最终,在对模块子例程进行了许多修改之后,它逐渐完成并最终解决了软件中的各种问题。在软件调试过程中遇到的主要问题如下:1.程序刻录后,LCD屏幕闪烁并且亮度不均匀。解决方案:首先,逐步修改呼叫延迟,以解决显示闪烁的问题。其次,由于这项工作使用的是在动态扫描模式下显示的数字,因此动态扫描速度非常快,人眼看不到它,但是当调用显示程序时,如果返回时未屏蔽最后一个值,则它将它将看起来非常明亮。现象,因此将屏蔽子命令添加到了显示器的背面,从而最终解决了该问题。2.当
27、用户按下按钮时,微控制器读取的值与设置值不同。解决方案:检查一下键盘的连接,并建立新的连接。4.3 调试结果测试中如果未显示LCD液晶,需要先使用测试仪测试电路,以观察是否存在漏焊,虚焊或组件损坏。搜索了一系列问题后,系统最终可以正常工作并完成所有功能。4.4 调试结果展示 图4-2 实物图 图4-3 开机后画面 图4-4 录音状态 图4-5 停止状态 图4-6 模式选择 图4-7 放音状态结 论通过以上分析,此次项目使用单片机作为控制器,实现了设计的所有功能,传统的语言录放设备,要将接收到的语音信号转换为电信号,再将这个信号放大,然后再经过模数转换转换为数字信号,最后再进行处理和存储,放音时
28、还需要数模转换转换成模拟信号,才能够达到放音的目的,这种方法听起来就非常复杂,在实际的制作过程中,还会使声音失真。所以此次项目采用51单片机来控制语音芯片的方法,也熟悉了ISD4004的基本应用,整个系统是采用51单片机对语音芯片的控制,完成了语音的录制和播放,并且描述了整个系统工作流程,各个部件的性能。这个系统不但成本非常低,而且使用起来灵活多变,抗干扰能力十分强,使用起来效果也十分优秀。本课题的重点、难点总结:(1)初次接触语音芯片,在使用过程中对各种寄存器的操作不太熟悉;(2)在播放电路中,语音扩展,抗干扰分析过程应熟悉;(3)注意调节电路的实现和程序的稳定性。通过本设计,我已经掌握了一
29、些常用的基础理论知识,并对微控制器和PC编程控制的开发和应用有了更深入的了解。 参考文献1彭伟.单片机C语言程序设计实训100例J.电子工业出版社.20092金俊甫,陈伯亨.浅谈单片机原理及应用J.风景名胜,2019,(10)3吴运昌.模拟电子线路基础M.广州:华南理工大学出版社,20044高铭阳.单片机的原理及接口技术J.电子技术与软件工程,2017,(4)5阎石.数字电子技术基础M.北京:高等教育出版社,19976张晓丽等.数据结构与算法J.北京:机械工业出版社,20027谭文娣,梁德坚,刘玉琼.ISD4004系列语音芯片批量录音实现J.企业科技与发展,2009,(20)8胡玉庆,舒朝君,
30、陈红.基于ISD4004的电子录放系统设计J.北京电力高等专科学校学报,2009,(4) 9李建忠.单片机原理及应用J.西安:西安电子科技大学,200210汪惠毅,马民康.AT89C51单片机的应用J.工业计量,1997,(6)11韩志军等.单片机应用系统设计M.机械工业出版社,200412周润景等.Proteus在MCS-51&ARM7系统中的应用百例M.电子工业出版社,200613韦君玉,谢超,莫韦蓬,樊晋杰,柏亚萌,杨扬.基于LM386的应用设计电路J.通讯世界,2016,(1)14 帅江华,李志宜.浅谈LM386功放电路在实践教学中的应用J.无线互联科技,2016,(24) 15刘树中
31、,孙书膺,王春平.单片机和液晶显示驱动器串行接口的实现J.微计算机信息,200716阎志宽.LM386功放IC的使用方法J.家庭电子,2003,(8)17陈海峰,丁丽丽.基于CPLD的LCD1602显示系统设计与实现J.电子设计工程,2015,(10)18岂兴明.51单片机编程基础与开发实例详解M.北京:人民邮电出版社,200819马忠梅等.单片机的C语言应用程序设计M.北京航空航天大学出版社,200620童诗白,华成英.模拟电子技术基础M.北京:高等教育社,2006附录 源程序清单/ISD4004语音播放部分/#include #include LCD1602.h#include ISD40
32、04.h#include key.hunsigned int a,b;unsigned char flag=0;void main(void) LCDInit(); LCDDispString(1,1,No1 Recording);flag = 0;EX0=1; /开外部中断0IT0=1; /触发方式设置为下降沿IE0=1; /开外部中断0EA=1; /开总中断 while(1)key_scan(); void timer0(void) interrupt 0 /计数器0中断 if(FunctionCount = 5 & ModeCount=1) /单个曲循环if(NowRec = 0 ) /
33、第一首歌曲LCDDispString(1,2, Record 1 );play(ADDR1STR);if(NowRec = 1) /第2首歌曲LCDDispString(1,2, Record 2 );play(ADDR2STR);if(NowRec = 2) /第3首歌曲LCDDispString(1,2, Record 3 );play(ADDR3STR);if(NowRec = 3) /第4首歌曲LCDDispString(1,2, Record 4 );play(ADDR4STR);else if(FunctionCount = 5 & ModeCount=2)/全循环if(NowRe
34、c = 0) /第一首歌曲LCDDispString(1,2, Record 1 );NowRec=1;play(ADDR1STR);for(a = 2000 ; a0 ; a-)for(b = 110; b0 ; b-);if( NowRec = 1) /第2首歌曲LCDDispString(1,2, Record 2 );NowRec=2;play(ADDR2STR);for(a = 2000 ; a0 ; a-)for(b = 110; b0 ; b-);if(NowRec = 2) /第3首歌曲LCDDispString(1,2, Record 3 );NowRec=3;play(AD
35、DR3STR);for(a = 2000 ; a0 ; a-)for(b = 110; b0 ; b-);if(NowRec = 3) /第4首歌曲LCDDispString(1,2, Record 4 );NowRec=0;play(ADDR4STR);for(a = 2000 ; a0 ; a-)for(b = 110; b0 ; b-); #includeISD4004.h#include void delayms(unsigned char ms) / 延时子程序 unsigned char j;while(ms-)for(j = 0; j 120; j+);void play(uns
36、igned int addr) unsigned int y;SS=0;MOSI=0;/发送开始SCLK=0;for(y=0;yy)&0x01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();/发送结束SS=1;/上电结束delayms(50);SS=0;MOSI=0;/发送地址SCLK=0;for(y=0;yy)&0x01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();/发送地址结束MOSI=
37、0;/放音SCLK=0;for(y=0;yy)&0x01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();SS=1;SS=0;MOSI=0;/放音SCLK=0;for(y=0;yy)&0x01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();SS=1; void rec(unsigned int addr) unsigned int y; SS=0;MOSI=0;/发送开始SCLK=0;for(y
38、=0;yy)&0x01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();SS=1;/上电结束delayms(50);SS=0;MOSI=0;/发送开始SCLK=0;for(y=0;yy)&0x01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();/发送结束SS=1;/上电结束delayms(50);delayms(50);SS=0;MOSI=0;/发送地址SCLK=0;for(y=0;yy)&0x
39、01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();/发送地址结束MOSI=0;SCLK=0;for(y=0;yy)&0x01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();SS=1;SS=0;MOSI=0;SCLK=0;for(y=0;yy)&0x01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop
40、_();SS=1; /void stop()unsigned char y;SS=1;SS=0;MOSI=0;SCLK=0;for(y=0;yy)&0x01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();SS=1;#include#includekey.h#includelcd1602.h#includeISD4004.hunsigned char FunctionCount=0;unsigned char RecordCount=0;unsigned char ModeCount=0;uns
41、igned char NowRec=0;unsigned int CountRed4=0;/毫秒延时函数 void Keydelay(unsigned int z)unsigned int x,y;for(x = z ; x0 ; x-)for(y = 110; y0 ; y-);void key_scan(void)if(key_1 = 0) /判断第一个按键情况 Keydelay(10);if(key_1 = 0) /按键一FunctionCount+;if(FunctionCount = 1)LCDDispString(1,1,No2 Recording);LCDDispString(1,2, );else if(FunctionCount = 2)LCDDispString(1,1,No3 Recordi