博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微机接口实验二:键盘显示控制实验(翻转法实现)
阅读量:2085 次
发布时间:2019-04-29

本文共 2250 字,大约阅读时间需要 7 分钟。

一、实验目的

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

二、实验原理和内容

在这里插入图片描述

三、编程提示

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

四、电路接线图

在这里插入图片描述

五、程序设计流程图

在这里插入图片描述

六、一些说明

在这里插入图片描述

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

七、程序源代码

stack segment stack    db 200 dup(0)stack endsdata 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~Fdata endscode 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   ;0出1入        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 21hcode ends     end main

转载地址:http://jmiqf.baihongyu.com/

你可能感兴趣的文章
Dubbo和Spring结合配置文件内容解析为bean的过程
查看>>
fastJson注解@JSONField使用的一个实例
查看>>
fastjson的@JSONField注解的一点问题
查看>>
fastjson使用(三) -- 序列化
查看>>
浅谈使用单元素的枚举类型实现单例模式
查看>>
Java 利用枚举实现单例模式
查看>>
Java 动态代理作用是什么?
查看>>
Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM) (清晰,浅显)
查看>>
三种线程安全的单例模式
查看>>
Spring AOP 和 动态代理技术
查看>>
从 volatile 说起,可见性和有序性是什么
查看>>
如何开始接手一个项目
查看>>
Netty 5用户指南
查看>>
Java实现简单的RPC框架
查看>>
一个用消息队列 的人,不知道为啥用 MQ,这就有点尴尬
查看>>
从零手写RPC
查看>>
高并发和多线程的关系
查看>>
Java并发与多线程
查看>>
对于多线程程序,单核cpu与多核cpu是怎么工作的
查看>>
多线程和CPU的关系
查看>>