微机接口实验二:键盘显示控制实验(翻转法实现)

一、实验目的

  1. 掌握8255A控制键盘及显示电路的基本功能及编程方法。
  2. 掌握一般键盘和显示电路的工作原理。

二、实验原理和内容

在这里插入图片描述

三、编程提示

设置8255A的C口键盘输入,A口为数码管段码输出。

四、电路接线图

在这里插入图片描述

五、程序设计流程图

在这里插入图片描述

六、一些说明

在这里插入图片描述

翻转法的原理其实很简单:首先行线全部输出为0,然后查找哪一列输入为0;然后翻转,列线全部输出为0,查找哪一行输入为0;找到行号和列号后,简单计算就能得到按下字符的序号。

七、程序源代码

stack segment stack
    db 200 dup(0)
stack ends

data segment
      APORT equ 288h
      CPORT equ 28ah
      CTRL equ 28bh
      codes db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h, 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h  ;0~9, A~F
data ends

code segment
      assume cs:code,ds:data,ss:stack

      delay MACRO   ;延时宏
        local loop_delay
        local flag
        push cx
        push bx
        xor bx, bx
        flag:mov cx, 0ffffh
        loop_delay:loop loop_delay
        inc bx
        cmp bx, 10
        jnz flag
        pop bx
        pop cx
      ENDM

   main:mov ax,data   ;01入
        mov ds,ax
        mov ax, stack
        mov ss, ax
        mov al, 10001000b  ;A口方式0输出,C口高四位输入,列输入,C口低四位输出,行输出
        mov dx, CTRL
        out dx, al
        mov al, 0
        mov dx, CPORT
        out dx, al  ;行输出为0
        xor bx, bx
 no_key:mov dx, CPORT
        in al, dx  ;检查输入列信号(C口高四位)
        and al, 0f0h
        cmp al, 0f0h  ;高四位全为1,即列信号全为1,无键按下
        jz no_key
        delay   ;延时消除抖动
        mov dx, CPORT
        in al, dx   ;逐列检查,看哪一列输入为0
        shr al, 1
        shr al, 1
        shr al, 1
        shr al, 1    ;C口高四位列输入信号移至低四位
        xor bl, bl   ;依次查找四列哪一列为0
        mov cx, 4
  loop1:shr al, 1    ;将最低位传至cf
        jnc loop2    ;cf为0表示bl列输入为0
        inc bl
        loop loop1
  loop2:mov al, 10000001b  ;A口方式0输出,C口高四位输出,列输出,C口低四位输入,行输入
        mov dx, CTRL
        out dx, al
        xor al, al
        mov dx, CPORT
        out dx, al  ;列输出全部为0,查找哪一行输入为0
        mov dx, CPORT
        in al, dx
        and al, 0fh    
        cmp al, 0fh   ;低四位全为1,即行输入全为1,表示有键按错
        jz error
        mov bh, 0    ;否则有行输入为0,循环找到行号
        mov cx, 4
  loop3:shr al, 1   ;低位传送至cf
        jnc loop4   ;有一行为0,找到行输入序号为bh
        inc bh
        loop loop3
  loop4:shl bh, 1   ;计算4*bh+bl,表示键号
        shl bh, 1
        add bh, bl  ;dh为键号(0-15)
        mov al, 01h
        mov dx, CPORT
        out dx, al
        mov bl, bh
        xor bh, bh
        mov di, bx
        mov al, codes[di]  ;输出显示
        mov dx, APORT
        out dx, al
        delay    
   error:mov ah,4ch
        int 21h
code ends
     end main

猜你喜欢

转载自blog.csdn.net/Cyril_KI/article/details/110677708