基于单片机实现的计算器模拟系统设计毕业设计(论文)word格式_第1页
基于单片机实现的计算器模拟系统设计毕业设计(论文)word格式_第2页
基于单片机实现的计算器模拟系统设计毕业设计(论文)word格式_第3页
基于单片机实现的计算器模拟系统设计毕业设计(论文)word格式_第4页
基于单片机实现的计算器模拟系统设计毕业设计(论文)word格式_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、摘要本设计是一个实现加、减、乘、除的计算器,它的硬件主要由四部分组成,一个at89c51单片机芯片,一个八位共阳极的数码管,一个4*4的键盘,一个排阻(10k)做p0口的上拉电阻(接线图在附录2),它可以实现结果低于65535的加、减、乘、除运算。显示部分:采用动态显示,由八位共阳极数码管通过p0口,p2口与单片机相连,数码管的a,b,c,d,e,f,g,dp分别依次与单片机的p0.0p0.7相连,p0口做为单片机的字码控制端,数码管的1,2,3,4,5,6,7,8各引脚分别与单片机的p2.0p2.7相连,p2口作为数码管的位控制端。按键部分:采用4*4键盘。采用软件识别键值并执行相应的操作,

2、键盘的第0行到第3行依次与单片机的p3.4p3.7管脚相连,键盘的第0列到第3列依次与单片机的p1.0p1.3管脚相连,程序运行时依次扫描各行,查询是否有键按下,如果有则进入键盘识别处理程序,实现相应的运算,然后通过数码管输出结果,如果没有按键就调用显示程序显示一个0,等待按键按下,在进入按键扫描程序。 执行过程:开机即显示0,等待键入数值,当键入数字,将通过数码管显示出来,在键入、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当在键入数值后将显示键入的数值,按等号就会在数码管上输出运算结果。注:结果不能超出65535。(具体操作见后面仿真图)目录1 概述 1.1mcs

3、-51单片机在自动化仪表中的作用31.2掌握单片机仿真软件proteus的使用方法31.3设计方法31.4基本功能42 系统总体方案及硬件设计 2.1计算器总体思想52.2硬件的选择与连接63 软件设计 3.1显示程序设计7 3.2键盘识别程序设计8 3.3运算程序设计10 3.4风鸣器程序设计104 proteus软件仿真 125课程设计体会 16参考文献 18附1:源程序代码 19附2:计算器模拟系统电路图 311 概述1.1mcs-51单片机在自动化仪表中的作用单片机体积小,功耗小,价格低,用途灵活,无处不在,属专用计算机。是一种特殊器件,需经过专门学习方能掌握应用,应用中要设计专用的硬

4、件和软件。近年来,单片机以其体积小、价格廉、面向控制等独特优点,在各种工业控制、仪器仪表、设备、产品的自动化、智能化方面获得了广泛的应用。与此同时,单片机应用系统的可靠性成为人们越来越关注的重要课题。影响可靠性的因素是多方面的,如构成系统的元器件本身的可靠性、系统本身各部分之间的相互耦合因素等。其中系统的抗干扰性能是系统可靠性的重要指标。1.2 掌握单片机仿真软件proteus的使用方法 proteus 软件具有强大的多窗口、多文件的编辑器、微控制器的集成开发环境、一系列的集成开发工具、图形界面调试器、混合模式的模拟及数字电路仿真器、代码质量检查器等。硬件和应用软件能进行并发仿真。最主要的一点

5、是它能以单片机为核心仿真出包括模拟元器件在内的一些动态外设(按键,led ,液晶显示器等) ,具有图形显示和波形显示的功能。因此,proteus 不仅仅是一个微处理器的仿真软件,它所支持的大量常用芯片模型为单片机和其他芯片协同仿真复杂的完整系统提供了极大的方便。proteus 在完整的系统仿真方面是其他单片机仿真软件所不能独立完成的。这时,proteus 为我们提供的不仅仅是一个单片机的仿真环境,称其为一个虚拟的单片机实验室是完全合适的,只要我们能充分的利用proteus提供的实验器件就可以完成一个具有相当集成性的单片机系统。1.3设计方法本设计是一个实现加、减、乘、除的计算器,它的硬件主要由

