单片机89C52行列式键盘扫描程序(汇编)_第1页
单片机89C52行列式键盘扫描程序(汇编)_第2页
单片机89C52行列式键盘扫描程序(汇编)_第3页
单片机89C52行列式键盘扫描程序(汇编)_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验八键盘扫描显示实验所需软硬件:KeilSTC-ISPMCS-5189C52实验箱程序清单:基于汇编语言//连线P0接8列(同时也是数码管的位选线)高电平选中某位。P3低两位接行P1接数码管(段选线)低电平选中某段亮。 ORG0000H LJMPMAINMAIN: MOV30H,#00H MOV31H,#00H MOV32H,#00H MOV33H,#00H MOV34H,#00H MOV35H,#00HBEGIN: ACALLSCAN ACALLCHECK ACALLDISP SJMPBEGIN//子程序SCAN全扫描2次扫描去抖SCAN: ;全扫描 MOVR0,#00H ;去抖,扫描2次计数标志 MOVA,#00H MOVP0,A ;送列扫描码LOOP: MOVA,P3 ;回读行信号 ANLA,#03H ;只取低两位 INCR0 CJNEA,#03H,K1 CLRF0 ;无键,置标志位为0K1: NOP NOP CJNER0,#02H,LOOP;去抖,扫描2次 SETBF0 ;有键,置标志位为1 RET//子程序CHECK逐列扫描确定键码 CHECK: MOVR1,#0FEH ;开始逐列扫描,从第0列开始 MOVR4,#00H ;记录列号 MOVR5,#00H ;记录行号 MOVA,R1 PUSHACC ;压栈保留第0列扫描码LOOP1: MOVP0,A ;送列扫描码 MOVA,P3 ANLA,#03H CJNEA,#03H,K2 ;有键转K2确定为哪一行 POPACC ;无键扫描下一列 RLA INCR4 CJNER4,#08H,LOOP1;是否扫描进行到最后一列 RETK2: DECSP ;为保证堆栈平衡 CJNEA,#00H,K3 ;分支判断,看是否为第一行 SJMPOVERK3: MOVA,R5ADDA,#08HMOVR5,A ;不是第一行,就是第二行,行码加8OVER: MOVA,R4 ADDA,R5 ;行码+列码=键码 PUSHACC ;键码入栈保护 NOP NOP LCALLSCAN ;扫描看手是否松开CJNEA,#03H,OVER ;A=03H,表示手未松开,继续扫描 POPACC ;手松开,键码出栈 RET//子程序DISP键码分离送数码管显示DISP: JNBF0,LOOP3 ;无键不分离键码 MOVB,#10 ;有键,要进行十位和个位的分离 DIVAB MOV34H,A ;A为十位 MOV35H,B ;B为个位 MOVR0,#30H ;送显示缓冲首地址 MOVR2,#01H ;送位选信号,从最低位开始亮LOOP3: MOVA,#0FFH MOVP1,A ;段选:送灭码 MOVA,R2 MOVP0,A ;送位选信号 MOVA,@R0 ;送显示缓冲数据 MOVDPTR,#TAB ;查表求字形码 MOVCA,@A+DPTR MOVP0,A ;送段选 ACALLDELAY1MS ;延时以保持稳定 INCR0 ;取下一个数 MOVA,R2 JBACC.5,EXIT ;判断位选是否送到最高位 RLA ;左移选下一个位。 MOVR2,A ; AJMPLOOP3EXIT: RET//子程序DELAY1MSDELAY1MS: MOVR7,#0FFH DJNZR7,$ RE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论