マイクロコンピュータインターフェース実験2:キーボードディスプレイ制御実験(フリップ法で実現)

1.実験の目的

  1. 8255A制御キーボードとディスプレイ回路の基本機能とプログラミング方法をマスターします。
  2. 一般的なキーボードとディスプレイ回路の動作原理をマスターします。

2.実験原理と内容

ここに写真の説明を挿入

3つのプログラミングのヒント

8255AのポートCとデジタルチューブセグメントコード出力用のポートAのキーボード入力を設定します。

4、回路配線図

ここに写真の説明を挿入

5、プログラム設計フローチャート

ここに写真の説明を挿入

六、いくつかの説明

ここに写真の説明を挿入

フリップ方法の原理は実際には非常に単純です。最初に、すべての行と行が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