6、四部分组成,一个at89c51单片机芯片,一个八位共阳极的数码管,一个四乘四的键盘,一个排阻做p0口的上拉电阻(接线图在附录2),它可以实现结果低于65535的加、减、乘、除运算。采用动态显示,由八位共阳极数码管通过p0口,p2口与单片机相连,数码管的a,b,c,d,e,f,g,dp分别依次与单片机的p0.0p0.7相连,p0口做为字码控制端,数码管的1,2,3,4,5,6,7,8各引脚分别与单片机的p2.0p2.7相连,p2口做为数码管的位控制端,动态显示是每次数码管只显示一位,由于人的视觉停留是0.05到0.2秒之间,当数码管依次点亮各个位时,使循环的频率高于人的视觉停留时间,人们就会认为

7、数码管是同时点亮的,就可以达到动态显示的效果。采用4*4键盘。采用软件识别键值并执行相应的操作,键盘的第0行到第3行依次与单片机的p3.4p3.7管脚相连,键盘的第0列到第3列依次与单片机的p1.0p1.3管脚相连,程序运行时依次扫描各行,查询是否有键按下,如果有则进入键盘识别处理程序,实现相应的运算,然后通过数码管输出结果,如果没有按键就调用显示程序显示一个0,等待按键按下,在进入按键扫描程序。这样循环执行。1.4基本功能1.计算器可显示8位数字,开机运行时,只有数码管最低位显示为“0”,其余位全部不显示;2.第一次按下时,显示“d1”;第二次按下时,显示“d1d2”;第三次按下时,显示“d

8、1d2d3”,8个全显示完毕,再按下按键下时,给出“嘀”提示音,并且输入的第九个数不接收,仍然显示原来的八位数;3.可以对计算结果小于65535的两个无符号数进行、-、*、/运算,并显示计算结果,如果输入的预计算的数超过65535,则运算时报错,显示“error”,如果结果超过65535仍然报错,显示“error”,以提示使用者输入错误,应清零后在从新输入。4.运算时,如果输入错了可按清零键清零,重新输入数据,运算过程中,如果运算的表达式是加、减、乘、除混合运算,可以连续运算,不需按等号键,运算规则是从左到右,不区分运算等级,即、-、*、/认为是同级别的运算。2 系统总体方案及硬件设计 2.1

9、计算器总体思想 很高兴做这个课程设计,因为学了半学期的单片机终于可以练练手了,我特别喜欢单片机,特喜欢编程,一直很向往编程,这是我编的第一个程序,我想这将是我编程生涯的开始,在编这个程序时,遇到了很多麻烦,我没有气馁过,因为我对自己有信心,终于如愿完成了课程设计。 总结自己的编程思想是这样的,首先得设计一个显示程序,这个显示程序应是动态显示,思路有两个:(1)让p2口做位扫描,p0口做段码输出,在调用显示程序时,p2口循环选通数码管每一位的,p0口也依次循环输出相对应位的代码。如何控制数字显示呢?可先将09、熄灭,11个段码放入列表中,在设置八个显示缓冲区,数码管要显示的数字就存放在这八个单元

10、中,通过控制八个缓冲区的内容来控制输出的数字。如:要显示的是1234则将缓冲区从低位开始依次放入04h、03h、02h、01h剩余四位放入11h(代表数码管熄灭的代码),要注意的是,当调用显示程序时,通过程序根据八个数码管缓冲区的数字调用相对应的代码就可以循环输出,但是我们看到的是同时显示1234,因为视觉停留的原故。当它的循环频率大于人的视觉停留时间,人们就认为它是同时显示的。虽然八个数码管都输出了,但是高四位送的代码是熄灭,即不显示,当不输入数字时使八个缓冲区初始化为,第一位放00h,其余放11h,就可以只显示0,等待输入数据,这样就控制了显示位数实现了动态显示。(2)让p2口做位扫描,p

