首页 模拟计算器数字输入及显示课程设计

模拟计算器数字输入及显示课程设计

举报
开通vip

模拟计算器数字输入及显示课程设计模拟计算器数字输入及显示课程设计 摘要 本设计是一个实现加、减、乘、除的计算器,它的硬件主要由四部分组成,一个AT89C51单片机芯片,一个八位共阳极的数码管,一个4*4的键盘,一个排 ),它可以实现结果低于65535的阻(10K)做P0口的上拉电阻(接线图在附录2 加、减、乘、除运算。 显示部分:采用动态显示,由八位共阳极数码管通过P0口,P2口与单片机相连,数码管的A,B,C,D,E,F,G,DP分别依次与单片机的P0.0—P0.7相连,P0口做为单片机的字码控制端,数码管的1,2,3,4,5,6,7,8...

模拟计算器数字输入及显示课程设计
模拟计算器数字输入及显示课程设计 摘要 本设计是一个实现加、减、乘、除的计算器,它的硬件主要由四部分组成,一个AT89C51单片机芯片,一个八位共阳极的数码管,一个4*4的键盘,一个排 ),它可以实现结果低于65535的阻(10K)做P0口的上拉电阻(接线图在附录2 加、减、乘、除运算。 显示部分:采用动态显示,由八位共阳极数码管通过P0口,P2口与单片机相连,数码管的A,B,C,D,E,F,G,DP分别依次与单片机的P0.0—P0.7相连,P0口做为单片机的字码控制端,数码管的1,2,3,4,5,6,7,8各引脚分别与单片机的P2.0—P2.7相连,P2口作为数码管的位控制端。 按键部分:采用4*4键盘。采用软件识别键值并执行相应的操作,键盘的第0行到第3行依次与单片机的P3.4—P3.7管脚相连,键盘的第0列到第3列依次与单片机的P1.0—P1.3管脚相连,程序运行时依次扫描各行,查询是否有键按下,如果有则进入键盘识别处理程序,实现相应的运算,然后通过数码管输出结果,如果没有按键就调用显示程序显示一个0,等待按键按下,在进入按键扫描程序。 执行过程:开机即显示0,等待键入数值,当键入数字,将通过数码管显示出 、/运算符,计算器在内部执行数值转换和存储,并等待再来,在键入,、-、* 次键入数值,当在键入数值后将显示键入的数值,按等号就会在数码管上输出运算结果。注:结果不能超出65535。(具体操作见后面仿真图) 目录 1 概述 1.1MCS-51单片机在自动化仪表中的作用„„„„„„„„„„„„„„„3 1.2掌握单片机仿真软件Proteus的使用 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 „„„„„„„„„„„„„3 1.3设计方法„„„„„„„„„„„„„„„„„„“„„„„„„„„3 1.4基本功能„„„„„„„„„„„„„„„„„„„„„„„„„„„4 2 系统总体 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 及硬件设计 2.1计算器总体思想„„„„„„„„„„„„„„„„„„„„„„„„5 2.2硬件的选择与连接„„„„„„„„„„„„„„„„„„„„„„„6 3 软件设计 3.1显示程序设计„„„„„„„„„„„„„„„„„„„„„„„„„7 3.2键盘识别程序设计„„„„„„„„„„„„„„„„„„„„„„„8 3.3运算程序设计„„„„„„„„„„„„„„„„“„„„„„„„„10 3.4风鸣器程序设计„„„„„„„„„„„„„„„„„„„„„„„„10 4 Proteus软件仿真 „„„„„„„„„„„„„„„„„„„„„„„„12 5课程设计体会 „„„„„„„„„„„„„„„„„„„„„„„„„16 参考文献 „„„„„„„„„„„„„„„„„„„„„„„„„„„„18 附1:源程序代码 „„„„„„„„„„„„„„„„„„„„„„„„„19 附2:计算器模拟系统电路图 „„„„„„„„„„„„„„„„„„„„31 - 1 - 1 概述 1.1MCS-51单片机在自动化仪表中的作用 单片机体积小,功耗小,价格低,用途灵活,无处不在,属专用计算机。是一种特殊器件,需经过专门学习方能掌握应用,应用中要设计专用的硬件和软件。 近年来,单片机以其体积小、价格廉、面向控制等独特优点,在各种工业控制、仪器仪表、设备、产品的自动化、智能化方面获得了广泛的应用。与此同时,单片机应用系统的可靠性成为人们越来越关注的重要课题。影响可靠性的因素是多方面的,如构成系统的元器件本身的可靠性、系统本身各部分之间的相互耦合因素等。其中系统的抗干扰性能是系统可靠性的重要指标。 1.2 掌握单片机仿真软件Proteus的使用方法 Proteus 软件具有强大的多窗口、多文件的编辑器、微控制器的集成开发环境、一系列的集成开发工具、图形界面调试器、混合模式的模拟及数字电路仿真器、代码质量检查器等。硬件和应用软件能进行并发仿真。最主要的一点是它能以单片机为核心仿真出包括模拟元器件在内的一些动态外设(按键,LED ,液晶显示器等) ,具有图形显示和波形显示的功能。因此,Proteus 不仅仅是一个微处理器的仿真软件,它所支持的大量常用芯片模型为单片机和其他芯片协同仿真复杂的完整系统提供了极大的方便。Proteus 在完整的系统仿真方面是其他单片机仿真软件所不能独立完成的。这时,Proteus 为我们提供的不仅仅是一个单片机的仿真环境,称其为一个虚拟的单片机实验室是完全合适的,只要我们能充分的利用Proteus提供的实验器件就可以完成一个具有相当集成性的单片机系统。 1.3设计方法 本设计是一个实现加、减、乘、除的计算器,它的硬件主要由四部分组成,一个AT89C51单片机芯片,一个八位共阳极的数码管,一个四乘四的键盘,一个排阻做P0口的上拉电阻(接线图在附录2),它可以实现结果低于65535的加、减、乘、除运算。 采用动态显示,由八位共阳极数码管通过P0口,P2口与单片机相连,数码管的A,B,C,D,E,F,G,DP分别依次与单片机的P0.0—P0.7相连,P0口做为字码控制端,数码管的1,2,3,4,5,6,7,8各引脚分别与单片机的P2.0—P2.7相连,P2口做为数码管的位控制端,动态显示是每次数码管只显示一位,由于人的视觉停留是0.05到0.2秒之间,当数码管依次点亮各个位时,使循环的频率高于人的视觉停留时间,人们就会认为数码管是同时点亮的,就可以达到动态显示的效果。 - 2 - 采用4*4键盘。采用软件识别键值并执行相应的操作,键盘的第0行到第3行依次与单片机的P3.4—P3.7管脚相连,键盘的第0列到第3列依次与单片机的P1.0—P1.3管脚相连,程序运行时依次扫描各行,查询是否有键按下,如果有则进入键盘识别处理程序,实现相应的运算,然后通过数码管输出结果,如果没有按键就调用显示程序显示一个0,等待按键按下,在进入按键扫描程序。这样循环执行。 1.4基本功能 1.计算器可显示8位数字,开机运行时,只有数码管最低位显示为“0”,其余位全部不显示; 2.第一次按下时,显示“D1”;第二次按下时,显示“D1D2”;第三次按下时,显示“D1D2D3”,8个全显示完毕,再按下按键下时,给出“嘀”提示音,并且返回 初始显示状态。 2 系统总体方案及硬件设计 2.1计算器总体思想 很高兴做这个课程设计,因为学了半学期的单片机终于可以练练手了,我特别喜欢单片机,特喜欢编程,一直很向往编程,这是我编的第一个程序,我想这将是我编程生涯的开始,在编这个程序时,遇到了很多麻烦,我没有气馁过,因为我对自己有信心,终于如愿完成了课程设计。 - 3 - 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 自己的编程思想是这样的,首先得设计一个显示程序,这个显示程序应是动态显示,思路有两个: (1)让P2口做位扫描,P0口做段码输出,在调用显示程序时,P2口循环选通数码管每一位的,P0口也依次循环输出相对应位的代码。如何控制数字显示呢,可先将0,9、熄灭,11个段码放入列表中,在设置八个显示缓冲区,数码管要显示的数字就存放在这八个单元中,通过控制八个缓冲区的内容来控制输出的数字。如:要显示的是1234则将缓冲区从低位开始依次放入04H、03H、02H、01H剩余四位放入11H(代表数码管熄灭的代码),要注意的是,当调用显示程序时,通过程序根据八个数码管缓冲区的数字调用相对应的代码就可以循环输出, ,因为视觉停留的原故。当它的循环频率大于但是我们看到的是同时显示1234 人的视觉停留时间,人们就认为它是同时显示的。虽然八个数码管都输出了,但是高四位送的代码是熄灭,即不显示,当不输入数字时使八个缓冲区初始化为,第一位放00H,其余放11H,就可以只显示0,等待输入数据,这样就控制了显示位数实现了动态显示。 (2)让P2口做位扫描,P0口做段码输出,设置一个单元用来 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 输入数字的位数,这样可以不用循环扫描每一位,而是根据输出位数判断扫描哪些位。 如上面的例子,当显示1234时,不用在向高四位送入11H,也不需要熄灭的代码了。调用显示程序时先选通第一位(最低位),送出代码1,然后判断是否显示完毕,(通过记录数字个数单元的内容减一是否得0来判断),如没显示完则显示下一位,如显示完则跳出。在本设计中选用后者。 其次是设计键盘扫描程序,这里采用4*4矩阵键盘,通过软件识别,行和列可接在同个端口上,也可接在不同端口上,本设计行接在P3口的高四位,列接在P1口的低四位,通过循环扫描行,读取列的数据判断是否有键按下,如果有则调用按键识别程序识别是哪个键,执行相应的操作,按键识别是根据按键时得到的列代码与行代码组合,来判断是哪个键的。 按键识别后,如果是数字键则直接放入数码管显示缓冲区,如果再次有数字键按下,则应将缓存区的数字向高位移一位,将刚输入的数放入最低位,并且记录按键次数,每输入一个键值都调用显示程序显示出来,如果是运算符,则执行相应的运算,然后在调用显示程序显示结果。 最后是运算程序的加入,运算程序很简单,只要把,、-、*、/分别做成模块,用到时即可调用,本设计的难点是键盘识别和数值显示,因为这里边涉及到 - 4 - 键盘输入的数值在内部要转换成10进制运算,运算结果要转换成各个位的显示数字输出。 2.2硬件的选择与连接 单片机选择AT89C51,数码管选择共阳机八位数码管,键盘4*4矩阵键盘,P0 P0.7管脚口接上拉电阻,数码管的A,B,C,D,E,F,G,DP分别依次与单片机的P0.0—相连,P0口做为单片机的字码控制端,数码管的1,2,3,4,5,6,7,8各引脚分别与单片机的P2.0—P2.7管脚相连,键盘的第0行到第3行依次与单片机的P3.4—P3.7,键盘的第0列到第3列依次与单片机的P1.0—P1.3,AT89C51接12MHZ晶振。P3.0接风鸣器。 3 软件设计 3.1显示程序设计 显示程序流程图如图1。我的显示程序是这样设计的,因为考虑到显示程应具有通用性,在不进行输入时显示0,输入时显示输入的数字或运算结果,而且要使8个数码管同时显示不同的数字,选用动态显示应是最佳的。 - 5 - 将30H-37H单元设置成数码管显示缓冲区,分别存放数码管各个位要显示的数据,40H单元作为输入数据的计数单元。因为运算结果超出范围时应报错,使数码管显示“ERROR”即可,将数码管的0,9的代码和“ERROR”代码存于LABLE1列表中。当调用显示程序时,显示程序根据40H单元的记录的个数决定数码管显示的位数。如果输入错误将在数码管上显示“ERROR”。 这样就得到了显示程序的入口:30H-37H,依次存放个位,千万位。 40H,存放输出的数字位数。 出口:数码管,P0输出字段码 P2输出位选码。 图1数码管显示流程图 3.2键盘识别程序设计: 键盘识别是这样设计的,首先将P3口送0EOH,将P1口先送1在读P1口的数据当P1口低四位全一时说明没有键按下,在扫描下一行,如果P1口不全一,则有键按下,将P3口高四位与P1口低四位组合成一个字节,放入R5寄存器中,按键去抖,判键是否松开,如松开则将得到的键值判别是哪个键,如果是数字键 - 6 - 则首先将其对应的数字(按键代码对应如下表)放入缓冲区30H,同时将将键 值放入结果缓冲区,并调用显示程序,显示键值,在调用扫描键盘程序,如果在有键值输入则将原来的数值在数码管显示缓冲区向高位依次移一位,将刚键入的数值放入最低位,并将原来的数值乘十加上刚键入的数放人结果缓冲区,然后调用显示程序,如果是运算符,则记录运算符标志,加法用01H表示,减法用02H表示,乘法用03H表示,除法用04H表示,并将结果缓冲区的数转移到中间结果缓冲区,将结果缓冲区清零,等待输入运算数据,当按等号时,根据记录的运算符标志,判断是那种运算,执行运算将结果依次除10取余数放入结果显示缓冲区,调用显示程序。依次循环执行。(流程图如下) - 7 - 图2 键盘扫描流程图 - 8 - 3.3运算程序设计 运算程序分四个模块,即加减乘除。分别采用两字节运算,因此运算结果不能超出两字节,否则会溢出。溢出时显示ERROR。 加法程序:入口:R0被加数低位字节地址指针,R1加数低位字节地址指针, R3字节数。 出口:R0和值地位字节地址指针,R3和值字节数。 运算时用R0,R1间接寻址,从低字节算起,高字节采用带进位加(ADDC),计算结果回送到R0所指的单元中,并将和字节数放入R3单元中,如果R3大于等于3说明溢出。 减法同加法类似,入口: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低,余数放在R4R5,R4高R5低 。 3.4风鸣器程序设计 这个程序是实现当输入八个数字时,如果在输入数字它便鸣叫,提示使用者输入以满,不允许在键入值,只需在键盘程序中,加入判别输入是否超过八个如果超过则调用风鸣器程序,使P3.0由低电平转入高电平,延迟1ms返回。 - 9 - 图3运算程序流程图 - 10 - 4 Proteus软件仿真 1(运行显示0,等待键入数值。 2(键入被加数1000,显示1000。 键入“+”显示原来键入的数值,等待键入加数。 键入加数5000,显示5000。 键入“,”显示结果,6000。 - 11 - 3(键入清零键“CL”。 4(键入被减数4000,显示4000。 键入“,”显示上次键入的值,等待键入减数 键入减数2000,显示录2000。 - 12 - 。 键入等号“,”显示结果2000 5(清零后键入被乘数5000,显示5000。 键入乘号“*”,显示上一次键入的数,等待键入乘数,键入乘数“2”显示2。 键入等号“,”显示结果10000。 6(清零后键入被除数3000,显示3000。 - 13 - 键入除号“/”显示上次键入的数,等待键入除数,键入除数50,显示50。 。 键入等号“,”显示结果60 7(当运算的数值超出范围时将出现的信息。如:输入70000,后在按“+”时显示EEROR因为70000>65535所以报错,显示:“ERROR”。 - 14 - 5课程设计体会 课程设计终于作完了,我足足花了一周时间,做这次课程设计,我很疲惫,但我确很高兴因为通过这次用单片机实现计算器的课程设计,加深了我对单片机这门课程的了解。学以致用,不仅让我回顾了过去的所学,更使我了解了我现在的不足,弥补了不为我知的知识漏洞。 更重要的是在实践中我们可以形成更加科学和理智的认知,不断形成更为合理和具有科学性的思想方式。在这次设计的过程中,我借助了互联网等途径查询相关信息,并在图书馆查阅了大量单片机资料。这不但开拓了我有关单片机领域的眼界,而且完善了我以往的知识体系。 在这次课程设计中遇到了很多问题,这是些问题,虽然有些问题已经在课本中讨论过但是,不真正的实践,就不能真正理解其中的含义,在第一天,我很兴奋,因为我很喜欢编程,但是还没有真正的编很长的程序,这次终于可以锻炼一下了。 课程设计的画图还是很容易的,我认真构思了一下,确定了那个端口接数码管那个接键盘很轻松就完成了,接线和编程是密不可分的,我接线是将P3口高四位作为行扫描,P1口的底四位作为列扫描,后来一想,其实本可以接在一个端口上的但是由于程序写了很长了,就没有改动,不管怎么接不影响效果,图很轻松画好了,在画图的关键就是考虑P0口要有上拉电阻,不然不能输出高电平,在画图的过程中,可以加深对proteus的理解,和提高了基本工具的应用熟练程 度,这是在今后学习中不可缺少的。 接着进入编程阶段,在编程时,我范了一个错误,就是没有写流程图,因此写起程序很没有方向感,虽然在课本了说过要写流程图,但是一到了实践就忘了,后来同学提醒,才恍然大悟,于是又列写程序流程图。这个流程图很关键,如果列不好程序走向就会发生混乱, 在编程第三天时,我又范了第二个大错误,就时太急于求成,我写了很长的程序,几乎把显示程序,键盘查询程序都写完了,才进行调试,在这调试过程中一些小的问题都很容易克服,也很轻松编译通过了,就是运行不能得到预期的效果,因为程序太长很难知道错误在那里,后来同学提醒,应该先编译个小的简单的程序,在慢慢往上加程序,不断完善。 于是,我又更改方案,先编写个显示程序,实现动态显示,调试好后,在编写键盘程序,因为键盘每一行扫描的过程都是一样的,因此只需要使第一行调试通过就能很好的使其它行通过,调试好键盘后。 - 15 - 接着出现的问题是如何使运行时首先显示0,因为显示程序只有一个,必须使这个程序具有通用性,后来我想到了解决方法,就是设计个计数个数单元,(40H),当此单元为零,说明没有输入,则只使显示程序执行一次循环,即,只显示零,然后跳出,等待输入,当输入数据时40H单元便记录个数,根据数据个数决定循环几次,为了能区分数字和运算符,我又增设了运算符标志,(41H)此单元的内容如果是1表示加法,2表示减法,3表示除法,4表示乘法。这样就不会在运算上出现混乱。 在第五天时,我已经实现了简单的一个字节的加、减、乘、除运算,后来我又修改了一下使运算扩大一个字节,这样足以满足课程设计的要求了。 在这次课程设计我学到了很多东西,不仅是编好一个程序,更重要的使学会了一种编程思想,有了一种好的编程思想,就可以让单片机,很听话,想做什么就可以做什么。 我在实践的同时加深了对课本知识的认识,使自己的思维能力进一步得到提高。单片机作为电气自动化专业的专业核心课程,在本专业学习中起着承上启下的关键作用。在这此课程设计中,我在学习单片机知识的同时,也复习了以前有关的电路知识,使我过去所学与现在所知融会贯通,真正锻炼和提高了我运用知识的综合能力。 - 16 - 参考文献 [1] 何立民.MCS-51系列单片机应用系统设计[M].北京:北京行天航空工业大学出版社, 1990.143.,160. [2] 李华.MCS-51系列单片机实用接口计数[M].北京:北京行天航空工业大学出版社, 1993.148-158. [3] 张毅刚、彭喜源、谭晓昀、曲春波编著。MCS-51单片机应用设计。哈尔 滨工业大学出 版社 [4] 蔡明生主编。电子设计。高等教育出版社。 - 17 - 附1 源程序代码 设30H-37H单元为八个数码管从地位到高位所显示的0000H LJMP START ORG 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 43H,#00H MOV 44H,#00H MOV 50H,#0E0H MOV 51H,#0D0H MOV 52H,#0B0H MOV 53H,#70H LOOP3: ACALL DISPLAY MOV R0,#50H MOV R7,#04H LOOP1:MOV A,@R0 MOV P3,A MOV A,#0FFH MOV P1,A MOV A,P1 ANL A,#0FH MOV R5,A CJNE A,#0FH,LOOP2 INC R0 DJNZ R7,LOOP1 JMP LOOP3 LOOP2:MOV R4,#0A0H ;;;;;;;;行定 义;;;;;;;;;;;;;;;;;;;;;;;;;; ;;R01表示启用R0;;;;;;;;寻键 值;;;;;;;;;;;; ;;R71;;;;;循环4次;;;;;;;;;;;;;;;;;;;;;;; ;;A1;;;;;;;;;;;;R0行 号;;;;;;;;;;;;;;;;;;;; ;;A2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; A1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;A2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;A1;;;;;;;; ;;;;;;;;;;;;;;;;;; ;A2;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;判断有;;;读P1口 无按 键;;;;;;;;;;;;; ;;;R72;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - 18 - TFF:ACALL DELAY1mS ;;;;;;;;;;;延迟10MS;;;;;;;; DJNZ R4,TFF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SS: MOV A,#0FFH MOV P1,A MOV A,P1 ;;;;;;;;;;;;;判键是否 松开;;;;;;;;;;;;;; ANL A,#0FH MOV A,42H ;;;;;;;;;;;;;判断是否按,,×/号;;;;;;;;; CJNE A,#0FH,SS MOV R1,#30H ;;;;;;;;显示区低字节地址指针;;;;;;;;;;;;;;;;;;;;;;; CJNE A,#01H,NEXT1 MOV 40H,#00H MOV 42H,#00H MOV A,R5 ;;;;A1;; R5列号;;;;;;; NEXT1: CJNE @R0,#0E0H,ROW2KEY ;;;;;;;;;111111;;;;;;;;;;R0行号;;;;;;;;;;;;;; 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 MOVE ACALL CHANGE11 JMP LOOP3 KEY3:CJNE A,#0EBH,KEY4 - 19 - 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 ACALL CHANGE ;;;;;将结果放入显示缓冲区;;;;;;;;;;;;;;;;;;;;;;;;; KEY4:ACALL JUDEG ;;计算结果放入3CH起始的单元;;;;;;;;;;;;;;;;;;;;;;; MOV 42H,#01H MOV 41H,#04H ;;;;;;;;;;;;04 表示除法;;;;;;;;;; JMP LOOP3 ROW2KEY:CJNE @R0,#0D0H,ROW3KEY ;;;;;;;;;;;;;;2222222222;;;;;;;;;;;;;;;;;;;;;;; MOV A,R5 ORL A,@R0 CJNE A,#0DEH,KEY5 MOV A,40H CJNE A,#08H,TW4 ACALL WARNNING JMP LOOP3 TW4:INC 40H MOV A,#04H MOV 43H,A ACALL MOVE ACALL CHANGE11 JMP LOOP3 KEY5:CJNE A,#0DDH,KEY6 MOV A,40H CJNE A,#08H,TW5 ACALL WARNNING JMP LOOP3 TW5:MOV A,#05H INC 40H MOV 43H,A ACALL MOVE ACALL CHANGE11 - 20 - JMP LOOP3 KEY6:CJNE A,#0DBH,KEY7 MOV A,40H CJNE A,#08H,TW6 ACALL WARNNING JMP LOOP3 TW6:MOV A,#06H INC 40H MOV 43H,A ACALL MOVE ACALL CHANGE11 JMP LOOP3 KEY7:ACALL JUDEG ;;;;计算结果放入3CH起始的单元;;;;;;;;;;;;;;;;;;;;;;;;;;;; ACALL CHANGE ;;;将结果放入显示缓冲区;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MOV 42H,#01H MOV 41H,#03H ;;;;;;;;;;;;03表示乘法;;;;;;;;;; JMP LOOP3 ROW3KEY:CJNE @R0,#0B0H,ROW4KEY ;;;;;;;;;;;;3333333333333;;;;;;;;;;;;;;;;;;;;;;;; MOV A,R5 ORL A,@R0 CJNE A,#0BEH,KEY8 MOV A,40H CJNE A,#08H,TW7 ACALL WARNNING JMP LOOP3 TW7:MOV A,#01H INC 40H MOV 43H,A ACALL MOVE ACALL CHANGE11 JMP LOOP3 KEY8:CJNE A,#0BDH,KEY9 MOV A,40H CJNE A,#08H,TW8 ACALL WARNNING JMP LOOP3 TW8:MOV A,#02H INC 40H MOV 43H,A - 21 - ACALL MOVE ACALL CHANGE11 JMP LOOP3 KEY9:CJNE A,#0BBH,KEY10 MOV A,40H CJNE A,#08H,TW9 ACALL WARNNING JMP LOOP3 TW9: MOV A,#03H INC 40H MOV 43H,A ACALL MOVE ACALL CHANGE11 JMP LOOP3 KEY10:ACALL JUDEG ACALL CHANGE MOV 42H,#01H MOV 41H,#02H JMP LOOP3 ROW4KEY:MOV A,R5 ORL A,@R0 CJNE A,#7EH,KEY11 JMP START KEY11:CJNE A,#7DH,KEY12 MOV A,40H JZ QQ CJNE A,#08H,TW10 ACALL WARNNING JMP LOOP3 TW10:MOV A,#00H INC 40H MOV 43H,A ACALL MOVE ACALL CHANGE11 QQ: JMP LOOP3 KEY12:CJNE A,#0BBH,KEY13 ACALL JUDEG ACALL CHANGE JMP LOOP3 ;;;;;;放入3CH起始的单 元;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;将结果放入显示缓冲 区;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;02 表示减 法;;;;;;;;;; ;;;;;;;;;;;;444444444444;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;CLEAR;;;;;;;;; ;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;EQUEL;;;;;;;;;;;;;;;;;;;;;;;; ;;计算结果放入3CH 起始的单元;;;;;;;;;;;;;;; ;;;;将结果放入显示缓冲区;;;;;;;;;;;;;;;;;;;;;;;;;; - 22 - KEY13:ACALL JUDEG ;计算结果放入3CH起始的单元;;;;;;;;;;;;;;;;;;;;;;;;; ACALL CHANGE ;;;;;将结果放入显示缓冲区;;;;;;;;;;;;;;;;;;;;;;; MOV 42H,#01H MOV 41H,#01H ;;;;;;;;;;;;01表示加法;;;;;;;;;; JMP LOOP3 MOVE:MOV R1,#30H MOV R6,40H DDD: 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 ADDC A,@R1 MOV @R0,A INC R0 INC R1 DJNZ R7,LOP JNC NEXT INC R3 MOV @R0,#01H LOP:MOV A,@R0 NEXT:MOV A,R2 ;;;;;;;;回复地址;;;;;;;;;;;;;;;;;;;;; MOV R0,A RET 减法程序:入口:R0,被减数低位字节地址指针,R1,减数低位字节地址指针, R3,字节数 出口:R0,差值地位字节地址指针,R3,差值字节数。 MAKESUB:CLR 07H MOV A,R0 MOV R2,A - 23 - MOV A,R3 MOV R7,A CLR C LOP1:MOV A,@R0 SUBB A,@R1 MOV @R0,A INC R0 INC R1 DJNZ R7,LOP1 JNC LOP2 SETB 07H LOP2:MOV A,R2 MOV R0,A RET 乘法程序: 入口:R3,被乘数低位地址字节,R2,被乘数高位地址字节,R7,乘 数低位地址字节,R6,乘数高位地址字节, 出口:R4,R5,R6,R7结果字节由高到低MAKEMUL:MOV A,R3 MOV B,R7 MUL AB XCH A,R7 MOV R5,B MOV B,R2 MUL AB ADD A,R5 MOV R4,A CLR A ADDC A,B MOV R5,A MOV A,R6 MOV B,R3 MUL AB ADD A,R4 XCH A,R6 XCH A,B ADDC A,R5 MOV R5,A MOV F0,C MOV A,R2 MUL AB - 24 - ADD A,R5 MOV R5,A CLR A MOV ACC.0,C MOV C,F0 ADDC A,B MOV R4,A RET 除法程序:入口:被除数放在R4R5R6R7,R4R5,C SUBB A,R3 MOV R1,A MOV A,R4 SUBB A,R2 JB F0,DIV33 JC DIV44 DIV33:MOV R4,A - 25 - MOV A,R1 MOV R5,A INC R7 DIV44:DJNZ B,DIV22 CLR F0 RET DIV11:SETB F0 RET CHANGE11: MOV R0,#40H CJNE @R0,#01H,TA1 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 ACALL MAKEADD TA2: RET CHANGE:MOV 40H,#00H MOV R0,#30H MOV R7,3CH MOV R6,3DH TD1: MOV R5,#00H MOV R4,#00H MOV R2,#00H MOV R3,#0AH INC 40H ACALL MAKEDIV MOV A,R5 MOV @R0,A ;;;;;;;;;;;;;;;;;;CHANGE;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;3BH单 元值;;;;;;;;;;;;;; - 26 - INC R0 MOV A,R6 CJNE A,#00H,TD1 MOV A,R7 CJNE A,#00H,TD1 RET JUDEG:MOV A,3AH JZ JUD1 ACALL ERROR LJMP LOOP3 JUD1:MOV R1,#38H ;;;;;;;;计算中间结 果;;;;;;;;;;;;;;;;;;;;;;;;;;; MOV A,41H ;;;;R01;;;;;;; CJNE A,#00H,TB MOV 3CH,@R1 INC R1 MOV 3DH,@R1 JMP TBB TB: CJNE A,#01H,TB1 MOV R0,#3CH ;;;41标志位1表示加法,2表示减法3表示乘法4表示除法;;;;;;;;;;; MOV R3,#02H ACALL MAKEADD MOV A,R3 CJNE A,#03H,JUD2 ACALL ERROR LJMP LOOP3 JUD2:JMP TBB TB1:CJNE A,#02H,TB2 MOV R0,#3CH MOV R3,#02H ACALL MAKESUB ;;;将3B单元数加,减,乘,除38H单元放入3BH单元;;;;;;; JNB 07H,JUD4 ACALL ERROR LJMP LOOP3 JUD4:JMP TBB TB2:CJNE A,#03H,TB3 MOV R3,3CH MOV R2,3DH MOV R6,39H MOV R7,38H - 27 - ACALL MAKEMUL MOV 3DH,R6 MOV 3CH,R7 MOV 3EH,R5 MOV 3FH,R4 MOV A,R5 JZ JUD3 ACALL ERROR LJMP LOOP3 JUD3: JMP TBB TB3:MOV R7,3CH MOV R6,3DH MOV R5,#00H MOV R4,#00H MOV R2,39H MOV R3,38H ACALL MAKEDIV MOV 3CH,R7 MOV 3DH,R6 TBB:MOV 38H,#00H MOV 39H,#00H MOV 3AH,#00H MOV 3BH,#00H RET WARNNING: CLR P3.0 SETB P3.0 ACALL DELAY1mS RET ERROR:MOV R0,#30H MOV A,#0AH MOV R5,#05H MOV 40H,#05H ET: MOV @R0,A INC R0 INC A DJNZ R5,ET RET DISPLAY:MOV DPTR,#TABLE1 MOV R0,#30H ;;;;;;;;;;;;;;;;;;;;;;DISPLAY;;;;;;;;;;;;;; - 28 - MOV R1,#80H MOV R5,40H NEXTF:MOV P2,R1 MOV A,@R0 MOVC A,@A+DPTR MOV P0,A ACALL DELAY1mS MOV A,P2 RR A MOV R1,A INC R0 MOV A,R5 JZ AA DJNZ R5,NEXTF AA: RET DELAY1mS:MOV R7,#02H DL: MOV R6,#0FFH DL6:DJNZ R6,DL6 DJNZ R7,DL RET TABLE1: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H DB 92H, 82H, 0F8H, 80H, 90H DB 0CEH,0C0H,0CEH,0CEH,86H END - 29 - ;;;DELAY1S;;;;;;;;;;;;;;;;;; 附2 计算器模拟系统电路图 - 30 -
本文档为【模拟计算器数字输入及显示课程设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_036899
暂无简介~
格式:doc
大小:55KB
软件:Word
页数:0
分类:工学
上传时间:2017-12-19
浏览量:47