微机原理 加法计算器设计及显示

合集下载

微机原理实验:加减法

微机原理实验:加减法
mov cx, 8 ; 循环次数
print: mov ah, 2
mov dl, '0'
test bl, 10000000b
jz zero
mov dl, '1'
zero: int 21h
shl bl, 1
loop print
; 设置背景及字体颜色
mov cx, 9 ; 字符数量
mov di, 01h ; 起始地址
jz zero_2
mov dl, '1'
zero_2: int 21h
shl bh, 1
loop print_2
; 设置背景及字体颜色来自mov cx, 9 ; 字符数量
mov di, 01h ; 起始地址
color_2: mov [di], 11100000b ;黄底(1110) ,黑字(0000)
add di, 2
color: mov [di], 11110001b ;白底(1111) ,蓝字(0001)
add di, 2
loop color
mov dl, 'b'
mov ah, 2
int 21h
mov ax, 4c00h
int 21h
(二)减法部分
name "add-sub"
org 100h
; set segment register
mov ax, 0b800h
mov ds, ax
; 8 + 10 = 18 (decimal) or bin=00010010b
mov al, 8
mov bl, 10
add bl, al
mov bh, bl ;保存加法结果

微机原理课件设计简易计算器

微机原理课件设计简易计算器

$二○一一~二○一二学年第一学期信息科学与工程学院自动化系:课程设计计划书课程名称:微机原理及应用课程设计班级:自动化 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.编写用户界面程序,实现菜单、输入和输出操作的交互。

设计思路:利用单片机的运算和控制能力来实现数字加法的功能,以实现单片机十进制加法计算器的设计。

通过键盘输入,将数字存储在单片机内部的变量中,并采用逐位相加的算法实现数字加法运算。

8086简易计算器的设计微机原理计硬报告DOC

8086简易计算器的设计微机原理计硬报告DOC

简易计算器的设计 自动化(电站方向)计算机硬件技术实践报告题目 姓名 专业 班级学号上海电力学院自动化工程学院 实践报告内容(目录)一. 设计题目二.开发目的三.小组成员分工及成果四.设计方案以及论证五. 硬件原理图(包括芯片的选型介绍)六. 程序流程图(包括各个子系统和子过程的程序流程)七. 程序清单,要有适当的注释八. 程序运行结果分析与预测九. 结果评述或总结(对实验结果进行分析,对实验过程进行总结,系统改进升级建议或者提出新的方案等。

)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课程设计题目 (1)2. 课程设计任务及要求 (1)3. 总体方案与设计说明 (1)4. 硬件电路设计及描述 (3)5. 软件设计流程及描述 (6)6. 源程序代码 (8)7. 系统调试 (12)&结论与说明 (13)9 .课程设计体会 (13)10.参考文献 (13)一.课程设计题目加减计数器设计二.课程设计任务及要求通过键盘输入0到9之间的数字,可以在LED灯上显示出来;通过键盘进行简单的9之内的加减运算;运算过程和结果在LED灯上显示出来。

三.总体方案与设计说明3.1通过小键盘做加减运算。

七段数码管显示器作输入数据和结果数据的显示。

3.2数字用小键盘0~9, R, P, M G作功能键R 开始运算(包括撤销运算),显示‘ 0'P+m-g=E 退出返回dos3.3运算顺序:a. 输入一原始数据显示器跟随显示b. 按+或-显示器内容不变c. 再输入一数据,显示器跟随显示。

d. 按=显示器显示结果数据,当超出能显示的最大值,显示 F (溢出)e. 按R重新开始运算f. 按E,结束退出LED 显示器上。

设计思路:首先利用程序不断扫描键盘是不是有输入,如果没有就一直扫描,如果有就停止扫描,完成输入,利用汇编的程序核对输入键的数值,通过调用子程序实现2位十 进制数以内的及减法运算。

运算完成后将运算的结果储存并显示到 四.硬件电路设计及描述(含所需器件、硬件原理图)4.1 硬件电路键盘输入及LED 数码管通过8255A 接口与系统总线连接,键盘的16个按键组成8*2矩 阵,其中8根矩阵线作为8255A 的输出线与PB& PBO 连接,2根矩阵线作为8255A 的输入 线与PC7 PC6连接。

