资源描述
摘 要近年来随着科技的飞速发展,单片机的应用正在不断深入。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用。但仅单片机方面的知识是不够的,还应根据具体的硬件扩展和软件设计,来加以完善单片机的功能。计算器是人们的日常生活中比较常用的电子产品之一。语音技术的进展给这种应用需要提供了一种有力的技术支持,逐渐被广大用户所接受,并广泛应用于各种需要语音响应的场合。本次设计的简易计算器系统,以MCS-51系列中的AT89C51单片机为核心,通过键盘输入,能够实现简单的加减乘除四则运算,并将结果于LCD1602液晶显示器显示。另外此系统扩展了语音的录放功能,能够根据用户喜好进行短时录音和放音。硬件电路部分主要包括AT89C51单片机控制器模块、LCD1602液晶显示器模块、4*4矩阵式控制按键模块和语音播放模块等。然后通过Proteus对系统进行仿真,最后进行实物焊接与调试。仿真和调试结果表明该系统能够准确计算,响应时间较短,工作较稳定。关键词:AT89C51; LCD1602; ISD2560; 4*4矩阵式控制按键ABSTRACTIn recent years, with the rapid development of science and technology, SCM applications are deepening. In real-time detection and automatic control of microcomputer application system, the single chip microcomputer often as a core component to use. But only SCM knowledge is not enough, still should according to the specific hardware extension, and the software design, to improve the function of the microcontroller. Calculator is more common in Peoples Daily life of one of the electronic products. Speech technology progress for this application needs to provide a powerful technical support, is gradually accepted by the masses of users, and are widely applied to various needs voice response. This simple calculator system, based on the AT89C51 MCS - 51 series microcontroller as the core, through keyboard input, the arithmetic to implement a simple addition, subtraction, multiplication, and division, and will result in the LCD1602 LCD display. In addition this system extends the voice recording function, can according to users preferences for short time recording and playback. Hardware circuit part mainly consists of AT89C51 controller module, LCD1602 LCD module, 4 * 4 matrix module and voice broadcast module control buttons, etc. Then the system are simulated by Proteus, and finally carries on the real welding and debugging. The simulation and debugging results show that the system can accurately calculate, shorter response time, work more stable. Keywords:AT89C51; LCD1602; ISD2560; 4 * 4 matrix control buttons II目录1 绪论11.1 系统开发背景11.2 系统开发意义11.3 设计主要内容12 系统方案总体设计32.1简易计算器的功能介绍32.1.1 基本功能32.1.2 扩展功能32.2 方案论证与比较32.2.1 控制器部分设计方案论证与选择32.2.2 显示电路部分设计方案论证与选择42.2.3 键盘设计方案与选择52.3 系统组成63 硬件电路设计83.1 主控芯片选型及分析83.2 复位电路103.3 时钟电路113.4 显示电路113.5 语音电路123.6 按键电路174 软件设计194.1 AT89C51单片机中断允许控制194.2 LCD1602控制194.2.1 LCD1602字符发生存储器(CGROM)204.2.2 LCD1602显示数据寄存器(DDRAM)214.3 计算器软件设计224.3.1 系统总流程图234.3.2 算术运算程序设计234.3.3 按键程序设计244.3.4 显示程序设计244.3.5 错误处理及提示程序设计254.4 语音播报软件设计254.4.1 分段录放音264.4.2 程序流程图264.5 软件仿真与实物调试294.5.1 KEIL uVision调试294.5.2 四则运算、除数为0和数值溢出仿真演示:334.5.3 实物调试345 结论与展望35致谢36参考文献37附录38电路整体原理图38计算器源程序39语音播报源程序50ii1 绪论1.1 系统开发背景 随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技的术的发展,犹如雨后春笋的变化。计算器在人们的日常中视比较常见的电子产品之一,如何将常见的计算器技术更加成熟,充分利用已有的软件和硬件条件,设计出更加出色的计算器,使其更好的为各行业服务,成了如今电子领域重要的研究课题。1.2 系统开发意义人们的日常生活中已经离不开计算器了,社会的各个角落几乎都充斥着它的身影,比如各类商店,超市和办公场所等等。因此设计一款方便实用的计算器有很大的实际意义。我们常见的计算器一般只有计算功能,和简单的语音跟踪,并不能根据用户自身喜好进行录音。本设计正是出于此种创意,制作的计算器不仅能完成基本计算功能,而且还融入了语音系统于其中。即是说此计算器除能够完成一般计算功能和语音跟踪之外,还可以根据用户喜好自定义一段录音,然后播放出来。这种根据自己喜好录放音的计算器将会受到大家的喜欢。1.3 设计主要内容随着嵌入式系统(以应用为中心,以计算机技术为基础,且软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统)的快速发展,单片机本着它简单,功能强大,易于设计等优点被设计者广泛使用。本设计使用单片机作为中央控制器件,另附计算系统与语音系统为扩展完成。第一章为设计的背景、意义介绍,简明扼要的阐述设计的目的和成果。第二章为系统方案设计,主要从设计的功能,方案的确定及选择原因和系统组成来介绍。第三章为主要芯片介绍,详细阐述了芯片的内部结构和引脚分布。第四章为设计的核心,即硬件电路设计。此章将硬件电路分为若干模块,分别介绍了各模块的硬件设计电路。第五章为软件设计,主要介绍了语言的选择,控制字的确定,流程图和最后的仿真与调试。通过这几章的介绍,完成简易计算器的设计。2 系统方案总体设计2.1简易计算器的功能介绍2.1.1 基本功能根据所学知识,自行设计一个计算器,要求该计算器能够实现加减乘除四则混合运算,能够实现连续计算。2.1.2 扩展功能(1)该计算器可显示负数。(2)该计算器带有语音播报系统,可自定义录、放音。(3)该计算器能够进行错误提示和数据溢出提示。2.2 方案论证与比较2.2.1 控制器部分设计方案论证与选择根据设计要求,控制器主要用于数据的接收和发送、数据的运算和控制液晶屏显示等。针对这些,对于控制器的选择有以下三种方案。方案一:采用计算器专用芯片实现。用计算器专用芯片进行设计并编程实现。这种设计方案计算效率高、速度快、而且成本也相对较低,是厂家做计算器的最佳方案。但是计算器专用芯片的使用最主要是规范和专业,适用于复杂领域计算。现设计的计算器只需完成基本计算功能和语音模块扩展,并且由于专用芯片的使用繁琐复杂,价格昂贵,所以这个方案不可取。方案二:采用FPGA(现场可编程门阵列)作为系统的控制器。FPGA将所有器件集成到一块芯片上,体积小,节省空间,直接面向用户,使用方便,硬件测试和实现方便快捷,开发效率高,工作可靠性好。可实现各种复杂的逻辑功能,规模大,密度高,采用并行的输入输出方式,系统处理速度高,适合作为大规模实时系统的控制核心。由于本设计对数据处理速度的要求不是很高,FPGA的高速处理的优势得不到充分体现。又由于其集成度高,成本偏高。而且其芯片的引脚较多,实物电路板布线复杂,加重了电路的实际焊接的工作。这样一来FPGA的性价比太低,所以这个方案不考虑。方案三:用单片机实现。由于单片机集成了运算器电路、控制电路、存储器、中断系统、定时器/计数器以及输入/输出口电路等,所以用单片机设计控制电路省去了很多分立元器件。而且单片机是可编程芯片,可以运用C语言编写,对于一些复杂的计算功能,它可以调用C语言库函数,使编程工作变得非常简单。所以该课题用单片机实现,不仅功能易于实现,而且精确度高,稳定性好,抗干扰能力强。并且由于其成本低、体积小、技术成熟和功耗小,技术比较成熟,性价比也相当高。更重要的是本人经过四年的学习,对单片机已有深刻的理解,使用起来更加方便灵活。综上所述,通过各个方面综合比较,为达到最佳效果,我们采用方案三用单片机来设计此控制器。2.2.2 显示电路部分设计方案论证与选择方案一:数码管显示方案。使用两个四位一体动态数码管显示,具有程序简单,对外界环境要求低,易于维护,精确可靠,操作简单,显示直观的特点。但由于数码管只能显示数字和代码,不能显示汉字及常用符号等,所以此方案不考虑。方案二:采用LCD1602型液晶显示。(一)基本显示特性1、+5V电压,对比可调度;2、内含复位电路;3、提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能;4、有80字节显示数据存储器DDRAM;5、内建有160个5X7点阵的字型的字符发生器CGROM;6、8个可由用户自定义的5X7的字符发生器CGRAM。(二)接口定义LCD1602接口定义如表2-1所示表2-1 接口定义图引脚号引脚名电平输入/输出作用12345678910111213141516VssVccVeeRSR/WEDB0DB1DB2DB3DB4DB5DB6DB7AK0/10/11,100/10/10/10/10/10/10/10/1+Vcc接地输入输入输入输入/输出输入/输出输入/输出输入/输出输入/输出输入/输出输入/输出输入/输出电源地电源(+5V)对比可调电压0=输入指令1=输入数据0=向LCD写入指令或数据1=从LCD读取数据使能信号,1时读取信息,10(下降沿)执行指令数据总线line0(最低位)数据总线line1数据总线line2数据总线line3数据总线line4数据总线line5数据总线line6数据总线line7(最高位)LCD背光电源正极LCD背光电源负极综上所叙,AT1602的显示效果好、功能齐全,所以我们选用AT1602液晶显示。该液晶有16个引脚,它能显示32个字符,并且硬件电路设计简单,显示美观。2.2.3 键盘设计方案与选择方案一:独立键盘。独立键盘为一端接地,另一端接I/O口,并且要接上拉电阻。这种键盘的硬件很容易实现,但由于每一个按键就要占用一个I/O口,浪费单片机的I/O口资源,不适合本次设计,此方案不考虑。方案二:4*4矩阵式键盘。这种键盘的硬件简单,使用的I/O口比独立键盘减少一半,并且这种键盘的编程方法很常见,相对来说比较熟。所以本次设计采用4*4矩阵式键盘。2.3 系统组成本设计采用MCS-51系列单片机AT89C51来设计计算器。通过扩展必要的外围接口电路,实现对计算器的设计。由键盘输入数值,再通过80C51单片机输入到系统,并由I/O口输出,最后由LCD1602显示输入数值和输出结果,同时通过语音模块达到实时语音播报,通过语音扩展模块实现录放音的功能效果。其中,本设计以单片机为核心,包括按键模块、扩展模块、基本运算模块、语音模块和显示模块。系统框图如图2-1所示: 图2-1 系统框图硬件电路是采用结构化系统设计方法,该方法保证设计电路的标准化、模块化。硬件电路设计最重要的选择是确定用于控制的单片机,并确定与之配套的外围芯片,使所设计的系统实用性强、操作简单。软件设计的方法与开发环境的选取有着直接的关系,本系统由于是采用CMS-51系列单片机,因此使用Keil C语言进行开发,Proteus仿真软件进行仿真。此编程工具相比汇编语言具有结构化、适用范围大、可移植性好等特点。本系统软件设计采用模块化系统设计方法,先编写各个功能模块子程序,然后进行组合与调整,经过Keil C调试后,达到设计功能要求,并在Proteus中仿真。在设计中采用AT89C51单片机作为微处理器,低电压、高性能CMOS 8位单片机,片内含4K bytes的可反复擦写的Flash只读程序存储器和128 bytes的随机存取数据存储器(RAM),兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash 存储单元。硬件方面需完成包括键盘控制,LCD屏显示控制,基本运算控制、语音控制等设计。除外,还有各部件之间的连接、引脚间的连接等工作。软件方面则需完成各功能模块的程序编写,及调试和仿真工作。3 硬件电路设计硬件电路主要包括单片机为核心的复位电路、时钟电路,显示电路、语音电路和按键电路。通过各电路,详细的介绍了电路组成。3.1 主控芯片选型及分析 随着集成电路工艺的发展,出现了单片机、DSP、ARM等多种单片机。DSP:有16位的到32位之分,16位DSP适合中高级工控到简单语音/图片处理,32位DSP适合复杂语音/图片/视频等处理。ARM:是32位单片机,适合做中高级工控或简单语音/图片(不含视频)的处理。而AT89C51是一种带有4K字节闪烁可编程可擦除只读存储的低电压、高性能CMOS8位微处理器,与工业标准的MCS-51指令集和输出管脚均相兼容。MCS-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 复位电路AT89C51单片机在启动时都需要复位,使CPU及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从RST引脚输入到芯片内部的斯密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如RST引脚上有一个高电平并维持2个机器周期(24个振荡周期),则CPU就可以响应并将系统复位。如图3-3所示,其为手动复位电路,通过接通一按钮开关,使单片机进入复位状态。图3-3 复位电路3.3 时钟电路AT89C51芯片内部有一个高增益反相放大器,用于构成振荡器,反相放大器的输入端为XTAL1,输出端为XTAL2,两端跨接石英晶体及两个电容就可以构成稳定的自激振荡器。电容器C1和C2通常取22pf左右,可稳定频率并对振荡频率有微调作用。振荡脉冲频率范围为024MHz。 时钟接口电路如图3-4所示:图3-4 时钟电路3.4 显示电路本设计采用LCD1602液晶显示器来显示输出数据。 本设计通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应的数据。其接口电路如图3-5所示。图3-5 显示电路LCD部分3.5 语音电路 3.51 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-6所示: 图 3-6 ISD2560内部原理图由内部框图可知其内部集成了高精度的时钟电路,无需外部配置晶振, ISD2560可进行录、放两种操作。录入时,语音信号经过换能器MIC转变为电信号,该信号经过隔直电容去除直流分量后送入前置放大器,微弱的电信号经过前置放大后由ANAOUT脚输出,经过隔直电容后送入ANAIN脚,既而信号进入自动增益AGC放大器,信号电平得到调理,使其符合存储电路的动态范围。为使得采样信号不产生失真,采样系统必须满足奈奎斯特采样定律。ISD2560的采样频率8K, 故实际应用中,为存储不失真音频信息,放大后的信号必须经过一个低通滤波器后方可送入存储单元,该滤波器为一五极点抗干扰滤波器,高频频限为3.4K,完全满足奈奎斯特定律,该器件典型带宽为3.4K。调理完毕的信号在内部时钟的作用下以闭环控制形式送入模拟存储阵列。如3-7图所示: 图 3-7 闭环存储电路被采样信号经采样电路取样保持,同时电子被泵入模拟存储单元,此时两者被送入比较器的比较端,当两者电平相等时则停止向EPROM中写入数据,这样模拟信息得到了存储。在器件的放音模式下,录入的模拟电压在取样脉冲的作用下,顺序的从模拟矩阵中读出并恢复为原始波形,经五极点平滑滤波器后入混合器,以便与外界其他信号混合,而后送入功率放大器,并由SP+,SP-端输出,可直接驱动扬声器。ISD2560应用电压:单5 V供电,录/放时间:60S寻址空间:1024位最多语音分段:600 支持OVF 溢出ISD2560引脚图如图3-8所示:图3-8 ISD2560引脚图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)触发单片机中断,单片机在检测到此输出的上升沿后播放新的录音。语音接口电路如图3-9所示:图3-9 语音电路以下为芯片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)将此前置放大器的增益控制在-1524dB。外接话筒应该通过一系列电容交流耦合进此引脚,耦合电容值和芯片内部此引脚的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而继续进行下去,知道发生溢出为止。3.6 按键电路计算机输入数字和其他功能按键时要用到很多按键,在这种情况下,编程会很简单,但是会占用大量的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口的低四位读入键盘上按下的键的值。图3-10 单片机扩展口电路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):芯片使能脚,接低电位可使芯片选通。按键电路如图3-11所示图3-11 按键电路4 软件设计本设计是硬件电路和软件编程相结合的设计方案,选择合适的编程语言是一个重要的环节。在单片机的应用系统程序设计时,常用的是汇编语言和C语言。汇编语言程序可读性和可移植性比较差。而C语言虽然执行效率没有汇编语言高,但语言简洁,使用方便,灵活,运算丰富,表达化类型多样化,数据结构类型丰富,具有结构化的控制语句,程序设计自由度大,有很好的可重用性,可移植性等特点。由于现在单片机的发展已经达到了很高的水平,内部的各种资源相当的丰富,CPU的处理速度非常的快。用C语言来控制单片机无疑是一个理想的选择。所以在本设计中采用C语言编写软件程序。4.1 AT89C51单片机中断允许控制IE:中断允许控制寄存器如表4-1所示:表4-1 中断允许控制寄存器位地址AFAEADACABAAA9A8位符号EA/ET2ESET1EX1ET0EX0寄存器地址A8H,位寻址AFHA8H。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:串行中断允许控制位当ES0 禁止串行中断当ES1 允许串行中断4.2 LCD1602控制4.2.1 LCD1602字符发生存储器(CGROM)1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表4-2所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A” 。表4-2 LCD1602字符码显示图4.2.2 LCD1602显示数据寄存器(DDRAM)1清屏指令如表4-3所示表4-3 清屏指令指令功能指令编码RSR/WDB7DB6DB5DB4DB3DB2DB1DB0清屏0000000001功能:清除液晶显示器,即清屏操作数为0x01。2进入模式设置指令如表4-4所示表4-4 模式设置指令指令功能指令编码RSR/WDB7DB6DB5DB4DB3DB2DB1DB0进入模式设置00000001I/DS功能:设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。此设计规定光标右移、显示屏不移动,及操作数为0x06。参数设定的情况如下所示:位名 设置I/D0=写入新数据后光标左移 1=写入新数据后光标右移S0=写入新数据后显示屏不移动1=写入新数据后显示屏整体右移1个字符3显示开关控制指令如表4-5所示表4-5 开关控制指令指令功能指令编码RSR/WDB7DB6DB5DB4DB3DB2DB1DB0显示开关控制0000001DCB功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。此设计规定显示功能开、无光标、光标 不闪烁,操作数为0x0c。参数设定的情况如下位名 设置D 0=显示功能关1=显示功能开C 0=无光标 1=有光标B 0=光标闪烁 1=光标不闪烁4功能设定指令如表4-6所示表4-6 功能设定指令指令功能指令编码RSR/WDB7DB6DB5DB4DB3DB2DB1DB0功能设定00001DLNFXX功能:设定数据总线位数、显示的行数及字型。此设计规定数据总线为8位、显示2行,操作数为0x38。参数设定的情况如下位名 设置DL0=数据总线为4位1=数据总线为8位N 0=显示1行 1=显示2行F 0=57点阵/每字符1=510点阵/每字符5液晶屏显示位置如表4-7所示表4-7 液晶屏显示位置显示位置12345678910111213141516地址第一行000102030405060708090A0B0C0D0E0F第二行404142434445464748494A4B4C4D4E4F功能:0x31(数字1的代码)并不能显示1出来。原因就是如果你要想在DDRAM的00H地址处显示数据,则必须将00H加上80H,即80H,若要在DDRAM的01H处显示数据,则必须将01H加上80H即80H+01H。依次类推。4.3 计算器软件设计现实生活中人们熟知的计算器,其功能主要如下:1、 键盘输入;2、 数值显示;3、 加、减、乘、除四则运算;4、 对错误的控制及提示;针对上述功能,计算器软件程序要完成以下模块的设计:1、 键盘输入检测模块2、 算术运算模3、 块LCD显示模块4、 错误处理及提示模块。4.3.1 系统总流程图图4-1 系统总流程图4.3.2 算术运算程序设计 算术运算程序的过程为:先判断输入的运算符是+、-、*、/ 中的哪一个,输入数值是否溢出,若溢出规定范围,则显示错误信息,若是/,则要先判断除数是否为零,为零就显示错误信息,不为零则显示运算结果,结果可显示小数点后3位,若是-,则直接显示运算结果,可显示负数。其流程图如图4-2所示。图4-2运算流程图4.3.3 按键程序设计 有键按下时,单片机响应外部中断0,转入外部中断0中断处理函数,在中断处理函数中完成对按键的判断,以进行下一步的程序处理。4.3.4 显示程序设计利用LCD静态显示,通过程序向LCD写指令字或数据使LCD完成不同功能或显示相应数据。4.3.5 错误处理及提示程序设计当计算器执行过程中有错误时,会在LCD上显示相应的提示,如当除数为0时,计算器会在LCD上提示error。当参与计算的数值或结果超出范围时,计算器会在LCD上提示overflow。4.4 语音播报软件设计录音时,按下录音键,单片机通过口线设置语音段的起始地址,再使PD端、P /R端和CE端为低电平启动录音;结束时,松开按键,单片机又让CE端回到高电平,完成一段语音的录制。同样的方法可录取第二段、第三段。特别值得注意的是,录音时间不能超过预先设定的每段语音的时间。放音时,根据需播放的语音内容,找到相应的语音段起始地址,并通过口线送出。再将P /R端设为高电平,PD端设为低电平,并让CE端产生一负脉冲启动放音,这时单片机只需等待ISD2560的信息结束信号,即EOM的产生。信号为一负脉冲,在负脉冲的上升沿,该段语音才播放结束,所以单片机必须要检测到EOM的上升沿才能播放第二段,否则播放的语音就不连续,而且会产生啪啪声。具体的软件设计如表4-8所示表4-8 ISD2560软件设计地址表PDCEP/RA9A8A7A6A5A4A3A2A1A0分段数地址录音00000000000000段0x0000H00000000000011段0x0001H000000010011139段0x0027H00010000000000段0x0200H00000000000011段0x0201H000100010011139段0x0027H4.4.1 分段录放音2500系列最多可分为600段,只要在分段录/放操作前(不少于300纳秒),给地址A0-A9赋值,录音及放音功能均从设定的起始地址开始,录音结束由停止键操作决定,芯片内部自动在该段的结束位置插入结束标志(EOM);而放音芯片遇到EOM标志即自动停止放音。4.4.2 程序流程图 本设计主要通过单片机对ISD2560的控制实现指定地址入口的录音和循环播放。程序要实现下面的过程:“开始”键按下后,即系统上电后,系统初始化,然后判断开始键是否按下,如果按下则单片机控制PD,P/R引脚低电平,并指向录音地址,启动录音过程。调用录音函数,录音函数为:Void record(void) CE = 0; /片选有效 PD = 0; /非节电模式 PR = 0 ; /录音当CE=0 时芯片使能输入引脚,使能所有的的录音操作。当PD=0 时使芯片开始工作,而进入非节电模式。当PR=0 时开始录音,录音时,由地址线提供起始地址,直到录音持续到CE或PD变高,或自动溢出。语音播报流程如图4-3所示图4-3语音播报系统总流程图在预先设定的时间内,(小于60s)结束录音,松开“开始”键单片机控制P/R引脚回到高电平,即完成一段语音的录制。之后打开外部中断1,启动放音,放音函数为: Void playback(void) CE = 0; / 片选有效 PD = 0; / 非节电模式 PR = 1; / 放音当CE=0 时芯片使能输入引脚,使能所有的的录音操作。当PD=0 时使芯片开始工作,而进入非节电模式。当 PR=1时为高电平,这时选择放音,这时由地址输入提供起始地址,放音持续到EOM位标志。每次放音结束时,EOM输出会触发单片机的外部中断1,经过适当的延时后,重新启动第二次放音,这样重复三次后关闭外部中断1,流程结束,等待下一次录音。外部中断服务子程序流程图如图4-4所示:图 4-4 外部中断服务子程序流程图4.5 软件仿真与实物调试下面用KEIL uVision与 proteus仿真软件实现简易计算器的仿真与调试。4.5.1 KEIL uVision调试图4-5 Keil软件主界面KEIL是目前51单片机开发最常用的编译软件,操作如上图4-7所示。首先点击Project-New Project(Project-Open Project为打开一个已经存在的工程),如图4-6所示。图4-6 Keil软件打开新工程界面点开后,在出现的对话框中选择工程存在路径,单击“保存”后,出现如图4-7所示界面。在此界面上选择电路板上所用的单片机型号,单击“确定”。图4-7 选择电路板上所用的单片机型号点击,或者File-New,便建立了一个空的文本框。将写完的程序添加到工程里面,如图4-10所示,在左边Project Workspace里的Source Group 1上右击,选择Add Files to Group Source Group 1。在打开的对话框中,选择刚存的文件路径和对应的扩展名。如图4-8所示:图4-8 添加文件到工程中建立工程的时候,默认是不生成HEX文件的,得在编译做如下设置:单击,或者在Project Workspace里Target 1上右击,选择“Options for Target Target 1”。出现如图4-9所示对话框,选择“Target”“Output”按图示,进行更改,点“确定”。图4-9 编译设置编译输入计算器和语音的代码:点击工具栏中的按钮。如图4-10、4-11所示:图4-10 计算器编译图图4-11 语音编译图对于本设计,进入proteus ISIS 集成环境,绘制原理图,将Keil编译过的HEX文件加载到单片机中,运行即可。Protues软件仿真如图4-12所示图4-12 Proteus软件仿真图4.5.2 四则运算、除数为0和数值溢出仿真演示:(1) 加法仿真:以666和222作为加数和被加数运算,结果为888。如图4-13所示 图4-13 加法仿真(2)减法仿真:以777和3作为被减数和减数运算,结果为774。如图4-14所示 如图4-14 减法仿真(3)乘法仿真:以155和2作为乘数和被乘数运算,结果为310。如图4-15所示 如图4-15 乘法仿真(4)除法仿真:以455和5作为被除数和除数运算,结果为91。如图4-16所示 如图4-16 除法仿真(5)除数为0的情况仿真:以378和0为被除数和除数,结果为error。如图4-17所示 如图4-17 除数为0的情况仿真(6)数值溢出情况仿真:以88888888乘以66666666为被乘数和乘数,结果为overflow。如图4-18所示 如图4-18 数值溢出情况仿真4.5.3 实物调试图4-19 实物连接图5 结论与展望我设计的课题是语音计算器,经过三个月左右的思考和准备,我已经完成了预期规定的任务。通过做本设计,锻炼了我使用Proteus软件的能力,加深了我对原理图的设计、绘制、仿真和调试工作更进一步的了解。也使我感觉到AT89C51单片机强大的兼容性。此次设计使用了一个全新的芯片ISD2560,通过上网查询相关资料,对其工作性能也有了一定的了解。这次使用的软件是C语言,通过对基本模块的编写和调试修改工作,也使自己提高了不少软件编程能力。这次设计,很大程度的提高了我的理解能力和动手能力,也拓宽了知识面。在图书馆和网上查阅资料使我了解了更多知识,也方便了我以后的学习和使用。在查询资料的过程中我对单片机C语言知识有了更深入的了解,深深的感受到能把学到的知识用活,的确需要付诸很大的耐心和精力。软件仿真过程中,我的LCD老是只亮不显示,查阅了好多资料和书籍,修改过很多次电路仿真图和源程序,都未能如愿以偿。最终在指导老师的帮助下终于完成。如果不是屡败屡战的精神,真怕我当时就把它半途而废了。不过多亏老师的耐心指导和鼓励,在修改了显示模块后,成功完成预示结果。 软件焊接过程中,我仔细认真,最终以完美告终。输入程序之后,效果很完美,嘿嘿,成功总是青睐那些用心生活的人,这句话真的很对哦。通过这次的课程设计使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从而才能提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。所以,在以后的学习工作中,我会理论结合实际,学以致用,以便来弥补自己的不足。致谢本次设计是在刘老师的悉心指导下完成的,在我的论文前期,遇到了很多问题,包括选题,写报告,写程序和仿真调试的整个过程,每一步走的都很艰难。是刘老师的耐心引导和帮助,让我有勇气查阅相关资料和书籍的同时一路勇敢的走了下来。现在我终于收获了设计的果实。在这里我衷心地感谢刘老师给我的热情帮助和鼓励,感谢您一直耐心的指导着我,认真帮我找出各种相关问题,并引导我去寻找正确的解决途径,以及这么长时间以来你对我的设计提出的各个宝贵意见,我会一直记住这份情,并励志在研究生期间努力学习钻研,争取成为一名像您一样的优秀
展开阅读全文