计算器模拟系统设计-毕业设计_第1页
计算器模拟系统设计-毕业设计_第2页
计算器模拟系统设计-毕业设计_第3页
计算器模拟系统设计-毕业设计_第4页
计算器模拟系统设计-毕业设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算器模拟系统设计 学生:XXX 指导教师:XXX内容摘要:本设计是基于51系列的单片机进行的简易计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。设计过程在硬件与软件方面进行同步设计。硬件选择AT89C51单片机和74lS164,输入用44矩阵键盘。显示用5位7段共阴极LED静态显示。软件从分析计算器功能、流程图设计,再到程序的编写进行系统设计。选用编译效率最高的Keil软件用汇编语言进行编程,并用proteus仿真。关键词:LED 计算器 AT89C51芯片 74LS164 Calculator simulation system designAbstract:The design is a simple calculator based on 51 series microcontroller system design, to complete the calculator keyboard input, add, subtract, multiply, and in addition to three unsigned numeric simple four operations, and the corresponding result will be displayed on the LED.The design process of hardware and software aspects of the synchronous design. Hardware choose AT89C51 microcontroller and 74ls164-enter the 4 4 matrix keyboard. Static display with five 7-segment common cathode LED display. Software calculator function from the analysis, flow charts, design, and then program the preparation of system design. Selected to compile the most efficient Keil software in assembly language programming, and with proteus simulation.Keywords: LED calculator AT89C51 chip 74LS164目 录前言11 设计任务和要求11.1 设计要求11.2 设计方案的确定22 单片机简要原理22.1 AT89c51介绍22.2 芯片74LS164介绍53 硬件设计63.1 键盘电路的设计63.2 显示电路的设计73.3 其他电路设计73.3.1 复位、时钟电路设计73.3.2 多位数码管电路显示的驱动电路84 软件设计94.1主程序的设计94.2 显示、读键模块的设计104.3 其他内容说明114.3.1 定时查键的程序设计114.3.2 软件的可靠性设计124.4 源程序代码(见附录)125 调试与仿真125.1 Keil C51单片机软件开发系统125.2 proteus的操作125.2.1 硬件电路图的接法操作125.2.2 单片机系统PROTEUS设计与仿真过程136 结束语13附录:计算器程序代码15参考文献:2324计算器模拟系统设计前言近年来,单片机以其体积小、价格廉、面向控制等独特优点,在各种工业控制、仪器仪表、设备、产品的自动化、智能化方面获得了广泛的应用。与此同时,单片机应用系统的可靠性成为人们越来越关注的重要课题。影响可靠性的因素是多方面的,如构成系统的元器件本身的可靠性、系统本身各部分之间的相互耦合因素等。其中系统的抗干扰性能是系统可靠性的重要指标。本设计采用AT89C51 芯片,实现了利用单片机进行了一个简单计算器设计。允许对输入数据进行加减乘除运算及LED 显示。如果设计对象是更为复杂的计算器系统,其实际原理与方法与本设计基本相同。另外,实例所设计的计算器是用LED 数码管显示的,当然也可以用其他的器件显示,如LED 显示屏,这样就可以显示出更多的字符,在此基础上,还可以编写更加完善的程序来实现更多的计算功能。设计的关键所在,必须非常熟悉单片机的原理与结构,同时还要对整个设计流程有很好的把握,将单片机和其他模块完整的衔接。简易计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用和单片机完整程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。单片机课程设计既巩固了课本学到的理论,还学到了单片机硬件电路和程序设计,简易计算器课程设计通过自己动手用计算机电路设计软件,编写和调试,最后仿真,来加深对单片机的认识,充分发挥我们的个人创新和动手能力,并提高我们对单片机的兴趣,时学习查阅资料、参考资料的方1 设计任务和要求1.1 设计要求 本次课程设计,我选择的课题是单片机数字计算器硬软件设计,设计任务为: 扩展4*4键盘,其中10个数字,5个功能键,1个清零;使用五位数码管接口电路;完成十进制的四则运算(加、减、乘、除); 实现低于三位小于255数字的连续运算;使用keil软件编写程序; 最后用ptoteus仿真;1.2 设计方案的确定 按照设计要求,本课题需要使用数码管显示和扩展4*4键盘,由于实验箱的硬件电路已经固定,故选择串行静态显示和用P1口扩展4*4键盘,扩展的4*4键盘定义十个数字键,六个功能键,使用串行静态显示显示运算结果。主程序进行初始化,采用定时器0进行查键,每次按键后调用显示子程序。 2 单片机简要原理2.1 AT89c51介绍 图2.1-1 AT89C51管脚图芯片AT89C51的外形结构和引脚图如21所示。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。主要特性:8051 CPU与MCS-51 兼容4K字节可编程FLASH存储器(寿命:1000写/擦循环)全静态工作:0Hz-24KHz三级程序存储器保密锁定128*8位内部RAM32条可编程I/O线两个16位定时器/计数器5个中断源可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路管脚说明VCC:供电电压(图中未画出)GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令时才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出引脚。2.2 芯片74LS164介绍74LS164是一个串入并出的8位移位寄存器,他常用于单片机系统中,下面结束一下这个元件的基本知识。74LS164外部结构和引脚如图22所示: 图2.2-1 74LS164引脚图主要特性:串行输入带锁存 时钟输入,串行输入带缓冲 异步清除 最高时钟频率可高达36Mhz 功耗:10mW/bit 74系列工作温度: 0C to 70C Vcc最高电压:7V 输入最高电压:7V 最大输出驱动能力:高电平:0.4mA ; 低电平:8mA 引脚功能:在单片机系统中, 如果并行口的IO资源不够,而串行口又没有其他的作用, 那么我们可以用74LS164来扩展并行IO口,节约单片机资源。74LS164是一个串行输入并行输出的移位寄存器。并带有清除端。其中,Q0Q7 并行输出端 ; A,B串行输入端; MR 清除端, 为0时,输出清零。CP 时钟输入端。3 硬件设计3.1 键盘电路的设计 键盘可分为两类:编码键盘和非编码键盘。编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。通用计算机使用的标准键盘就是编码键盘。在智能仪器中,使用并行接口芯片8279或串行接口芯片HD7279均可以组成编码键盘,同时还可以兼顾数码管的显示驱动,其相关的接口电路和接口软件均可在芯片资料中得到。当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。但大多数智能仪器和电子产品的按键数目都不太多(20个以内),为了降低成本和简化电路通常采用非编码键盘。非编码键盘的接口电路有设计者根据需要自行决定,按键信息通过接口软件来获取。 本课题需要的是16个按键,故选择用非编码键盘,为了减少所占用的端口,由P1口采用4*4矩阵式键盘。具体电路连接如图3.1-1所示。 图3.1-1 4*4键盘输入3.2 显示电路的设计 当系统需要显示少量数据时,采用LED数码管进行显示是一种经济实用的方法。数码管显示有静态显示和动态显示两种方法。为了减少端口的使用,故选择静态显示,并采用共阴极接法电路。LED数码管显示块是由发光二极管显示字段的显示器件。在单片机应用中通常使用七段LED。这种显示块有共阴极和共阳极两种。3.3 其他电路设计3.3.1 复位、时钟电路设计当使用内部振荡电路时,XTAL1.XTAL2引脚外接石英晶体和微调电容,如图所示,图中C2.C3大小一般为30PF。还加了复位/备用电源引脚的接线方法,任何单片机在工作之前都要进行复位,以便CPU以及其他功能部件都处于一个确定的初始化状态,并从这个状态开始工作,也就是程序开始执行之前,单片机做好准备工作。如何进行复位呢?只用在单片机的RST引脚上保持两个。 图3.3.1-1时钟电路 图3.3.1-2复位电路机器周期(24个时钟周期)的高电平即可对单片机实现复位操作。当主电源Vcc发生掉电或者是电压降低到电平规定值时,VPD上外接的备用电源自动启用,为单片机内部RAM提供电源,以保护片内RAM中的信息不丢失,使系统在恢复上电后能正常运行。3.3.2 多位数码管电路显示的驱动电路单片机应用中只有一位的的数字显示是不常见的,即要同时驱动多个数码管显示,就必须要同时让多个数码管加上各自不同的选片段,这个属于静态显示。所谓静态显示,就是每一个显示器,都要占用单独的具有封锁功能的I/O接口用于笔画字段形代码,单片机只要把显示的字形代码发送到接口电路,直到要显示新的数据时,再发送新的字形码,因此,使用这种方法单片机中CPU的开销小,可以提高单独锁存的I/O接口电路很多,这里以常用的串并转化电路74LS164为例介绍一种常用静态显示电路。74ls16474ls16474ls16474ls16474ls164TXDRXD89C51H.AH.AH.AH.AH.A图3.3.2-1 五位数码管静态显示框图及接法5片74LS164首尾相串,而时钟端接在一起,这样,当输入8个脉冲时,从单片机RXD端输出的数据就进入到第一个74LS164中了,当第二个8个脉冲到来时,这个数据就进入了第二个片74LS164,新的数据则进入了第一个74LS164。这样,当第五个脉冲完成后,首次送出的数据被送入到最左面的74LS164中,其他数据依次出现在第一、第二、第三、第四片74LS164中。入口:把要显示的数分别放在显示缓冲区60H-64H共五个单元中,并且分别对应五个数码管LED1-LED4。出口:蒋预置在显示缓冲区中的五个数组成相应的现实字形码,然后输出到显示器中显示。 图3.3.2-2 计算器设计图4 软件设计在软件规划要求下,简易计算器的程序主要包括以下功能模块:主模块,为系统初始化。显示与读键模块,分显示子程序,判键程序段、运算操作子程序等部分;4.1 主程序的设计初始化参数清零键LED显示输入数值读取键值状态清零数值送显示缓存开始按键输入?分析键值数字键等待数值输入结果送显示缓存保存结果和功能键根据上次功能键和输入功能键否是是数字键是清零键是功能键 图4.1-1 主程序流程图 主程序主要是用来进行初始化的,调用其他子程序,清空各个标志位,清空缓存区,读取键码,判断功能,在LED上作出回应,主程序流程图如图41所示。数字送显示缓冲程序设计:简易计算器所显示的数值最大位三位。要显示数值,先判断数值大小和位数,如果是超过三位或大于255,将不显示数字。可重新输入数字,再次计算。运算程序的设计:首先初始化参数,送LED低位显示“0”,高位不显示。然后扫描键盘看是否有键输入,若有,读取键码判断键码是数字键、清零键还是功能键,是数值键则送LED显示并保存数值,是清零键则做清零处理,是功能键则又判断是“=”还是运算键,若是“=”则计算最后结果并送LED显示,若是运算键则保存相对运算程序的首地址。4.2 显示、读键模块的设计LED显示器由七段发光二极管组成,排列成8字形状,因此也称为七段LED显示器。简易计算器用到的数字09的共阴极字形代码如下表:表4.2-1 共阴极字形代码表显示字gfedcba段码001111113fh1000011006h210110115bh310011114fh4110011066h511011016dh611111017dh7000011107h811111117fh911011116fh 为了实现键盘的输入功能,每个键都有其处理子程序,为此每个键都对应一个码键码。为了得到被按键的键码,使用行扫描法识别按键。4.3 其他内容说明4.3.1 定时查键的程序设计进入定时器0的中断程序后,首先重新付初值,然后调用读键程序,如果有键按下,则判断按键是否与上次按键相同,如果相同则判断按键相应位是否为一,如果不为一,说明这不是持续按键导致的按键相应,并且进行相应的程序。如果不是则退出中断程序。 读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。第一次所有行线均输出低电平,从所有读入键盘信息(列信息);第二次所有列线均输出低电平,从所有行线读入键盘信息(行信息)。将两次读键信息进行组合就可以得到按键的特征编码,然后通过查表得到按键的顺序编码。将各特征编码按希望的顺序排成一张表,然后用当前读得的特征码来查表。当表中有该特征码时,它的位置就是对应的顺序编码;当表中没有该特征码时,说明这是一个没有定义的键码,与没有按键(0FFH)同等看待。 数字键按下则将相应的数字送入缓存区,功能键按下则执行相应的程序。 首先对数字键的程序段进行相应的设计,如果运算键(、,*,/)响应标志不为一,则将输入的数字送入第一个操作数缓存区,并且清空所有响应位。否则送入第二个操作数缓存区。其次对功能键的程序段进行相应的设计。如果功能键(、,*,/)第一次被按下,则置相应的标志位为一,并且将运算键响应标志位置一,清空第二个操作数的缓存区,为输入操作数做准备,如果是第二次按下则先调用运算操作子程序,执行上次按下的运算键的运算,置相应的标志位为一,并且将运算键响应标志位置一,清空第二个操作数的缓存区,为输入操作数做准备。 如果是C键按下,则先判断运算键响应位是否为一,如果不为一,则清空第一个操作数,否则清空第二个操作数。 如果是=键按下,则调用运算操作子程序。 4.3.2 软件的可靠性设计 提高本仪器的可靠性措施主要有: 为防止程序跑飞,软件中设置了软件陷阱 为防止键盘抖动造成按键错误,采取了软件防为了保证结果的正确性,结果溢出时显示错误代码0 4.4 源程序代码(见附录)5 调试与仿真下面用Keil与 porteus仿真软件介绍数字计算器的仿真与调试。5.1 Keil C51单片机软件开发系统采用KEIL 开发的89c51单片机应用程序步骤:在keil 集成开发环境中创建新项目(Project),扩展文件名为.UV2,并为该项目选定合适的单片机CPU器件(本设计采用ATMEL 公司下的AT89C51)用keil的文本编辑器编写源文件,可以是汇编文件(.ASM),并将该文件添加到项目中去。一个项目文件可以包含多个文件,除了源程序文件外,还可以是库文件、头文件或文本说明文件。通过keil的相关选择项,配置编译环境、连接定位器以及Debug调试器的功能。对项目中的源文件进行编译连接,生成绝对目标代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,修改源文件中的错误后重构整个项目。对没有语法错误的程序进行仿真调试,调试成功后将HEX文件写入到单片机应用系统的ROM中。5.2 proteus的操作5.2.1 硬件电路图的接法操作 放置选择(删除)元器件移动元器件缩放视图连接导线仿真,调试5.2.2 单片机系统PROTEUS设计与仿真过程Proteus强大的单片机系统设计与仿真功能,使它可成为单片机系统应用开发和改进手段之一。全部过程都是在计算机上通过Proteus来完成的。其过程一般也可分为三步:在ISIS平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气检测等。简称Proteus电路设计。在Keil平台上进行单片机系统程序设计、编辑、汇编编译、代码级调试,最后生成目标代码文件(*.hex)。简称Proteus源程序设计和生成目标代码文件。在ISIS平台上将目标代码文件加载到单片机系统中,并实现单片机系统的实时交互、协同仿真。它在相当程度上反映了实际单片机系统的运行情况。简称Proteus仿真。6 结束语基于单片机的设计至今为止已经进入了令人鼓舞的阶段,在进行了两周时间的摸索与设计,使我不仅仅对于单片机软件与硬件的常用设计与功能有所认识,还使我对于一项设计研究的制作过程所需要的详细步骤和具体实现方法有了进一步的掌握。由于我们的初步尝试,当中的缺点是无可非议地存在着。当然在这次宝贵的设计活动中,经验才是对于我们最大的收获,而且还增强了自身对未知问题以及对知识的深化认识的能力,但是,仅仅是完成了作品还是不可以自我满足的,我们要认真的思考设计过程中遇到的问题,多查资料,将理论与实际相结合思考,并在以后的学习中更要加倍注意犯过的错误。总之,这次设计从软件编写调试到软硬件联机调试,发现了自己的许多不足,在以后的学习中,我将一定回注意。课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为自动化专业的学生来说掌握单片机的开发技术是十分重要的。 我的题目是计算器模拟系统的设计,对于我们这些工科学生来说,这是一次考验。怎么才能找到课堂所学与实际应用的最佳结合点?怎样让自己的业余更接近专业?怎样让自己的计划更具有序性,而不会忙无一用?这都是我们所要考虑和努力的。这次课程设计我学到很多很多的东西,学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。这次课程设计通过自己的努力,同学的帮助,网络资料的收集,最终顺利完成了。最后,对我们的XX老师,表示感谢!谢谢他半年来对我的帮助和指导。同时,对帮助我的所有同学表示衷心的感谢!附录:计算器程序代码DBUF EQU 30HTEMP EQU 40HYJ EQU50H ;结果存放YJ1 EQU51H ;中间结果存放GONG EQU52H ;功能键存放DIN BIT0B0H ;P3.0CLK BIT 0B1H ;P3.1ORG 00HSTART:MOV R3,#0 ;初始化显示为空MOV GONG,#0MOV 30H,#10HMOV 31H,#10HMOV 32H,#00HMOV 33H,#10HMOV 34H,#10HMLOOP:CALL DISP ;PAN调显示子程序WAIT:CALL TESTKEY ;判断有无按键JZ WAIT CALL GETKEY ;读键INC R3 ;按键个数CJNE A,#0,NEXT1 ;判断是否数字键LJMP E1 ;转数字键处理NEXT1:CJNE A,#1,NEXT2LJMP E1NEXT2:CJNE A,#2,NEXT3LJMP E1NEXT3:CJNE A,#3,NEXT4LJMP E1NEXT4:CJNE A,#4,NEXT5LJMP E1NEXT5:CJNE A,#5,NEXT6LJMP E1NEXT6:CJNE A,#6,NEXT7LJMP E1NEXT7:CJNE A,#7,NEXT8LJMP E1NEXT8:CJNE A,#8,NEXT9LJMP E1NEXT9:CJNE A,#9,NEXT10LJMP E1NEXT10:CJNE A,#10,NEXT11 ;判断是否功能键LJMP E2 ;转功能键处理NEXT11:CJNE A,#11,NEXT12LJMP E2NEXT12:CJNE A,#12, NEXT13LJMP E2NEXT13:CJNE A,#13,NEXT14LJMP E2NEXT14:CJNE A,#14,NEXT15LJMP E2NEXT15:LJMP E3 ;判断是否清除键E1:CJNE R3,#1,N1 ;判断第几次按键LJMP E11 ;为第一个数字N1:CJNE R3,#2,N2LJMP E12 ;为第二个数字N2:CJNE R3,#3,N3 LJMP E13 ;为第三个数字N3:LJMP E3 ;第四个数字转溢出E11:MOV R4,A ;输入值暂存R4MOV 34H,A ;输入值送显示缓存MOV 33H,#10HMOV 32H,#10HLJMP MLOOP ;等待再次输入E12:MOV R7,A ;个位数暂存R7MOV B,#10MOV A,R4MUL AB ;十位数ADDA,R7MOV R4,A ;输入值存R4MOV 32H,#10H ;输入值送显示缓存MOV 33H,34HMOV 34H,R7LJMP MLOOPE13:MOV R7,AMOV B,#10MOV A,R4MUL ABJB OV,E3 ;输入溢出ADD A,R7JB CY,E3 ;输入溢出MOV R4,A MOV 32H,33H ;输入值送显示缓存MOV 33H,34HMOV 34H,R7LJMP MLOOPE3:MOV R3,#0 ;按键次数清零MOV R4,#0 ;输入值清零MOV YJ,#0 ;计算结果清零MOV GONG,#0 ;功能键设为零MOV 30H,#10H ;显示清空MOV 31H,#10HMOV 32H,#10HMOV 33H,#10HMOV 34H,#00HLJMP MLOOPE2:MOV 34H,#10HMOV 33H,#10HMOV 32H,#10HMOV R0,GONG ;与上次功能键交换MOV GONG,AMOV A,R0CJNE A,#10,N21 ;判断功能键LJMP JIA ;“”N21:CJNE A,#11,N22LJMP JIAN ;“”N22:CJNE A,#12,N23LJMP CHENG ;“*”N23:CJNE A,#13,N24 LJMP CHU ;“/”N24:CJNE A,#0,N25LJMP FIRST ;首次按功能键N25:LJMP DEN ;“=”N4:LJMP E3FIRST:MOV YJ,R4 ;输入值送结果MOV R3,#0 ;按键次数清零LJMP DISP1 ;结果处理JIA:MOV A,YJ;上次结果送累加器ADD A,R4 ;上次结果加输入值JB CY,N4 ;溢出MOV YJ,A;存本次结果MOV R3,#0;按键次数清零LJMP DISP1JIAN:MOV A,YJSUBB A,R4 ;上次结果减输入值JB CY,N4 ;负数溢出MOV YJ,AMOV R3,#0LJMP DISP1CHENG:MOV A,YJMOV B,AMOV A,R4MUL AB ;上次结果乘输入值JB OV,N4 ;溢出MOV YJ,ALJMP DISP1CHU:MOV A,R4MOV B,AMOV A,YJDIV AB ;上次结果除输入值MOV YJ,AMOV R3,#0LJMP DISP1DEN:MOV R3,#0LJMP DISP1DISP1:MOVB,#10MOVA,YJ;结果送累加器DIVAB;结果除10MOVYJ1,A;暂存“商”MOVA,B;取个位数MOV34H,A;个位数送显示缓存MOVA,YJ1JZDISP11;结果是否为一位数MOVB,#10MOVA,YJ1DIVABMOVYJ1,AMOVA,BMOV33H,A;十位送显示缓存MOVA,YJ1JZDISP11;结果是否为二位数MOV32H,A;百位数送显示缓存DISP11:LJMPMLOOPDISP:MOVR0,#DBUF;显示子程序MOVR1,#TEMP+4MOVR2,#5DP10:MOVDPTR,#SEGTABMOVA,R0MOVCA,A+DPTRMOVR1,AINCR0DECR1DJNZR2,DP10MOVR0,#TEMPMOVR1,#5DP12:MOVR2,#8MOVA,R0DP13:RLCAMOVDIN,CCLRCLKSETBCLKDJNZR2,DP13INCR0DJNZR1,DP12RETSEGTAB: DB3FH,06H,5BH,4FH,66H,6DH;段码定义 DB7DH,07H,7FH,6FH,77H,7CHDB39H,5EH,79H,71H,00H,40HTESTKEY:MOVP1,#0FH ;读入键状态MOVA,P1CPLAANLA,#0FH ;高四位不用RETKEYTABLE:DB0DEH,0EDH,0DDH,0BDH ;键码定义DB0EBH,0DBH,0BBH,0E7HDB0D7H,0B7H,07EH,07DHDB07BH,077H,0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论