11、0口做段码输出,设置一个单元用来记录输入数字的位数,这样可以不用循环扫描每一位,而是根据输出位数判断扫描哪些位。如上面的例子,当显示1234时,不用在向高四位送入11h,也不需要熄灭的代码了。调用显示程序时先选通第一位(最低位),送出代码1,然后判断是否显示完毕,(通过记录数字个数单元的内容减一是否得0来判断),如没显示完则显示下一位,如显示完则跳出。在本设计中选用后者。其次是设计键盘扫描程序,这里采用4*4矩阵键盘,通过软件识别,行和列可接在同个端口上,也可接在不同端口上,本设计行接在p3口的高四位,列接在p1口的低四位,通过循环扫描行,读取列的数据判断是否有键按下,如果有则调用按键识别程序

12、识别是哪个键,执行相应的操作,按键识别是根据按键时得到的列代码与行代码组合,来判断是哪个键的。按键识别后,如果是数字键则直接放入数码管显示缓冲区,如果再次有数字键按下,则应将缓存区的数字向高位移一位,将刚输入的数放入最低位,并且记录按键次数,每输入一个键值都调用显示程序显示出来,如果是运算符,则执行相应的运算,然后在调用显示程序显示结果。最后是运算程序的加入,运算程序很简单,只要把、-、*、/分别做成模块,用到时即可调用,本设计的难点是键盘识别和数值显示,因为这里边涉及到键盘输入的数值在内部要转换成10进制运算,运算结果要转换成各个位的显示数字输出。2.2硬件的选择与连接单片机选择at89c5

13、1,数码管选择共阳机八位数码管,键盘4*4矩阵键盘,p0口接上拉电阻,数码管的a,b,c,d,e,f,g,dp分别依次与单片机的p0.0p0.7管脚相连,p0口做为单片机的字码控制端,数码管的1,2,3,4,5,6,7,8各引脚分别与单片机的p2.0p2.7管脚相连,键盘的第0行到第3行依次与单片机的p3.4p3.7,键盘的第0列到第3列依次与单片机的p1.0p1.3,at89c51接12mhz晶振。p3.0接风鸣器。3 软件设计 3.1显示程序设计显示程序流程图如图1。我的显示程序是这样设计的,因为考虑到显示程应具有通用性,在不进行输入时显示0,输入时显示输入的数字或运算结果,而且要使8个数

14、码管同时显示不同的数字,选用动态显示应是最佳的。将30h-37h单元设置成数码管显示缓冲区,分别存放数码管各个位要显示的数据,40h单元作为输入数据的计数单元。因为运算结果超出范围时应报错,使数码管显示“error”即可,将数码管的09的代码和“error”代码存于lable1列表中。当调用显示程序时,显示程序根据40h单元的记录的个数决定数码管显示的位数。如果输入错误将在数码管上显示“error”。这样就得到了显示程序的入口:30h-37h,依次存放个位千万位。 40h,存放输出的数字位数。 出口:数码管,p0输出字段码 p2输出位选码。 数码管显示判断显示是否完毕 返回否是初始化r0缓冲区

15、指针,r1位控制,r5循环控制次数r0=30h,r1=#80h,r5=40h开始 图1数码管显示流程图3.2键盘识别程序设计:键盘识别是这样设计的,首先将p3口送0eoh,将p1口先送1在读p1口的数据当p1口低四位全一时说明没有键按下,在扫描下一行,如果p1口不全一,则有键按下,将p3口高四位与p1口低四位组合成一个字节,放入r5寄存器中,按键去抖,判键是否松开,如松开则将得到的键值判别是哪个键,如果是数字键则首先将其对应的数字(按键代码对应如下表)放入缓冲区30h,同时将将键值放入结果缓冲区,并调用显示程序,显示键值,在调用扫描键盘程序,如果在有键值输入则将原来的数值在数码管显示缓冲区向高

