您好,欢迎访问三七文档
8255—按键输出一:实验问题用8255实现,将保存在4个字节缓冲区中的位置码,采用动态扫描方式在4位7段代码管显示出来。二:实验目的按照实验要求,通过使用8255,实现所压下按键的值,显示在数码管中。学习8255键盘值的计算及其控制字的设置。三:实验过程1.实验地址20H—26H2.实验的程序如下.modelsmall.8086.stack.dataa_portequ20hb_portequ22hc_portequ24hct_portequ26h;按键位置码;01234567tabledb0eeh,0deh,0beh,7eh,0edh,0ddh,0bdh,7dh;89ABCDEFdb0ebh,0dbh,0bbh,7bh,0e7h,0d7h,0b7h,77h;7段代码管值tabdb3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07hdb7Fh,6Fh,77h,7Ch,39h,5Eh,79h,71hdispdb4dup(0);缓冲区xdb4dup(0);记录所输入位置码下标.code.startupMOVDI,0movsi,0MOVCX,4again:PUSHCXmovdx,ct_portmoval,10000001b;定义8255A口、B口方式0输出,C口高4位输出、低4位输入outdx,ALMOVAL,3fhMOVDX,a_portOUTDX,ALMOVAL,07hMOVDX,b_portOUTDX,AL;向键盘所有列送0movdx,c_portmoval,00houtdx,al;读行,按键是否松开movdx,c_portwait_open:inal,dxandal,0fh;行cmpal,0fhjnewait_openwait_pres:inal,dx;读C口andal,0fh;查行值cmpal,0fh;是否有键按下jewait_pres;无,等待;去抖动movcx,16eahdelay:loopdelay;延时xx毫秒inal,dxandal,0fhcmpal,0fhjewait_presMOVDL,0chh:INCDLSHRAL,1JCchhDECDL;存行号到DLPUSHDXnext_row:movdx,ct_portmoval,10001000bOUTDX,AL;定义8255A口、B口方式0输出,C口高4位输入、低4位输出MOVAL,0movdx,c_portoutdx,AL;向键盘所有行送0inal,dx;读C口状态andal,0f0h;读列值cmpal,0f0hjeagain;无按键,出错!返回开始。POPDXMOVDH,3clh:DECDHSHLAL,1JCclhINCDH;存列号到DHSHLDL,1SHLDL,1ADDDL,DH;计算键值存DL中,DL=行号*4+列号MOVAL,DLmovx[si],alLEAbx,tableXLAT;按键的位置码存ALmovdisp[si],al;位置码存入缓冲区中incsiPOPCXDECCXJNZagaindisplay:MOVSI,0MOVBL,11111110BMOVCX,4abc:PUSHCXMOVAL,X[SI];按键位置码下标存入ALMOVDI,AXMOVAL,TAB[DI];在tab中相同下标的数码管值MOVDX,a_portOUTDX,AL;输出相应位的显示代码MOVAL,BLMOVDX,b_portOUTDX,AL;输出位控制码MOVCX,1562LOOP$MOVAL,0MOVDX,a_portOUTDX,ALMOVAL,0fhMOVDX,b_portOUTDX,al;消影,即关闭当前代码显示INCSIROLBL,1POPCXLOOPabcJMPdisplay.exitend3.实验电路如图(2)所示四:实验结果从键盘按下4个按键,在数码管中显示如图(1)所示图(1)图(2)
本文标题:8255-按键输出
链接地址:https://www.777doc.com/doc-7216039 .html