资源描述
课 程 设 计 课程名称 微机课程设计 题目名称_ 计算器(1) 学生学院_ _ 自动化_ 一、课程设计的目的1、巩固和加深对微机原理及应用课程内容的认识和理解,提高应用水平2、掌握汇编语言程序的编程方法3、熟悉键盘控制和七段数码管的使用二、课程设计的内容 1.把存储器单元中的0AH,02H,0FH,09H从四位七段LED数码管同时显示出来,要求做成循环程序,并使用XLAT来译码。2编写程序,实现以下键盘功能,按任意键在显示器上显示对应键值,要求显示值能够实现左移功能。5A7FB3C0 3.实现:a)定义键盘按键,5个为数字键3、4、5、6、7,7个功能键:减号,除号,等号;b)可进行三位8进制减法运算;c)可进行两位10进制除法运算。三、课程设计应完成的工作1.搜集、整理和研究资料,可参考教材后的实例。2.按电路框图连接电路,编写程序完成各个程序设计要求,并完成调试。3.完成课程设计的报告书一份。四、课程设计进程安排序号设计各阶段内容地点起止日期1领取任务书实2-20612.222收集,整理资料图书馆、宿舍12.223上机编写调试程序实2-20612.2312.244撰写课程设计报告宿舍12.25五、应收集的资料及主要参考文献1.微型计算机原理及应用.许立梓等编.北京:机械工业出版社,20032.微型计算机原理及应用习题解答、试验指导及课程设计. 许立梓等编.北京:机械工业出版社,2008发出任务书日期:2008年 12月 22日 指导教师签名:计划完成日期: 2008 年 12月 25日 基层教学单位责任人签章:主管院长签章:目录一、源程序51程序一51.1 题目51.2 源程序52程序二62.1题目62.2 源程序63程序三103.1题目103.2 源程序10二、心得与体会19三、参考文献191.程序一1.1题目:把存储器单元中的0AH,02H,0FH,09H从四位七段LED数码管同时显示出来,要求做成循环程序,并使用XLAT来译码。1.2源程序:STACK SEGMENT STACK DW 64 DUP(?)STACK ENDSDATA SEGMENTTAB1 DB 0AH,02H,0FH,09H ;设置四位查询位TAB2 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;设置0F的十六位数码管段码 DB 7FH,6FH,77H,7CH,39H,5EH,79H,71HDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AL,80H ;8255A初始化 OUT 63H,ALL1: MOV DL,0FEH MOV SI,OFFSET TAB1 MOV CX,0004HL2: 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 L1TIME: PUSH AX ;延时程序 PUSH CX MOV CX,0002HTIME1: MOV AX,0300HTIME2: DEC AX JNZ TIME2 LOOP TIME1 POP CX POP AX RETCODE ENDS END START2.程序一2.1题目:2编写程序,实现以下键盘功能,按任意键在显示器上显示对应键值,要求显示值能够实现左移功能。5A7FB3C02.2源程序:STACK SEGMENT STACK DW 64 DUP (?)STACK ENDSDATA SEGMENTVAR1 DB 07H,0BH,0DH,0EHVAR2 DB 3FH,3FH,3FH,3FH,3FHVAR3 DB 00H,00H,00H,00H,00HTABL DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71HDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AL,88H OUT 63H,AL ;8255A初始化STT: MOV AL,00H ;键盘测试 OUT 60H,ALNEXT: 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 STTKEY: MOV AL,0FEH ;键盘扫描识别 OUT 60H,AL IN AL,62H TEST AL,40H JNZ KEY_B CALL KEY5 JMP STTKKEY_B: TEST AL,20H JNZ KEY_A CALL KEYB JMP STTKKEY_A: MOV AL,0FDH OUT 60H,AL IN AL,62H TEST AL,40H JNZ KEY_3 CALL KEYA JMP STTKKEY_3: TEST AL,20H JNZ KEY_7 CALL KEY3 JMP STTKKEY_7: MOV AL,0FBH OUT 60H,AL IN AL,62H TEST AL,40H JNZ KEY_C CALL KEY7 JMP STTKKEY_C: TEST AL,20H JNZ KEY_F CALL KEYC JMP STTKKEY_F: MOV AL,0F7H OUT 60H,AL IN AL,62H TEST AL,40H JNZ KEY_0 CALL KEYF JMP STTKKEY_0: TEST AL,20H JNZ KEY_01 CALL KEY0KEY_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 VAR3LP2: 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,0004HDIR: 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,0002HTIME1: MOV AX,0300HTIME2: 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 STTCODE 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 ENDSDATA SEGMENTVAR1 DB 07H,0BH,0DH,0EH ;数码管位码VAR2 DB 3FH,3FH,3FH,3FH,3FHVAR3 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,71HDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AL,88H OUT 63H,AL ;8255A初始化 MOV BX,0000H ;BX清零STT: MOV AL,00H ;键盘测试 OUT 60H,ALNEXT: 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 STTKEY: MOV AL,0FEH ;键盘扫描识别 OUT 60H,AL IN AL,62H TEST AL,40H JNZ KEY_4 CALL KEYDEN JMP STTKKEY_4: TEST AL,20H JNZ KEY_JIAN CALL KEY4 JMP STTKKEY_JIAN:MOV AL,0FDH OUT 60H,AL IN AL,62H TEST AL,40H JNZ KEY_5 CALL KEYJIAN JMP STTKKEY_5: TEST AL,20H JNZ KEY_CHU CALL KEY5 JMP STTKKEY_CHU: MOV AL,0FBH OUT 60H,AL IN AL,62H TEST AL,40H JNZ KEY_6 CALL KEYCHU JMP STTKKEY_6: TEST AL,20H JNZ KEY_3 CALL KEY6 JMP STTKKEY_3: MOV AL,0F7H OUT 60H,AL IN AL,62H TEST AL,40H JNZ KEY_7 CALL KEY3 JMP STTKKEY_7: TEST AL,20H JNZ KEY_71 CALL KEY7KEY_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 CLEARKEY4_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 CLEARKEY5_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 CLEARKEY6_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 CLEARKEY7_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 LP3KEYJIAN_1: CMP BX,0101H RET;-KEYCHU: CMP BH,00H ;按键/处理子程序 JNZ KEYCHU_1 CALL LP3KEYCHU_1: CMP BX,0102H RET;-KEYDEN: CMP BL,00H ;按键=处理子程序 JNZ KEYDEN_1 CALL CLEAR CALL DISPKEYDEN_1: MOV BH,01H CMP BL,01H ;是-号? JZ K1 ;进行减法运算 CMP BL,02H ;是/号? JZ K2 ;进行除法运算STTE: RETK1: CALL JIAN JMP STTEK2: 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 B2B1: CLCB2: 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 MOV AL,DI+1 AND AX,000FH PUSH DX MUL BX POP DX ADD DX,AX MOV BX,100 MOV AL,DI+2 AND AX,000FH PUSH DX MUL BX POP DX ADD DX,AX MOV BX,1000 MOV AL,DI+3 AND AX,000FH PUSH DX MUL BX POP DX ADD DX,AX PUSH DX MOV CL,SI ;调整VAR3,10进制转换成16进制,保存在CX MOV CH,00H MOV AL,SI+1 AND AX,000FH MOV BX,10 MUL BX ADD CX,AX MOV AL,SI+2 AND AX,000FH MOV BX,100 MUL BX ADD CX,AX MOV AL,SI+3 AND AX,000FH MOV BX,1000 MUL BX ADD CX,AX POP AX ;以16进制进行除法运算 MOV DX,0000H MOV CH,00H DIV CX ;调整结果为10进制 MOV CX,10 MOV DX,0000H DIV CX MOV DI,DL MOV DX,0000H DIV CX MOV DI+1, DL MOV DX,0000H DIV CX MOV DI+2,DL MOV DX,0000H DIV CX MOV DI+3,DL CALL CHANGE CALL DISP MOV BL, 00H RET;-LP1: MOV CX,0004H ;数据移位保存子程序(前移四位) MOV SI,OFFSET VAR2 MOV DI,OFFSET VAR3LP2: MOV AL,SI+3 MOV SI+4,AL MOV AL,DI+3 MOV DI+4,AL DEC SI DEC DI LOOP LP2 RET;-LP3: MOV CX,0004H ;保存上一次数据子程序 MOV SI,OFFSET VAR3 MOV DI,OFFSET VAR4LP4: MOV AL,SI MOV DI,AL INC SI INC DI LOOP LP4 RET;.CHANGE: MOV SI,OFFSET VAR2 MOV DI,OFFSET VAR4 MOV BX,OFFSET TABL MOV CX,0004HCOMP0: MOV AL,DI XLAT TABL MOV SI,AL INC SI INC DI LOOP COMP0 RET;-DISP: MOV SI,OFFSET VAR1 ;显示子程序 MOV DI,OFFSET VAR2 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 DIR0DIR3: MOV CX,0004H JMP DIRDIR2: MOV CX,0003H JMP DIRDIR1: MOV CX,0002H JMP DIRDIR0: MOV CX,0001HDIR: 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,0002HTIME1: MOV AX,0300HTIME2: DEC AX JNZ TIME2 LOOP TIME1 POP CX POP AX RET;-CLEAR: MOV SI,OFFSET VAR2 ;数据清零子程序 MOV DI,OFFSET VAR3 MOV CX,0005HCLEAR1: MOV AL,3FH MOV SI,AL MOV AL,00H MOV DI,AL INC SI INC DI LOOP CLEAR1 MOV BH,00H RET;-STTK: CALL DISP ;放键测试程序 MOV AL,00H OUT 60H,AL IN AL,62H AND AL,60H CMP AL,60H JNZ STTK JMP STTCODE ENDS END START 二、心得与体会这次的课程设计主要针对键盘及可编程接口芯片8255A的编程,在上机调试过程中由于自己的疏忽及算法的不完善导致了程序不能实现预期的功能,经过一遍又一遍的检查和思考,终于完成了这次课程设计的任务。虽然上机调试的经历是痛苦的,但是期间的细节错误给了我们应有的教训,使我们在以后的学习及工作中尽量避免,对于汇编语言的编程也有了进一步的了解。这次的课程设计还使我意识到要将微机原理及应用这门专业课程学习好,除了学好书本知识外还要通过实践把书本知识应用到实践中去,才能对这门课程有更深的认识,也有利于自己对知识的吸收,巩固和提高。总之,这次课程设计锻炼了我解决问题的能力,激发了我的思考,相信通过这次课程设计对我以后对微机的继续学习及以后的工作会有很大的帮助。三、参考文献1.微型计算机原理及应用.许立梓等编.北京:机械工业出版社,20032.微型计算机原理及应用习题解答、试验指导及课程设计. 许立梓等编.北京:机械工业出版社,200819
展开阅读全文