16、位依次移一位,将刚键入的数值放入最低位,并将原来的数值乘十加上刚键入的数放人结果缓冲区,然后调用显示程序,如果是运算符,则记录运算符标志,加法用01h表示,减法用02h表示,乘法用03h表示,除法用04h表示,并将结果缓冲区的数转移到中间结果缓冲区,将结果缓冲区清零,等待输入运算数据,当按等号时,根据记录的运算符标志,判断是那种运算,执行运算将结果依次除10取余数放入结果显示缓冲区,调用显示程序。依次循环执行。(流程图如下)键码 键值键码 键值ee7be1 ed8bd2 eb9bb3 e7/b7- de47ecl dd57d0 db67b= d7*77+ 开始扫描第一行是否有键按下y判断键值n

17、扫描第二行数字键放入显示缓冲区运算符修改标志位调用显示程序显示数字进行运算运算结果放入显示缓冲区是否有键按下n扫描第三行是否有键按下n扫描第四行是否有键按下n 图2 键盘扫描流程图3.3运算程序设计运算程序分四个模块,即加减乘除。分别采用两字节运算,因此运算结果不能超出两字节,否则会溢出。溢出时显示error。加法程序:入口:r0被加数低位字节地址指针,r1加数低位字节地址指针,r3字节数。出口:r0和值地位字节地址指针,r3和值字节数。运算时用r0,r1间接寻址,从低字节算起,高字节采用带进位加(addc),计算结果回送到r0所指的单元中,并将和字节数放入r3单元中,如果r3大于等于3说明溢

18、出。减法同加法类似,入口:r0被减数低位字节地址指针,r1减数低位字节地址指针,r3字节数。出口:r0和值地位字节地址指针,r3和值字节数。只是判断溢出是通过cy位,如果运算后cy位有借位,则将07h位置1,否则置0。乘法程序:入口:r3,被乘数低位地址字节,r2,被乘数高位地址字节,r7,乘数低位地址字节,r6,乘数高位地址字节。出口:r4,r5,r6,r7结果字节由高到低。通过判断r5是否为零就可以知道运算结果是否溢出,如果溢出调用溢出程序。 除法程序:入口:被除数放在r4r5r6r7,r4r5,内容为零,r4高r5低,除数放在r2r3,r2高r3低。出口:商放在r6r7,r6高r7低,余

19、数放在r4r5,r4高r5低 。3.4风鸣器程序设计 这个程序是实现当输入八个数字时,如果在输入数字它便鸣叫,提示使用者输入以满,不允许在键入值,只需在键盘程序中,加入判别输入是否超过八个如果超过则调用风鸣器程序,使p3.0由低电平转入高电平,延迟1ms返回。输入等号将运算结果放入缓冲区并调用显示程序显示结果开始得到键值判断是否是第一个数y将数值直接转移到结果缓冲区,38h单元开始的四个单元里n数否按过运算符将上次的数值乘10加上本次输入放入结果缓冲区(38h单元开始)ny判断是是哪种运算符标志位记录运算种类如:加法 41h=#01h减法 41h=#02h乘法 41h=#03h除法 41h=#

20、04h将第一次键入的数(在38h起始的单元)转移到中间结果缓冲区自3ch开始的单元是否键入第二次数值ny等待键入数值将数值放入结果缓冲区38h其实单元里 图3运算程序流程图4 proteus软件仿真1运行显示0,等待键入数值。2键入被加数1000,显示1000。键入“+”显示原来键入的数值,等待键入加数。键入加数5000,显示5000。键入“”显示结果,6000。3键入清零键“cl”。4键入被减数4000,显示4000。键入“”显示上次键入的值,等待键入减数键入减数2000,显示录2000。键入等号“”显示结果2000。5清零后键入被乘数5000,显示5000。键入乘号“*”,显示上一次键入的

21、数,等待键入乘数,键入乘数“2”显示2。键入等号“”显示结果10000。6清零后键入被除数3000,显示3000。键入除号“/”显示上次键入的数,等待键入除数,键入除数50,显示50。键入等号“”显示结果60。7当运算的数值超出范围时将出现的信息。如:输入70000,后在按“+”时显示eeror因为7000065535所以报错,显示:“error”。5课程设计体会课程设计终于作完了,我足足花了一周时间,做这次课程设计,我很疲惫,但我确很高兴因为通过这次用单片机实现计算器的课程设计,加深了我对单片机这门课程的了解。学以致用,不仅让我回顾了过去的所学,更使我了解了我现在的不足,弥补了不为我知的知识

