资源描述
课 程 设 计
课程名称 微机课程设计
题目名称__ 计算器(1)
学生学院____ _ 自动化________
专业班级____ 自动化(1)班_ __
学 号 3106000836
学生姓名___ 谢晓新__ _
指导教师______ 李传芳 _____
2008 年 12月 25日
广东工业大学课程设计任务书
题目名称
计算器(1)
学生学院
自动化
专业班级
自动化(1)班
姓 名
谢晓新
学 号
3106000836
一、课程设计的目的
1、巩固和加深对《微机原理及应用》课程内容的认识和理解,提高应用水平
2、掌握汇编语言程序的编程方法
3、熟悉键盘控制和七段数码管的使用
二、课程设计的内容
1.把存储器单元中的0AH,02H,0FH,09H从四位七段LED数码管同时显示出来,要求做成循环程序,并使用XLAT来译码。
2.编写程序,实现以下键盘功能,按任意键在显示器上显示对应键值,要求显示值能够实现左移功能。
5
A
7
F
B
3
C
0
3.实现:
a)定义键盘按键,5个为数字键3、4、5、6、7,7个功能键:减号—,除号÷,等号=;
b)可进行三位8进制减法运算;
c)可进行两位10进制除法运算。
三、课程设计应完成的工作
1.搜集、整理和研究资料,可参考教材后的实例。
2.按电路框图连接电路,编写程序完成各个程序设计要求,并完成调试。
3.完成课程设计的报告书一份。
四、课程设计进程安排
序号
设计各阶段内容
地点
起止日期
1
领取任务书
实2-206
12.22
2
收集,整理资料
图书馆、宿舍
12.22
3
上机编写调试程序
实2-206
12.23~12.24
4
撰写课程设计报告
宿舍
12.25
五、应收集的资料及主要参考文献
1.微型计算机原理及应用.许立梓等编.北京:机械工业出版社,2003
2.微型计算机原理及应用—习题解答、试验指导及课程设计. 许立梓等编.北京:机械
工业出版社,2008
发出任务书日期:2008年 12月 22日 指导教师签名:
计划完成日期: 2008 年 12月 25日 基层教学单位责任人签章:
主管院长签章:
目录
一、源程序…………………………………………………………………………5
1.程序一………………………………………………………………………5
1.1 题目……………………………………………………………………5
1.2 源程序…………………………………………………………………5
2.程序二………………………………………………………………………6
2.1题目……………………………………………………………………6
2.2 源程序…………………………………………………………………6
3.程序三………………………………………………………………………10
3.1题目……………………………………………………………………10
3.2 源程序…………………………………………………………………10
二、心得与体会……………………………………………………………………19
三、参考文献………………………………………………………………………19
1.程序一
1.1题目:把存储器单元中的0AH,02H,0FH,09H从四位七段LED数码管同时显示出来,要求做成循环程序,并使用XLAT来译码。
1.2源程序:
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
TAB1 DB 0AH,02H,0FH,09H ;设置四位查询位
TAB2 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;设置0~F的十六位数码管段码
DB 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,80H ;8255A初始化
OUT 63H,AL
L1: MOV DL,0FEH
MOV SI,OFFSET TAB1
MOV CX,0004H
L2: MOV AL,DL ;位码送给AL
OUT 60H,AL
MOV AL,[SI]
MOV BX,OFFSET TAB2 ;查表取出数码管的段码
XLAT TAB2
OUT 61H,AL ;查表的段码送A口显示
INC SI
ROL DL,01H ;下个要显示的数码管位码
CALL TIME
LOOP L2
JMP L1
TIME: PUSH AX ;延时程序
PUSH CX
MOV CX,0002H
TIME1: MOV AX,0300H
TIME2: DEC AX
JNZ TIME2
LOOP TIME1
POP CX
POP AX
RET
CODE ENDS
END START
2.程序一
2.1题目:2.编写程序,实现以下键盘功能,按任意键在显示器上显示对应键值,要求显示值能够实现左移功能。
5
A
7
F
B
3
C
0
2.2源程序:
STACK SEGMENT STACK
DW 64 DUP (?)
STACK ENDS
DATA SEGMENT
VAR1 DB 07H,0BH,0DH,0EH
VAR2 DB 3FH,3FH,3FH,3FH,3FH
VAR3 DB 00H,00H,00H,00H,00H
TABL DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 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,88H
OUT 63H,AL ;8255A初始化
STT: MOV AL,00H ;键盘测试
OUT 60H,AL
NEXT: IN AL,62H
AND AL,60H
CMP AL,60H
JNZ KEYABC
CALL DISP ;调用显示程序
JMP STT
;------------------------------------------------------------------------------
KEYABC: CALL TIME ;延时,去抖动
IN AL,62H
AND AL,60H
CMP AL,60H
JNZ KEY
JMP STT
KEY: MOV AL,0FEH ;键盘扫描识别
OUT 60H,AL
IN AL,62H
TEST AL,40H
JNZ KEY_B
CALL KEY5
JMP STTK
KEY_B: TEST AL,20H
JNZ KEY_A
CALL KEYB
JMP STTK
KEY_A: MOV AL,0FDH
OUT 60H,AL
IN AL,62H
TEST AL,40H
JNZ KEY_3
CALL KEYA
JMP STTK
KEY_3: TEST AL,20H
JNZ KEY_7
CALL KEY3
JMP STTK
KEY_7: MOV AL,0FBH
OUT 60H,AL
IN AL,62H
TEST AL,40H
JNZ KEY_C
CALL KEY7
JMP STTK
KEY_C: TEST AL,20H
JNZ KEY_F
CALL KEYC
JMP STTK
KEY_F: MOV AL,0F7H
OUT 60H,AL
IN AL,62H
TEST AL,40H
JNZ KEY_0
CALL KEYF
JMP STTK
KEY_0: TEST AL,20H
JNZ KEY_01
CALL KEY0
KEY_01: JMP STTK
;------------------------------------------------------------------------------
;按键5处理子程序
KEY5: CALL LP1 ;低4位字节前移
MOV AL,05H
MOV [DI+4],AL
LEA BX,TABL ;查表取出要显示数字的数码管段码
XLAT TABL
MOV [SI+4],AL
CALL DISP ;显示
RET ;返回
;------------------------------------------------------------------------------
KEYB: CALL LP1 ;按键B处理子程序
MOV AL,0BH
MOV [DI+4],AL
LEA BX,TABL
XLAT TABL
MOV [SI+4],AL
CALL DISP
RET
;------------------------------------------------------------------------------
KEYA: CALL LP1 ;按键A处理子程序
MOV AL,0AH
MOV [DI+4],AL
LEA BX,TABL
XLAT TABL
MOV [SI+4],AL
CALL DISP
RET
;------------------------------------------------------------------------------
KEY3: CALL LP1 ;按键3处理子程序
MOV AL,03H
MOV [DI+4],AL
LEA BX,TABL
XLAT TABL
MOV [SI+4],AL
CALL DISP
RET
;------------------------------------------------------------------------------
KEY7: CALL LP1 ;按键7处理子程序
MOV AL,07H
MOV [DI+4],AL
LEA BX,TABL
XLAT TABL
MOV [SI+4],AL
CALL DISP
RET
;------------------------------------------------------------------------------
KEYC: CALL LP1 ;按键C处理子程序
MOV AL,0CH
MOV [DI+4],AL
LEA BX,TABL
XLAT TABL
MOV [SI+4],AL
CALL DISP
RET
;------------------------------------------------------------------------------
KEYF: CALL LP1 ;按键F处理子程序
MOV AL,0FH
MOV [DI+4],AL
LEA BX,TABL
XLAT TABL
MOV [SI+4],AL
CALL DISP
RET
;------------------------------------------------------------------------------
KEY0: CALL LP1 ;按键0处理子程序
MOV AL,00H
MOV [DI+4],AL
LEA BX,TABL
XLAT TABL
MOV [SI+4],AL
CALL DISP
RET
;------------------------------------------------------------------------------
LP1: MOV CX,0004H ;数据移位保存子程序(前移四位)
MOV SI,OFFSET VAR2
MOV DI,OFFSET VAR3
LP2: MOV AL,[SI+3]
MOV [SI+4],AL
MOV AL,[DI+3]
MOV [DI+4],AL
DEC SI
DEC DI
LOOP LP2
RET
;------------------------------------------------------------------------------
DISP: MOV SI,OFFSET VAR1 ;显示子程序
MOV DI,OFFSET VAR2
MOV CX,0004H
DIR: MOV AL,[SI]
OUT 60H,AL
MOV AL,[DI]
OUT 61H,AL
CALL TIME
INC SI
INC DI
LOOP DIR
RET
;------------------------------------------------------------------------------
TIME: PUSH AX ;延时程序
PUSH CX
MOV CX,0002H
TIME1: MOV AX,0300H
TIME2: DEC AX
JNZ TIME2
LOOP TIME1
POP CX
POP AX
RET
;------------------------------------------------------------------------------
STTK: CALL DISP ;放键测试程序
MOV AL,00H
OUT 60H,AL
IN AL,62H
AND AL,60H
CMP AL,60H
JNZ STTK
JMP STT
CODE ENDS
END START
3.程序一
3.1题目:实现:
a)定义键盘按键,5个为数字键3、4、5、6、7,7个功能键:减号—,除号÷,等号=;
b)可进行三位8进制减法运算;
c)可进行两位10进制除法运算。
3.2源程序:
STACK SEGMENT STACK
DW 64 DUP (?)
STACK ENDS
DATA SEGMENT
VAR1 DB 07H,0BH,0DH,0EH ;数码管位码
VAR2 DB 3FH,3FH,3FH,3FH,3FH
VAR3 DB 00H,00H,00H,00H,00H ;当前值
VAR4 DB 00H,00H,00H,00H,00H ;保存值
TABL DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 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,88H
OUT 63H,AL ;8255A初始化
MOV BX,0000H ;BX清零
STT: MOV AL,00H ;键盘测试
OUT 60H,AL
NEXT: IN AL,62H
AND AL,60H
CMP AL,60H
JNZ KEYABC
CALL DISP ;调用显示程序
JMP STT
;------------------------------------------------------------------------------
KEYABC: CALL TIME ;延时,去抖动
IN AL,62H
AND AL,60H
CMP AL,60H
JNZ KEY
JMP STT
KEY: MOV AL,0FEH ;键盘扫描识别
OUT 60H,AL
IN AL,62H
TEST AL,40H
JNZ KEY_4
CALL KEYDEN
JMP STTK
KEY_4: TEST AL,20H
JNZ KEY_JIAN
CALL KEY4
JMP STTK
KEY_JIAN:MOV AL,0FDH
OUT 60H,AL
IN AL,62H
TEST AL,40H
JNZ KEY_5
CALL KEYJIAN
JMP STTK
KEY_5: TEST AL,20H
JNZ KEY_CHU
CALL KEY5
JMP STTK
KEY_CHU: MOV AL,0FBH
OUT 60H,AL
IN AL,62H
TEST AL,40H
JNZ KEY_6
CALL KEYCHU
JMP STTK
KEY_6: TEST AL,20H
JNZ KEY_3
CALL KEY6
JMP STTK
KEY_3: MOV AL,0F7H
OUT 60H,AL
IN AL,62H
TEST AL,40H
JNZ KEY_7
CALL KEY3
JMP STTK
KEY_7: TEST AL,20H
JNZ KEY_71
CALL KEY7
KEY_71: JMP STTK
;------------------------------------------------------------------------------
KEY3: CMP BH,00H ;按键3处理子程序
JZ KEY3_1 ;未按过符号键,不清零
CALL CLEAR ;已按过符号键,清零
KEY3_1: CALL LP1 ;低4位字节前移
MOV AL,03H
MOV [DI+4],AL
PUSH BX ;保护BX
LEA BX,TABL
XLAT TABL
MOV [SI+4],AL
CALL DISP ;显示
POP BX
RET ;返回
;------------------------------------------------------------------------------
KEY4: CMP BH,00H ;按键4处理子程序
JZ KEY4_1
CALL CLEAR
KEY4_1: CALL LP1
MOV AL,04H
MOV [DI+4],AL
PUSH BX
LEA BX,TABL
XLAT TABL
MOV [SI+4],AL
CALL DISP
POP BX
RET
;------------------------------------------------------------------------------
KEY5: CMP BH,00H ;按键5处理子程序
JZ KEY5_1
CALL CLEAR
KEY5_1: CALL LP1
MOV AL,05H
MOV [DI+4],AL
PUSH BX
LEA BX,TABL
XLAT TABL
MOV [SI+4],AL
CALL DISP
POP BX
RET
;------------------------------------------------------------------------------
KEY6: CMP BH,00H ;按键6处理子程序
JZ KEY6_1
CALL CLEAR
KEY6_1: CALL LP1
MOV AL,06H
MOV [DI+4],AL
PUSH BX
LEA BX,TABL
XLAT TABL
MOV [SI+4],AL
CALL DISP
POP BX
RET
;------------------------------------------------------------------------------
KEY7: CMP BH,00H ;按键7处理子程序
JZ KEY7_1
CALL CLEAR
KEY7_1: CALL LP1
MOV AL,07H
MOV [DI+4],AL
PUSH BX
LEA BX,TABL
XLAT TABL
MOV [SI+4],AL
CALL DISP
POP BX
RET
;.........................................................................
KEYJIAN: CMP BH,00H ;按键-处理子程序
JNZ KEYJIAN_1
CALL LP3
KEYJIAN_1: CMP BX,0101H
RET
;------------------------------------------------------------------------------
KEYCHU: CMP BH,00H ;按键/处理子程序
JNZ KEYCHU_1
CALL LP3
KEYCHU_1: CMP BX,0102H
RET
;------------------------------------------------------------------------------
KEYDEN: CMP BL,00H ;按键=处理子程序
JNZ KEYDEN_1
CALL CLEAR
CALL DISP
KEYDEN_1: MOV BH,01H
CMP BL,01H ;是-号?
JZ K1 ;进行减法运算
CMP BL,02H ;是/号?
JZ K2 ;进行除法运算
STTE: RET
K1: CALL JIAN
JMP STTE
K2: CALL CHU
JMP STTE
;------------------------------------------------------------------------------
JIAN: MOV SI,OFFSET VAR3 ;三位8进制减法子程序
MOV DI,OFFSET VAR4
CLC
MOV CX,0004H
JIAN_1: MOV AL,[DI]
SBB AL,[SI]
CMP AL,08H
JB B1
AND AL,07H
STC
JMP B2
B1: CLC
B2: MOV [DI],AL
INC SI
INC DI
LOOP JIAN_1
CALL CHANGE
CALL DISP
MOV BL,00H ;运算完毕符号位清零
RET
;------------------------------------------------------------------------------
CHU: MOV SI,OFFSET VAR3 ;两位10进制除法子程序
MOV DI,OFFSET VAR4
CLC
MOV DL,[DI] ;调整VAR4,10进制转换成16进制,保存在DX
MOV DH,00H
MOV BX,10
展开阅读全文