微机原理与接口技术大作业.doc
课程设计报告 课程: 微机原理与接口技术 题目: 键盘扫描实验 班 级: 学 号: 姓 名: 日 期: 一、 设计目的通过本次课程设计,掌握8255芯片使用方法和编程方法,理解所学的芯片的原理、内部结构等,从而提高对芯片的综合运用能力,进一步掌握微机系统的软件、硬件设计的方法、设计步骤,掌握微机系统与接口扩展电路的设计方法,做到理论联系实际,提高动手能力和分析问题、解决问题的能力,理论联系实际,实现由学习知识到应用知识的初步过渡。二、 设计要求利用8255可编程并行口做一个键盘扫描实验,每一个键对应一个ASCII码,并实现在数码管上同一位显示。三、 设计思想 8255是一种可编程并行I/O接口芯片,具有3个带锁存或缓冲的数据端口,它的并行数据宽度为8位,可与外设并行进行数据交换。A口和B口内具有中断控制逻辑,在外设与CPU之间可用中断方式进行信息交换。把8255并口和键盘,组成一个键盘装置,通过CPU对8255的控制最总达到键扫的目的,每一个键对应一个ASCII 码字符,通过8255的输入和输出,最终显示在屏幕上。四、 原理图1芯片接线28255实验连线:3按键ASCII码:AB1C0DFE五、 程序框架1主程序:2键盘扫描程序:3显示程序:六、 程序代码;*根据查看端口资源修改下列符号值*IOY0 EQU 9C00H ;片选IOY0对应的端口始地址MY8255_A EQU IOY0+00H*4 ;8255的A口地址 MY8255_B EQU IOY0+01H*4 ;8255的B口地址MY8255_C EQU IOY0+02H*4 ;8255的C口地址MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDSDATA SEGMENTMES DB 'Press any key to exit!',0AH,0DH,0AH,0DH,'$'DTABLE DB 3FH,77H,7CH,4FH,06H,6DH,7DH,39H,3FH,6FH,77H,5EH,39H,71H,79H,71H TT DB 0HDATA ENDS CODE SEGMENT ;数据段 ASSUME CS:CODE, DS:DATASTART: MOV AX, DATA MOV DS, AX MOV DX, OFFSET MES MOV AH, 09H INT 21H MOV DX, MY8255_MODE ;控制字寄存器 MOV AL, 81H OUT DX, AL BEGIN: CALL CLEAR ;调用清屏函数 CALL CCSCAN ;键扫函数 JNZ GETKEY1 ;有键按下 发生跳转CALL CLEAR MOV DX, MY8255_A ;刷新 MOV AL, 11011111B OUT DX, AL MOV DX, MY8255_B MOV AL, TT OUT DX, AL MOV AH, 1 INT 16H JZ BEGIN QUIT: MOV AX, 4C00H INT 21HGETKEY1:MOV CH, 0FEH ;打开第一根列线 MOV CL, 00H ;纪录打开的列线COLUM: MOV AL, CH MOV DX, MY8255_A OUT DX,AL ;把AL输给端口 MOV DX, MY8255_C ;读入三行 IN AL, DXL1: TEST AL,01H ;逻辑与判断行线开关 JNZ L2 ;关的 跳第二行 MOV AL,00H JMP KCODEL2: TEST AL,02H JNZ L3 MOV AL,04H JMP KCODEL3: TEST AL,04H JNZ L4 MOV AL,08H JMP KCODE L4: TEST AL,08H JNZ NEXT MOV AL,0CH KCODE: ADD AL,CL ;CL加入存储器对应数 MOV CL,AL ;纪录ALYY: CALL CLEAR ;判断按键是否弹起 CALL CCSCAN CALL CLEAR MOV DX,MY8255_A ;刷新 MOV AL,11011111B OUT DX,AL MOV DX,MY8255_B MOV AL,TT OUT DX,AL JNE YY ;不为零 有键按 KON: CALL CLEAR MOV AL,CL MOV BX,OFFSET DTABLE ;定义变量首地址 AND AX,00FFH ADD BX,AX MOV AL,BX MOV CL, AL MOV DX,MY8255_A ;A口控制列线和数码管 MOV AL,11011111B ;关掉五个打开对应的一个 OUT DX, AL MOV AL, CL MOV DX, MY8255_B OUT DX, AL MOV TT, AL JMP KERR NEXT: INC CL MOV AL, CH TEST AL,08H ;将AL和第三根列线比较 JZ KERR ;真 跳转 ROL AL,1 ;不是第三根 左移一 顺序扫 MOV CH, AL JMP COLUMKERR: JMP BEGINCCSCAN PROC NEAR MOV AL, 00H MOV DX, MY8255_A OUT DX, AL MOV DX, MY8255_C IN AL, DX NOT AL AND AL, 0FH RETCCSCAN ENDPCLEAR PROC NEAR MOV DX, MY8255_B MOV AL, 00H OUT DX, AL RET CLEAR ENDP ;结束子程序CODE ENDS END START第 7 页