
并行接口的键盘控制.pdf
7页本科实验报告实验名称:并行接口的键盘控制课程名称:计算机原理与应用实验实验时间:2014 年 5 月 12 任课教师:张笈实验地点:信息系统与安全 对抗实验中心实验教师:高平 实验类型:□ 原理验证 ■ 综合设计 □ 自主创新学生姓名:学号/ 班级:组号:学院:信息与电子学院同组搭档:专业:电子科学与技术成绩:一、实验目的1.掌握简单并行接口(8255A)的工作原理及使用方法2.了解小键盘的工作原理,学会设计小键盘的接口技术3.利用 8255 并行接口芯片作为小键盘的接口电路,掌握它们之间的线路连接二、 实验内容与步骤1. 接线:PA0~PA3 /8255 接行 0~行 3/4X4 键盘PB0~PB3 /8255 接列 0~列 3/4X4 键盘CS/8255 接Y1/IO 地址2. 编程:实现在按下小键盘上的任意键后,在微机屏幕上显示相应字符它们的对应关系如下:小键盘显示0 ——0 1 ——1 2 ——2 3 ——3 4 ——4 5 ——5 6 ——6 7 ——7 小键盘显示8 ——8 9 ——9 A ——A B ——B C ——C D ——D E ——E F ——F 三、 实验原理1. 8255A芯片工作方式的设置1)基本控制字基本控制字的格式如下图所示:各位含义如下:D7:设定工作方式标志,1 有效。
D6、D5:A组方式选择00——方式0 01——方式1 1X——方式2 D4:端口 A 功能( 1 输入, 0 输出)D3:端口 C高四位功能( 1 输入, 0 输出)D2:B 组方式选择( 0=方式 0, 1=方式 1)D1:端口 B功能( 1 输入, 0 输出)D0:端口 C低四位功能( 1 输入, 0 输出)2)端口 C复位控制字端口 C复位控制字如下图所示:各位含义如下:D7:位置 0 置一标志, 0 有效D6、D5、D4:不用,可任意值D3、D2、D1:端口 C 的每位选择,由111~000 分别表示第7——第 0 位D0:位置 1/置 0,1=置 1, 0=置 02. 小键盘扫描键盘阵列由8255 芯片控制,并将行列连接到8255 芯片 A 口, B 口,还需要链接8255 芯片的片选到Y1/IO 地址( 288H~28FH) ,以使键盘阵列由8255 芯片控制; 8255A与小键盘借口线路如下图:首先进行键盘的行扫描,确定是否有按键按下,当按键按下时,电平变为低电平然后查找具体的按键,这样进行一次扫描四、 编程方法程序原理是采用行扫描法,对键盘的每行进行——扫描,第一步应该判断是否有键按下, 并确定是哪行;第二步是判断那个行哪一个键被按下,最后显示在屏幕上。
对于按键还要加上防抖动程序程序流程如下:开始五、实验心得:这是第一次做计算机原理的上机实验,实验前老师简单讲了一下试验箱的用法和本节课所用部分的连线接法在理论课上老师也给出了实验的步骤和代码编写的示例总的来说实验不是很困难, 但是如果完全自己编写,应该很是会遇到很多问题,所以课下还是需要多练在程序编译并且连接之后,按下键盘会有抖动,有时候会出现两个字母,所以需要把延时改长一点时间做完试验后,我分别尝试了两个改变一个是改变键盘的连接线,还有就是改变开头tab1 ,tab2 ,tab3 ,tab4 的初始定义当两个相互对应的时候实验结果正确实验大部分内容,老师上课都已经讲过了,要想完全掌握还需要多做实践六、程序代码data segment tab1 DB 'F', 'E', 'D', 'C' tab2 DB 'B', 'A', '9', '8' tab3 DB '7', '6', '5', '4' tab4 DB '3', '2', '1', '0' kb DB 00eh, 00dh,00bh,007h port equ 288h ;Y1/IO 地址data ends stack segment sta db 256 dup(?) top equ size sta stack ends code segment assume cs:code,ds:data,ss:stack main proc far mov ax,data mov ds,ax mov ax, stack mov ss,ax mov sp,top ; 初始化 8255 mov dx, port+3 mov al,10000010b out dx,al begin: mov al,0 ; 全局使能mov dx, port out dx,al mov dx, port+1 in al,dx and al,0fh cmp al,0fh je begin; 若有键按下,查找哪个键mov al,00001110b ;假设某一行mov dx, port out dx,al mov dx, port+1 ;对 b 端口检测in al,dx lea bx,tab1 cmp al,0fh jne display mov al,00001101b ;下一行扫描mov dx, port out dx,al mov dx, port+1 in al,dx lea bx,tab2 cmp al,0fh jne display mov al,00001011b mov dx, port out dx,al mov dx, port+1 in al,dx lea bx,tab3 cmp al,0fh jne display mov al,00000111b mov dx, port out dx,al mov dx, port+1 in al,dx lea bx,tab4 cmp al,0fh jne display nop jmp begin; 查找按下的键,并显示display: mov di,bx lea si,kb ;存小键盘扫描码next: cmp al,[si] ;查键盘扫描码表je show ;找到了 , 则显示否则继续inc si inc di jmp next show: ;显示mov ah,2 mov dl,[di] int 21h cmp dl, 'F' je over call delay jmp begin ;重新开始查询over: mov ah,4ch int 21h main endp delay proc near ;延时循环push di push cx mov cx,01Fh mov di,100 again: nop dec di jnz again dec cx jnz again pop cx pop di ret delay endp code ends end main 。












