资源描述
课 程 设 计
课程名称 微机课程设计
题目名称__ 计算器
学生学院____ _ 自动化________
专业班级____ 13自动化()班_
学 号
学生姓名___ __ _
指导教师______ ___ __
2015 年 12月30日
实验任务
.一.目的
1. 巩固和加深对《微机原理及应用》课程内容的认识和理解,提高应用水平;
2. 掌握汇编语言程序的编程方法;
3. 熟悉键盘控制和七段数码管的使用。
二.设计要求
课程设计内容上机编程:
1. 在显示器上显示任意六位十六进制数;
2. 将8个键按实验室要求定义键值,按任意键在显示器上显示对应键值,要求显示值能左移;
3. 实现:
a) 定义键盘按键,12个为数字键1~E,4个功能键:加号+,除号÷,等号=,CLEAR 清零键;
b) 可进行四位10进制加法运算;
c) 可进行四位16进制除法运算。
4. 电路框图
5.课程设计报告
目录
1.程序一 4
1.1问题: 4
1.2代码: 4
2.程序二 4
2.1问题: 5
2.2代码: 5
3.程序一 9
3.1问题: 9
3.2代码: 9
二、系统设计说明 21
三、程序流程设计图 21
四、个人总结 22
附录: 23
1.程序一
1.1问题:
在显示器上显示以下六位十六进制数:1 D 3 B 5 C
1.2代码:
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
;TABLE DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H
; DB 0FEH,0E6H,0EEH,2EH,9CH,7AH,9EH,8EH ;设置0~F数码管段码
VA1 DB 01H,0DH,03H,0BH,05H,0CH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA ;8255初始化
MOV DS,AX
MOV DX,0606H ;信号线设为IOY0
MOV AL,90H ;端口A、B为输出
OUT DX,AL ;DX为控制端口地址
A1: LEA SI,VA1
MOV CX,0006H
MOV AL,0FBH ;11111011
A2: MOV DX,0604H
OUT DX,AL ;B口上拉?
PUSH AX ;利用AX移位
MOV BX,OFFSET TABLE
MOV AL,[SI]
XLAT ; 把以DS:[BX+AL]为地址的待查表格的一个字节内容送到AL累加器中。
;在执行该指令前,将数据表偏移址送BX中,将待查字节在数据表的偏移指针送AL
MOV DX,0602H
OUT DX,AL ;查表代码送C口显示
INC SI ;SI+1
CALL DALLY
POP AX
ROL AL,1
LOOP A2
JMP A1
DALLY: PUSH CX ;延时
MOV CX,0002H
A3: MOV AX,00FFH
A4: DEC AX
JNZ A4
LOOP A3
POP CX
RET
CODE ENDS
END START
2.程序二
2.1问题:
将8个键按实验室要求定义键值,按任意键在显示器上显示对应键值,要求显示值能左移;
D
6
2
E
5
F
1
0
2.2代码:
STACK SEGMENT STACK
DW 32 DUP(?)
STACK ENDS
DATA SEGMENT
VA1 DB 7FH,0BFH,0DFH,0EFH,0F7H,0FBH
;VA1 DB 0FBH,0F7H,0EFH,0DFH,0BFH,7FH
;VA1 DB 0DFH,0EFH,0F7H,0FBH,0FDH,0FEH
VA2 DB 00H,00H,00H,00H,00H,00H
TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,90H
MOV DX,0606H
OUT DX,AL
MOV BX,0000H
STT: MOV AL,00H
MOV DX,0604H
OUT DX,AL
MOV DX,0600H
IN AL,DX
AND AL,0CH
CMP AL,0CH
; AND AL,0C6H
; CMP AL,0C6H
JNZ KEYXD
CALL DISP
JMP STT
KEYXD:CALL TIME
MOV DX,0600H
IN AL,DX
AND AL,0CH
CMP AL,0CH
; AND AL,0C6H
; CMP AL,0C6H
JNZ KEY_JIAN
JMP STT
KEY_JIAN:MOV DX,0604H
MOV AL,0FBH
OUT DX,AL
MOV DX,0600H
IN AL,DX
TEST AL,04H
JNZ KEY_D
CALL KEY5
JMP STTK
KEY_D: TEST AL,08H
JNZ KEY_F
CALL KEYD
JMP STTK
KEY_F: MOV DX,0604H
MOV AL,0F7H
OUT DX,AL
MOV DX,0600H
IN AL,DX
TEST AL,04H
JNZ KEY_6
CALL KEYF
JMP STTK
KEY_6: TEST AL,08H
JNZ KEY_1
CALL KEY6
JMP STTK
KEY_1: MOV DX,0604H
MOV AL,0EFH
OUT DX,AL
MOV DX,0600H
IN AL,DX
TEST AL,04H
JNZ KEY_2
CALL KEY1
JMP STTK
KEY_2: TEST AL,08H
JNZ KEY_0
CALL KEY2
JMP STTK
KEY_0: MOV DX,0604H
MOV AL,0DFH
OUT DX,AL
MOV DX,0600H
IN AL,DX
TEST AL,04H
JNZ KEY_E
CALL KEY0
JMP STTK
KEY_E: TEST AL,08H
JNZ ABC
CALL KEYE
ABC: JMP STTK
;-----------------------------
KEY0: CALL LP1
MOV AL,3FH;--------------------
MOV [DI+5],AL
CALL DISP
RET
KEY1: CALL LP1
MOV AL,06H;--------------------
MOV [DI+5],AL
CALL DISP
RET
KEY2: CALL LP1
MOV AL,5BH;--------------------
MOV [DI+5],AL
CALL DISP
RET
KEY5: CALL LP1
MOV AL,6DH;--------------------
MOV [DI+5],AL
CALL DISP
RET
KEY6: CALL LP1
MOV AL,7DH;--------------------
MOV [DI+5],AL
CALL DISP
RET
KEYD: CALL LP1
MOV AL,5EH;
;MOV AL,0DH;--------------------
MOV [DI+5],AL
CALL DISP
RET
KEYE: CALL LP1
MOV AL,79H;--------------------
MOV [DI+5],AL
CALL DISP
RET
KEYF: CALL LP1
MOV AL,71H;--------------------
MOV [DI+5],AL
CALL DISP
RET
;-------------------------------------
;---------------------------------------
LP1:
MOV DI,OFFSET VA2
MOV CX,0005H
LP2:
MOV AL,[DI+4]
MOV [DI+5],AL
DEC SI
DEC DI
LOOP LP2
RET
DISP: MOV SI,OFFSET VA1
MOV DI,OFFSET VA2
MOV BX,OFFSET TABLE
MOV DL,[DI+5]
CMP DL,3FH
JNZ DIR5
MOV DL,[DI+4]
CMP DL,3FH
JNZ DIR4
MOV DL,[DI+3]
CMP DL,3FH
JNZ DIR3
MOV DL,[DI+2]
CMP DL,3FH
JNZ DIR2
MOV DL,[DI+1]
CMP DL,3FH
JNZ DIR1
JMP DIR0
DIR5: MOV CX,0006H
JMP DIR
DIR4: MOV CX,0005H
JMP DIR
DIR3: MOV CX,0004H
JMP DIR
DIR2: MOV CX,0003H
JMP DIR
DIR1: MOV CX,0002H
JMP DIR
DIR0: MOV CX,0001H
DIR : MOV DX,0604H
MOV AL,[SI]
OUT DX,AL
MOV DX,0602H
MOV AL,[DI]
OUT DX,AL
CALL TIME
INC SI
INC DI
LOOP DIR
RET
TIME : PUSH AX
PUSH CX
MOV CX,0005H
TIME1: MOV AX,00F0H
TIME2: DEC AX
JNZ TIME2
LOOP TIME1
POP CX
POP AX
RET
;------------------------------
STTK: CALL DISP
MOV AL,00H
MOV DX,0604H
OUT DX,AL
MOV DX,0600H
IN AL,DX
AND AL,0CH
CMP AL,0CH
JNZ STTK
JMP STT
CODE ENDS
END START
3.程序一
3.1问题:
实现:
a) 定义键盘按键,12个为数字键1~E,4个功能键:加号+,除号÷,等号=,CLEAR 清零键;
b) 可进行四位10进制加法运算;
c) 可进行四位16进制除法运算。
3.2代码:
STACK SEGMENT STACK
DW 32 DUP(?)
STACK ENDS
DATA SEGMENT
VA2 DB 0FCH,0FCH,0FCH,0FCH,0FCH,0FCH;检测非0
VA1 DB 7FH,0BFH,0DFH,0EFH,0F7H,0FBH;位选
VA3 DB 00H,00H,00H,00H,00H,00H
VA4 DB 00H,00H,00H,00H,00H,00H
TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H;0-F的显示段选
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,90H
MOV DX,0606H
OUT DX,AL
MOV BX,0000H ;初始化8255
CALL CLEAR
STT: MOV AL,00H
MOV DX,0604H
OUT DX,AL
MOV DX,0600H
IN AL,DX
AND AL,0FH ;检测是否按键按下
CMP AL,0FH
JNZ KEYXD
CALL DISP
JMP STT
KEYXD:CALL TIME;消除抖动
MOV DX,0600H
IN AL,DX
AND AL,0FH
CMP AL,0FH
JNZ KEY_JIAN
JMP STT
KEY_JIAN:MOV DX,0604H ;确认有按键按下
MOV AL,0FBH ;输入X1为0
OUT DX,AL
MOV DX,0600H
IN AL,DX
TEST AL,01H ;检测Y4高低
JNZ KEY_2 ;高的话跳
CALL KEY3 ;低直接确定是KEY3
JMP STTK
KEY_2: TEST AL,02H ;检测Y3
JNZ KEY_1
CALL KEY2
JMP STTK
KEY_1: TEST AL,04H ;检测Y2
JNZ KEY_CLEAR
CALL KEY1
JMP STTK
KEY_CLEAR: TEST AL,08H ;检测Y1
JNZ KEY_7
CALL KEYCLEAR
JMP STTK
KEY_7: MOV DX,0604H
MOV AL,0F7H ;输入X2为0
OUT DX,AL
MOV DX,0600H
IN AL,DX
TEST AL,01H
JNZ KEY_6
CALL KEY7
JMP STTK
KEY_6: TEST AL,02H
JNZ KEY_5
CALL KEY6
JMP STTK
KEY_5: TEST AL,04H
JNZ KEY_4
CALL KEY5
JMP STTK
KEY_4: TEST AL,08H
JNZ KEY_D
CALL KEY4
JMP STTK
KEY_D: MOV DX,0604H
MOV AL,0EFH ;输入X3为0
OUT DX,AL
MOV DX,0600H
IN AL,DX
TEST AL,01H
JNZ KEY_B
CALL KEYD
JMP STTK
KEY_B: TEST AL,02H
JNZ KEY_9
CALL KEYB
JMP STTK
KEY_9: TEST AL,04H
JNZ KEY_8
CALL KEY9
JMP STTK
KEY_8: TEST AL,08H
JNZ KEY_E
CALL KEY8
JMP STTK
KEY_E: MOV DX,0604H
MOV AL,0DFH ;输入X4为0
OUT DX,AL
MOV DX,0600H
IN AL,DX
TEST AL,01H
JNZ KEY_DIV
CALL KEYE
JMP STTK
KEY_DIV: TEST AL,02H
JNZ KEY_DENG
CALL KEYDIV
JMP STTK
KEY_DENG: TEST AL,04H
JNZ KEY_ADD
CALL KEYDENG
JMP STTK
KEY_ADD: TEST AL,08H
JNZ ABC
CALL KEYADD
ABC: JMP STTK
;-----------------------------
KEY1: CMP BH,00H
JZ KEY1_1
CALL CLEAR
KEY1_1:CALL LP1
MOV AL,06H ;段选
MOV [SI+5],AL
MOV AL,01H ;位选--------------------
MOV [DI+5],AL
CALL DISP
RET
KEY2: CMP BH,00H
JZ KEY2_1
CALL CLEAR
KEY2_1:CALL LP1
MOV AL,5BH ;-------------------
MOV [SI+5],AL
MOV AL,02H ;-------------------
MOV [DI+5],AL
CALL DISP
RET
KEY3: CMP BH,00H
JZ KEY3_1
CALL CLEAR
KEY3_1:CALL LP1
MOV AL,4FH ;-------------------
MOV [SI+5],AL
MOV AL,03H ;-------------------
MOV [DI+5],AL
CALL DISP
RET
KEY4: CMP BH,00H
JZ KEY4_1
CALL CLEAR
KEY4_1:CALL LP1
MOV AL,66H ;--------------------
MOV [SI+5],AL
MOV AL,04H ;--------------------
MOV [DI+5],AL
CALL DISP
RET
KEY5: CMP BH,00H
JZ KEY5_1
CALL CLEAR
KEY5_1:CALL LP1
MOV AL,6DH ;--------------------
MOV [SI+5],AL
MOV AL,05H
MOV [DI+5],AL
CALL DISP
RET
KEY6: CMP BH,00H
JZ KEY6_1
CALL CLEAR
KEY6_1:CALL LP1
MOV AL,7DH ;--------------------
MOV [SI+5],AL
MOV AL,06H
MOV [DI+5],AL
CALL DISP
RET
KEY7: CMP BH,00H
JZ KEY7_1
CALL CLEAR
KEY7_1:CALL LP1
MOV AL,07H ;--------------------
MOV [SI+5],AL
MOV AL,07H
MOV [DI+5],AL
CALL DISP
RET
KEY8: CMP BH,00H
JZ KEY8_1
CALL CLEAR
KEY8_1:CALL LP1
MOV AL,7FH ;--------------------
MOV [SI+5],AL
MOV AL,08H
MOV [DI+5],AL
CALL DISP
RET
KEY9: CMP BH,00H
JZ KEY9_1
CALL CLEAR
KEY9_1:CALL LP1
MOV AL,6FH ;--------------------
MOV [SI+5],AL
MOV AL,09H
MOV [DI+5],AL
CALL DISP
RET
KEYB: CMP BH,00H
JZ KEYB_1
CALL CLEAR
KEYB_1:CALL LP1
MOV AL,7CH ;--------------------
MOV [SI+5],AL
MOV AL,0BH
MOV [DI+5],AL
CALL DISP
RET
KEYD: CMP BH,00H
JZ KEYD_1
CALL CLEAR
KEYD_1:CALL LP1
MOV AL,5EH ;--------------------
MOV [SI+5],AL
MOV AL,0DH
MOV [DI+5],AL
CALL DISP
RET
KEYE: CMP BH,00H ;按键等号
JZ KEYE_1
CALL CLEAR
KEYE_1:CALL LP1
MOV AL,79H ;--------------------
MOV [SI+5],AL
MOV AL,0EH
MOV [DI+5],AL
CALL DISP
RET
KEYADD:CMP BH,00H ;+号按键
JNZ KEYADD_1
CALL LP3
KEYADD_1:MOV BX,0102H ;标志BX0102H代表加法
RET
KEYDIV:CMP BH,00H ;/号按键
JNZ KEYDIV_1
CALL LP3
KEYDIV_1:MOV BX,0103H ;标志BX为0103H代表除法
RET
KEYDENG:MOV BH,01H ;等号功能
CMP BL,02H
JZ K1
CMP BL,03H
JZ K2
STTE: RET
K1: CALL ADD1
JMP STTE
K2: CALL DIV1
JMP STTE
;-----------------------------------------
ADD1: MOV AX,0000H ;加法功能子函数
LEA SI,VA3
LEA DI,VA4
MOV CX,0006H
CLC
ADD1_1:
MOV AL,[DI]
ADC AL,[SI]
AAA
MOV [DI],AL
INC SI
INC DI
LOOP ADD1_1
CALL CHANGE
CALL DISP
RET
;----------------------------------------
DIV1: ;除法功能子函数
PUSH AX;除法子程序
PUSH BX
PUSH DX
MOV SI,OFFSET VA3
MOV DI,OFFSET VA4
MOV AH,00H
MOV CL,4;被除数
MOV AL,[DI+3]
ROL AX,CL
ADD AL,[DI+2]
ROL AX,CL
ADD AL,[DI+1]
ROL AX,CL
ADD AL,[DI]
MOV BH,00H;除数
MOV BL,[SI+3]
ROL BX,CL
ADD BL,[SI+2]
ROL BX,CL
ADD BL,[SI+1]
ROL BX,CL
ADD BL,[SI]
MOV DX,0000H
DIV BX
MOV BX,AX;处理商
AND BX,000FH
MOV [DI],BL
MOV BX,AX
MOV CL,4H
SHR BX,CL
AND BX,000FH
MOV [DI+1],BL
MOV BX,AX
MOV CL,8H
SHR BX,CL
AND BX,000FH
MOV [DI+2],BL
MOV BX,AX
MOV CL,0CH
SHR BX,CL
AND BX,0007H
MOV [DI+3],BL
CALL CHANGE
CALL DISP
POP DX
POP BX
POP AX
RET
;-------------------------------------
KEYCLEAR: ;clear键功能子函数
CALL CLEAR
RET
CLEAR: LEA SI,VA2
LEA DI,VA3
MOV CX,0006H
CLEAR1:MOV AL,3FH;修改整个数组为0
MOV [SI],AL
MOV AL,00H
MOV [DI],AL
INC SI
INC DI
LOOP CLEAR1
MOV BH,00H
RET
;---------------------------------------
LP1: ;[SI][DI]前一位赋值给后一位从而插入新数据不会覆盖前面的数据
MOV SI,OFFSET VA2
MOV DI,OFFSET VA3
MOV CX,0005H
LP2:
MOV AL,[SI+4]
MOV [SI+5],AL
MOV AL,[DI+4]
MOV [DI+5],AL
DEC SI
DEC DI
LOOP LP2
RET
LP3:
MOV CX,0006H
MOV SI,OFFSET VA3
MOV DI,OFFSET VA4
LP4:
MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
LOOP LP4
RET
CHANGE: ;把表里十六进制的值转化为数码管显示的对应的16进制
MOV SI,OFFSET VA2
MOV DI,OFFSET VA4
MOV BX,OFFSET TABLE
MOV CX,0006H
COMP0: MOV AL,[DI]
XLAT
展开阅读全文