22、漏洞。更重要的是在实践中我们可以形成更加科学和理智的认知,不断形成更为合理和具有科学性的思想方式。在这次设计的过程中,我借助了互联网等途径查询相关信息,并在图书馆查阅了大量单片机资料。这不但开拓了我有关单片机领域的眼界,而且完善了我以往的知识体系。在这次课程设计中遇到了很多问题,这是些问题,虽然有些问题已经在课本中讨论过但是,不真正的实践,就不能真正理解其中的含义,在第一天,我很兴奋,因为我很喜欢编程,但是还没有真正的编很长的程序,这次终于可以锻炼一下了。课程设计的画图还是很容易的,我认真构思了一下,确定了那个端口接数码管那个接键盘很轻松就完成了,接线和编程是密不可分的,我接线是将p3口高四位

23、作为行扫描,p1口的底四位作为列扫描,后来一想,其实本可以接在一个端口上的但是由于程序写了很长了,就没有改动,不管怎么接不影响效果,图很轻松画好了,在画图的关键就是考虑p0口要有上拉电阻,不然不能输出高电平,在画图的过程中,可以加深对proteus的理解,和提高了基本工具的应用熟练程度,这是在今后学习中不可缺少的。接着进入编程阶段,在编程时,我范了一个错误,就是没有写流程图,因此写起程序很没有方向感,虽然在课本了说过要写流程图,但是一到了实践就忘了,后来同学提醒,才恍然大悟,于是又列写程序流程图。这个流程图很关键,如果列不好程序走向就会发生混乱,在编程第三天时,我又范了第二个大错误,就时太急于

24、求成,我写了很长的程序,几乎把显示程序,键盘查询程序都写完了,才进行调试,在这调试过程中一些小的问题都很容易克服,也很轻松编译通过了,就是运行不能得到预期的效果,因为程序太长很难知道错误在那里,后来同学提醒,应该先编译个小的简单的程序,在慢慢往上加程序,不断完善。于是,我又更改方案,先编写个显示程序,实现动态显示,调试好后,在编写键盘程序,因为键盘每一行扫描的过程都是一样的,因此只需要使第一行调试通过就能很好的使其它行通过,调试好键盘后。接着出现的问题是如何使运行时首先显示0,因为显示程序只有一个,必须使这个程序具有通用性,后来我想到了解决方法,就是设计个计数个数单元,(40h),当此单元为零

25、,说明没有输入,则只使显示程序执行一次循环,即,只显示零,然后跳出,等待输入,当输入数据时40h单元便记录个数,根据数据个数决定循环几次,为了能区分数字和运算符,我又增设了运算符标志,(41h)此单元的内容如果是1表示加法,2表示减法,3表示除法,4表示乘法。这样就不会在运算上出现混乱。在第五天时,我已经实现了简单的一个字节的加、减、乘、除运算,后来我又修改了一下使运算扩大一个字节,这样足以满足课程设计的要求了。在这次课程设计我学到了很多东西,不仅是编好一个程序,更重要的使学会了一种编程思想,有了一种好的编程思想,就可以让单片机,很听话,想做什么就可以做什么。我在实践的同时加深了对课本知识的认

26、识,使自己的思维能力进一步得到提高。单片机作为电气自动化专业的专业核心课程,在本专业学习中起着承上启下的关键作用。在这此课程设计中,我在学习单片机知识的同时,也复习了以前有关的电路知识,使我过去所学与现在所知融会贯通,真正锻炼和提高了我运用知识的综合能力。参考文献1 何立民.mcs-51系列单片机应用系统设计m.北京:北京行天航空工业大学出版社,1990.143.160.2 李华.mcs-51系列单片机实用接口计数m.北京:北京行天航空工业大学出版社,1993.148-158.3 张毅刚、彭喜源、谭晓昀、曲春波编著。mcs-51单片机应用设计。哈尔滨工业大学出版社4 蔡明生主编。电子设计。高等