键盘采用逐次扫描原理,16个按键中0〜9座位数字健,+、-、=作为 加、减和等号功能键,C 为清零键。

4.2 键盘输入模块键盘是常用信息输入元件, 其实键盘也是由一个个按钮组成, 如果是独立按钮的话必须 要需要一个 I/O 口对它进行检测, 而键盘往往这需要键盘按钮数一半的 I/O 口数对它进行检 测,也许对一个比较简单的系统 I/O 口数一般不是问题,但对于一个大型、复杂的系统来说 I/O 资源就显得非常珍贵了,尽量减少 I/O 使用是非常利于降低成本,另外一方面键盘比用 独立按键要美观。

微机原理课设--简易计数器设计

微机原理课设--简易计数器设计

1.总体设计思想及主要功能1.1总体设计思想程序主要分为主程序,输入子程序,输出子程序,加法子程序,减法子程序,乘法子程序,除法子程序。

根椐输入的符号选用不同的运算子程序,最后调用输出子程序。

各个程序的具体做法,详见后面的流程图和分析。

本程序的关键是在输入、输出程序,值得特别注意的地方是call 和ret的调用,而且还要清楚跳转的返回地址;由于计算器比数学用表等计算工具要先进得多,应该积极倡导学生加速用计算器取代数学用表的进程。

从键盘输入数据与运算符;可以进行加、减、乘、除四则运算,输入和输出的数均必须为十进制的。

输入的数据最大为双字的,。

如果输入的除数为0;输出错误信息。

输入的表达式有误,输出错误信息。

输入的两个数,不能除尽时,输出除数输入错误信息。

如果输入了空格,同样输出错误信息。

输出的数据最大可输出4字,为的是输出乘除法的结果。

除法最后所得结果可为小数点后四位值。

1.2实现的主要功能(1)输入和输出的数均为十进制的。

(2)输入的数据最大为双字的且必须是数字,当输入字母或其他非数字符号时,输出错误信息。

(3)如果输入的除数为0;输出错误信息。

(4)输入的表达式有误,输出错误信息。

(5)输入的两个数,有一个大于双字,输出错误信息。

(6)如果输入了空格,输出错误信息。

(7)输出的数据最大可输出4字,为的是输出乘法的结果。

(8)除法有不能整除的情况时,输出小数结果保留小数点后四位并显示除数输入错误信息。

2.简单计算器的流程图2.1 主程序的流程图主程序设计思路说明:输入的数据如果超过双字,就会溢出,因为我定义的存储器为双字的。

输入什么样的数都会有一个范围,一定得有这个信息。

根据输入的符号调用相应的函数。

除法和别的不一样,还要输出余数,并且,除数不能是0。

所以我就在里面调用了输出函数,要输出两次,而外面只能输出一次,为了更好输出结果,我就只好这样了。

输入y可以继续进行运算,要注意的是,要把原来的数给清0,不然得不到答案。

微机原理课程设计之计算器程序设计报告

微机原理课程设计之计算器程序设计报告
MOV AH,0AH
MOV DX,OFFSET BUF ;BUF为数据段中定义的数据缓冲区
INT 21H
显示单个字符命令:
MOVAH,02H
INT 21H
显示一串字符串的命令:
MOV AH,09H
MOVDX,OFFSET BUF ;BUF为被显示字符串的首地址
INT 21H
十进制数显示过程:将十进制数送到BX中,BX除以1000,余数送BX中,商在AL中,范围为0~9,显示AL中的内容。BX除以100,余数送BX中,商在AL中,显示AL中的内容,依次类推,直到分出个位数字。
利用DOS中断的01号、02号子功能来完成键盘接受、结果显示。
设置屏幕显示方式。
MOV AH,00H
MOV AL,NUM (NUM为显示方式属性字)
INT 10H
接着从键盘上接受键值,并判别后转到相应的子模块进行运算,并显示结果。
MOV AH,01H
INT 21H ;AL=键入字符的ASCII码
从键盘上接收一串字符串命令:
二)程序编译、运行与调试
在DOS环境下,键入EDIT。启动全屏幕编辑软件EDIT,输入源程序。输入完毕,按alt+F选择SAVE保存程序(规定扩展名为*.ASM),按alt+X退出EDIT状态。
2、显示主菜单:
MOV AH,09H
MOV DX,OFFSET TOP
INT 21H
先在数据段中定义主菜单中要显示的字符串,再通过调用DOS系统的09H号功能——显示字符串(串尾字符为$,但不显示)来完成。
3、从键盘接收一个数字:
MOV AH,01H
INT 21H
通过调用DOS系统的01H号功能——键入字符并回车来实现,其出口参数为键入字符的ASCII码,存在AL中。

