1、 课 程 设 计 课程名称 微机课程设计 题目名称__ 计算器 学生学院____ _ 自动化________ 专业班级____ 13自动化()班_ 学 号 学生姓名___ __ _ 指导教师______ ___ __ 2015 年 12月30日 实验任务 .一.目的 1. 巩固和加深对《微机原理及应用》课程内容的认识和理解,提高应用水平; 2. 掌握汇编语言程序的编程方法;
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问题
3、 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,77
4、H,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
5、 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
6、 ;利用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 D
7、ALLY 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个键按实验室要求定义键值,按任意键在显示器上显示对应键值,要求显示值能左移;
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,3
9、9H,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
10、 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 K
11、EY_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 K
12、EY_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,0E
13、FH 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
14、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
15、 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;--
16、 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
17、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 ;-------------------------------------
18、 ;--------------------------------------- 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
19、 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 JN
20、Z 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,
21、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
22、 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) 定义键盘按键,
23、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
24、 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
25、 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
26、 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:
27、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 ;
28、输入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
29、 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
30、 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
31、 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
32、 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
33、 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
34、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
35、 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
36、 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
37、 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,0
38、0H 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
39、 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
40、 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
41、 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
42、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
43、 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
44、 [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
45、被除数 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]
46、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 SH
47、R 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,000
48、6H 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
49、 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 VA
50、4 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






