为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于51单片机的语音计算器设计

2018-09-22 6页 doc 1MB 70阅读

用户头像 个人认证

北溟愚鱼

暂无简介

举报
基于51单片机的语音计算器设计 毕 业 设 计 题目:基于单片机的简易计算器设计 姓  名: 学  号: 学 院: 信息学院 专 业: 电子信息工程 指 导 教 师: 协助指导教师: 2011年 5月 23日 摘 要 近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片...
基于51单片机的语音计算器设计
毕 业 设 计 题目:基于单片机的简易计算器 姓  名: 学  号: 学 院: 信息学院 专 业: 电子信息工程 指 导 教 师: 协助指导教师: 2011年 5月 23日 摘 要 近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。 计算器在人们的日常生活中是比较常见的电子产品之一,并且语音技术的进展给这种应用需要提供了一种有力的技术支持,逐渐被广大用户所接受,并广泛用于各种需要语音响应的场合。基于这样的理念,本次设计是用AT89C51单片机、LCD显示器、控制按键、语音芯片ISD2560为元件来设计的具有语音播报功能的简易计算器。利用此设计熟悉单片机微控制器及C语言编程,对其片资源及各个I/O端口的功能和基本用途的了解。掌握Microsoft Visual C++ 6.0应用程序开发环境,常用的LCD显示器的使用方法和一般键盘的使用方法。 关键字:AT89C51、ISD2560、LCD、控制按键 Abstract With the rapid development of science and technology in recent years, the application of SCM is a growing, while driving more traditional control detection technology updates. In real-time detection and automatic control of microcomputer application system, the microcontroller is often used as a core component, but only SCM knowledge is not enough, the structure should be based on specific hardware, software and hardware combination to be improved. Calculator in people's daily lives is one of the more common electronic products, and progress in speech technology to such applications need to provide a strong technical support, have been gradually accepted by the majority of users, and is widely used for various needs Voice response applications. Based on this concept, this design is AT89C51 microcontroller, LCD display, control buttons, voice chip ISD2560 devices designed for the voice broadcast function with a simple calculator. Familiar with using this microcontroller design and C language programming microcontrollers, resources and all of its chip I / O port functions and basic use of the understanding. Master the Microsoft Visual C + + 6.0 application development environment, the common use of LCD displays and general use of the keyboard. Keywords: AT89C51、ISD2560 、LCD control buttons 朗读 显示对应的拉丁字符的拼音   字典 目录 I摘 要 IIAbstract 1引言 21 绪论 21.1 系统开发背景 21.2 系统开发意义 21.3 设计内容和章节分配 32 系统设计 32.1 功能介绍 32.1.1 基本功能 32.1.2 扩展功能 32.2 方案论证与比较 32.2.1 控制部分的设计方案论证与选择 42.2.2 显示电路的设计方案论证与选择 52.2.3 键盘设计方案与选择 62.3 系统组成 72.4 总体设计思想 83 主要芯片介绍 83.1 AT89C51选择及介绍: 103.2 ISD2560选择及介绍: 123.3 开发工具的选择及介绍: 144 硬件电路设计 144.1 复位电路 144.2 时钟电路 154.3 显示电路 154.4 语音电路 174.5 按键电路 205 软件设计 205.1 AT89C51单片机中断允许控制 205.2 LCD1602控制 205.2.1 LCD1602字符发生存储器(CGROM) 215.2.2 LCD1602显示数据寄存器(DDRAM) 235.3 计算器软件设计 235.3.1 系统总流程图 245.3.2 算术运算程序设计 255.3.3 按键程序设计 255.3.4 显示程序设计 255.3.5 错误处理及提示程序设计 265.4 语音播报软件设计 275.4.1 分段录放音 275.4.2 程序流程图 305.5 仿真与调试 305.5.1 KEIL uVision调试 335.5.2 Proteus 对于本设计的仿真 35结论 36致谢 37参考文献 38附录 38附录A 39附录B 40附录C 41附录D 50附录E 引言 当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且比较容易出错。计算器作为一种快速通用的计算工具方便了用户的使用。计算器可谓是我们最亲密的电子伙伴之一。随着人类社会的不断进步,随着语音芯片的普及,语音报播被广泛应用于车站报站器,语音型数字万用表,出租车语音报站器,排队机等,并且面向家庭个人使用的方向发展,更加人性化。自动语音提示技术是计算机语音处理技术的一种应用,属于语音再生合成技术范畴。录放系统具有电路简明、应用方便、单片录放、不怕掉电、音色纯正、性价比高等特性,与此相关的语音系统已广泛地用于通信、工控 、医疗、报警示讯等领域。本设计着重在于计算器的设计和开发,并从实际意义出发对计算器设计做了进一步的扩充,将语音播报录放技术融入其中,更好的发挥了电子产品的作用,为人们的生活带来便利。 1 绪论 1.1 系统开发背景 随着社会的法阵发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技的术的发展,犹如雨后春笋的变化。计算器在人们的日常中视比较常见的电子产品之一,如何将常见的计算器技术更加成熟,充分利用已有的软件和硬件条件,设计出更加出色的计算器,使其更好的为各行业服务,成了如今电子领域重要的研究课题。 1.2 系统开发意义 人们的日程生活中已经离不开计算器了,社会的各个角落都有它的身影,比如商店,办公室,学校…。因此设计一款简单实用的计算器会有很大的实际意义。 普通的计算器只能完成计算功能,并不能根据用户自身需要进行录音,而本设计设计的计算器不仅仅能完成计算这项功能,并能将语音系统融到计算器中,可以自定义一段录音,然后播放出来,很有意思。这种根据自己喜好录放音的计算器将会受到大家的喜欢。 1.3 设计内容和章节分配 随着嵌入式的快速发展,单片机本着它简单,功能强大,易于设计等优点被设计者使用。因此,本设计使用单片机做为控制器件,将计算系统与语音系统结合。通过此次设计的完成,对字符液晶显示模块的工作原理,如初始化、清屏、显示、调用及外特性有较清楚的认识,并会使用LCD实现计算结果的显示,在充分内部逻辑的概念的同时,进行软件编译和调试。 第一章为设计的背景、意义介绍,简明扼要的阐述设计的目的和成果;第二章为系统方案设计介绍,主要从设计的功能,方案的确定及选择原因和系统组成来介绍。第三章为主要芯片介绍,详细介绍了芯片的内部结构和引脚分布。第四章为设计的核心,即硬件电路设计,此章将硬件电路分为若干模块,分别介绍了模块的硬件设计电路。第五章为软件设计,从语言的选择,控制字的确定,流程图的介绍到最后的仿真与调试。通过这几章的介绍,完成简易计算器的设计。 2 系统方案设计 2.1 功能介绍 2.1.1 基本功能 根据所学知识,自行设计一个计算器,要求自行设计供电电源,该计算器能够实现加减乘除四则混合运算,能够实现连续计算。 2.1.2 扩展功能 (1)该计算器能够实现精确到小数点三位的运算。 (2)该计算器可显示负数。 (3)该计算器带有DIY语音系统,可自定义录/放音。 2.2 方案论证与比较 2.2.1 控制部分的设计方案论证与选择 根据设计要求,控制器主要用于红外信号的接收和辨认、控制步进电机的动作,控制显示步进电机的转速等。控制器主要用于数据的接收和发送、数据的运算,控制显示液晶屏等,针对这些要求,对于控制器的选择有以下三种方案。 方案一:采用计算器专用芯片实现。 用计算器专用芯片进行设计并编程实现。这种设计方案计算效率高、速度快、而且成本也相对较低,是厂家做计算器的最佳方案。但是本人对计算器专用芯片掌握的不够,还不足以实现设计计算器,所以这个方案不可去可取。 方案二:采用FPGA(现场可编程门阵列)作为系统的控制器。 FPGA将所有器件集成到一块芯片上,体积小,节省空间,提高了稳定性;直接面向用户,具有极大的灵活性和通用性,使用方便,硬件测试和实现快捷,开发效率高,工作可靠性好。可以实现各种复杂的逻辑功能,规模大,密度高,采用并行的输入输出方式,系统处理速度高,适合作为大规模实时系统的控制核心。由FPGA内部编程实现计算器功能,本设计对数据处理速度的要求不是很高,FPGA的高速处理的优势得不到充分的体现,由于其集成度高,使其成本偏高,同时由于芯片的引脚较多,实物电路板布线复杂,加重了电路设计和实际焊接的工作。并且FPGA的价格相对较高,性价比太低,所以这个方案不考虑。 方案三、用单片机实现。 由于单片机集成了运算器电路、控制电路、存储器、中断系统、定时器/计数器以及输入/输出口电路等,所以用单片机设计控制电路省去了很多分立元器件。由于单片机是可编程芯片,并且它可以运用C语言编写,对于一些复杂的计算功能,可以调用C语言库函数。使编写程序变得非常简单。所以该课题用单片机实现,不仅功能易于实现,而且精确度高,稳定性好,抗干扰能力强。并且由于其成本低、体积小、技术成熟和功耗小等优点,且技术比较成熟。性价比也相当高。更重要的是本人经过几年的学习,对单片机已有深刻的理解,并且可以灵活运用。 综上所述,并通过各个方面综合比较为达到最佳效果。我们采用方案三利用单片机控制器。 2.2.2 显示电路的设计方案论证与选择 方案一:数码管显示方案。 数码管显示使用两个四位一体动态数码管显示方案,采用动态数码管显示,具有程序简单,对外界环境要求低,易于维护,同时其精度比较高,精确可靠,操作简单。显示直观的特点。但只能显示数字和一些代码,不能显示汉字及一些常用的符号,且硬件设计比较复杂。 方案二:采用AT1602型液晶显示。 (一)基本特性 显示特性 1、+5V电压,对比可调度; 2、内含复位电路; 3、提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能; 4、有80字节显示数据存储器DDRAM; 5、内建有160个5X7点阵的字型的字符发生器CGROM; 6、8个可由用户自定义的5X7的字符发生器CGRAM。 (二)接口定义 AT1602接口定义如图2.1所示: 图2.1 接口定义图 综上所叙,AT1602的显示效果好、功能齐全,所以我们选用AT1602液晶显示。该液晶有16个引脚,它能显示32个字符,并且硬件电路设计简单,显示美观。 2.2.3 键盘设计方案与选择 方案一:独立键盘。 独立键盘为一端接地,另一端接I/O口,并且要接上拉电阻。这种键盘的硬件都很容易实现,但每一个按键就要用一个I/O口,非常的浪费单片机的I/O口资源,不适合本次设计。 方案二:自制编码键盘。 编码键盘编程简单,占用资源少,但其硬件比较复杂,要用很多的二极管,不是很理想。 方案三:4*4矩阵式键盘。 这种键盘的硬件简单,使用的I/O口比独立键盘减少一半,而且这种键盘的编程方法已很成熟。所以本次设计采用这种矩阵式键盘。 2.3 系统组成 本设计采用MCS-51系列单片机AT89C51来设计计算器。通过扩展必要的外围接口电路,实现对计算器的设计。由键盘输入数值,再通过8051单片机输入到系统,并由I/O口输出送到LCD显示屏;最后由1602LCD显示输入数值和输出结果,还可以通过语音模块可以达到语音播报实现录放音的功能效果。其中,设计以单片机为核心,包括开关模块、扩展模块、运算模块、语音模块和显示模块。系统框图如下图所示: 图2.2 系统框图 硬件电路是采用结构化系统设计方法,该方法保证设计电路的化、模块化。硬件电路的设计最重要的选择用于控制的单片机,并确定与之配套的外围芯片,使所设计的系统实用性强、操作简单。软件设计的方法与开发环境的选取有着直接的关系,本系统由于是采用51系列单片机,因此使用Keil C语言进行开发,Proteus仿真软件进行仿真。此编程工具相比汇编语言具有结构化、适用范围大、可移植性好等特点。本系统软件设计采用模块化系统设计方法,先编写各个功能模块子程序,然后进行组合与调整,经过Keil调试后,达到设计功能要求,并在Proteus中仿真。 在设计中采用AT89C51单片机作为微处理器,低电压、高性能CMOS 8位单片机,片内含4K bytes的可反复擦写的Flash只读程序存储器和128 bytes的随机存取数据存储器(RAM),兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash 存储单元。 硬件方面完成包括键盘控制,LCD屏显示控制,运算控制、语音控制等设计。除外,还有各部件之间的连接、引脚间的连接等工作;软件方面完成各功能的程序编写,在程序编写完成后,进行程序调试。 2.4 总体设计思想 1、可以进行四则运算,采用LCD显示数据和结果。 2、键盘包括数字键(0-9)、符号键(+、-、*、/)、清除键和等号键,设计中采用4*4键盘。 3、执行程序:键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。 4、错误提示:当单片机执行程序中有错误时,会在LCD上显示相应的提示,如:当除数为0、数值超出范围时,计算器会在LCD上错误提示。 5、可进行声音的录音和放音。 3 主要芯片介绍 3.1 AT89C51选择及介绍: 随着集成电路工艺的发展,出现了单片机、DSP,、ARM等多种单片机。DSP:它从16位~32位,内部采用哈佛结构,特别适合数据处理。16位DSP适合中高级工控到简单语音/图片(不含视频)处理;32位DSP适合复杂语音/图片/视频处理。ARM:是32位单片机,由于结构和计算速度的原因,目前适合做事务处理或者中低端应用,从中高级工控到简单语音/图片(不含视频)处理 。而AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。51单片机虽然和DSP,ARM相比处理速度和运算速度上都比较慢,但它的体积小、质量轻、价格便宜,它的速度可以满足本次实验的要求,所以我们采用AT89C51这款单片机。AT89C51内部原理图如图3.1所示: 图3.1 AT89C51单片机内部原理图 引脚图如图3.2所示: 图3.2 AT89C51单片机引脚图 AT89C51的主要特性: (1) 与MCS-51兼容 (2) 4K字节可编程闪烁存储器 (3) 数据保留时间:10年 (4) 全静态工作:0Hz-24Hz (5) 128*8位内部RAM (6) 32可编程I/O线 (7) 两个16位定时器/计数器 (8) 5个中断源 (9) 可编程串行通道 (10) 片内振荡器和时钟电路 中央处理器: 中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。 数据存储器(RAM): C51内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。 程序存储器(ROM): C51共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。 定时/计数器: C51有两个16位的可编程定时/计数器,以实现定时或计数产生中断,用于控制程序转向。 并行输入输出(I/O)口: C51共有4组8位I/O口(P0、P1、P2和P3),用于对外部数据的传输。 全双工串行口: C51内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。 中断系统: C51具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。 时钟电路: C51内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但C51单片机需外置振荡电容。 3.2 ISD2560选择及介绍: 目前市场流行的语音芯片有很多,从性价比的角度来考虑,美国ISD公司的ISD系列语音芯片可谓是一只独秀。ISD系列语音芯片具有以下优点: (1)采用模拟量数据存储在半导体存储器直接存储的专利技术,即将模拟量数据直接写入单个存储单元,不需要经过A/D,D/A转换。 (2)内部集成了大容量的的EEPROM,不再需要扩展存储器。 (3)控制简单,控制引脚与TTL电平兼容。 (4)集成度高,使用方便。 (5)能较好的真时再现语音的自然效果,避免了一搬固体语音电路的因为量化和压缩所造成的量化噪声和失真现象。 因此本例选用ISD公司的语音芯片ISD2560。ISD2560是ISD公司生产的语音录入和重放芯片ISD2500系列之一,ISD2500系列芯片包括ISD2560,ISD2575,ISD2590和ISD25120四种,他们的主要区别在于存储语音的时间长度,ISD2560的录音时间为60秒,ISD2575的录音时间为75秒,ISD2590的录音时间为90秒,而ISD25120的录音时间为120秒。 ISD2560采用多电平直接模拟量存储专利技术,每个采样值可直接存储在片内单个EEPROM单元中,因此能够非常真实,自然得再现语音,音乐,音调和效果声,从而避免了一般固体录音电路因量化和压缩造成的量化噪声和“金属声”。 ISD2560的采样频率为8kHZ,同一系列的产品采样频率越低,录音/放音时间越长,但同频带和音质会有所降低。ISD2560可重复录放10万多次,它是一种永久记忆型语音录音/放音电路,它具有音质自然,使用方便,单片存放,反复录音,功耗低,抗断电等许多优点,因此在许多领域获得了广泛的应用。 ISD2560省去了A/D和D/A转换器,集成度较高,内部包括前置放大器,内部时钟,定时器,采样时钟,滤波器,自动增益控制,逻辑控制,模拟收发器,解码器和480k字节的EEPROM。ISD2560内部的EEPROM存储单元均匀分为600行,有600个地址单元,每个地址单元指向其中一行,每一个地址单元的地址分辨率为100ms。此外,ISD2560还具备微控制器所需的控制接口。通过操纵地址和控制线可完成不同的任务,以便实现复杂的信息处理功能,如信息的组合,连接,设定固定的信息段和信息管理等。ISD2560可不分段,也可按最小段长为单位来任意组合分段。ISD2560内部原理图如图3.3所示: 图 3.3 ISD2560内部原理图 由内部框图可知其内部集成了高精度的时钟电路,无需外部配置晶振, ISD2560可进行录、放两种操作。录入时,语音信号经过换能器MIC转变为电信号,该信号经过隔直电容去除直流分量后送入前置放大器,微弱的电信号经过前置放大后由ANAOUT脚输出,经过隔直电容后送入ANAIN脚,既而信号进入自动增益AGC放大器,信号电平得到调理,使其符合存储电路的动态范围。为使得采样信号不产生失真,采样系统必须满足奈奎斯特采样定律。ISD2560的采样频率8K, 故实际应用中,为存储不失真音频信息,放大后的信号必须经过一个低通滤波器后方可送入存储单元,该滤波器为一五极点抗干扰滤波器,高频频限为3.4K,完全满足奈奎斯特定律,该器件典型带宽为3.4K。调理完毕的信号在内部时钟的作用下以闭环控制形式送入模拟存储阵列。如3.4图所示: 图 3.4 闭环存储电路 被采样信号经采样电路取样保持,同时电子被泵入模拟存储单元,此时两者被送入比较器的比较端,当两者电平相等时则停止向EPROM中写入数据,这样模拟信息得到了存储。 在器件的放音模式下,录入的模拟电压在取样脉冲的作用下,顺序的从模拟矩阵中读出并恢复为原始波形,经五极点平滑滤波器后入混合器,以便与外界其他信号混合,而后送入功率放大器,并由SP+,SP-端输出,可直接驱动扬声器。 ISD2560应用电压:单5 V供电 录/放时间:60S 寻址空间:1024位 最多语音分段:600 支持OVF 溢出 支持节电模式:录放操作周期外电流仅为0.5uA ISD2560引脚图如图2.4所示: 图3.5 ISD2560引脚图 3.3 开发工具的选择及介绍: 本设计原理图绘制采用的是Protel99SE。Protel99SE是Protel公司近10年来致力于Windows平台开发的最新结晶,能实现从电学概念设计到输出物理生产数据,以及这之间的所有分析、验证和设计数据管理。因而今天的Protel最新产品已不是单纯的PCB(印制电路板)设计工具,而是一个系统工具,覆盖了以PCB为核心的整个物理设计。 利用protel进行电路设计需要三个步骤: SHAPE \* MERGEFORMAT 图3.6 protel设计电路步骤图 本设计利用protel软件画的硬件电路图主要有单片机AT89C51的最小系统和语音芯片ISD2560电路及它们的接口电路,并对其进行PCB版图绘制。 本设计的计算器语音播报系统是以AT89C51为核心建立的系统,在软件编辑方面,需要对计算器、语音录/放音两部分分别构成的子函数进行编辑。在编辑中需要用keil C51软件。计算器的仿真由软件Proteus完成,他能很好的模拟计算环境,达到硬件的仿真效果。 4 硬件电路设计 硬件电路主要包括单片机为核心的复位电路、时钟电路,外围电路有显示电路、语音电路和按键电路。通过各电路,详细的介绍了电路组成。 4.1 复位电路 AT89C51单片机在启动时都需要复位,使CPU及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从RST引脚输入到芯片内部的斯密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如RST引脚上有一个高电平并维持2个机器周期(24个振荡周期),则CPU就可以响应并将系统复位。如图4.1所示,其为手动复位电路,通过接通一按钮开关,使单片机进入复位状态。 图4.1 复位电路 4.2 时钟电路 AT89C51芯片内部有一个高增益反相放大器,用于构成振荡器,反相放大器的输入端为XTAL1,输出端为XTAL2,两端跨接石英晶体及两个电容就可以构成稳定的自激振荡器。电容器C1和C2通常取22pf左右,可稳定频率并对振荡频率有微调作用。振荡脉冲频率范围为0~24MHz。 时钟接口电路如图4.2所示: 图4.2 时钟电路 4.3 显示电路 本设计采用LCD1602液晶显示器来显示输出数据,即可以显示两行,每行16个字符。 本设计通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应的数据。其接口电路如图4.3所示。 图4.3 显示电路 4.4 语音电路 A0-A9引脚提供语音芯片ISD2560的地址/模式输入,通过A8、A9引脚可以配置ISD2560操作模式。P/R引脚控制语音芯片ISD2560的录音/放音模式的选择,P/R引脚为低,ISD2560为录音状态,为高ISD2560为放音状态。PD引脚和ISD2560的节电控制输入相连,通过此引脚可以控制芯片的开关。CE引脚用于控制语音芯片的片选,低电平时选中芯片。单片机的P3.3(INT1)引脚、P2.5引脚和ISD2560DE的EOM标志输出相连,EOM标志在录音时由芯片自动插入到录音信息的结尾处,放音遇到EOM时,会产生低电平脉冲(约12.5ms)触发单片机中断,单片机在检测到此输出的上升沿后播放新的录音。语音接口电路如图4.4所示: 图4.4 语音电路 以下为芯片ISD2560的主要引脚说明: ·AO0/MO-A6/M6,A7-A9(1-10引脚):地址线/模式输入。共有1024种组合状态。最前面的600个状态作为状态内部存储器的寻址用,最后256个状态作为操作模式。当A8或A9有一个为零时,作为地址线,作为当前录音/放音操作的起始地址,地址端一直用作输入,不输出操作过程中的内部地址信息,地址输入在CE的下降沿被锁存。当A8和A9均为1时,为模式输入。 ·AUX IN(11引脚):辅助输入。当CE和P/R为高,放音不进行或处于放音溢出状态时,该引脚的输入信号通过内部输出放大器驱动扬声器输出端。 ·SP+,SP-(14,15引脚):扬声器输出。可驱动16欧以上的扬声器(内存放音时功率为12.2mW,AUXIN放音是功率为50mW)。ISD2500系列的所有的器件在芯片上都有一个差分扬声器驱动器。 ·MIC IN(17引脚):话筒输入引脚。麦克的输入通过此引脚将信号送至片内的前置放大器,片内自动增益控制电路(AGC)将此前置放大器的增益控制在-15—24dB。外接话筒应该通过一系列电容交流耦合进此引脚,耦合电容值和芯片内部此引脚的10千欧输入阻抗共同决定了ISD2560芯片频带的低频截至点。 ·MIC REF(18引脚): 话筒参考输入引脚。此引脚是前置放大器的反向输入,当以差分形式连接话筒时,可减小噪声,提高共模抑制比。 ·AGC(19引脚):自动增益控制引脚。AGC可动态调整前置增益以补偿话筒输入电平的宽幅变化,使得录制变化很大的音量(从耳语道喧嚣声)时失真都保持最小。响应时间取决于该端内置的5千欧电阻和从该端到VSSA端所接电容的时间常数。 ·ANA IN(20引脚):模拟输入引脚。此引脚为芯片录音信号输入端。对话筒输入来说,应将ANA OUT引脚通过外接电容连至此引脚,该电容和本端的3千欧输入阻抗决定了芯片频带的附加低端截至频率。 ·ANA OUT(21引脚):模拟输出引脚。此引脚为前置放大器的输出,其前置电压增益取决于AGC引脚的电平。 ·OVF(22引脚):溢出标志输出引脚,低电平有效。芯片处于存储空间末尾时,此引脚输出低电平脉冲以表示溢出,之后该引脚状态跟随CE引脚的状态,直到PD引脚变高复位芯片 ·CE(23引脚):芯片使能输入引脚,低电平有效。此引脚为低电平使能所有的录音和播放操作。芯片在该引脚的下降沿和锁存地址线和P/R引脚的状态。 ·PD(24引脚):节电控制引脚。此引脚变高后可使芯片停止而进入节电状态。芯片发生溢出,即OVF引脚输出低电平后,应将此引脚变高以将地址指针复位到录音/放音空间的开始位置。 ·EOM(25引脚):信息结尾标志输出引脚,低电平有效。EOM标志在录音时由芯片自控插入到该信息段的结尾。当放音遇到EOM时,此引脚输出低电平脉冲。 ·XCLK(26引脚):外部时钟输入引脚。此引脚内部与下拉元件,不用时应接地。 ·P/R(27引脚):录音/放音模式选择引脚。此引脚在CE的下降沿锁存。高电平选择放音,低电平选择录音。录音时,由地址线提供起始地址,直到录音持续到CE或PD变高,或内存溢出;如果是前一种情况,芯片将自动在录音结束处写入EOM标志。放音时,由地址输入提供起始地址,放音持续到EOM标志。如果CE一直为低,或芯片工作在某些操作模式,放音则会忽略EOM而继续进行下去,知道发生溢出为止。 4.5 按键电路 计算机输入数字和其他功能按键时要用到很多按键,在这种情况下,编程会很简单,但是会占用大量的I/O口资源,因此在很多情况下都不采用这样的方式,而是采用矩阵键盘的方式。矩阵键盘采用四条I/O线作为行线,四条I/O线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的数量就为4*4个,这样行列式键盘结构能有效的提高单片机系统中I/O口的利用率。其中MM74C922为口扩展芯片,单片机扩展口电路如图4.5所示,在本设计中,计算器输入键盘的4条行线、列线分别连接到MM74C922的X1-X4、Y1-Y4引脚,MM74C922的数据输出口与单片机的P2口相连,MM74C922的DA引脚经过一个与非门连接到单片机的/INT0脚,当MM74C922检测到键盘输入时,DA产生高电平,与之相连的/INT0检测到低电平,给单片机一个中断,单片机从P2口的低四位读入键盘上按下的键的值。 图4.5 单片机扩展口电路 MM74C922主要引脚说明: (1) Y1-Y4(脚1-脚4):4*4键盘第一列至第四列。 (2) X1-X4(脚11、10、8、7):4*4键盘第一行至第四行。 (3) DOA- DOD(Dataout A-D,脚14-17):按键之BCD码输出 (4) KBM(Keyboard Mask,脚6):内部消除开关弹跳电路所外加电容的引脚。 (5) DA(Data Available,脚12):数据有效输出脚。任一按键按下时,此脚位会输出高电位,按键释放后此脚又会恢复为低电位。 (6) OE(Output Enable,脚13):芯片使能脚,接低电位可使芯片选通。 MM74C922对各按键的响应如表4.1所示: 表4.1 按键电路如图4.6所示: 图4.6 按键电路 5 软件设计 本设计是硬件电路和软件编程相结合的设计方案,选择合适的编程语言是一个重要的环节。在单片机的应用系统程序设计时,常用的是汇编语言和C语言。汇编语言程序可读性和可移植性比较差。而C语言虽然执行效率没有汇编语言高,但语言简洁,使用方便,灵活,运算丰富,表达化类型多样化,数据结构类型丰富,具有结构化的控制语句,程序设计自由度大,有很好的可重用性,可移植性等特点。 由于现在单片机的发展已经达到了很高的水平,内部的各种资源相当的丰富,CPU的处理速度非常的快。用C语言来控制单片机无疑是一个理想的选择。所以在本设计中采用C语言编写软件程序。 5.1 AT89C51单片机中断允许控制 IE:中断允许控制寄存器如表5.1所示: 寄存器地址A8H,位寻址AFH~A8H。 表5.1 位地址 AF AE AD AC AB AA A9 A8 位符号 EA / ET2 ES ET1 EX1 ET0 EX0 EA:中断允许总控制位 当EA=0时,中断总禁止。 当EA=1时,中断总允许后中断的禁止与允许由各中断源的中断允许控制位进行设置。 EX0( EX1):外部中断允许控制位 当EX0( EX1)=0 禁止外中断 当EX0( EX1)=1 允许外中断 ET0(EX1):定时/计数中断允许控制位 当ET0(ET1)=0 禁止定时(或计数)中断 当ET0(ET1)=1 允许定时(或计数)中断 ET2:定时器2中断允许控制位,在AT89S52、AT89C52中 ES:串行中断允许控制位 当ES=0 禁止串行中断 当ES=1 允许串行中断 5.2 LCD1602控制 5.2.1 LCD1602字符发生存储器(CGROM) 1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表5.3所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A” 。 表5.2 LCD1602字符码显示图 5.2.2 LCD1602显示数据寄存器(DDRAM) 1.清屏指令 功能:清除液晶显示器,即清屏操作数为0x01。 2.进入模式设置指令 功能:设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。此设计规定光标右移、显示屏不移动,及操作数为0x06。参数设定的情况如下所示: 位名       设置 I/D     0=写入新数据后光标左移         1=写入新数据后光标右移 S        0=写入新数据后显示屏不移动  1=写入新数据后显示屏整体右移1个字符 3.显示开关控制指令 功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。此设计规定显示功能开、无光标、光标 不闪烁,操作数为0x0c。参数设定的情况如下: 位名              设置 D                0=显示功能关              1=显示功能开 C                0=无光标                   1=有光标 B                0=光标闪烁                 1=光标不闪烁 4.功能设定指令 功能:设定数据总线位数、显示的行数及字型。此设计规定数据总线为8位、显示2行,操作数为0x38。参数设定的情况如下: 位名              设置 DL               0=数据总线为4位             1=数据总线为8位 N                 0=显示1行                        1=显示2行 F                 0=5×7点阵/每字符             1=5×10点阵/每字符 5.液晶屏显示位置 显示位置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 地址(H) 第一行 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 第二行 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 功能:0x31(数字1的代码)并不能显示1出来。原因就是如果你要想在DDRAM的00H地址处显示数据,则必须将00H加上80H,即80H,若要在DDRAM的01H处显示数据,则必须将01H加上80H即80H+01H。依次类推。 5.3 计算器软件设计 现实生活中人们熟知的计算器,其功能主要如下: 1、 键盘输入; 2、 数值显示; 3、 加、减、乘、除四则运算; 4、 对错误的控制及提示; 针对上述功能,计算器软件程序要完成以下模块的设计: 1、 键盘输入检测模块 2、 算术运算模 3、 块LCD显示模块 4、 错误处理及提示模块。 5.3.1 系统总流程图 图5.1 系统总流程图 5.3.2 算术运算程序设计 算术运算程序的过程为:先判断输入的运算符是+、-、*、/ 中的哪一个,输入数值是否溢出,若溢出规定范围,则显示错误信息,若是/,则要先判断除数是否为零,为零就显示错误信息,不为零则显示运算结果,结果可显示小数点后3位,若是-,则直接显示运算结果,可显示负数。其流程图如图5.2所示。 图5.2运算流程图 5.3.3 按键程序设计 有键按下时,单片机响应外部中断0,转入外部中断0中断处理函数,在中断处理函数中完成对按键的判断,以进行下一步的程序处理。 5.3.4 显示程序设计 利用LCD静态显示,通过程序向LCD写指令字或数据使LCD完成不同功能或显示相应数据。 5.3.5 错误处理及提示程序设计 当计算器执行过程中有错误时,会在LCD上显示相应的提示,如当除数为0或数值超出范围时,计算器会在LCD上提示错误。 5.4 语音播报软件设计 录音时,按下录音键,单片机通过口线设置语音段的起始地址,再使PD端、P /R端和CE端为低电平启动录音;结束时,松开按键,单片机又让CE端回到高电平,完成一段语音的录制。同样的方法可录取第二段、第三段……。特别值得注意的是,录音时间不能超过预先设定的每段语音的时间。放音时,根据需播放的语音内容,找到相应的语音段起始地址,并通过口线送出。再将P /R端设为高电平,PD端设为低电平,并让CE端产生一负脉冲启动放音,这时单片机只需等待ISD2560的信息结束信号,即EOM的产生。信号为一负脉冲,在负脉冲的上升沿,该段语音才播放结束,所以单片机必须要检测到EOM的上升沿才能播放第二段,否则播放的语音就不连续,而且会产生啪啪声。具体的软件设计和录放音时序图见表5.3、图5.4和图5.5所示。 表5.3 ISD2560软件设计地址表 图5.3 ISD2560语音芯片放音时序图 图5.4 ISD2560语音芯片录音时序图 5.4.1 分段录放音 2500系列最多可分为600段,只要在分段录/放操作前(不少于300纳秒),给地址A0-A9赋值,录音及放音功能均从设定的起始地址开始,录音结束由停止键操作决定,芯片内部自动在该段的结束位置插入结束标志(EOM);而放音芯片遇到EOM标志即自动停止放音。 2500系列地址空间是这样分配的:地址0-599作为分段用 表 5.5 ISD2560 地址空间分配图 5.4.2 程序流程图 本设计主要通过单片机对ISD2560的控制实现指定地址入口的录音和循环播放。程序要实现下面的过程: “开始”键按下后,即系统上电后,系统初始化,然后判断开始键是否按下,如果按下则单片机控制PD,P/R引脚低电平,并指向录音地址,启动录音过程。调用录音函数,录音函数为: Void record(void) { CE = 0; //片选有效 PD = 0; //非节电模式 PR = 0 ; //录音 } 当CE=0 时芯片使能输入引脚,使能所有的的录音操作。 当PD=0 时使芯片开始工作,而进入非节电模式。 当PR=0 时开始录音,录音时,由地址线提供起始地址,直到录音持续到CE或PD变高,或自动溢出。语音播报系统总流程如图5.6所示: 图5.6 语音播报系统总流程图 在预先设定的时间内,(小于60s)结束录音,松开“开始”键单片机控制P/R引脚回到高电平,即完成一段语音的录制。之后打开外部中断1,指定放音地址,启动放音程序,其放音函数为: Void playback(void) { CE = 0; // 片选有效 PD = 0; // 非节电模式 PR = 1; } // 放音 当CE=0 时芯片使能输入引脚,使能所有的的录音操作。 当PD=0 时使芯片开始工作,而进入非节电模式。 当 PR=1时为高电平,这时选择放音,这时由地址输入提供起始地址,放音持续到EOM位标志。 每次放音结束时,EOM输出会触发单片机的外部中断1,经过适当的延时后,重新启动第二次放音,这样重复三次后关闭外部中断1,流程结束,等待下一次录音。外部中断服务子程序流程图如图5.7所示: 图 5.7 外部中断服务子程序流程图 5.5 仿真与调试 下面用KEIL uVision与 porteus仿真软件实现简易计算器的仿真与调试。 5.5.1 KEIL uVision调试 Keil是目前进行51单片机开发最常用的编译软件,操作如下: 图5.8 3.6 Keil软件主界面 首先点击Project->New Project…(Project->Open Project…为打开一个已经存在的工程),如图5.8所示。 图5.8 Keil软件打开新工程界面 点开后,在出现的对话框中选择工程存在路径,单击“保存”后,出现(如图5.9所示)界面。在此界面上选择电路板上所用的单片机型号,单击“确定”。 图5.9 选择电路板上所用的单片机型号 点击,或者File->New,便建立了一个空的文本框。将写完的程序添加到工程里面,如图3.8所示,在左边Project Workspace里的Source Group 1上右击,选择Add Files to Group ’Source Group 1’。在打开的对话框中,选择刚存的文件路径和对应的扩展名。如图5.10所示: 图5.10 添加文件到工程中 建立工程的时候,默认是不生成HEX文件的,得在编译做如下设置:单击,或者在Project Workspace里Target 1上右击,选择“Options for Target ‘Target 1’”。出现如图5.113.9所示对话框,选择“Target”“Output”按图示,进行更改,点“确定”。 图5.11 编译设置 编译输入计算器和语音的代码:点击工具栏中的按钮。如图5.12、5.13所示: 图5.12 计算器编译图 图5.13 语音编译图 5.5.2 Proteus 对于本设计的仿真 对于本设计,采用proteus软件进行仿真,能很好的模拟硬件环境。操作步骤如下: 进入proteus ISIS 集成环境,绘制原理图,将Keil编译过的HEX文件加载到单片机中,运行即可。如图5.13 图5.13原理图 计算52*3,点击键盘相应数字与符号键,在液晶屏上显示最终结果,如图5.14所示: 图5.14 仿真图 结论 我设计的课题是简易计算器并带有语音录放音播报功能,经过几个多月的思考和准备,我已经完成了预期规定的任务。通过做本设计,我能够熟练使用Protel软件,对原理图的绘制与PCB版图的设计有了进一步的了解,更加深入的学习了AT89C51单片机的各项功能。并解除了一个新的芯片ISD2560,并对其有了更深层次的了解与使用。通过使用C语言编写程序,使自己在硬件方面提高的同时提高了软件编程能力。我对我所做的简易计算器和语音播报器有如下总结: 毕业设计是在毕业前对自己大学学习的一个总结,是证明我们学习效果的一项重要指标,通过完成毕业设计,培养我们综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,对我们实际工作能力的具体训练和考察有着很好的帮助。随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为电子专业的学生来说掌握单片机的开发技术是十分重要的。 89C51单片机虽然和DSP,ARM相比处理速度和运算速度上都比较慢,但它的体积小、质量轻、价格便宜,容易获取。它的速度可以满足本次实验的要求,所以我采用AT89C51这款单片机的时候很方便。 在对计算器进行设计的时候,要充分考虑到计算溢出等状况,并且清楚计算公式,这部分主要是对C语言能力有一定的要求。而计算器仅完成简单的计算功能是不够的,为了更好的为人们服务,本设计将语音录放音播报功能融入其中,主要语音芯片为ISD2560, 他采样多电平直接模拟量存储专利技术,采用E2PROM存储方法将模拟语音数据直接写入半导体存储单元中,不需另加A/D或D/A变换来存放或重放,使的外围电路简单,而且编程简单。 通过这次的课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从而提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。所以,在以后的学习工作中,我会理论结合实际,学以致用,弥补自己的不足。 致谢 大学生活即将结束,在最后的半年生活里面,用了好几个月的时间来做毕业设计,现在终于完成了,在老师的帮助下,给自己的大学生活画了一个圆满的句号。 本次设计都是在方老师的悉心指导下完成的,在我的论文完成之际,首先,在此衷心地感谢学校给我们提供了方便的图资源,同时也要感谢指导老师给我热情的帮助和鼓励。我特别要感谢的是指导老师一直耐心的指导着我,认真帮我找出问题,并且引导我去解决问题,对我的设计提出了宝贵的意见,直到我最终完成论文。这一次的设计,它倾注着指导老师巨大的心血,相信在我以后的学习和生活中会终身受益。 在这几个多月的时间里,我也学到了很多东西,并且感受到了理论和实际操作之间存在一些差距,以及具体操作过程中的复杂性和艰难性,这将更加激发我以后更好的提高自己的动手能力,用知识来充实自己。 最后,再次感谢大学两年年来所有老师对我的培育之恩,感谢你们两年来对我的关心和鼓励,谢谢你们! 参考文献 [1] 何立民.单片机应用系统设计.北京:北京航空航天大学出版社,1996、 [2] 求是科技.单片机典型模块设计实例导航.北京:人民邮电出版社,2004 [3] 李秀忠.单片机应用技术(汇编语言).中国劳动社会保障出版社,2006.6 [4] 龚运新著.单片机C语言开发技术.北京清华大学出版社,2006.10 [3] 李萍等.智能仪器实验指导书.大连交通大学,2007.9 [3] 单片机应用技术(C语言).中国劳动社会保障出版社,2006.6 [3] 叶德明,王晓星. 计算机语音模糊模式识别.模糊系统与数学. 1992.8。 [3] 江太辉,姚天任. 语音信号线性预测参数的韧性估计.华中理工大学学报. 1996,13 (6):234-235。 [4] 李蕴华. 利用语音倒谱参数及基音信息辨认说话人.南通工学院学报. 1999,11 (8):421-423。 [5] 蒋兆远,孟建军. 车载语音系统设计.内燃机车.1996.02。 [6] 王威著.HCS12微控制器原理及应用.北京航空航天大学出版社,2007.10 [7] 周立功.单片机实验与实践.北京航空航天大学出版社,2004.3 [8] 薛钧义,张彦斌等凌阳16位单片机原理及应用.北京:北京航空航天大学出版社,2003.73 [9] 张友德,赵志英,涂时亮.单片微型机原理应用与实验.上海:复旦大学出版社,2000:12-19 [10] 李晶皎.嵌入式语音技术及凌阳16位单片机应用.北京:北京航空航天出版社,2003.11 [11] 王涌.电话报警系统的设计单片机与嵌入式系统应用.2002(3):58-61 附录 附录A 电路整体原理图 附录B 电路PCB图 附录C Proteus软件仿真图 附录D 计算器源程序: #include //头文件 #define uint unsigned int #define uchar unsigned char sbit lcden=P3^6; //定义引脚 sbit rs=P3^4; sbit rw=P3^5; sbit busy=P0^7; char i,j,temp,start; long a,b,c; //a,第一个数 b,第二个数 c,得数 uchar flag,fuhao; //flag表示是否有符号键按下,fuhao表征按下的是哪个符号 uchar code table[]={ 7,8,9,0, 4,5,6,0, 1,2,3,0, 0,0,0,0}; uchar code table1[]={ 7,8,9,0x2f-0x30, 4,5,6,0x2a-0x30, 1,2,3,0x2d-0x30, 0x01-0x30,0,0x3d-0x30,0x2b-0x30}; uchar code error_table[]={ 0x67, 0x72, 0x72, 0x6f, 0x72}; // error void delay(uchar z) //延迟函数 { uchar y; for(z;z>0;z--) for(y=0;y<110;y++); } void check() //判断忙或空闲 { do { P0=0xFF; rs=0; //指令 rw=1; //读 lcden=0; //禁止读写 delay(100); //等待,液晶显示器处理数据 lcden=1; //允许读写 } while(busy==1); //判断是否为空闲,1为忙,0为空闲 } void write_com(uchar com) //写指令函数 { P0=com; //com指令付给P0口 rs=0; rw=0; lcden=0; check(); lcden=1; } void write_date(uchar date) //写数据函数 { P0=date; rs=1; rw=0; lcden=0; check(); lcden=1; } void init() //初始化 { lcden=1; //使能信号为高电平 write_com(0x38); //8位,2行 write_com(0x0c); //显示开,光标关,不闪烁 write_com(0x06); //光标左移,显示屏不移动 write_com(0x80); //检测忙信号 write_com(0x01); //清屏 i=0; j=0; a=0; //第一个参与运算的数 b=0; //第二个参与运算的数 c=0; flag=0; //flag表示是否有符号键按下, fuhao=0; // fuhao表征按下的是哪个符号 } void INT_0(void) interrupt 0 using 0 { temp=P2&0x0f; start=1; } calculate() { switch(temp) { case 3: // 除号 write_date(0x30+table1[temp]); flag=1; fuhao=4; break; case 7: // 乘号 write_date(0x30+table1[temp]); flag=1; fuhao=3; break; case 11: // 减号 write_date(0x30+table1[temp]); flag=1; fuhao=2; break; case 12: // ON write_com(0x01); a=0; b=0; flag=0; fuhao=0; j=0; break; case 14: // 等号 { j=1; if(fuhao==1) { write_com(0x80+0x4f); //按下等于键,光标前进至第二行最后一个显示处 write_com(0x04); //设置从后住前写数据,每写完一个数据,光标后退一格 c=a+b; if(c>2147483647 || c<-2147483647) { for(i=0;i<5;i++) write_date(error_table[i]); } else { if(c==0) write_date(0x30); while(c!=0) { write_date(0x30+c%10); c=c/10; } write_date(0x3d); //再写"=" } a=0;b=0;flag=0;fuhao=0; } else if(fuhao==2) { write_com(0x80+0x4f); //光标前进至第二行最后一个显示处 write_com(0x04); //设置从后住前写数据,每写完一个数据,光标后退一格 if(a-b>=0) c=a-b; else c=b-a; if(c>2147483647 || c<-2147483647) { for(i=0;i<5;i++) write_date(error_table[i]); } else { if(c==0) write_date(0x30); while(c!=0) { write_date(0x30+c%10); c=c/10; } if(a-b<0) write_date(0x2d); write_date(0x3d); //再写"=" } a=0;b=0;flag=0;fuhao=0; } else if(fuhao==3) { write_com(0x80+0x4f); write_com(0x04); c=a*b; if(c>2147483647 || c<-2147483647) { for(i=0;i<5;i++) write_date(error_table[i]); } else { if(c==0) write_date(0x30); while(c!=0) { write_date(0x30+c%10); c=c/10; } write_date(0x3d); } a=0;b=0;flag=0;fuhao=0; } else if(fuhao==4) { write_com(0x80+0x4f); write_com(0x04); if(b==0) { for(i=0;i<5;i++) write_date(error_table[i]);} else { i=0; c=(long)(((float)a/b)*1000); if(c>2147483647 || c<-2147483647) { for(i=0;i<5;i++) write_date(error_table[i]); } else { while(c!=0) { write_date(0x30+c%10); c=c/10; i++; if(i==3) write_date(0x2e); } if(a/b<=0) write_date(0x30); write_date(0x3d); } a=0;b=0;flag=0;fuhao=0; } } } break; case 15: // 加号 write_date(0x30+table1[temp]); flag=1; fuhao=1; break; default: // 如果是数字 { if(j!=0) { write_com(0x01); // 如果是新的一次运算,那么需要先清LCD j=0; } write_date(0x30+table1[temp]); if(flag==0) a=a*10+table[temp]; else b=b*10+table[temp]; } } } main() { init(); while(1) { if(start) { calculate(); start=0; } } } 附录E 语音播报源程序: #include //头文件 #define uint unsigned int #define uchar unsigned char sbit start=P3^7; sbit CE=P2^7; //定义引脚 sbit PD=P2^6; sbit EOM=P2^5; sbit PR=P2^4; uchar count; // 重复播放次数计数器 uchar startflag; // 开始键按下标志 uchar idleflag; // 系统是否处于空闲状态标志 /*延时t毫秒*/ void delay(uint t) { uint i; while (t--) { for (i=0;i<125;i++) //对于11.0592MHz时钟,约延时1ms { } } } /*录音函数*/ void record(void) { CE = 0; //片选有效 PD = 0; //非节电模式 PR = 0 ; //录音 } /*放音函数*/ void playback(void) { CE = 0; // 片选有效 PD = 0; // 非节电模式 PR = 1; // 放音 } /*外部中断1服务子程序*/ void int1( ) interrupt 1 using 0 { EX1=0; //关外部中断1 PD=1; //进入节电状态// if(count<2) //再重播2次,共三次放音 { count++; delay(500); //延时500ms P3=P3&0XFC ; //A8=A9=0 P1=P1&0X00; //起始地址为0 playback(); //从地址0处播放 EX1=1; //开外部中断1 } else { idleflag=1; //变为空闲状态,可再次按开始键 } } /*主程序*/ void main() { EA=1; //开CPU中断 count= 0; startflag =0; idleflag=1; while(idleflag==1) { if (start) { //延时去抖动 delay(10); if (start) startflag =1; //开始键按下标志 } if (startflag==1) { do { P3=P3&0XFC; //A8=A9=0 P1 = P1&0X00; //起始地址为0 record(); // 录音开始,存放在地址0处 } while(start); //开始键松开 startflag =0; PR = 1; //结束录音 PD = 1; //进入节电状态 delay(500); //延时500ms 在播放录音 EX1 = 1; //开外部中断 P3 = P3&0XFC; //A8=A9=0 P1 = P1&0X00; //起始地址为0 playback(); //从地址0处进行第一次播放 idleflag = 0; //当前不空闲,按开始键无效 } } }袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈 芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈 AT89C51主控器 运算模块 语音模块 开关模块 显示模块 扩展模块 三.完成PCB(印刷电路板)绘制 二.产生网络表 一.绘制原理图 外部中断 服务子程序 关闭外部中断 如果count<2 Count++ 延时 打开外部中断 调用播放函数 PAGE _1234567890.doc EA PSEN 指令寄存器 指令译码器 定时控制 VSS VCC ALE RST P1.0~P1.7 P3.0~P3.7 P2.0~P2.7 P0.0~P0.7 XTAL2 XTAL1 P3驱动器 P1驱动器 DPTR ALU PSW 中断、串行口及定时器 OSC P3锁存器 缓冲器 PC增1 PC P0锁存器 SP ACC 暂存器1 4KB ROM B寄存器 暂存器2 P1锁存器 P2驱动器 P2锁存器 P0驱动器 程序地址 寄存器 RAM 128B RAM RAM�地址寄存器 寄存器
/
本文档为【基于51单片机的语音计算器设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索