嵌入式程序结构汇编 键盘扫描(三)

实验平台:KEIL5 + Proteus8

1、实验目的:
利用实验系统提供的键盘扫描电路和显示电路,实现扫描键盘和数码显示,把按键输入的键码在六位数码管上显示出来。
实验程序可分成三个模块。
①键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。
②显示模块:将显示单元的内容在显示器上动态显示。
③主程序:调用键输入模块和显示模块。

源程序:

     ORG    0
     mov    30h,#01h    ;显示缓冲单元
     mov    31h,#02h
     mov    32h,#03h
     mov    33h,#04h
     mov    34h,#05h
     mov    35h,#06h
 LP8:ACALL  KINP        ;键盘扫描程序
     JB     PSW.5,LP7   ;无键不处理键值
     MOV    B,  #0AH      ;有键,分离键码
     DIV    AB
     MOV    34H,A       ;送显示缓冲
     MOV    35H,B
 LP7:ACALL  DISP        ;调显示程序
     SJMP   LP8
DISP:MOV    R0,#30H     ;显示缓冲首址
	 MOV	R2,#01H     ;位控初始码(先亮最低位)
LOOP:MOV	A, #0FFH     ;共阳 灭码
	 
	 MOV    P1,A      
	 MOV	A,R2         ;送位控信号
	 
	 MOV    P0,A
	 MOV	A,@R0        ;从显示缓冲中取数
	 MOV    DPTR,#TAB
	 MOVC	A,@A+DPTR    ;查出字形代码
     
	 MOV    P1,A      ;送显示字符段代码
	 ACALL	DY1MS        ;稳定显示信息
	 INC 	R0           ;取下一个数
	 MOV	A,R2          
	 JB	    ACC.5,EXIT   ;判断是否送到最高位?
	 RL  	A
	 MOV	R2,A         ;得到下一个位控信号
	 AJMP	LOOP
EXIT:RET
DY1MS:MOV   R7,#0FFH
      DJNZ  R7,$
      RET
TAB:DB	0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
;0123456789,A,B,C,D,E,F
KINP:LCALL  KAP         ;扫描键子程序
     JNZ    KP1    
     SETB   PSW.5       ;置无键标志
     RET
 KP1:LCALL  DELY        ;去抖
     LCALL  KAP         ;再次扫描键盘
     JNZ    KP2         ;转识键码程序
     SETB   PSW.5       ;置无键标志
     RET
 KP2:CLR    PSW.5       ;置有键操作标志
     MOV    R2,#0FEH    ;逐列扫描初始值
     MOV    R4,#00H     ;0列加数
 KP4:
     MOV    A,R2
     MOV    P0,A      ;送列扫描信号
      
     MOV    A,P3      ;回读行信号
     JB     ACC.0,L1     ;不是第一行,转第二行
     MOV    A,#00H       ;是第一行,行吗=0
     AJMP   KP5
  L1:JB     ACC.1,NEXT     ; 不是第二行,转下一列
     MOV    A,#08H       ;是第二行,行码=8
 KP5:ADD    A,R4         ;对应的行码+对应的列码=键码
     PUSH   ACC          ;保护已经得到的键码
 KP3:LCALL  DELY
     LCALL  KAP          ;继续扫描
     JNZ    KP3          ;A值不等于0,表示手未松开!
     POP    ACC          ;A值等于0,手已经松开,弹回键码!
     RET
NEXT:INC    R4           ;下一列列码加1
     MOV    A,R2       
     JNB    ACC.7,KINP   ;列到最后列了吗?
     RL     A
     MOV    R2,A         ;下一列
     AJMP   KP4          ;扫描下一列
 KAP:MOV    A,#00H       ;全扫描字(列)   
     MOV    P0,A       ;送全扫描字      
     MOV    A,P3       ;回读行信息
     CPL    A              
     ANL    A,#0FH        ;得到A值,=0,无键;≠0,有键
     RET
DELY:MOV    R6,#14H       ;去抖!
  DL:MOV    R7,#0FFH
     DJNZ   R7,$
     DJNZ   R6,DL
     RET
     end

2、实验原理图:
部分一在这里插入图片描述部分二在这里插入图片描述
部分三在这里插入图片描述
原理图总视图
在这里插入图片描述
3、实验现象:
在这里插入图片描述
实验操作:
在这里插入图片描述
按键实现数字的加减变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值