资源描述:
《键盘处理程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、键盘处理程序开始初始化查看是否有按键是哪一个按键编码显示汇编语言程序ORG0000HSJMPSTARTORG0030HSTART:;设置堆栈MOVSP,#50HCLRPSW.3CLRPSW.4;寄存器为0号寄存器;初始化显示缓冲区MOVR0,#80H;显示缓冲区首地址MOVR7,#01H;显示字符的个数MOVR6,#01H;标志位MOV@R0,#00H;显示缓冲区初始化完毕;设置8255工作方式MOVA,#88HMOVDPTR,#00F3HMOVX@DPTR,A;设置8255工作方式;查找是否有按键KEY:CLRALCALLISKEYJZNK;没有按键LCALLDELAYCLRALCALLIS
2、KEYJZNKLCALLFINDKEYFIND:;SWAPAADDA,35HLCALLJM;调用解码程序CJNEA,#0CH,BREA;清零的解码JMPSTARTBREA:MOVR5,A;r5中暂存解码的结果CJNER6,#01H,PLUSDECR7PLUS:INCR7MOV33H,R7;把R7压入堆栈MOVA,#80HADDA,R7DECA;A中为要添加的地址MOVR0,A;MOVA,R5MOV@R0,AINCR6;标志位改变LCALLINDISP;调用显示程序JMPKEYNK:MOV33H,R7;把R7压入堆栈LCALLINDISPJMPKEY;解码程序;正确JM:MOVR4,A;R4中暂
3、存查询结果ANLA,#0FHMOVR5,AADDA,R5ADDA,R5;行号乘以3MOVR5,A;放入R5暂存MOVA,R4ANLA,#0F0HRRARRARRARRA;A中的数右移4位CJNEA,#04H,PP;列号如果等于4就减1变为3DECAPP:ADDA,R5;A中存放要显示的数RET;查看是否有按键的程序ISKEY:MOVDPTR,#00F1H;B口地址MOVX@DPTR,AMOVDPTR,#00F2H;C口地址MOVXA,@DPTRCPLAANLA,#70H;如果A不为零则有按键RET;确定哪个按键的程序FINDKEY:MOVA,#0FEH;行扫描信号从第一行开始MOV35H,#0
4、H;行计数器;扫描键盘SK:MOV36H,A;送出行扫描信号LCALLISKEY;检测JNZFINDINC35HMOVA,36HRLACJNEA,#0EFH,SK;还没有送完行扫描信号MOVA,#0;没找到按键SJMPNKRET;显示程序,只要把要显示的内容送入80h开始的单元,显示的个数送入33hINDISP:DISP:MOVR0,#80HMOV34H,33H;34h中存放显示数字的个数MOVR1,#0F0H;a口地址MOVA,#01HMOVDPTR,#TABLESEND1:MOVR1,#0F2HMOVX@R1,A;选同一个数码管以供显示RLAMOV32H,A;暂存MOVA,@R0;取数MO
5、VCA,@A+DPTR;代码转化CPLAMOVR1,#0F0HMOVX@R1,A;输出数码管显示CALLDELAYINCR0MOVA,32HDJNZ34H,SEND1RETTABLE:DB3FH,06H,5BH,4FHDB66H,6DH,7DH,07HDB7FH,6FH,77H,7CHDB39H,5EH,79H,71HDELAY:MOV30H,#0FFHLOPPP:MOV31H,#0FFHlopp:DJNZ31H,loppDJNZ30H,lopppRETENDProteus仿真图实验注意事项8255的标号一定是U1否则会出现通不过的结果实验结果当按下前11个按键是按照1:B显示结果当按下最后一
6、个按键时显示器清零