27、教育出版社。附1 源程序代码设30h-37h单元为八个数码管从地位到高位所显示的内容.383fh结果缓冲区。40h输入数据个数,41h加减乘除标志位 5053行地址。42单元放运算符次数标志位。org 0000h ljmp startorg 0030h start:mov 30h,#00h ;初始化定义; mov 38h,#00h mov 39h,#00h mov 3ah,#00h mov 3bh,#00h mov 3ch,#00h mov 3dh,#00h mov 3eh,#00h mov 3fh,#00h mov 40h,#00h mov 41h,#00h mov 42h,#00h mov

28、 43h,#00h mov 44h,#00h mov 50h,#0e0h ;行定义; mov 51h,#0d0h mov 52h,#0b0h mov 53h,#70h loop3: acall display mov r0,#50h ;r01表示启用r0;寻键值; mov r7,#04h ;r71;循环4次; loop1:mov a,r0 ;a1;r0行号; mov p3,a ;a2; mov a,#0ffh ; a1; mov p1,a ;a2; mov a,p1 ;a1;读p1口; anl a,#0fh mov r5,a ;a2;cjne a,#0fh,loop2 ;判断有无按键; inc

29、 r0 djnz r7,loop1 ;r72; jmp loop3 ; loop2:mov r4,#0a0h ; tff:acall delay1ms ;延迟10ms; djnz r4,tff; ss: mov a,#0ffh mov p1,a mov a,p1 ;判键是否松开; anl a,#0fh cjne a,#0fh,ss mov a,42h ;判断是否按/号; mov r1,#30h ;显示区低字节地址指针; cjne a,#01h,next1 mov 40h,#00h mov 42h,#00h next1: cjne r0,#0e0h,row2key ;111111;r0行号; m

30、ov a,r5 ;a1; r5列号; orl a,r0 ;r02表示停用r0; cjne a,#0eeh,key2 ;a2; mov a,40h cjne a,#08h,tw1 acall warnning jmp loop3 tw1:inc 40h mov a,#07h mov 43h,a acall move acall change11 jmp loop3 key2:cjne a,#0edh,key3 mov a,40h cjne a,#08h,tw2 acall warnning jmp loop3 tw2: inc 40h mov a,#08h mov 43h,a acall mov

31、e acall change11 jmp loop3 key3:cjne a,#0ebh,key4 mov a,40h cjne a,#08h,tw3 acall warnning jmp loop3 tw3:mov a,#09h inc 40h mov 43h,a acall move acall change11 jmp loop3 key4:acall judeg ;计算结果放入3ch起始的单元; acall change ;将结果放入显示缓冲区; mov 42h,#01h mov 41h,#04h ;04 表示除法; jmp loop3row2key:cjne r0,#0d0h,row

32、3key ;2222222222; mov a,r5 orl a,r0 cjne a,#0deh,key5 mov a,40h cjne a,#08h,tw4 acall warnning jmp loop3 tw4:inc 40hmov a,#04hmov 43h,aacall moveacall change11 jmp loop3 key5:cjne a,#0ddh,key6 mov a,40h cjne a,#08h,tw5 acall warnning jmp loop3 tw5:mov a,#05hinc 40hmov 43h,aacall moveacall change11 j

33、mp loop3 key6:cjne a,#0dbh,key7 mov a,40h cjne a,#08h,tw6 acall warnning jmp loop3 tw6:mov a,#06hinc 40hmov 43h,aacall moveacall change11jmp loop3 key7:acall judeg ;计算结果放入3ch起始的单元; acall change ;将结果放入显示缓冲区; mov 42h,#01h mov 41h,#03h ;03表示乘法; jmp loop3row3key:cjne r0,#0b0h,row4key ;3333333333333; mov

34、 a,r5 orl a,r0 cjne a,#0beh,key8 mov a,40h cjne a,#08h,tw7 acall warnning jmp loop3 tw7:mov a,#01hinc 40hmov 43h,aacall moveacall change11jmp loop3 key8:cjne a,#0bdh,key9 mov a,40h cjne a,#08h,tw8 acall warnning jmp loop3 tw8:mov a,#02hinc 40hmov 43h,aacall moveacall change11 jmp loop3 key9:cjne a,#

