微机原理课程设计(用8255A实现4位十进制计算器) - 图文(2)

2019-04-10 19:41

课 课程设计报告

附录

一、 软件设计

1. 总程序流程图

扫描 计算键值 数值? 运算符? 清零 “=”? 加法运算 “+”? 减法运算 “-”? 乘法运算 “*”? 显示 存储 除法运算

5

课 课程设计报告

2. 扫描程序流程图

开始 初始化 N 按键闭合 Y 延时12ms N 按键闭合 Y 按键扫描 N 按键释放 Y 保存键值 结束

3. 程序代码

;8255A端口地址:A口:40H,B口:44H,C口:42H,控制端口:46H DATA SEGMENT

X DB X1 DW ?

X2 DW Y DW S DB E DB CC DB

? , ? , ? , ? ;存放数据的每一位 ;存放第一个数据值 ?

;存放第二个数据值

? ;存放运算结果 ? ;存放运算符号值 ? ;按下等号键标记 ? ;存放运算数据位数

6

课 课程设计报告

H L DB DB 0 ;存放按键行号 0 ;存放按键列号

3FH,06H,5BH,4FH,

66H,6DH,7DH,07H,

7FH,6FH,77H,7CH, 39H,5EH,79H,71H

;段码表

DISCODE DB

DATA ENDS CODE SEGMENT

ASSUME CS:CODE DS:DATA

START:

MOV AX,DATA MOV DS,AX MOV AL,90H OUT 46H,AL

KKK:

;设置为A口输入,B口输出,C口输出

MOV DI,OFFSET X+3 ;DI指向X的高位 CALL KEY ;扫描按键 JMP KKK

;以下为按键扫描子程序,程序返回后,在变量H和L中存放当前按键的行列号 KEY PROC

CHECK: CALL

DISP

;等待按键按下的同时进行显示

MOV AL,0F0H ;所有行输出低电平 OUT 44H,AL

IN AL,40H

CMP AL,0FFH ;读列值 JZ CHECK ;若都为高电平则无键按下,等待 MOV CX,50 LOOP $ ;延时消抖

IN AL,DX ;重读列值 CMP AL,0FFH JZ CHECK ;无键按下一直等待

MOV H,0 ;有键按下,先把行列号变量清0 MOV L,0 MOV BL,01H

NEXT:

MOV BH,0FEH ;扫描法读键值:从第一行开始测试,即PC0输出低电平 MOV AL,BH

OUT 44H,AL

NEXTH: IN AL,40H ;读列值,判断是第几列有键按下

TEST AL,BL ;从第一列开始判断

JZ WAIT0 ROL BL,1

CMP BL,10H ;当前行状态下没有列有键按下,则转为对下一行的测试 JZ NEXTL INC

H

;每判断一列,列号加1

7

JMP NEXTH ;再对下一列进行判断

课 课程设计报告

NEXTL: MOV H,0

MOV BL,01H

ROL BH,1 ;对下一行测试,让下一个PC口输出低电平 CMP BH,0EFH JZ EXIT INC L JMP NEXT

WAIT0:

IN

AL,40H ;若有键按下,则等该按键松开后再计算键值

CMP AL,0FFH JNZ WAIT0 MOV CX,50 LOOP $ IN AL,40H CMP AL,0FFH JNZ WAIT0

EXIT: KEY ENDP

;以下为计算键值子程序,通过行列号计算键值(键值=行号*4+列号)键值存放在DL寄存器中 KEYVALUE PROC

MOV DL,L MOV DH,H SHL DL,1

SHL DL,1 ADD DL,DH

CMP DL,9 JNG NUM_CALL CMP DL,14

JL CONT_CALL CMP DL,14 JZ OUTP_CALL CMP DL,15

JZ

NUM_CALL: CALL

;按下的是运算键 ;按下的是等于键 ;列号乘4 ;按下的是数字键

CALL RET

KEYVALUE

;调计算键值子程序

;延时消抖

CLR_CALL ;按下的是清除键 NUMBER ;调数字键处理子程序

JMP EXIT1

CONT_CALL: MOV S,DL ;存放运算键的键值

MOV E,0

CALL COUNT JMP EXIT1

OUTP_CALL: CALL OUTP

JMP EXIT1 CLR_CALL: EXIT1: KEYVALUE ENDP

8

调运算键处理子程序,计算第一个加数

;调等号键处理子程序 ;调清除键处理子程序

CALL CLEAR RET

课 课程设计报告

;以下为清除键处理子程序,按下清除键后,X变量全部清0 CLEAR PROC

MOV X[3],0 MOV X[2],0 MOV X[1],0 MOV X[0],0 CALL BITP RET CLEAR ENDP

;以下为等号键处理子程序,该子程序负责将第二个运算数据的数值计算出来存入X2变量 ;并根据运算符号,调用相应的运算子程序 OUTP PROC

PUSH PUSH PUSH INC CALL

AX DX BX E

COUNT ;调运算键处理子程序,计算第二个运算数据

CMP S,10 JZ ADD_CALL ;运算符为加号,则调用加法子程序 CMP S,11 JZ SUB_CALL ;运算符为减号,则调用减法子程序 CMP S,12 JZ MUL_CALL ;运算符为乘号,则调用乘法子程序 CMP S,13 CALL DIVP ;运算符为除号,则调用除法子程序 JMP STORE1

ADD_CALL: SUB_CALL: MUL_CALL: STORE1:

CALL ADDP

JMP STORE1 CALL SUBP

JMP STORE1 CALL MULP MOV AX,Y

;以下程序将各运算子程序返回的运算结果,按位分解,送入X变量

MOV DX,0

MOV BX,1000 DIV BX

MOV X[0], AL MOV AX,DX MOV BL,100 DIV BL

MOV X[1],AL MOV AL,AH MOV AH,0 MOV BL,10 DIV BL

9


微机原理课程设计(用8255A实现4位十进制计算器) - 图文(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:大学物理简明教程 习题解答(赵近芳)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: