微机原理与接口技术:键盘接口
微机原理与接口技术清华大学出版社北京交通大学出版社制作

体;软件是为运行、管理和维护计算机系统或为实现某一 功能而编写的各种程序的总和及其相关资料。
软件由系统软件和应用软件组成。系统软件简化了计 算机操作,支持应用软件的运行并提供服务,包括操作系 统、实用程序和语言处理程序等;应用软件是为用户解决 某种应用问题的程序及有关的文件和资料。
取整数位1
0.625×2=1.25
取整数位1
0.25×2=0.5
取整数位0
0.5×2=1.0
取整数位1
转换后的结果为:(0.8125)10=(0.1101)2 同理,十进制转换为十六进制可采用“除16倒取余”或“乘
16顺取整”的方法。
25
第1章
微型计算机基础知识
(2)二进制、十六进制数转换为十进制数:按照“将位 权展开求和”的方法就可以得到。 【例1.3】将二进制数(100101.101)2 转换为十进制数,过程 如下: (100101.101)2=1×25+1×22+1×20+1×2-1+1×2-3
12
第1章
微型计算机基础知识
(5)主频:也称时钟频率,单位为MHz(兆赫),决定 微机的处理速度。 (6)主存容量:主存储器中RAM和ROM的总和。 (7)可靠性:计算机在规定的时间和工作条件下正常工 作不发生故障的概率。 (8)兼容性:计算机的硬件和软件可用于其他多种系统 的性能。 (9)性能价格比:衡量计算机产品优劣的综合性指标, 包括计算机的硬软件性能与售价的关系。
1.数的原码、反码、补码表示 (1)原码:正数的原码将其符号位置“0”,负数的原码将 其符号位置“1”,其余各位按照通常的方法来表示。 (2)反码:正数的反码与其原码相同,负数的反码为其原 码除符号位以外的各位按位取反。 (3)补码:正数的补码与其原码相同,负数的补码为其反 码在最低位加1。引入补码可以将减法运算化成加法运算, 从而简化机器的控制线路,提高运算速度。
《微机原理与接口技术》课程教学大纲

《微机原理与接口技术》课程教学大纲课程编号:适用专业:电子信息科学与技术学时数:48学分数: 3一、课程类别:微机原理与接口技术是电子信息科学与技术的专业基础课。
二、课程教学目标通过本课程的学习,通过本课程的学习,使学生掌握微处理器的工作原理及时序,微型计算机与外部设备数据传送的基本方法;掌握常用接口芯片的硬件结构、编程要点及使用方法;能够读懂简单的接口电路原理图及相关的控制程序;能够根据要求设计简单的常用的接口电路,编写相应的程序段;掌握实验、系统设计的基本方法。
为后继课程的学习及未来从事微机硬件及软件开发打下基础。
三、课程的目的与任务《微机原理与接口技术》课程学习内容为微型计算机系统的基本硬件组成、汇编语言指令系统、常用可编程接口电路、微机基本工作原理与应用。
通过本课程的学习,使学生掌握和理解微机的基本原理及应用开发方法,能根据实际要求完成微机系统的软、硬件设计,为后续课程奠定专业技术基础。
四、理论教学的基本要求1、了解:微机的应用前景和发展趋势;微机应用前景;8086最小模式的设计方法;现代微机的基本组成原理、功能、特点;存储器的基本工作原理;中断控制的特点、中断处理方法;微机中断系统的作用;8259的操作命令字和控制命令字的意义和使用方法;8255与8086的应用扩展设计方法;8255的方式控制字及状态字意义和使用方法、初始化设计方法;8253的6种应用扩展硬、软件设计方法;8253的引脚功能和内部组成结构;0832引脚功能和内部结构及0832与8086CPU的扩展设计方法;0809引脚功能和内部结构及0809与8086CPU的扩展设计方法;8086微机系统的小键盘设计方法;8086微机系统的七段码显示器的设计方法。
2、理解:中断请求与中断相应的基本工作过程;8259引脚功能和内部结构及各部分的工作原理与特点;8259中断触发方式和中断响应过程;多级中断响应过程;8255的三种工作方式;A/D及D/A变换器接口基本特点与转换原理;3、掌握:8086指令的寻址方式;8086的指令功能和使用方法;8086汇编语言程序格式形式和各种表达方式;汇编语言程序基本设计方法和基本要求;8086中断系统结构、8086内部与外部中断的特点、中断类型与中断向量、8086中断处理过程;8255的引脚功能和内部组成结构;8253的6种工作方式与输入/输出的时序、初始化编程;8251的控制字与状态字、初始化编程。
微机原理与接口技术课件全 (9)

(2)键的识别 通常有两种方法可识别被按之键:一种是“行扫描”法; 一种是“反转”法。 1)行扫描法 依次对每一行进行扫描,选使被扫描的行为低电平,其它 所有的行均为高电平,接着检测各列线的状态(称为“列”)。 若各列码均为高电平(即列码为全1),则被按之键不在这行。 继续扫描下一行;若列线不全为高电平(即列码为非全1),则 被按之在此行。根据行扫描码及列码就可知被按之键的坐标值 (即位置码)。再根据位置码通过查表可得到它的键值。查表 法的扫描子程序流程图如图7-6所示。
四、输入/输出寻址方式
当主机执行I/O操作时,应先对I/O接口中的端口进行寻址, 其寻址方式有如下两种: 此时,I/O端口单独编址。CPU指令系统中有专门用于I/O操 作的指令——I/O指令,CPU访问I/O端口时发出I/O读命令或写 命令,访问内存时发存储器读或写命令。因此,端口地址与存 储单元地址可重叠。此时,I/O端口不占用存储空间且与访问 I/O设备指令有别。 这种寻址方式中,将I/O端口与存储单元统一编址,即CPU 把I/O端口作为存储单元对待,I/O端口占用一定的存储空间。 采用这种寻址方式的CPU指令系统中没有专门的I/O指令,
微型机中常外设有LED显示器、CRT显示器、键盘、打印机、软 磁盘存储器等。单片机应用系统中常设置LED显示器、拔盘、键 盘、点阵式打印机等外设。
§8-2 键盘及其接口
返回
在微型机系统中,键盘是最常用的输入设备,键盘通常由 数字键和功能键组成,其规模取决于系统的要求。
键盘可分为编码键盘和非编码键盘两种,前者有检测键闭 合,去抖动及产生相应键编码的硬件电路,而后者则没有这些 硬件,上述功能在有少量的硬件支持下由软件来完成。由此可 见编码键盘产生键编码的速度快且基本上不占用CPU时间,但硬 件开销大,电路复杂,成本高;非编码键盘则硬件开销省,电 路简单,成本低,但占用CPU时间较长。
微机原理与接口技术试卷参考答案

(本题20分)一、填空1.CPU与外设之间交换数据常采用、、和四种方式,PC机键盘接口采用传送方式。
2.____________可以将数字信号变成能在传输线上传送的模拟信号,或将传输线上的模拟信号变成数字信号。
3.8255A工作于方式0时,不能工作于____ 传送方式。
4.某微机系统中内存首地址为6000H,末地址为67FFH,则其内存容量为______ 5.已知ADC0809的分辨率为8位,若其V R(+)接+5V,V R(-)接地,当输入电压模拟量为3.125V时,转换后输出的数字量为_____,6.实现定时的三种方法是____定时、_____定时和____________定时。
7对I/O端口编址有_____________和_____________两种方法。
8在一个串行传输系统中,每秒钟可传送10个数据帧,每个数据帧包含1个起始位,6个数据位和2个终止位。
则波特率为________9Intel8086CPU的从编程结构上功能由________________和________________组成。
10,2K×4位RAM构成16KB的存储系统,有20位地址线,全译码方式,需要_____个RAM芯片,需要_____位地址作为片外地址译码器的输入。
,11中断类型码为1CH的中断向量存放在内存中的4个字节单元中,其中的字节单元内容从低字节到高字节依次为30H、20H、10H、40H,则相应的中断服务程序入口地址是_________(本题20分)二、选择题.输出指令在I/O接口总线上产生正确的命令顺序是()。
A先发地址码,再发读命令,最后读数据。
B.先发读命令、再发地址码,最后读数据。
C.先送地址码,再送数据,最后发写命令。
D.先送地址码,再发写命令、最后送数据。
2.8086 CPU有最大和最小两种工作模式,最大模式的特点是_________A.需要总线控制器8288B.由编程进行模式设定C.不需要8286收发器D.CPU提供全部的控制信号3.下列指令中合法的是_______A.MOV WORD_OP1,WORD_OP2B.MOV AX, WORD_OP1[DX]C. MOV SP, SS:DATA_WORD[BX][SI]D. MOV [BX][SI],24. ADC0809的三位地址码ADDC、ADDB、ADDA的取值分别为0、1、1时,选通的模拟通道应该为__________A.IN0B.IN2C.IN3D.IN65.下面的中断中,只有_______需要硬件提供中断类型码A.INTOB.INT nC.NMID.INTR6.CPU使用中断方式从A/D转换器读取数据时,A/D转换器向CPU发出的中断请求信号是______A.STARTB.OEC.EOCD.INTR7.在IBM PC/XT机中,8086执行IN/OUT指令,产生访问I/O接口的读写信号的部件是_______A.CPUB.总线控制电路C.总线裁决电路D.DMA控制器8. 最小模式下8086在执行MOV AL,[SI]期间,下面_______引脚是低电平。
微机原理与接口技术输入输出实验

实验一:输入输出实验实验环境PC机+Win 2010+emu8086 实验日期2016.6.3 一.实验内容1.熟悉emu8086仿真系统,清楚调试环境,能熟练的查看8086仿真系统的寄存器、内存、堆栈等相关内容。
2.设计并单步调试实现一位十进制数的加法运算。
例如:屏幕显示效果为3+2=5,其中,加数和被加数为键盘输入,其他为屏幕自动输出。
3.在实现了一位十进制数加法运算的基础上,尝试实现两位十进制加法运算、一位十进制数的四则运算以及十进制多位数运算等扩展要求。
二.理论分析或算法分析1、Emu8086的使用(1)打开桌面上的云端软件,选择微机原理分类,点击Emu8086的图标,,选择【新建】。
(2)选择COM模板,点击【确定】,软件出现源代码编辑器的界面在源代码编辑器的空白区域,编写如下一段小程序:代码编写结束,点击菜单【文件】【另存为……】,将源代码换名保存。
本例将源代码保存为.asm。
:(3)如果源程序无错误,则编译通过单击【单步运行】可以单步调试,程序将每执行一条指令便产生一次中断(建议使用)。
单击【后退一步】可以返回到上一条指令(这个功能也是一般调试器没有的)。
单击【运行】,程序将从第一句直接运行到最后一句。
2、设计并单步调试实现一位十进制数的加法运算。
(1)选择新建一个.COM类型的文件。
(2)在编辑界面中,键入代码。
(3)点击工具栏的【模拟】按钮,进入调试窗口,单步调试并观察寄存器的变化情况。
3、进一步完善上述程序,实现一位十进制数的加法运算。
4、在实现了一位十进制数加法运算的基础上,选择完成如下题目:两位十进制加法运算、一位十进制数的四则运算、十进制多位数运算等。
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)一位加法:org 100hmov ah, 1int 21hmov bl, al mov ah, 2 mov dl, '+' int 21hmov ah, 1int 21hand bl, 0fh and ax, 0fh add al, bl aaaor ax, 3030h mov bx, ax mov ah, 2 mov dl, '=' int 21h cmp bh, 30hje j1mov ah, 2 mov dl, bhint 21hj1:mov ah, 2 mov dl, blint 21hret 多位加法:org 100hmov ah, 1int 21hmov bh, al int 21hmov bl, al mov ah, 2mov dl, '+'int 21hmov ah, 1int 21hmov ch, al int 21hmov cl, aland bx, 0f0fh and cx, 0f0fh mov ax, cxadd ax, bxaaaor ax, 3030h mov bx, ax mov ah, 2mov dl, '='int 21h cmp bh, 30hje j1mov ah, 2mov dl, bhint 21hj1:mov ah, 2mov dl, blint 21hret一位减、乘、除:mov ah, 1int 21hand al, 0fhmov bl, al mov ah, 1int 21hmov dl, alint 21hand al, 0fhxor ah, ahcmp dl, '+'jne jp1add al, blaaajmp short jp4jp1:cmp dl, '-'jne jp2xchg al, blsub al, blaasjmp short jp4jp2:cmp dl, '*'jne jp3mul blaamjmp short jp4jp3:xchg al, bldiv blaam jp4:mov bx, axmov ah, 2mov dl, '='int 21hor bx, 3030h cmp bh, '1'jc j1mov dl, bhint 21hj1:mov dl, blint 21h四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)一位数加法:多位数加法:一位数减、乘、除法五.结论通过这次实验,我对EMU8086实验模拟环境有相应的了解,熟悉了基本的EMU8086的使用方法,同时也对mov这个指令有了深入的理解,并且知道了各个存储器里面的值得存储过程,为以后的的学习打下了坚实的基础。
微机原理与接口技术习题解答

微机原理与接口技术习题第二章1.简答:(1)8086的时钟周期、总线周期、指令周期(2)8086的基本总线周期及T1、T2、T3、T4四个时钟周期的主要工作(3)在最小系统方式,8086的地址/数据复用线信号如何分离?(4)80386的三种工作方式(5)保护方式下,逻辑地址到物理地址的转换原理2、填空(1)引脚信号和操作的关系操作 WR# RD# M/IO# DT/R# DEN#BHE# 指令举例I/O读 1 0 0 00 1 0 1 1 OUT 30H,AL存储器读(字) 1 0 1 0 0存储器写(字) 0 1 1 MOV [2000H],AX1 1 0 1 MOV AL,[2000H]存储器写(字节) 0 1 1 1 0(2) 8086可以处理()个中断,中断向量表在()存储空间范围,25H号中断的中断向量放在()单元。
(3)两个有符号数运算:70ADH+80ADH,结果是______,对8086标志位的影响:SF=______、CF=______ 、ZF=______ 。
(4)已知12H号中断处理程序放在存储器从3344:5678H开始的地方,则从内存______H开始的连续四个单元中存放着中断向量,依次为______、______、______和______。
(5)8086工作在最小模式下,以下引脚的作用是:ALE______ ;/RD_______ ;/INTR______; /BHE_______ ;RESET______ 。
(6)一个容量为1MB的16位CPU,它的地址线有_____________ 条,数据线有___________条,CPU可寻址的范围是_______________。
(7)设8086的主频为4MHz,则执行一个基本的总线周期要___________ns,基本的总线周期有几个时钟周期__________,当CPU的引脚_________为低时会自动插入Tw周期。
微机原理与接口技术实验教案

微机原理与接口技术实验讲义物理与电子工程学院罗长更显示程序实验 (3)数据传送实验 (4)运算类程序实验 (6)分支程序设计实验 (14)循环程序设计实验 (16)综合程序设计实验 (18)SHR AL,4图1CMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;显示字符MOV AH,02HINT 21HMOV AL,DS:[DI]AND AL,0FH ;取低4位CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;显示字符MOV AH,02HINT 21HMOV AX,4C00H ;返回DOSINT 21HCODE E NDSEND START数据传送实验END START将程序主体部分的寄存器间接寻址方式改为相对寻址方式,则如下所示:MOV BX,0MOV CX,LENNEXT: MOV AL,MSR[BX]MOV ES:MSD[BX],ALINC BXLOOP NEXT运算类程序实验实验目的(1) 掌握运算类指令编程及调试方法。
(2) 掌握运算类指令对各状态标志位的影响及测试方法。
实验内容及说明80x86指令系统提供了实现加、减、乘、除运算的基本指令,可对表1所示的数据类型进行算术运算。
表11.二进制双精度加法运算本实验要求计算X+Y=Z,将结果Z输出到屏幕,其中X=001565A0H,Y=0021B79EH。
实验利用累加器AX,先求低十六位和,并存入低址存储单元,后求高16位和,再存入高址存储单元。
由于低位和可能向高位有进位,因而高位字相加语句需用ADC指令,则低位相加有进位时,CF=1,高位字相加时,同时加上CF中的1。
在80386以上微机中可以直接使用32位寄存器和32位加法指令完成本实验的功能。
2.十进制数的BCD码减法运算本实验要求计算X-Y=Z,其中,X、Y、Z为BCD码,其中X=0400H,Y=0102H。
微机原理及接口技术课后习题及参考答案

第一章课后习题1.1 把下列十进制数转换成二进制数、八进制数、十六进制数。
① 16.25 ② 35.75 ③ 123.875 ④ 97/1281.2 把下列二进制数转换成十进制数。
① 10101.01 ② 11001.0011 ③ 111.01 ④ 1010.11.3 把下列八进制数转换成十进制数和二进制数。
① 756.07 ② 63.73 ③ 35.6 ④ 323.451.4 把下列十六进制数转换成十进制数。
① A7.8 ② 9AD.BD ③ B7C.8D ④ 1EC1.5 求下列带符号十进制数的8位补码。
① +127 ② -1 ③ -0 ④ -1281.6 求下列带符号十进制数的16位补码。
① +355 ② -11.7 计算机分那几类?各有什么特点?1.8 简述微处理器、微计算机及微计算机系统三个术语的内涵。
1.9 80X86微处理器有几代?各代的名称是什么?1.10 你知道现在的微型机可以配备哪些外部设备?1.11 微型机的运算速度与CPU的工作频率有关吗?1.12 字长与计算机的什么性能有关?习题一参考答案1.1 ① 16.25D=10000.01B=20.2Q=10.4H② 35.75D=100011.11B=43.6Q=23.CH③ 123.875D=1111011.111B=173.7Q=7B.EH④ 97/128D=64/123+32/128+1/128=0.1100001B=0.604Q=0.C2H1.2 ① 10101.01B=21.25D ② 11001.0011B=25.1875D③ 111.01B=7.25D ④ 1010.1B=10.5D1.3 ① 756.07Q=111101110.000111B=494.109D ②63.73Q=110011.111011B=51.922D③ 35.6Q=11101.110B=29.75D ④323.45Q=11010011.100101B=211.578D1.4 ① A7.8H=167.5D ② 9AD.BDH=2477.738D③ B7C.8D=2940.551D ④ 1ECH=492D1.5 ① [+127]补=01111111 ② [-1]补= 11111111③ [-0]补=00000000 ④[-128]补=100000001.6 ① [+355]补= 0000000101100011 ② [-1]补= 1111 1111 1111 11111.7 答:传统上分为三类:大型主机、小型机、微型机。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
键盘的布局有两种:线性键盘和矩阵键盘。按键数量不多时可以采用 线性键盘,按键数量太多,识别按键需要的时间太长,线性键盘容易 引起按键丢失。
5
线性键盘
利用74HC245双向数据总线缓冲器B端8根线,每根线接一个按键,就 构成8个按键的线性键盘。每根线通过一个10K的上拉电阻与5V相连, 使得按键在没按下时保持高电平。读取这个输入端口的数据,逐位检 测看看哪一位为0,就可以确定哪一个键被按下。 识别键盘上哪个键被压下的过程称为键盘扫描。
GetKey proc near
mov ch, 00001000b
mov cl, 4
;列号
Kloop:
; 找出键所在列
mov dx, OUT_COL ;逐列输出0
mov al, ch
not al
out dx, al
;第4(3、2、1)列输出0
shr ch, 1
mov dx, IN_ROW ;输入行值
jnz LoopC
20
Exit1:
mov dx, OUT_COL
mov al, 0
out dx, al
mov ch, 0
mov bx, offset KeyTable
add bx, cx
;cl的取值范围0~10H
mov al, [bx]
; 取出键值
mov bl, al
WaitRelease:
mov dx, OUT_COL
12
D CB A 93 E6 F82 5 0 7 1 4
矩阵键盘
按键数量大的键盘通常采用矩阵结构。这是一个4×4的小矩阵键盘。利 用74LS374作为输出端口,输出列值。74HC245作为输入端口,输入 行值。 Q3~Q0输出全0,从B3~B0读入,若读入的数据不等于0FH, 表明有键按下;否则无键按下继续查询。
db 0ffh
15
; 扫描键盘
TestKey proc near
mov dx, OUT_COL
mov al, 0
out dx, al
; 置列线为0
mov dx, IN_ROW
in al, dx
; 读入行线
not al
and al, 0fh
; 屏蔽高四位
ret
TestKey endp
16
; 4×4键盘按键识别程序
IN AL, DX
CMP AL, 0FFH
JNZ K3
K4: NOP
;AH中返回键值,AH=8为出错
RET
KEY ENDP
9
识别按键编程应该注意一点,如果有按键,首先通过延时10~20ms去 除键抖动,然后再次读入扫描码,如果仍然表明有按键,则识别按键, 识别完毕必须等待按键释放,释放完成,本次按键识别过程结束。
11
D CB A 93 E6 F82 5 0 7 1 4
矩阵键盘
按键数量大的键盘通常采用矩阵结构。这是一个4×4的小矩阵键盘。利 用74LS374作为输出端口,输出列值。74HC245作为输入端口,输入 行值。 Q3~Q0输出全0,从B3~B0读入,若读入的数据不等于0FH, 表明有键按下;否则无键按下继续查询。
10
D CB A 93 E6 F82 5 0 7 1 4
矩阵键盘
按键数量大的键盘通常采用矩阵结构。这是一个4×4的小矩阵键盘。利 用74LS374作为输出端口,输出列值。74HC245作为输入端口,输入 行值。 Q3~Q0输出全0,从B3~B0读入,若读入的数据不等于0FH, 表明有键按下;否则无键按下继续查询。
7
【例6-2】
;8个按键的线性键盘,按键识别过程。
;AH中含有键值,如果AH为8则为出错
PORT245 EQU 8000H
KEY PROC NEAR
AGAIN: MOV DX, PORT245
K1: IN AL, DX
CMP AL,0FFH
JZ K1
;无按键,继续等待
CALL D20ms ;延时20ms去抖动
mov al, 0
out dx, al
; 等键释放
mov ah, 10
;延时10ms,等待释放
21
call Delay
call TestKey
jne WaitRelease ;没有释放,继续等待
mov al, bl
;bl中有键值,返回调用
ret
GetKey endp
22
Testkey子程序扫描键盘,读取扫描码。如果有按键,首先通过延时 10~20ms去除键抖动。延时后再次调用Testkey读入扫描码,如果仍 然表明有按键,则调用Getkey读取键值,并等待按键释放,释放完成, 本次按键识别过程结束。Getkey中调用延时10ms等待按键释放。
dec cl
;该列无按键,检测下一列:3(2、1)
jnz Kloop
mov cl, 16
;所有列都检测完成,没有键按下, 返回 0ffh
jmp Exit1
Goon_:
dec cl
shl cl, 2 ;键值 = 列×4 + 行
mov ch, 4 ;每列4个按键
LoopC:
test al, 1 ;是该列的第一行按键码?
in al, dx
not al
and al, 0fh
17
jne Goon_
;该列有按键
dec cl
;该列无按键,检测下一列:3(2、1)
jnz Kloop
mov cl, 16
;所有列都检测完成,没有键按下, 返回 0ffh
jmp Exit1
Goon_:
dec cl
shl cl, 2 ;键值 = 列×4 + 行
MOV DX,PORT245 ;重新检测
IN AL, DX
CMP AL, 0FFH
JZ K1
;说明刚才检测到的按键是源于干扰,重新检测
8
MOV AH,0
;识别按键
K2: SHR AL,1
JNC K3
;是0转K3,键被按下
INC AH
CMP AH,8
JNZ K2
JMP K4
K3: MOV DX,PORT245 ;重新检测,,等待按键释放
};
/* 键码定义 */
24
unsigned char TestKey()
{
OUT(OUTBIT, 0);
/* 输出线置为0 */
return (~IN(IN_KEY) & 0x0f); /* 读入键状态 (高四位不用) */
}
25
unsigned char GetKey() {
unsigned char Pos; unsigned char i; unsigned char j; unsigned char k; unsigned char t;
13
按键识别
首先从输出端口输出列值0,然后从输入端口输入行值,若读入的数据 不等于0FH,表明有键按下;否则无键按下继续查询。 如果有键按下,则逐列输出0,读回行值。如果读入的数据为0FH,表 明该列没键按下,继续检测下一列。否则说明该列有键按下。逐位检 测行值,即可以得到行号和列号。 根据行号和列号,查表,即可得到键值。
jmp Exit1
Goon_:
dec cl
shl cl, 2 ;键值 = 列×4 + 行
mov ch, 4 ;每列4个按键
LoopC:
test al, 1 ;是该列的第一行按键码?
jnz Exit1 ;是,转Exit1
shr al, 1 ;指向该列的下一行按键?
inc cl
;指向该列的下一个键值
dec ch ;4个按键都测试完了吗?
知识点6.3
键盘和显示接口
1
6.3 键盘和显示接口
键盘、显示器是人机交互接口的常用设备。本节以键盘、显示接口为 例说明简单输入接口和简单输出接口与系统的连接方式。
2
知识点6.3.1
键盘接口
3
键盘有各种大小,有4、12、16键的小型键盘,如电话键盘、家电键 盘、手机键盘,还有83键、86键、101键等计算机键盘。 键盘的按键有多种,常用的有机械式、薄膜式、电容式和霍尔效应式 等4种。机械式开关较便宜,但压键时会产生触点抖动,而且长期使用 后可靠性会降低。薄膜式开关可做成很薄的密封单元,不易受外界潮 气或环境污染,常用于微波炉、医疗仪器或电子秤等设备的按键。电 容式开关没有抖动问题,但需要特制电路来测电容的变化。霍尔效应 按键是一种无机械触点的开关,具有很好的密封性,平均寿命高达1亿 次甚至更高,但开关机制复杂,价格很贵。
mov ch, 4 ;每列4个按键
LoopC:
test al, 1 ;是该列的第一行按键码?
jnz Exit1 ;是,转Exit1
shr al, 1 ;指向该列的下一行按键?
inc clห้องสมุดไป่ตู้
;指向该列的下一个键值
dec ch ;4个按键都测试完了吗?
jnz LoopC
18
jne Goon_
;该列有按键
return(KeyTable[i][t]); /* 取出键码 */ } /*else return(0xff); */ } }
27
i = 4; Pos = 0x08; /* 找出键所在列 */ do {
OUT(OUTBIT, ~ Pos); Pos >>= 1; k = ~IN(IN_KEY) & 0x0f; } while ((--i != 0) && (k == 0));
26
/* 键值 = 列 X 4 + 行 */ if (k != 0) { if (k==4) t=k-2; else t=(k-1)%4; OUT(OUTBIT, 0); do Delay(10); while (TestKey()); /* 等键释放 */