微机原理实验 简易计算器

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

【实验题目】

简易计算器设计

【实验目的】

综合测试学生微机接口技术及应用能力,包括系统构思设计、电路设计搭建、软件调试等;

结合应用实际,培养学生运用微机技术服务应用、服务实际的能力。

【基本要求】

1)利用实验箱上的4x4键盘及6位数码管,实现两个16位宽的非负整数(0~65535)进行+、-、×运算,计算结果限制在范围-65535~65535,超过范围在数码管最低位显示E;

2) 16个按键的分配可以自行指定;

【扩展要求】

1)按基本要求保持输入的范围不变(16位宽),扩展计算结果的范围到用足6位数码管,当计算结果超过-65535~999999时,显示E;

2)增加÷的功能,有小数显示;

【实验程序】

;该程序实现了基本要求及扩展要求的2)

DSEG SEGMENT

BUFF DB 6 DUP(?)

LED_7 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH, 39H,5EH,79H,71H,00H,40H

POSITION DB 0DFH,0EFH,0F7H,0FBH,0FDH,0FEH

UNIT10 DW 10000,1000,100,10,1

NEWNUM DB 0

COUNT DB 0

FLAG DB 0 ;是否有键按下的标志

NEGTI DB 0 ;是否为负数的标志

NUM DW 0

NUM1 DW 0

NUM2 DW 0

TAG DB 0 ;运算种类标志

POINT DB 0 ;除法结果添加小数点标志

RESULT DW 0

DSEG ENDS

CSEG SEGMENT

ASSUME DS:DSEG,CS:CSEG

START:

MOV AX,DSEG

MOV DS,AX

MOV DX,300CH ;8255初始化

MOV AL,81H

OUT DX,AL

LEA SI,BUFF MOV CX,6

NEXT:

MOV BYTE PTR[SI],16

INC SI

LOOP NEXT

CALL SHOW ;将显示缓冲区中内容在LED上一次显示出来

MOV COUNT,0 ;记按下了几位数

NEXT2:

CALL SHOW

CALL SCAN ;判断是否有按键按下

CMP FLAG,1

JZ OK

JMP NEXT2

OK:

MOV FLAG,0

MOV POINT,0

MOV DX,3000H ;判断是哪一个键被按下

MOV AL,0FFH

OUT DX,AL

MOV CH,-1 ;CH用于保存当前被扫描的列号MOV CL,07FH

XL:

ROL CL,1

INC CH

MOV DX,3000H

MOV AL,CL

1/ 7

OUT DX,AL

MOV DX,3008H

IN AL,DX

AND AL,0FH

CMP AL,0FH

JZ XL ;选中下一列被扫描

CMP AL,0EH

JNZ FOUR

MOV CL,0 ;CL保存行号

JMP FREE

FOUR:

CMP AL,0DH

JNZ BA

MOV CL,4

JMP FREE

BA:

CMP AL,0BH

JNZ SHIER

MOV CL,8

JMP FREE

SHIER:

CMP AL,07H

JNZ XL

MOV CL,12

FREE:

ADD CH,CL ;行列值相加为按键代表的值

CMP CH,9

JBE SHUZI

CMP CH,12 ;加法

JZ JIAFA

CMP CH,13 ;减法

JZ JIANFA

CMP CH,14 ;乘法

JZ CHENGFA

CMP CH,15 ;除法

JZ CHUFA

CMP CH,11 ;等号时进行运算

JZ YUNSUAN

CMP CH,10 ;此键清屏重新输入

JZ CLEAR

SHUZI:

INC COUNT

MOV NEWNUM,CH

CALL COPY ;将新输入的按键值送入显示缓冲区的最末位

MOV DX,3000H ;将LED关显示MOV AL,0FFH

OUT DX,AL

CALL DELAY2

JMP NEXT2

JIAFA:

MOV TAG,1 ;置加法标志

CALL TO_DEC ;将输入的数转化为十进制数保存MOV AX,NUM

MOV NUM1,AX

JMP START ;继续输入第二个按键数JIANFA:

MOV TAG,2

CALL TO_DEC

MOV AX,NUM

MOV NUM1,AX

JMP START

CHENGFA:

MOV TAG,3

CALL TO_DEC

MOV AX,NUM

MOV NUM1,AX

JMP START

CHUFA:

MOV TAG,4

CALL TO_DEC

MOV AX,NUM

MOV NUM1,AX

JMP START

CLEAR:

JMP START

YUNSUAN:

CALL TO_DEC ;将第二次输入的数转化为十进制数保存

MOV AX,NUM

MOV NUM2,AX

CMP TAG,1

JZ SJIAF

CMP TAG,2

JZ SJIANF

CMP TAG,3

JZ SCHENGF

CMP TAG,4

JZ SCHUF

YEAH:

CALL CHULI ;将结果中零的位置16关显示

相关文档
最新文档