一.实验内容
设计一个计算器,实现两位数加减运算
二.实验器材
8086
8255a
74273
74154
7427
Res
Button
Not
7seg-mpx4-cc
三.设计方案
A.概要设计
<1>.变量定义
X 存放操作数
y 存第一个操作数
z 获取的当前键值
f 存放运算符
fz 用于标记按键是否弹起
OUTBUFF 用存放将显示当前数据或运算符
ff 用于标记:与 z 结合区分(10-16 功能符与 10-16 的数据值)
.<2>.程序以数码管显示为主,完全显示 OUTBUFF 后,扫描一次方阵开
关是否有键按下。若有且按键弹起,则进行键值处理,修改 OUTBUFF,再次完
成数码管的显示;否则,保持显示继续扫描方阵开关。
B.详细设计
<1>.主程序
调用各个子程序
<2>.显示数码管子程序
动态显示 OUTBUFF 的内容
<3>.扫描键盘输入子程序
无键按下,退出子程序;
否则,确定按键位置(行,列值),计算键值存于 z
此时 z(0-15),则 z 初始化值不在此范围内
<4>.键值处理子程序:
.z>=10,为功能符,置功能标记 ff 为 1,x 转存到 y,初始化 x
z=10/11 或 14,15, 为运算符,置标记为 ff=1,保存在 f 中,Over
z=12,置功能标记 ff 为 0,为“=”,取 f,计算结果
f 为 10,减号,y-x->z,跳出子循环 Over
f 为 11,加号,y+x->z,跳出子循环 Over
z=13,为清屏键,初始化 x,y,f 及 OUTBUFF
.否则,置功能标记 ff 为 0
若 x 为初始值,将 z 赋给 x
否则,10*x+z->x,x->z,跳转至 OUTBUFF 转存
跳转至 OUTBUFF 转存。
子程序返回前,结合 z 和 ff 修改 OUTBUFF 中的内容,然后始化 z。
若 ff=1,将当前值 z 赋给 OUTBUFF 最低位;否则,将 z 的各位上的数依次保存在
OUTBUFF 中
四.实现功能
可实现基本的加、减、乘、除四则运算,计算数值范围 0-255
五.实验不足与改进
<1>.只能实现部分三位数的运算(255 以内)
<2>.未对溢出做出相应处理
<3>.0 有时不会显示
附图:
1、电路图:
总的电路图:
放大后的总电路图:
子电路总电路图:
放大的子电路图:
2、运行截图:
3.程序代码
;new
PA EQU 200H
PB EQU 202H
PC EQU 204H
P EQU 206H
DATA SEGMENT
OUTBUFF DB 16,16,16,16
LEDTAB
DB
3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40h,46h,48h,39h,80h,
71h,80h
z db 0ffh ;接收当前读取的键值
x db 0ffh ;当前操作数
y db 0ffh ;操作数
f db 0ffh
;操作符
ff db 0
;键值处理:正常数据其值为 0,功能符号时置为 1 用于
将 z 转存到 OUTBUFF
fz db 0
;用于判定按键是否弹起
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
;****************主程序****************
main proc
START:
MOV AX,DATA