微机简单计算器程序设计

微机简单计算器程序设计

微机简单计算器程序设计一、问题分析计算器是一种常见的应用程序,可以进行基本的数学运算。

简单计算器可以进行加法、减法、乘法和除法运算,用户可以输入两个数字和运算符,计算器将显示计算结果。

二、需求分析1.用户可以输入两个数字和运算符。

2.计算器可以进行加法、减法、乘法和除法运算。

3.计算器可以显示计算结果。

三、设计思路1.接收用户输入的两个数字和运算符。

2.根据运算符进行相应的运算。

3.显示计算结果。

四、程序设计下面是一个使用C语言编写的简单计算器程序:```c#include <stdio.h>int maifloat num1, num2, result;char operator;printf("请输入两个数字和运算符(例如:2 + 5):"); scanf("%f %c %f", &num1, &operator, &num2);switch (operator)case '+':result = num1 + num2;printf("%.2f + %.2f = %.2f\n", num1, num2, result); break;case '-':result = num1 - num2;printf("%.2f - %.2f = %.2f\n", num1, num2, result); break;case '*':result = num1 * num2;printf("%.2f * %.2f = %.2f\n", num1, num2, result); break;case '/':if (num2 != 0)result = num1 / num2;printf("%.2f / %.2f = %.2f\n", num1, num2, result);} elseprintf("错误:除数不能为0\n");}break;default:printf("错误:无效的运算符\n");}return 0;```五、程序运行1.编译程序并运行。

微机原理简易计算器课程设计报告

微机原理简易计算器课程设计报告

. . . .课程设计报告课程设计名称:简易计算器系别:三系学生XX:X梦瑶班级:11通信1班学号:成绩:指导教师:袁静开课时间:2013-2014学年1学期一.设计题目简易计算器二.主要内容1、采用模块化程序结构设计软件,可将整个软件分成若干功能模块。

2、画出程序流程图。

3、根据流程图,编写源程序。

4、上机调试程序。

三.具体要求1、利用BIOS和DOS的中断来设计一个计算器,要求在屏幕上显示一个主菜单,提示用户输入相应的数字键,分别执行加、减、乘、除四种计算功能和结束程序的功能。

2、利用BIOS中断的10号功能调用来设置显示方式。

3、利用DOS中断的01号和02号子功能来完成键盘接收,结果显示。

四.进度安排五.成绩评定考核方法:现场验收(占50%),课程设计报告(占50%)。

考核内容:学习态度(出勤情况,平时表现等)、方案合理性、程序编制质量、演示效果、设计报告质量。

成绩评定:优,良,中,及格,不及格。

特别说明:如发现抄袭,按照不及格处理。

目录前言41、设计题目52、设计内容62.1 基本内容62.2 主要功能63、设计原理及方案73.1 总体方案73.2 程序流程图83.2.1 主程序83.2.2 计算子程序103.3 系统模块详细设计113.3.1 界面设置113.3.2 算法选择设置123.3.3 数制转换设置134.汇编源程序代码165、调试运行结果255.1 操作说明255.2 调试运行结果256、心得体会287、参考文献30前言课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。

它具有动手、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一个重要教学环节。

计算器在我们日常生活中应用是相当普遍的,可以说它已经成为现代社会生活不可或缺的一部分。

本次课程设计就是根据微机原理与接口的相关知识,利用BIOS和DOS的中断来设计一个简易计算器,能够实现加减乘除四则运算,并在屏幕上显示一个主菜单,提示用户输入相应的数字键,分别执行加、减、乘、除四种计算功能和结束程序的功能。

