微机原理加法计算器设计及显示
- 格式:docx
- 大小:61.40 KB
- 文档页数:14
$二○一一~二○一二学年第一学期信息科学与工程学院自动化系:课程设计计划书课程名称:微机原理及应用课程设计班级:自动化 0901姓名:王立学号: 4032 ]指导教师:孟志华二○一一年十二月六日一、课题名称简易计算器设计二、课题目的利用8088和8255设计一个简易计算器,并将其结果显示在LED数码管上。
熟悉系统设计的基本步骤,掌握8088与8255的接口设计,掌握通过8255设计键盘扫描技术,掌握通过8255显示七段共阴极数码管设计。
加强对8088数据总线,地址总线及接口寻址的理解,加深对8255的端口控制的理解。
!三、需求分析(1)能够实现99以内的加减乘法运算,并显示在2位LED上。
(2)对于减法运算产生的负数,可在LED上显示“-”号,若负量超过9,则显示“E0”。
四、方案选择方案一:、该方案将LED显示电路直接接在8088的DB上,而键盘则采用8255进行扫描。
(方案二:该方案则是将LED 显示电路和键盘扫描电路分别接在两个不同的8255上,扫描和显示时,选中不同的8255。
方案三:)该方案则只用一片8255驱动LED 显示和键盘扫描电路。
方案评估:方案一:LED 显示驱动电路实现起来较简单,但是很浪费系统总线资源,舍弃!方案二:释放了系统数据总线,但是方案缺乏经济性,因为采用了两片8255,与建设资源节约型社会初衷冲突!舍弃!方案三:此种方案较为经济,方便,具有模块化的特点(因为将计算和显示电路全部集成在了8255上,应用时,直接挂接8255即可实现要求!)&综上所述:采用方案三!五、程序流程图程序总流程图:…判断输入流程图:六、系统原理图键盘映射图:-注:1、复位电路单独画在旁边,其参数设置符合6MHZ。
2、74HC04反相器由于位置不够,本人自己画了一个小型的74HC04。
3、IOW,IOR信号线由于采用了最大系统组态,故由8288的IORC和AIOWC代替。
4、8088的CLK由8284A提供,其电路连接方式参照Datasheet5、最大系统组态连接方式参照课本。
装订线实验报告课程名称:微机原理实验指导老师:成绩:实验名称:加法计算器及显示实验类型:同组学生姓名:一、实验目的和要求(必填)二、实验内容和原理(必填)三、主要仪器设备(必填)四、操作方法和实验步骤五、实验数据记录和处理六、实验结果与分析(必填)七、讨论、心得一、实验目的和要求1.掌握基于状态机的编程方法2.实现数字运算、键盘输入、LED显示的多任务协调编程二、实验内容和原理1.编写程序,输入两个两位十进制数并显示,按确认键后显示运算结果2.基本功能:能够输入输入数字(非数字无效)并显示结果3.附加功能:光标指示功能(通过LED闪烁实现)以及退格功能三、程序代码ORG 0000HSTART: MOV 78H,#0 ;初始化:78H放0的段码,其余放熄灭码MOV 79H,#10MOV 7AH,#10MOV 7BH,#10MOV 7CH,#10MOV R5,#0 ;R5是按键次数,初始置0MOV R6,#0 ;将0置入R6中MOV R7,#0 ;将0置入R7中MOV 30H,#0 ;30H是功能键存放单元,置为0MOV 31H,#0 ;31H单元初始置为0MOV 40H,#0 ;40H单元初始置为0MOV 41H,#0 ;41H单元初始置为0LOOP: LCALL DIR ;调用显示子程序LCALL KEY ;调用键盘检测程序INC R5 ;按键次数加1S1: CJNE A,#10,S2 ;不是"+"键,跳到S2LJMP FUN ;是"+"键,跳到FUNS2: CJNE A,#11,S3 ;不是"-"键,跳到S3LJMP FUN ;是"-"键,跳到FUNS3: CJNE A,#12,S4 ; 不是"*"键,跳到S4LJMP FUN ; 是"*"键,跳到FUNS4: CJNE A,#13,S5 ; 不是"/"键,跳到S5LJMP FUN ; 是"/"键,跳到FUNS5: CJNE A,#14,S6 ; 不是"="键,跳到S6LJMP FUN ;是"="键,跳到FUNS6: CJNE A,#15,N1 ; 不是"CL"键,跳到N1LJMP START ; 是"CL"键,跳到STARTN1: CJNE R5,#1,N2 ;若按键次数不等于1,跳到N2 LJMP D11 ;跳到D11N2: CJNE R5,#2,START;若按键次数不等于2,跳到START LJMP T1 ;跳到T1D11: MOV R4,A ;将A写入R4MOV 78H,A ;输入值送显示个位缓存MOV 79H,#10 ;将10送到79H单元LJMP LOOP ;跳转到循环T1: MOV 53H,A ;将A写入53HMOV B,#10 ;将10置入BMOV A,R4 ;将上一次输入的R4写进A MUL AB ;A乘以10ADD A,53H ;53H里面的值与A相加MOV R4,A ;将新的值置入到R4 MOV 79H,78H ;个位到十位MOV 78H,53H ;新数为个位LJMP LOOP ;跳转到循环FUN:MOV 78H,#10 ;将10置入到78H MOV 79H,#10 ;将10置入到79HMOV R0,30H ;与上次功能键交换MOV 30H,AMOV A,R0CJNE A,#10,FUN1 ;判断功能键LJMP ADDY ;"+"FUN1: CJNE A,#11,FUN2LJMP SUBT ;"-"FUN2: CJNE A,#12,FUN3LJMP MULT ;"*"FUN3: CJNE A,#13,FUN4LJMP DIVI ;"/"FUN4: CJNE A,#14,FUN5 ;首次按功能键,即A=#0 LJMP EQUA ;"="FUN5: MOV 40H,R4 ;保存第一个数MOV R5,#0 ;按键次数清零LJMP BCD ;将其拆为BCD码,以便后来将其显示OF: LJMP START ;跳转回开始ADDY: MOV A,40H ;加法,第一个数送累加器ADD A,R4 ;第一个数加第二个数MOV 40H,A ;存本次结果MOV R5,#0 ;按键次数清零LJMP BCD ;跳转到BCD程序SUBT: MOV A,40H ;减法,第一个数送累加器CLR C ;借位清零SUBB A,R4 ;带借位的减法,第一个数减第二个数JB CY,BCD2 ;借位为1,跳转到BCD2MOV 40H,A ;将减的结果送40HMOV R5,#0 ;按键次数清零LJMP BCD ;跳转到BCDMULT: MOV A,40H ;乘法,第一个数送累加器MOV B,A ;将A送BMOV A,R4 ;将第二个数送累加器MUL AB ;第一个数乘以第二个数MOV R5,#0 ;按键次数清零JB OV,BCD1 ;若乘法结果溢出,则跳转到BCD1 MOV 40H,A ;将A送40HLJMP BCD ;跳转到BCDDIVI: MOV A,R4 ;除法,第二个数送累加器MOV B,A ;将第二个数送BMOV A,40H ;将第一个数送ADIV AB ;A除以BJB OV,OF ;当B为0时跳到OFMOV 40H,A ;将A送40HMOV R5,#0 ;按键次数清零LJMP BCD ;跳转到BCDEQUA: MOV R5,#0 ;按键次数清零MOV 31H,A ;将A送31HLJMP BCD ;跳转到BCD;----乘法溢出时的处理程序BCD1: ;乘法溢出时的处理程序MOV 78H, B ;将高8位送78HMOV 79H, A ;将低8位送79HLCALL HEX2BCD ;调用子程序把78H、79H中的数字,转换成BCD码,送到7AH 7BH 7CH MOV A, 7CH ;下面,把万千百十个位,分别存入7CH 7BH 7AH 79H 78HMOV B, #16DIV AB ;除以16,目的是分离出高、低四位MOV 79H, A ;存放十位MOV 78H, B ;存放个位MOV A, 7AHMOV 7CH, A ;存放万位MOV A, 7BHMOV B, #16DIV ABMOV 7BH, AMOV 7AH, BLJMP LOOPHEX2BCD: ;子程序:把78H、79H中的数字,转换成BCD码,送到7AH 7BH 7CH CLR AMOV 7AH, A ;先清零MOV 7BH, AMOV 7CH, AMOV R6, #16 ;共转换十六位数LOOPP:CLR CMOV A, 79H ;从待转换数的高端移出一位到Cy RLC AMOV 79H, AMOV A, 78HRLC AMOV 78H, AMOV A, 7CH ;送到BCD码的低端ADDC A, 7CH ;带进位加。
-O一一〜二O—二学年第一学期信息科学与工程学院自动化系课程设计计划书二o—年十二月六日一、课题名称简易计算器设计二、课题目的利用8088和8255设计一个简易计算器,并将其结果显示在LED数码管上。
熟悉系统设计的基本步骤,掌握8088与8255的接口设计,掌握通过8255设计键盘扫描技术,掌握通过8255显示七段共阴极数码管设计。
加强对8088数据总线,地址总线及接口寻址的理解,加深对8255的端口控制的理解。
三、需求分析(1)能够实现99以内的加减乘法运算,并显示在2位LED上。
(2)对于减法运算产生的负数,可在LED上显示号,若负量超过9,则显示“E0S四、方案选择方案一:该方案将LED显示电路直接接在8088的DB上,而键盘则采用8255进行扫描。
方案二:该方案则是将LED显示电路和键盘扫描电路分别接在两个不同的8255上,扫描和显示时,选中不同的8255。
方案三:该方案则只用一片8255驱动LED显示和键盘扫描电路。
方案评估:方案一:LED显示驱动电路实现起来较简单,但是很浪费系统总线资源,舍弃!方案二:释放了系统数据总线,但是方案缺乏经济性,因为采用了两片8255,与建设资源节约型社会初衷冲突!舍弃!方案三:此种方案较为经济,方便,具有模块化的特点(因为将计算和显示电路全部集成在了8255上,应用时,直接挂接8255即可实现要求!)综上所述:采用方案三!五、程序流程图程序总流程图:判断输入流程图: 断电开始I六. 系统原理图键盘映射图:键盘编码图:系统原理图:注:1、复位电路单独画在旁边,其参数设置符合6MHZo2、74HC04反相器由于位置不够,本人自己画了一个小型的74HC04。
3、IOW, IOR信号线由于采用了最大系统组态,故由8288的IORC 和AIOWC 代替。
4.8088的CLK由8284A提供,其电路连接方式参照Datasheet5、最大系统组态连接方式参照课本。
6、LED与键盘扫描电路的上拉电阻阻值统一采用,保证数码管有足够亮度。
实验报告课程名称:微机原理实验指导老师: 成绩:实验名称: 加法计算器及显示实验类型: 同组学生姓名: 一、实验目的与要求(必填)ﻩﻩ二、实验内容与原理(必填)三、主要仪器设备(必填) ﻩﻩ四、操作方法与实验步骤五、实验数据记录与处理ﻩﻩ六、实验结果与分析(必填)七、讨论、心得一、实验目的与要求1.掌握基于状态机的编程方法2.实现数字运算、键盘输入、LED显示的多任务协调编程二、实验内容与原理1.编写程序,输入两个两位十进制数并显示,按确认键后显示运算结果2.基本功能:能够输入输入数字(非数字无效)并显示结果3.附加功能:光标指示功能(通过LED闪烁实现)以及退格功能三、程序代码ORG 0000HSTART: MOV78H,#0 ;初始化:78H放0的段码,其余放熄灭码MOV 79H,#10MOV7AH,#10MOV7BH,#10MOV 7CH,#10MOVR5,#0 ;R5就是按键次数,初始置0MOV R6,#0;将0置入R6中MOVR7,#0;将0置入R7中MOV30H,#0;30H就是功能键存放单元,置为0MOV 31H,#0 ;31H单元初始置为0MOV 40H,#0;40H单元初始置为0MOV41H,#0 ;41H单元初始置为0LOOP: LCALL DIR;调用显示子程序LCALLKEY ;调用键盘检测程序INC R5 ;按键次数加1S1: CJNE A,#10,S2;不就是"+"键,跳到S2LJMP FUN ;就是"+"键,跳到FUNS2: CJNE A,#11,S3;不就是"-"键,跳到S3LJMPFUN ;就是"-"键,跳到FUNS3: CJNE A,#12,S4 ;不就是"*"键,跳到S4LJMPFUN; 就是"*"键,跳到FUNS4:CJNEA,#13,S5 ; 不就是"/"键,跳到S5LJMPFUN ; 就是"/"键,跳到FUNS5: CJNEA,#14,S6 ; 不就是"="键,跳到S6LJMP FUN ;就是"="键,跳到FUNS6:CJNE A,#15,N1 ; 不就是"CL"键,跳到N1LJMP START; 就是"CL"键,跳到STARTN1: CJNE R5,#1,N2 ;若按键次数不等于1,跳到N2LJMP D11 ;跳到D11N2:CJNE R5,#2,START;若按键次数不等于2,跳到STARTLJMPT1 ;跳到T1D11: MOV R4,A;将A写入R4MOV 78H,A;输入值送显示个位缓存MOV 79H,#10;将10送到79H单元LJMP LOOP ;跳转到循环T1:MOV 53H,A;将A写入53HMOV B,#10;将10置入BMOVA,R4;将上一次输入的R4写进AMUL AB;A乘以10ADD A,53H ;53H里面的值与A相加MOV R4,A ;将新的值置入到R4MOV 79H,78H ;个位到十位MOV78H,53H;新数为个位LJMPLOOP;跳转到循环FUN:MOV 78H,#10 ;将10置入到78HMOV79H,#10;将10置入到79HMOV R0,30H ;与上次功能键交换MOV 30H,AMOV A,R0CJNE A,#10,FUN1;判断功能键LJMPADDY;"+"FUN1: CJNE A,#11,FUN2LJMP SUBT ;"-"FUN2: CJNE A,#12,FUN3LJMP MULT ;"*"FUN3: CJNE A,#13,FUN4LJMP DIVI;"/"FUN4: CJNE A,#14,FUN5 ;首次按功能键,即A=#0LJMPEQUA ;"="FUN5:MOV 40H,R4;保存第一个数MOVR5,#0;按键次数清零LJMPBCD ;将其拆为BCD码,以便后来将其显示OF: LJMP START ;跳转回开始ADDY: MOVA,40H ;加法,第一个数送累加器ADDA,R4 ;第一个数加第二个数MOV 40H,A ;存本次结果MOV R5,#0 ;按键次数清零LJMP BCD ;跳转到BCD程序SUBT: MOVA,40H;减法,第一个数送累加器CLRC;借位清零SUBB A,R4;带借位的减法,第一个数减第二个数JB CY,BCD2 ;借位为1,跳转到BCD2MOV 40H,A;将减的结果送40HMOVR5,#0 ;按键次数清零LJMPBCD ;跳转到BCDMULT: MOV A,40H ;乘法,第一个数送累加器MOV B,A;将A送BMOV A,R4;将第二个数送累加器MUL AB;第一个数乘以第二个数MOV R5,#0;按键次数清零JB OV,BCD1 ;若乘法结果溢出,则跳转到BCD1MOV40H,A ;将A送40HLJMP BCD;跳转到BCDDIVI: MOV A,R4 ;除法,第二个数送累加器MOV B,A;将第二个数送BMOVA,40H ;将第一个数送ADIVAB ;A除以BJB OV,OF ;当B为0时跳到OFMOV40H,A;将A送40HMOV R5,#0 ;按键次数清零LJMP BCD ;跳转到BCDEQUA: MOV R5,#0;按键次数清零MOV 31H,A ;将A送31HLJMP BCD ;跳转到BCD;----乘法溢出时的处理程序BCD1: ;乘法溢出时的处理程序MOV 78H, B;将高8位送78HMOV 79H, A ;将低8位送79HLCALLHEX2BCD;调用子程序把78H、79H中的数字,转换成BCD码,送到7AH 7BH 7CHMOVA, 7CH;下面,把万千百十个位,分别存入7CH 7BH7AH79H78HMOV B, #16DIV AB ;除以16,目的就是分离出高、低四位MOV 79H, A ;存放十位MOV 78H, B ;存放个位MOV A, 7AHMOV7CH,A;存放万位MOV A, 7BHMOV B, #16DIV ABMOV7BH, AMOV7AH, BLJMP LOOPHEX2BCD: ;子程序:把78H、79H中的数字,转换成BCD码,送到7AH7BH 7CH CLR AMOV 7AH, A ;先清零MOV7BH, AMOV7CH, AMOV R6, #16 ;共转换十六位数LOOPP:CLRCMOV A, 79H;从待转换数的高端移出一位到CyRLC AMOV79H, AMOVA, 78HRLC AMOV78H, AMOV A,7CH ;送到BCD码的低端ADDC A, 7CH ;带进位加。
单片机十进制加法计算器设计设计概述:1.输入部分设计为了实现数字输入功能,可以采用4x4矩阵键盘作为输入设备。
通过扫描键盘矩阵,可以检测用户按下的按键,并将相应的按键字符存储在单片机内部的缓冲区中。
键盘扫描需要使用外部中断或定时器中断,在按键被按下时触发中断程序进行扫描和存储。
2.计算部分设计为了进行数字加法运算,需要在单片机中定义变量来存储输入的数字,并使用适当的算法进行加法运算。
加法运算可以通过逐位相加的方式实现,先对个位数进行加法运算,再对十位数进行加法运算,以此类推,直到最高位数。
3.显示部分设计为了显示运算结果,可以使用数码管来显示数字。
数码管的选型可以选择共阳极或共阴极的数码管,具体选择要根据实际的需求和电路设计来确定。
单片机需要通过IO口控制数码管的显示,将运算结果转化为相应的数码管段码,并通过IO口输出给数码管进行显示。
4.输出部分设计为了实现结果的输出,可以选择将结果通过串口发送给上位机,或者通过并行接口输出给其他设备。
具体的接口选择要根据实际的需求和电路设计来确定。
设计步骤:1.确定硬件平台和单片机型号,根据单片机的外设资源选择合适的输入、输出和显示设备。
2.进行电路设计,包括键盘输入电路、按键检测电路、数码管显示电路和外部接口电路。
3.编写单片机的初始化程序,包括IO口初始化、定时器中断初始化和中断服务程序编写。
4.编写键盘扫描程序,实现对键盘输入的检测和字符存储。
5.编写数字加法运算程序,实现输入数字的加法运算和结果的存储。
6.编写数码管显示程序,将加法运算结果转化为数码管的段码并进行显示。
7.编写输出程序,将结果通过串口或并行接口输出给上位机或其他设备。
8.进行调试和测试,优化程序和电路设计,确保计算器的稳定性和准确性。
9.编写用户界面程序,实现菜单、输入和输出操作的交互。
设计思路:利用单片机的运算和控制能力来实现数字加法的功能,以实现单片机十进制加法计算器的设计。
通过键盘输入,将数字存储在单片机内部的变量中,并采用逐位相加的算法实现数字加法运算。
简易计算器的设计 自动化(电站方向)计算机硬件技术实践报告题目 姓名 专业 班级学号上海电力学院自动化工程学院 实践报告内容(目录)一. 设计题目二.开发目的三.小组成员分工及成果四.设计方案以及论证五. 硬件原理图(包括芯片的选型介绍)六. 程序流程图(包括各个子系统和子过程的程序流程)七. 程序清单,要有适当的注释八. 程序运行结果分析与预测九. 结果评述或总结(对实验结果进行分析,对实验过程进行总结,系统改进升级建议或者提出新的方案等。
)8255 控制键. 设 计题目 :用 8086 设计一个能实现 0~9 整数加法运算的计算器 , 并用 2 位 LED 数码显示 . 键盘包 括0-9 , + , - ,*, / , =, ON/C;共16个按键.能实现简单的清零操作,减法运算,乘法运算.. 开发目的 :通过课程设计,熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,得到微机 开发应用方面的初步训练。
培养集体讨论设计题目的总体设计方案、 编程、软件硬件调试、 编写设计报告等问题,做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。
通过本次课程设计熟练运用程序对 盘和LED 显示的控制,完成计算器加减法的应用,并熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。
本组的三个成员一起讨论研究简易计算器设计的主要方案。
粗略设计程序流程图以确定简易计算器设计的大概框架。
明确目的后各自查询资料了解设计原理、逐步清晰设计思路。
以下为大体分工:主要负责: 1 、设计主要程序,编写;2、查找资料验证修改;主要负责: 1、选择需要用的各个芯片;2、设计硬件原理图;主要负责: 1、各个芯片功能的资料查找;2 、设计程序流程图四. 设计方案以及论证利用程序不断扫描所设的按钮键盘是不是有输入,如果没有就一直扫描,如果有就调 用子程序进行判断,是数值则进行存储并同时进行显示,是运算符号等就调用相应的子程 序进行操作,操作后则继续利用程序不断扫描键盘是不是有输入,从而实现部分十进制数 的加、减、乘、除的运算。
简易加减计算器设计一、引言计算器是一种用于进行数学计算的设备,它可以帮助我们进行各种加减乘除等运算。
本篇文章将介绍如何设计一个简易的加减计算器,该计算器基于数字电路的原理,通过逻辑门电路实现加法和减法运算。
二、设计思路1.确定输入和输出2.设计加法电路加法可以通过逻辑门电路实现,其中最基本的逻辑门是异或门。
我们可以使用多个异或门来实现加法,具体的实现方法如下:-使用8个异或门分别对两个二进制数的对应位进行异或运算,得到8个中间结果;-使用7个与门分别对中间结果和进位信号进行与运算,得到7个进位信号;-使用7个或门分别对进位信号进行或运算,得到进位输出;-使用一个或门对中间结果和进位输出进行或运算,得到最终的结果。
3.设计减法电路减法可以通过将减数取反然后与被减数进行加法运算来实现。
具体的实现方法如下:-对减数取反,可以使用8个反相器实现;-将取反后的减数和被减数输入到加法电路中进行加法运算,得到结果。
三、电路实现根据上述设计思路,我们可以使用数字集成电路来实现加减计算器。
以下是一个基于数字集成电路74LS83A的简易加减计算器电路图:```______________,---,A+B,----,S_______,,_____________,______---,M,---_______,,_________________-----------,B'+1=B__________```在上述电路图中,A和B分别表示两个8位二进制数的输入,S表示计算结果的输出,M表示减号操作符的输入,B'+1表示减数的取反。
四、测试与验证为了验证电路的正确性,我们需要进行测试。
我们可以编写一个测试程序,将各种情况的输入输入到电路中,并检查输出结果是否符合预期。
测试例子如下:输入:M=0预期输出:输入:M=1预期输出:通过编写测试程序,并根据预期结果检查输出结果,可以验证电路设计的正确性。
五、总结本篇文章介绍了如何设计一个简易的加减计算器,该计算器基于数字电路的原理,通过逻辑门电路实现加法和减法运算。
摘要21世纪是一个信息化日益加快的时代,它对人才的需求也呈现出新的变化趋势。
对计算机的掌握已成为了当今时代对人才考验的一项重要指标;大学计算机公共课程也面临着新的机遇和挑战。
基于此事实,微机原理课程在计算机教学上强调了对当今学生在“难度—深度—强度”三维同步教学上的侧重,并极力注重学生的实践能力的培养,本次课程设计,老师通过给学生布置一定的设计任务,而学生分组实践完成,从而达到对学生计算机原理知识的教学和汇编语言程序的锻炼。
汇编语言是联系C等高级语言到机器语言的重要编程语言,其指令是机器指令的一种符号表示,具有很强的机器相关性;也正基于此,可以实现起执行效率的很大提高本次课设是基于汇编语言的计算器设计,通过编写相应的程序代码实现一个16进制的简单计算器设计。
其能够实现实现16进制整数的加减乘除计算,通过键盘输入两个数据及选择运算符,回车输出16进制的结果。
关键词:汇编语言计算器 16进制目录1 设计任务及要求 (3)2方案比较及论证 (3)3 软件设计说明 (4)3.1 程序流程图 (4)3.2 源程序设计及说明 (5)4 程序调试说明和结果分析 (15)4.1 程序调试及说明 (15)4.2 结果分析 (19)5心得体会 (20)参考文献 (21)附录 (22)附录一 ASCII码表 (22)附录二 DOS系统功能调用(INT21H) (23)十六进制计算器的设计1 设计任务及要求(1) 利用汇编语言,能实现基本的计算功能,回车得到正确结果。
(2)实现16进制整数的加减乘除计算,输出16进制数。
(3) 按照规范撰写、装订课程设计说明书。
2方案比较及论证(1) 本次课程设计要求实现16进制的加减乘除运算,并能够显示运算数、运算符以及正确显示最终的运算结果。
我们自然想到通过DOS功能调用的9号调用来实现界面的显示。
9号调用的功能是实现多个字符输出到屏幕上的显示,这可以使我们实现简易计算器的设计,将输入数据回显到计算机界面上,而为了使计算结果的顺利显示,则可以通过编写一个功能模块首先使计算结果转化为其对应ASCII值,再特别地通过2号功能的调用最终完成计算结果的显示。
河尢必弟实验报告.指导老师: ____ 成绩: 实验类型: 同组学生姓名:二、实验内容和原理(必填)四、操作方法和实验步骤六、实验结果与分析(必填) 一、实验目的和要求1. 掌握基于状态机的编程方法2. 实现数字运算、键盘输入、LED 显示的多任务协调编程二、实验内容和原理1•编写程序,输入两个两位十进制数并显示,按确认键后显示运算结果2. 基本功能:能够输入输入数字(非数字无效)并显示结果3. 附加功能:光标指示功能(通过LED 闪烁实现)以及退格功能加法器设计:编写程序,输入两个两位十进制数并显示,按确 认键后显示运算结果。
(D 基本功能: 能够输入数字(非数字无效)并显示结果。
(2)附加功能:光标指示功能(通过LED 闪烁实现),以及退格功能。
a.课程名称: _____________ 微机原理实验实验名称: 加法讣算器及显示 一、实验目的和要求(必填) 三、主要仪器设备(必填) 五、实验数据记录和处理七、讨论、心得: 三、程序代码ORG 0000HSTART: MOV 78H.#0;初始化:78H 放0的段码,其余放熄火码 MOV79H,#10 MOV7AH,#10 MOV7BH.#10 MOV7CH ・#10 MOVR5.#0 ;R5是按键次数,初始巻0 MOVR6Jrt) ;将0置入R6中 MOVR7,#0 ;将0置入R7中 MOV30H,#0 ;30H 是功能键存放单元,垃为0 MOV31H.#0 ;31H 单元初始置为0 MOV 40H.#0 ;40H 单元初始置为0MOV 41H.#0 ;41H 单元初始置为0LOOP: LCALL DIR ;调用显示子程序LCALL KEY;调用键盘检测程序 装 INC R5;按键次数加1 SI: CJNE A,#10.S2 ;不是”+”键,跳到 S2 订 UMP FUN;是”+”键,跳到FUN S2: CJNE A,#11,S3;不是叮键,跳到 S3 线 UMP FUN ;是叮键,跳到FUNS3:CJNE A ・#12.S4 ;不是叱”键,跳到S4 :UMP FUN;是 w 键,跳到 FUN :S4: CJNE A.#13,S5 ;不是"厂键,跳到 S5 : UMP FUN ;是键,跳到FUN :S5: CJNE A,#14.S6 ;不是僅”键,跳到 S6 jUMP FUN ;是怙”键,跳到FUN [ S6: CJNE A,#15,N1 ;不是"CL”键,跳到 N1: UMP START ;是”CL”键,跳至lj START j N1:CJNE R5.#1,N2 ;若按键次数不等于1,跳到N2 : UMP Dll ;跳到。
11j N2: CJNE R5.#2.START;若按键次数不等于2,跳到START ! UMPT1 ;跳到 T1;将A 写入R4 ;输入值送显示个位缓存 ;将10送到79H 单元 ;跳转到循环 ;将A 写入53H ;将10置入B ;将上一次输入的R4写进ADll: MOV R4,AMOV 78H,AMOV 79H.#10UMP LOOPTl: MOV 53H.AMOVB.#10MOV A.R4装 UMP DIVIFUN4: CJNE A.#14,FUN5;首次按功能键,即 A=#0订 UMP EQUA FUN5: MOV 40H.R4;保存第一个数 线 MOV R5.#0 ;按键次数淸零LJMP BCD ;将其拆为BCD 码,以便后来将其显示OF: UMP START;跳转回开始 ADDY: MOV A.40H ;加法.第一个数送累加器ADD A.R4MOV 40H,AMOV R5,#0UMP BCD;第一个数加第二个数 ;存本次结果 ;按键次数淸零 ;跳转到BCD 程序 SUBT: MOV A.40H ;减法,第一个数送累加器 ;借位淸零 ;带借位的减法,第一个数减第二个数 ;借位为1,跳转到BCD2 ;将减的结果送40H ;按键次数淸零 ;跳转到BCD ;乘法,第一个数送累加器 ;将A 送B ;将第二个数送累加器 ;第一个数乘以第二个数 ;按键次数淸零MUL AB ADD A.53H MOV R4,A MOV 79H.78H MOV 78H.53H UMP LOOP FUN:MOV 78H.#10 MOV 79H.#10 MOV R0.30H MOV 30H.A MOV A.RO CJNE AJH0.FUN1 UMP ADDY FUN1: ;A 乘以10 ;53H 里而的值与A 相加 ;将新的值置入到R4 ;个位到十位 ;新数为个位 ;跳转到循环 ;将10置入到78H ;将10巻入到79H ;与上次功能键交换 ;判断功能键 UMP SUBT FUN2: UMP MULTFUN3: CJNEA ・#11.FUN2 CJNEA.#12・FUN3 CJNEA.#13.FUN4CLRCSUBB A.R4JB CY.BCD2MOV 40H.AMOV R5,#0UMP BCDMULT: MOV A,40HMOV B.AMOV A,R4MUL ABMOV R5,#0JB OV.BCDl;若乘法结果溢出,则跳转到BCD1MOV 40H,A ;将A送40H: LJMP BCD ;跳转到BCD:DIVI: MOV A.R4 ;除法,第二个数送累加器: MOV B.A ;将第二个数送Bj MOV A,40H ;将第一个数送A$ DIV AB ;A除以B: JB OV.OF ;当B为0时跳到OF:MOV 40H,A ;将A送40H: MOV R5,#0 ;按键次数淸零j UMP BCD ;跳转到BCDj EQUA: MOV R5,#0 ;按键次数淸零: MOV31H,A ;将A送31H:UMP BCD ;跳转到BCDi ;■…乘法溢岀时的处理程序[ BCDl: ;乘法溢出时的处理程序: MOV 78H, B ;将高8位送78H•MOV 79H, A ;将低8位送79H装LCALL HEX2BCD ;调用子程序把78H. 79H中的数字,转换成BCD码,送到7AH 7BH 7CH MOV A. 7CH ;下而,把万千百十个位,分别存入7CH 7BH 7AH 79H 78H订MOVB, #16DIV AB ;除以16,目的是分离出髙、低四位线MOV 79H. A ;存放十位MOV 78H. B ;存放个位: MOV A, 7AH:MOV 7CH. A ;存放万位: MOV A. 7BH:MOVB. #16[ DIV AB: MOV 7BH. A:MOV 7AH. B: UMP LOOP[ HEX2BCD: 汙程序:把78H、79H中的数字,转换成BCD码,送到7AH 7BH 7CH: CLR A:MOV 7AH. A ;先淸零: MOV 7BH, Aj MOV 7CH. A[ MOV R6,#16 ;共转换十六位数: LOOPP:j CLRC: MOV A. 79H ;从待转换数的高端移出一位到Cy1 RLC AMOV 79H, AMOV A, 78HRLC AMOV 78H, AMOV A. 7CH ;送到BCD码的低端ADDC A. 7CH ;带进位加。
自身相加,相当于左移一位DA A ;十进制调整,变成BCD码MOV 7CH, AMOV A, 7BHADDC A, 7BHDA AMOV 7BH, AMOV A, 7AHADDC A, 7AHMOV 7AH. ADJNZ R6,LOOPPRET ;共转换十六位数装BCD2:MOV A.#100 ;减法第七位有借位时的处理程序CLRC ;借位淸零订SUBB A.R4 ;100-被减数MOV R4,A ;将结果存在R4中线MOV A,40H ;将减数给AADD A.R4 ;减数+(100-被减数)MOV R4.A ;将结果给R4MOV A,# 100 ;将100给ACLRC ;将CY淸零SUBB A.R4 ;100-(减数+ (100-被减数))MOVB.#10 ;将10给BDIV AB ;A除以10MOV 7AH.# 11 ;将11给7AH,以便显7F符号MOV 79H.A ;将A给79HMOV 78H,B ;将B给78HUMP LOOP ;跳转到LOOP;—拆为BCD码的程序BCD: MOVB.#10 ;将10给BMOV A,40H ;结果送累加器DIV AB ;结果除10MOV41HA ;41H暂存”商”MOV A3 ;取余数MOV 78H,A ;余数送78HMOVB.#10 ;将10送BMOV A,41H ;将商送A: DIV AB ;A除以10:CJNE A,#O.PANDUAN1 ;若人不等于0,贝lj跳转到PANDUAN1: MOV 79H.B ;若人等于0,则将B送79Hj UMP RETURN ;跳转到RETURN$ PANDUAN 1:: MOV 7AH,A :A 送7AHj MOV 79H,B ;B 送79H: RETURN:UMP LOOP ;跳转到LOOP[ ;■…动态显示子程序: DIR: MOV DPTR.#TAB ;数码管译码表首址j MOV R0,#78H ;待显缓冲区个位地址: CJNE R5,#1,ANJIAN2 ;判断按键次数是否为1,不是则跳转到ANJIAN2j ANJIAN1: MOV A,RO ;将显示区的个位地址给A[ MOVC A.A+DPTR ;査表: CLR P2.3 ;点亮P2.3•MOV P3,A ;字段码送P3 口装LCALL DELAY 1ms ;调延时1ms子程序SETB P2.3 ;关闭P2.3订MOV P3・#0FFH ;将P3 口熄火LCALL DELAY 1ms ;凋用延时1ms子程序线-按键1次时光标闪烁功能INC R6 ;将R6加1CJNE R6.#70.SHANSHUOl ;若R6 不等于70,则跳转到SHANSHUO1SETB P2.2 ;将P2.2关闭MOV P3.#0FFH ;将P2 口熄灭LCALL DELAY 1ms ;调用延时1ms子程序DEC R6 :R6就减1INC R7 :R7 加1CJNE R7,#70.FANHUI ;判断R7是否等于70,若不等于70,则跳转到FANHUI MOV R6.#0 ;将R6置0MOV R7,#0 ;将R7置0FANHULRET ;子程序返回SHANSHUO1:CLR P2.2 ;打开P2.2MOV P3・#0EFH ;显示LCALL DELAY 1ms ;调用延时1ms子程序SETB P2.2 ;关闭P2.2MOV P3.#0FFH ;熄火P3RET ;返回;・…按键次数为2显示ANJIAN2:CJNE R5,#2.ANJIANDENG;如果 R5 不等于 0,则跳转到 ANJIANDENGMOV A.R0MOVC A.A+DPTRCLR P2.3MOV P3.ALCALL DELAY 1msSETB P2.3MOV P3.#0FFHINC ROMOV A.ROMOVC A.A+DPTRCLR P2.2MOV P3.ALCALL DELAY 1msSETB P2.2MOV P3.#0FFH;将显示区的个位地址给A;查表 ;点亮P2.3 ;将个位显示 ;凋用延时1ms ;关闭P2.3 ;关闭显示 :R0 加 1 ;将显示区的十位地址给A 渣表 ;打开P2.2 ;将十位送P3显示 ;调用延时1ms 子程序 ;关闭P2.2 ;关闭显示装 ;・…按键两次时光标闪烁功能 INC R6:R6 力D 1 订 CJNE R6.#70,SHANSHUO2 ;判断 R6 是否为 70,若否跳转到 SHANSHUO2 ;将P2.1关闭 ;关闭显示 ;调用延时1ms 子程序 :R6 减 1 :R7 加 1 ;若R7不等于70,则跳转到FANHUI2 ;将0送R6 ;将R7置0 ;子程序返回 ;打开P2.1 ;显示 ;调用延时1ms 子程序 ;关闭P2.1;关闭显示;返回;一按键后的显示ANJIANDENG:MOV A,31H ;将 31H 送 ASETB P2」 线 MOVP3.#0FFHLCALL DELAY 1ms: DEC R6: INC R7: CJNE R7・#70.FANHUI2j MOV R6,#0[ MOV R7,#0: FANHUI2:RET: SHANSHUO2:: CLR P2.1: MOV P3.#0EFH[ LCALL DELAY 1ms: SETB P2」: MOV P3.#0FFHj RETCJNE A,#0.ANJIAN0 ;A 不等于0 时跳转到ANJIANO MOV A,R0 ;将个位的地址送AMOVC A.A+DPTR 渣表CLR P2.3: MOV P3.A:LCALL DELAY 1ms: SETB P2.3j MOV P3・#OFFHj INC RO: MOV A.RO:MOVC A,A+DPTR: CLR P2.2j MOV P3.A[ LCALL DELAY 1ms: SETB P2.2:MOV P3・#OFFH: INC ROj MOV A,R0[ MOVC A.A+DPTR: CLR P2.1•MOV P3.A装LCALL DELAY 1msSETB P2.1订MOV P3.#0FFHINC RO 线MOV A,R0MOVC A.A+DPTR: CLR P2.0:MOV P3.A: LCALL DELAY 1msj SETB P2.0[ MOV P3.#OFFH: RETi ;-…没按键时的显示i ANJIANO: MOV A.RO jMOVC A,A+DPTR: CLR P2.3:MOV P3.A: LCALL DELAY 1msj SETB P2.3[ MOV P3・#OFFH: RET;打开P2.3;显示个位;调用延时1ms子程序;关闭P2.3;关闭显示:R0 加1;将十位的地址送A;查表;打开P2.2;显示十位;调用延时1ms子程序咲闭P2.2;关闭显示:R0 加1;将百位地址送A;査表;打开P2.1;显示百位;调用延时1ms子程序;关闭P2.1;关闭显示:R0 加1;将千位的地址送A渣表;打开P2.0;显示千位;调用延时1ms子程序;关闭P2.0;关闭显示;返回;将R0的地址送A;查表;打开P2.3;显示;调用延时1ms子程序咲闭P2.3;关闭显示;返回TAB: DB 28H.7EH.0A2H.62H74H.61 H,21HJAH.20H.60H.0FFH,0F7H ;共阳极译码表DELAY Ims: MOV 50H.#2 涎时1ms 子程序LOOP1: MOV 53H.#248NOPLOOP2:DJNZ 53H.LOOP2DJNZ 50H.LOOP1RETDELAY 1:MOV 51 H.#5 涎时子程序DELAY 1DELAY3:DJNZ 51H.DELAY3RET;调用检测按键子程序 ;有键按下继续;无键按调用延时去抖;调用动态显示;返回继续检测按键KI: LCALL DELA Y2 ;有键按下延时去抖动;■…键盘子程序KEY: LCALL KS JNZK1LCALL DELAY2 ACALL DIR AJMP KEY;再调用检测按腱子程序 ;确认有按键进行下一步 ;调用动态显示 ;无键按下返回继续检测 ;将扫描值送入R2暂存 ;将第一列值送入R3暂存 ;将R2值送入P1 口 ;P1.0等于1跳转到L1 ;将第一行值送入ACC ;跳转到键值处理程序 ;P1.1等于1跳转到L2 ;将第二行的行值送入ACC ;跳转到键值处理程序 ;P1.2等于1跳转到L3 ;将第三行行值送入ACC ;跳转到键值处理程序 ;P1.3等于1跳转到NEXT 处;将第四行行值送入ACC ;行值与列值相加后的键值送入A ;将A 中的值送入堆栈暂存 ;调用延时去抖程序 ;调用按键检测程序 ;按键没有松开继续返回检测 ;将堆栈值送入ACC 装 LCALL KSJNZ K2订 ACALL DIRAJMP KEY线 K2: MOV R2.#0EFHMOV R3.#00H: K3: MOVPLR2: LO: JBP1.O.L1: MOV A.#00Hj AJMP LK[ LI: JBP1.LL2: MOV A,#04H: AJMP LKj L2: JBP12L3j MOV A.#08Hj AJMP LK: L3: JBP1.3.NEXT: MOV A,#0CH: LK: ADD A.R3j PUSH ACC[ K4: LCALL DELAY2: LCALL KSj JNZ K4: POP ACCMOV DPTR.#KEYTABMOVC AA+DPTR RETNEXT: INC R3 MOV A.R2;列值加一:R2值送入AJNB ACC.7KEY ;扫描完至KEY处进行下一扫描RLAMOV R2,AAJMP K3KS: MOVPL#OFH MOV A.P1XRL A.#0FHRET ;扫描未完将值左移一位进行下一列扫描;将ACC值送入R2暂存;跳转到K3继续;将戸1 口髙四位置0低四位宜1 ;读戸1 口;将A中的值与A中的值相异或;子程序返回KEYTAB:DB 123,10.4,5611,7,8.9J2J5Q14,13 ;键值表DELAY2:MOV 52H.#2H 涎时去抖动子程序LP1: MOV 53H,#0FAHLP2: DJNZ 53H.LP2DJNZ 52H.LP1RET四、讨论、心得本次计算器的实验是一次综合性比较强的实验,对前面所学的知识是一个很好的考察。