实验报告七-键盘扫描及显示实验

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第1页共8页信息工程学院实验报告课程名称:微机原理与接口技术实验项目名称:键盘扫描及显示实验实验时间:2017.1.6班级:姓名:学号:一、实验目的1.掌握8254的工作方式及应用编程。2.掌握8254典型应用电路的接法。二、实验设备了解键盘扫描及数码显示的基本原理,熟悉8255的编程。三、实验原理将8255单元与键盘及数码管显示单元连接,编写实验程序,扫描键盘输入,并将扫描结果送数码管显示。键盘采用4×4键盘,每个数码管显示值可为0~F共16个数。实验具体内容如下:将键盘进行编号,记作0~F,当按下其中一个按键时,将该按键对应的编号在一个数码管上显示出来,当再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示最近6次按下的按键编号。键盘及数码管显示单元电路图如图7-1和7-2所示。8255键盘及显示实验参考接线图如图7-3所示。图7-1键盘及数码管显示单元4×4键盘矩阵电路图成绩:指导老师(签名):第2页共8页图7-2键盘及数码管显示单元6组数码管电路图图7-38255键盘扫描及数码管显示实验线路图四、实验内容与步骤1.实验接线图如图7-3所示,按图连接实验线路图。第3页共8页图7-48255键盘扫描及数码管显示实验实物连接图2.运行Tdpit集成操作软件,根据实验内容,编写实验程序,编译、链接。图7-58255键盘扫描及数码管显示实验程序编辑界面3.运行程序,按下按键,观察数码管的显示,验证程序功能。五、实验结果及分析:1.运行程序,按下按键,观察数码管的显示。第4页共8页图7-6实验结果分析:当按下键盘其中一个按键时,将该按键对应的编号在一个数码管上显示出来,当再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示最近6次按下的按键编号。六、实验总结:通过本实验,我了解键盘扫描及数码显示的基本原理,以及熟悉8255的编程。通过本次实验加深了对理论编程的知识的理解,巩固了我的理论知识。附录:;Keyscan.asm;键盘扫描及数码管显示实验;查看端口资源分配情况,记录实验系统I/O端口始地址IOY0EQU0D000H;片选IOY0对应的端口始地址第5页共8页MY8255_AEQUIOY0+00H*4;8255的A口地址MY8255_BEQUIOY0+01H*4;8255的B口地址MY8255_CEQUIOY0+02H*4;8255的C口地址MY8255_MODEEQUIOY0+03H*4;8255的控制寄存器地址STACK1SEGMENTSTACKDW256DUP(?)STACK1ENDSDATASEGMENTDTABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71HDATAENDS;键值表,0~F对应的7段数码管的段位值CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,3000H;建立缓冲区,存放要显示的键值MOVAL,00H;先初始化键值为0MOV[SI],ALMOV[SI+1],ALMOV[SI+2],ALMOV[SI+3],ALMOV[SI+4],ALMOV[SI+5],ALMOVDI,3005HMOVDX,MY8255_MODE;初始化8255工作方式MOVAL,81H;方式0,A口、B口输出,C口低4位输入OUTDX,ALMOVCX,0040hBEGIN1:PUSHCXBEGIN:CALLDIS;显示刷新CALLCLEAR;清屏CALLCCSCAN;扫描按键JNZGETKEY1;有键按下则跳置GETKEY1POPCXLOOPBEGIN1MOVCX,0040hMOVAH,01h;判断PC键盘是否有按键按下INT16H第6页共8页JZBEGIN1;无按键则跳回继续循环,有则退出QUIT:MOVAX,4C00H;返回到DOSINT21HGETKEY1:CALLDIS;显示刷新CALLDALLYCALLDALLYCALLCLEAR;清屏CALLCCSCAN;再次扫描按键JNZGETKEY2;有键按下则跳置GETKEY2JMPBEGIN;否则跳回开始继续循环GETKEY2:MOVCH,0FEHMOVCL,00H;设置当前检测的是第几列COLUM:MOVAL,CH;选取一列,将X1~X4中一个置0MOVDX,MY8255_AOUTDX,ALMOVDX,MY8255_C;读Y1~Y4,用于判断是哪一行按键闭合INAL,DXL1:TESTAL,01H;是否为第1行JNZL2;不是则继续判断MOVAL,00H;设置第1行第1列的对应的键值JMPKCODEL2:TESTAL,02H;是否为第2行JNZL3;不是则继续判断MOVAL,04H;设置第2行第1列的对应的键值JMPKCODEL3:TESTAL,04H;是否为第3行JNZL4;不是则继续判断MOVAL,08H;设置第3行第1列的对应的键值JMPKCODEL4:TESTAL,08H;是否为第4行JNZNEXT;不是则继续判断MOVAL,0CH;设置第4行第1列的对应的键值KCODE:ADDAL,CL;将第1列的值加上当前列数,确定按键值CALLPUTBUF;保存按键值PUSHAXKON:CALLDIS;显示刷新CALLCLEAR;清屏CALLCCSCAN;扫描按键,判断按键是否弹起第7页共8页JNZKON;未弹起则继续循环等待弹起POPAXNEXT:INCCL;当前检测的列数递增MOVAL,CHTESTAL,08H;检测是否扫描到第4列JZKERR;是则跳回到开始处ROLAL,1;没检测到第4列则准备检测下一列MOVCH,ALJMPCOLUMKERR:JMPBEGINCCSCANPROCNEAR;扫描是否有按键闭合子程序MOVAL,00HMOVDX,MY8255_A;将4列全选通,X1~X4置0OUTDX,ALMOVDX,MY8255_CINAL,DX;读Y1~Y4NOTALANDAL,0FH;取出Y1~Y4的反值RETCCSCANENDPCLEARPROCNEAR;清除数码管显示子程序MOVDX,MY8255_B;段位置0即可清除数码管显示MOVAL,00HOUTDX,ALRETCLEARENDPDISPROCNEAR;显示键值子程序PUSHAX;以缓冲区存放的键值为键值表偏移找到键值并显示MOVSI,3000HMOVDL,0DFHMOVAL,DLAGAIN:PUSHDXMOVDX,MY8255_AOUTDX,AL;设置X1~X4,选通一个数码管MOVAL,[SI];取出缓冲区中存放键值MOVBX,OFFSETDTABLEANDAX,00FFHADDBX,AXMOVAL,[BX];将键值作为偏移和键值基地址相加得到相应的键值MOVDX,MY8255_BOUTDX,AL;写入数码管A~DpCALLDALLY第8页共8页INCSI;取下一个键值POPDXMOVAL,DLTESTAL,01H;判断是否显示完?JZOUT1;显示完,返回RORAL,1MOVDL,ALJMPAGAIN;未显示完,跳回继续OUT1:POPAXRETDISENDPPUTBUFPROCNEAR;保存键值子程序MOVSI,DIMOV[SI],ALDECDICMPDI,2FFFHJNZGOBACKMOVDI,3005HGOBACK:RETPUTBUFENDPDALLYPROCNEAR;软件延时子程序PUSHCXMOVCX,0fffHD1:MOVAX,00FFHD2:DECAXJNZD2LOOPD1POPCXRETDALLYENDPCODEENDSENDSTART

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功