加法计算器的设计

加法计算器的设计

---------------------------------------------------------------最新资料推荐------------------------------------------------------
加法计算器的设计
加法计算器的设计上一讲,我们留了作业,设计制作一个加法计算器,要求可以输入加数与被加数。

点击计算按钮自动得出得数。

现在我们来制作一下。

首先,我们来回顾一下上节课所讲的内容。

1、点击 new 新建按钮,输入工程名称 calculator。

(注意工程名称要用英文字符)进入设计页面。

2、修改屏幕标题。

3、我们需要两个文本框来存放加数与被加数。

改变文本框的 text属性值 4、添加横向排版控件。

将横向排版控件的宽设置为填充父容器。

5、添加标签控件改变标签控件文本、大小、背景颜色属性
6、添加按钮控件改变屏幕控件的对齐属性为居中。

改变按钮控件的属性加法计算器的外观设计完成。

1 / 1。

微机原理课程设计--用8088设计一个能实现0-9整数加法运算的计算器,和用2位LED数码显示。

微机原理课程设计--用8088设计一个能实现0-9整数加法运算的计算器,和用2位LED数码显示。

二○一一~二○一二学年第一学期信息科学与工程学院课程设计报告书课程名称:微机原理及应用课程设计班级:学号:姓名:指导教师:2011年12月一、程序设计目的综合运用本课程知识,利用集成电路设计实现一些中小规模电子电路或者完成一定功能的程序,以复习巩固课堂所学的理论知识,提高程序设计实现系统、绘制系统电路图的能力,为实际应用奠定一定的基础。

二、实验内容及具体要求用8088设计一个能实现0-9整数加法运算的计算器,和用2位LED数码显示。

键盘包括0-9“+”和“=”12个按键。

具体要求:1.画出连接线路图或功能模块引脚连接图。

2.采用8088CPU作主控制器,8255作为并行接口电路实现按键的扫描以及数码管的显示。

3.采用2个共阴极型LED,只需显示0—255范围内的值。