35、0bbh,key10 mov a,40h cjne a,#08h,tw9 acall warnning jmp loop3 tw9: mov a,#03hinc 40hmov 43h,aacall moveacall change11 jmp loop3 key10:acall judeg ;放入3ch起始的单元; acall change ;将结果放入显示缓冲区; mov 42h,#01h mov 41h,#02h ;02 表示减法; jmp loop3row4key:mov a,r5 orl a,r0 ;444444444444; cjne a,#7eh,key11 jmp start ;

36、clear; key11:cjne a,#7dh,key12 mov a,40h jz qq cjne a,#08h,tw10 acall warnning jmp loop3 tw10:mov a,#00hinc 40hmov 43h,aacall moveacall change11 qq: jmp loop3 key12:cjne a,#0bbh,key13 ;equel; acall judeg ;计算结果放入3ch起始的单元; acall change ;将结果放入显示缓冲区; jmp loop3 key13:acall judeg ;计算结果放入3ch起始的单元; acall ch

37、ange ;将结果放入显示缓冲区; mov 42h,#01h mov 41h,#01h ;01表示加法; jmp loop3move:mov r1,#30h mov r6,40hddd: xch a,r1 ;交换指令; nop nop nop nop inc r1 ;r1=30h djnz r6,ddd ret加法程序:人口:r0,被加数低位字节地址指针,r1,加数低位字节地址指针,r3,字节数出口:r0,和值地位字节地址指针,r3,和值字节数。makeadd:mov a,r0 ;保存地址; mov r2,a mov a,r3 mov r7,a clr c lop:mov a,r0 addc

38、a,r1mov r0,ainc r0inc r1djnz r7,lopjnc nextinc r3mov r0,#01h next:mov a,r2 ;回复地址; mov r0,aret减法程序:入口:r0,被减数低位字节地址指针,r1,减数低位字节地址指针,r3,字节数出口:r0,差值地位字节地址指针,r3,差值字节数。makesub:clr 07h mov a,r0 mov r2,amov a,r3mov r7,aclr c lop1:mov a,r0 subb a,r1mov r0,ainc r0inc r1djnz r7,lop1jnc lop2setb 07h lop2:mov a,

39、r2 mov r0,a ret乘法程序: 入口:r3,被乘数低位地址字节,r2,被乘数高位地址字节,r7,乘数低位地址字节,r6,乘数高位地址字节,出口:r4,r5,r6,r7结果字节由高到低makemul:mov a,r3 mov b,r7mul abxch a,r7mov r5,bmov b,r2mul abadd a,r5mov r4,aclr aaddc a,b mov r5,amov a,r6mov b,r3mul abadd a,r4xch a,r6xch a,baddc a,r5mov r5,amov f0,cmov a,r2mul abadd a,r5mov r5,aclr a

40、mov acc.0,cmov c,f0addc a,bmov r4,aret除法程序:入口:被除数放在r4r5r6r7,r4r5,内容为零,r4高r5低,除数放在r2r3,r2高r3低,出口:商放在r6r7,r6高r7低,余数放在r4r5,r4高r5低makediv:mov a,r5 clr csubb a,r3mov a,r4subb a,r2jnc div11mov b,#16div22:clr c mov a,r7rlc amov r7,amov a,r6rlc amov r6,amov a,r5rlc amov r5,axch a,r4rlc axch a,r4mov f0,cclr

41、csubb a,r3mov r1,amov a,r4subb a,r2jb f0,div33 jc div44 div33:mov r4,a mov a,r1 mov r5,a inc r7 div44:djnz b,div22 clr f0 ret div11:setb f0 retchange11: mov r0,#40h cjne r0,#01h,ta1 ;change; mov 38h,43h jmp ta2 ta1:mov r3,38h mov r2,39h mov r6,#00h mov r7,#0ah acall makemul mov 39h,r6 mov 38h,r7 mov 3ah,r5 mov 3bh,r4 mov r0,#38h mov r1,#43h mov r3,#02h ac

温馨提示

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

评论

0/150

提交评论