• 微机-------键的识别(行扫描法)


    目录


    矩阵式键盘的行线列线分别接并行输出口并行输入口

    在这里插入图片描述

    ①可以先使所有行同时为低电平
    ②再检查是否有列线也处在低电平

    第一步:判断有无键按下
    使输出端口各位均输出为0,即相当于将所有各行都接地。


    然后,从输入端口读入数据,如果读得的数据不是FFH,则说明必有列线处于低电平,从而可断定必有键被按下。


    此时,为了消除键的抖动,可以调用延迟程序,然后再判别具体按下的是哪个键。如读得的数据是FFH,则程序在循环中等待。

    WAIT:MOV AL,00H
    	 MOV DX,OUTPORT	;输出端口
    	 OUT DX,AL
    
    	 MOV DX,INPORT	;输入端口
    	 IN AL,DX
    	 
    	 CMP AL,0FFH	;比较是否是全1(高电平)
    	 JZ WAIT		;如果是(无键按下)则循环WAIT
    DONE:CALL DELAY 	;否则延迟20ms去抖动
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    第二步:判断哪一个键按下
    开始时,程序先将键号寄存器清零,将计数器设置为键盘行的数目,然后设置扫描初值
    扫描初值11111110使第0行为低电平,而其他行高电平
    输出扫描初值以后,马上读取列线的值,看是否有列线处于低电平
    若无,则将扫描初值循环左移1位,变为11111101,这样使第一行为低电平,而使其他行为高电平。
    同时使键号为8,即从第2行上第1个键开始检查。此外,计数值减1…如此下去,一直查到计数值为0。

    PROG:MOV BL,0	;键号寄存器清0,按键编号
    	 MOV CL,0FEH ;设置扫描初值,使第0行为低电平,其它行为高电平
    	 
    	 MOV DL,8	;计数值为8行
    
    FROW:
    	 MOV AL,CL
    	 MOV DX,OUTPORT	;输出端,除第0行,全为高电平
    	 OUT DX,AL
    	 
    	 ROL AL,1		;循环左移一位,使下一行为低电平,其余全为高电平
    	 MOV CL,AL		;将AL的内容赋值个CL,CL在最开始设置的扫描初值
    
    	 MOV DX,INPORT
    	 IN AL,DX       ;读入列线的指令
    	
    	 CMP AL,0FFH  	;如果是FFH,说明该行不存在按键
    	 JNZ FCOL		;如果不是FFH,跳转
    
    	 ADD BL,8		;设置下一行的按键+8(即本行结束,从下一行第一个按键开始)
    	 DEC DL			;总共8行,执行过一行,减去一行
    
    	 JNZ FROW		;如果不相等0,则跳转
    	 JMP DONE		;相等则无条件跳转
    FCOL:
    	 RCR AL,1		;8位从列线上读入的值(将右移的数字移入到CF中)
    	 JNC PROCE		;CF不为1,为0说明找到了按键
    	 INC BL			;+1一列一列寻找按键
    	 JMP FCOL
    PROCE:
    	  ...			;键命令处理程序
    DONE:
    	  ...			;后续处理程序
    	 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    在这里插入图片描述

  • 相关阅读:
    nodejs篇 内置模块events 常用api
    Magica Cloth
    【iMessage软件苹果相册推】对付nvm应当可以使用brew直接安装brew install flow 到这里根本的环境
    flink 入门(一)
    LVS,Nginx,Haproxy三种负载均衡产品的对比
    一文全面介绍JWT框架知识
    fork()函数与僵尸进程
    澳利率攀升,加息步伐将在某个时候放缓
    mySQL 安装
    Android-线程池
  • 原文地址:https://blog.csdn.net/CSDN_e_1/article/details/128083489