三、设计分析8255A写方式控制字8255A各端口结构四、流程图五、程序清单CODE SEGMENTASSUME CS:CODE,DS:CODEBEGIN: JMP BEGINBUFF DB 1,2,3,4,5,6TABLE1DW 3E07H,3E0BH,3D0BH,3B0BH,3E0DH,3D0DH,3B0DH,3E0EH,3D0EH,3B0EH; 对应0~9的键盘值DW370EH,370DH,370BH,3707H,3B07H,3D07H,2F07H,2F0BH,2F0DH,2F0EH,1F07H,1F0BH,1F 0DH; 对应其他的键盘值TABLE DB 3FH,6,5BH,4FH,66H,6DH,7DH,7,7FH,6FH,46H,40H,48H,00; 0~9上的字型码X DW 0Y DW 0F DB 0N DB 0C DB 0ADDF DB 0SHI DB 0GE DB 0BEGIN: MOV AX,CSMOV DS,AXCALL CLEARAGAIN: MOV DX,203HMOV AL,8255ACALL LED ;调用子程序CALL KEYCMP F,1JNE AGAINCMP BL,9 ;对比数字键盘JLE D_PROCECMP BL,10JE TO_ADD ; 转到加法子程序CMP BL,11JMP AGAIN ;返回继续循环CLEAR1: CALL CLEARCALL CLBUFJMP AGAIND_PROCE: CMP N,1JE D_P_YMOV CL,4SHL X,CLMOV BH,0ADD X,BXCALL BSHIFTMOV BUFF+5,BLJMP AGAIND_P_Y: MOV CL,4SHL Y,CLMOV BH,0ADD Y,BXCALL BSHIFTMOV BUFF+5,BLJMP AGAINTO_ADD CALL BSHIFT ; 加法子程序的具体实现MOV BUFF+5,BLMOV F,0MOV N,1MOV ADDF,1JMP AGAINKEY PROC ;键盘扫描程序的实现MOV DX,203HMOV AL,10001001BOUT DX,AL ;写控制字MOV F,0MOV DX,201HMOV AL,0OUT DX,ALMOV DX,202HIN AL,DXAND AL,0FHCMP AL,0FHJE K_EXITMOV CX,3000LOOP $ ; 延时IN AL,DXAND AL,0FHPUSH AXMOV DX,203HMOV AL,10000010B; B_IN,C_OUTOUT DX,ALPOP AXMOV BL,ALMOV DX,202HOUT DX,ALMOV DX,201HIN AL,DXAND AL,00111111HMOV BH,ALLEA SI,TABLE1MOV CX,23MOV AH,0NK: CMP BX,[SI]JE FOUNDINC AHADD SI,2LOOP NKFOUND: MOV AL,0 ;不断扫描,等待输入MOV DX,202HOUT DX,ALMOV DX,201HIN AL,DXAND AL,3FHCMP AL,3FHJNE FOUND ;如果无输入继续扫描MOV CX,3000LOOP $MOV F,1MOV BL,AHK_EXIT: RETKEY ENDPSTORE PROC ; 存储程序MOV WORD PTR BUFF,1414HLEA SI,BUFF ;赋给偏移地址MOV CH,4DISPLAY: MOV DL,0MOV AL,BUFF[DL] ;取数MOV AH,0MOV CL,10DIV CLMOV SHI,AH ;求和的十位MOV GE,AL ;和的个位MOV DX,383H ;PA口输出方式选择控制字MOV AL,80HOUT DX,ALMOV DX,380H ;PA口代码输出十位显示MOV AL,TABLE[SHI]OUT DX,ALMOV DX,383H ;PB口方式选择控制字MOV AL,10000000HOUT DX,ALMOV DX,381H ;PB口代码输出个位显示MOV AL,TABLE[GE]OUT DX,ALINC DLJMP DISPLAYS_REL: MOV CL,4ROL BX,CL ;循环左移四位MOV AL,BLAND AL,0FH ; 取低四位MOV [SI+2],ALINC SIDEC CHJNZ S_RELCALL CLEARRETSTORE ENDPCODE ENDSEND START六、硬件部分七、设计小结本次课程设计花费了我很多时间和精力,但是也锻炼了我很多方面的能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告课程名称:微机原理实验指导老师:成绩:实验名称:加法计算器及显示实验类型:同组学生姓名:一、实验目的和要求(必填)二、实验内容和原理(必填)三、主要仪器设备(必填)四、操作方法和实验步骤五、实验数据记录和处理六、实验结果与分析(必填)七、讨论、心得一、实验目的和要求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,跳到N2LJMP 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写进AMUL AB ;A乘以10ADD A,53H ;53H里面的值与A相加MOV R4,A ;将新的值置入到R4MOV 79H,78H ;个位到十位MOV 78H,53H ;新数为个位LJMP LOOP ;跳转到循环FUN:MOV 78H,#10 ;将10置入到78HMOV 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=#0LJMP 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 ;从待转换数的高端移出一位到CyRLC 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,LOOPP ;共转换十六位数RETBCD2:MOV A,#100 ;减法第七位有借位时的处理程序CLR C ;借位清零SUBB A,R4 ;100-被减数MOV R4,A ;将结果存在R4中MOV A,40H ;将减数给AADD A,R4 ;减数+(100-被减数)MOV R4,A ;将结果给R4MOV A,#100 ;将100给ACLR C ;将CY清零SUBB A,R4 ;100-(减数+(100-被减数))MOV B,#10 ;将10给BDIV AB ;A除以10MOV 7AH,#11 ;将11给7AH,以便显示符号MOV 79H,A ;将A给79HMOV 78H,B ;将B给78HLJMP LOOP ;跳转到LOOP;----拆为BCD码的程序BCD: MOV B,#10 ;将10给BMOV A,40H ;结果送累加器DIV AB ;结果除10MOV 41H,A ;41H暂存"商"MOV A,B ;取余数MOV 78H,A ;余数送78HMOV B,#10 ;将10送BMOV A,41H ;将商送ADIV AB ;A除以10CJNE A,#0,PANDUAN1 ;若A不等于0,则跳转到PANDUAN1 MOV 79H,B ;若A等于0,则将B送79HLJMP RETURN ;跳转到RETURNPANDUAN1:MOV 7AH,A ;A送7AHMOV 79H,B ;B送79HRETURN:LJMP LOOP ;跳转到LOOP;----动态显示子程序DIR: MOV DPTR,#TAB ;数码管译码表首址MOV R0,#78H ;待显缓冲区个位地址CJNE R5,#1,ANJIAN2 ;判断按键次数是否为1,不是则跳转到ANJIAN2 ANJIAN1: MOV A,@R0 ;将显示区的个位地址给AMOVC A,@A+DPTR ;查表CLR P2.3 ;点亮P2.3MOV P3,A ;字段码送P3口LCALL DELAY1ms ;调延时1ms 子程序SETB P2.3 ;关闭P2.3MOV P3,#0FFH ;将P3口熄灭LCALL DELAY1ms ;调用延时1ms子程序;----按键1次时光标闪烁功能INC R6 ;将R6加1CJNE R6,#70,SHANSHUO1 ;若R6不等于70,则跳转到SHANSHUO1SETB P2.2 ;将P2.2关闭MOV P3,#0FFH ;将P2口熄灭LCALL DELAY1ms ;调用延时1ms子程序DEC R6 ;R6就减1INC R7 ;R7加1CJNE R7,#70,FANHUI ;判断R7是否等于70,若不等于70,则跳转到FANHUI MOV R6,#0 ;将R6置0MOV R7,#0 ;将R7置0FANHUI:RET ;子程序返回SHANSHUO1:CLR P2.2 ;打开P2.2MOV P3,#0EFH ;显示“-”LCALL DELAY1ms ;调用延时1ms子程序SETB P2.2 ;关闭P2.2MOV P3,#0FFH ;熄灭P3RET ;返回;----按键次数为2显示ANJIAN2:CJNE R5,#2,ANJIANDENG;如果R5不等于0,则跳转到ANJIANDENG MOV A,@R0 ;将显示区的个位地址给AMOVC A,@A+DPTR ;查表CLR P2.3 ;点亮P2.3MOV P3,A ;将个位显示LCALL DELAY1ms ;调用延时1msSETB P2.3 ;关闭P2.3MOV P3,#0FFH ;关闭显示INC R0 ;R0加1MOV A,@R0 ;将显示区的十位地址给AMOVC A,@A+DPTR ;查表CLR P2.2 ;打开P2.2MOV P3,A ;将十位送P3显示LCALL DELAY1ms ;调用延时1ms子程序SETB P2.2 ;关闭P2.2MOV P3,#0FFH ;关闭显示;----按键两次时光标闪烁功能INC R6 ;R6加1CJNE R6,#70,SHANSHUO2 ;判断R6是否为70,若否跳转到SHANSHUO2 SETB P2.1 ;将P2.1关闭MOV P3,#0FFH ;关闭显示LCALL DELAY1ms ;调用延时1ms子程序DEC R6 ;R6减1INC R7 ;R7加1CJNE R7,#70,FANHUI2 ;若R7不等于70,则跳转到FANHUI2MOV R6,#0 ;将0送R6MOV R7,#0 ;将R7置0FANHUI2:RET ;子程序返回SHANSHUO2:CLR P2.1 ;打开P2.1MOV P3,#0EFH ;显示“-”LCALL DELAY1ms ;调用延时1ms子程序SETB P2.1 ;关闭P2.1MOV P3,#0FFH ;关闭显示RET ;返回;----按“=”键后的显示ANJIANDENG:MOV A,31H ;将31H送ACJNE A,#0,ANJIAN0 ;A不等于0时跳转到ANJIAN0MOV A,@R0 ;将个位的地址送AMOVC A,@A+DPTR ;查表CLR P2.3 ;打开P2.3MOV P3,A ;显示个位LCALL DELAY1ms ;调用延时1ms子程序SETB P2.3 ;关闭P2.3MOV P3,#0FFH ;关闭显示INC R0 ;R0加1MOV A,@R0 ;将十位的地址送AMOVC A,@A+DPTR ;查表CLR P2.2 ;打开P2.2MOV P3,A ;显示十位LCALL DELAY1ms ;调用延时1ms子程序SETB P2.2 ;关闭P2.2MOV P3,#0FFH ;关闭显示INC R0 ;R0加1MOV A,@R0 ;将百位地址送AMOVC A,@A+DPTR ;查表CLR P2.1 ;打开P2.1MOV P3,A ;显示百位LCALL DELAY1ms ;调用延时1ms子程序SETB P2.1 ;关闭P2.1MOV P3,#0FFH ;关闭显示INC R0 ;R0加1MOV A,@R0 ;将千位的地址送AMOVC A,@A+DPTR ;查表CLR P2.0 ;打开P2.0MOV P3,A ;显示千位LCALL DELAY1ms ;调用延时1ms子程序SETB P2.0 ;关闭P2.0MOV P3,#0FFH ;关闭显示RET ;返回;----没按键时的显示ANJIAN0: MOV A,@R0 ;将R0的地址送AMOVC A,@A+DPTR ;查表CLR P2.3 ;打开P2.3MOV P3,A ;显示LCALL DELAY1ms ;调用延时1ms子程序SETB P2.3 ;关闭P2.3MOV P3,#0FFH ;关闭显示RET ;返回TAB: DB 28H,7EH,0A2H,62H,74H,61H,21H,7AH,20H,60H,0FFH,0F7H ;共阳极译码表DELAY1ms: MOV 50H,#2 ;延时1ms子程序LOOP1: MOV 53H,#248NOPLOOP2:DJNZ 53H,LOOP2DJNZ 50H,LOOP1RETDELAY1:MOV 51H,#5 ;延时子程序DELAY1DELAY3:DJNZ 51H,DELAY3RET;----键盘子程序KEY: LCALL KS ;调用检测按键子程序JNZ K1 ;有键按下继续LCALL DELAY2 ;无键按调用延时去抖ACALL DIR ;调用动态显示AJMP KEY ;返回继续检测按键K1: LCALL DELAY2 ;有键按下延时去抖动LCALL KS ;再调用检测按腱子程序JNZ K2 ;确认有按键进行下一步ACALL DIR ;调用动态显示AJMP KEY ;无键按下返回继续检测K2: MOV R2,#0EFH ;将扫描值送入R2暂存MOV R3,#00H ;将第一列值送入R3暂存K3: MOV P1,R2 ;将R2值送入P1口L0: JB P1.0,L1 ;P1.0等于1跳转到L1MOV A,#00H ;将第一行值送入ACCAJMP LK ;跳转到键值处理程序L1: JB P1.1,L2 ;P1.1等于1跳转到L2MOV A,#04H ;将第二行的行值送入ACCAJMP LK ;跳转到键值处理程序L2: JB P1.2,L3 ;P1.2等于1跳转到L3MOV A,#08H ;将第三行行值送入ACCAJMP LK ;跳转到键值处理程序L3: JB P1.3,NEXT ;P1.3等于1跳转到NEXT处MOV A,#0CH ;将第四行行值送入ACCLK: ADD A,R3 ;行值与列值相加后的键值送入A PUSH ACC ;将A中的值送入堆栈暂存K4: LCALL DELAY2 ;调用延时去抖程序LCALL KS ;调用按键检测程序JNZ K4 ;按键没有松开继续返回检测POP ACC ;将堆栈值送入ACCMOV DPTR,#KEYTABMOVC A,@A+DPTRRETNEXT: INC R3 ;列值加一MOV A,R2 ;R2值送入AJNB ACC.7,KEY ;扫描完至KEY处进行下一扫描RL A ;扫描未完将值左移一位进行下一列扫描MOV R2,A ;将ACC值送入R2暂存AJMP K3 ;跳转到K3继续KS: MOV P1, #0FH ;将P1口高四位置0低四位置1MOV A,P1 ;读P1口XRL A,#0FH ;将A中的值与A中的值相异或RET ;子程序返回KEYTAB:DB 1,2,3,10,4,5,6,11,7,8,9,12,15,0,14,13 ;键值表DELAY2:MOV 52H,#2H ;延时去抖动子程序LP1: MOV 53H,#0FAHLP2: DJNZ 53H,LP2DJNZ 52H,LP1RETEND四、讨论、心得本次计算器的实验是一次综合性比较强的实验,对前面所学的知识是一个很好的考察。

相关文档
最新文档