型键盘显示控制器实验板教师实验指导
清华大学微型计算机实验系统 三型键盘显示实验板 教师用实验指导 (汇编部分) 清 华 大 学 科 教 仪 器 厂 2008年8月 目录 实验板介绍3 实验一 8255并行口键盘扫描实验5 实验二 8255控制数码管显示实验(一)11 实验三 8255控制数码管显示实验(二)14 实验四 8255控制数码管显示实验(三)16 实验五 8255控制数码管显示实验(四)19 实验六 8255控制键盘、显示综合实验25 实验板介绍 一、实验板原理:实验板由可编程并行接口8255、6个数码管,16键小键盘组成。通过一个20芯扁平电缆与主实验台相连。该实验板可以和TPC-2003A+、TPC-USB+、TTC-2实验系统配套使用。原理图如下: 图1 8255及20芯电缆信号 图2 数码显示 图3 16键键盘 实验板上的20芯接口插座提供数据总线信号D0-D0,控制信号IOR、IOW,低位地址A0、A1等,实验时通过20芯扁平电缆与主实验台相连。这些信号在实验板上都有插线孔引出,也可以用自锁紧导线直接连到实验台上。8255与数码管之间的连线已经接好,8255的PA0-PA7接数码管的段码a-dp,PB0-PB5接数码管的位码0-5,实验时不用再接线。8255的PC0-PC7和键盘的行0-行3、列0-列3分别有插线孔引出,实验时需自己连线。 实验一 8255并行口键盘扫描实验 一、 实验目的 1、掌握8255A编程原理。 2、了解键盘阵列结构,学会读取按键的方法。 二、 实验内容 按图4接线,8255C口接键盘(8255的C0~C3接键盘的列0~列3,C4~C7接键盘的行0~行3),片选CS接大板上地址译码输出的288h~28fh。用20芯扁平电缆连接实验板与主实验台上的20芯扩展插座。 图 4 键盘扫描实验原理图 8255端口A地址为:288H 端口C地址为: 28AH 控制口地址为: 28BH 编程使得在键盘阵列上每按一个键后,微机屏幕上有相应字符显示出来,按“E”退出程序。 三、 编程指南 1. 识别键盘上的闭合键,通过采用行扫描法或行翻转法: ★行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值;如果列值中有某位为低电平,则表明行列交点处的键被按下;否则扫描下一行,直到扫完全部的行线为止。 ★行反转法识别闭合键时,要将行线接一个并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作在输入方式;程序通过输出端口向全部行线上送低电平,然后读取列线的值;如果此时有某一键被按下,则必定会使某一列线值为零,程序再对两个并行端口进行方式设置,使行线工作在输入方式,列线工作在输出方式,并且将刚才读到的列线值从列线所接的并行端口输出,再读取行线上的值;那么,在闭合键所在的行线上的值必定为零。这样,当一个键被按下时,必定可以读到一对唯一的行值和列值。 在我们提供的程序中就采用行反转法来识别键盘按键。 2. 在程序设计时,将各个键对应的代码(列值,行值)放在一个表中,程序通过查表来确定具体按下的为哪一个键。 四、参考流程 主程序流程图: 键盘扫描子程序流程图:(见下页图) 五.参考程序: ;********************; ;* 8255薄膜按键实验 *; ;********************; ioport equ 0cc00H-280H a8255 equ ioport+288H ;8255 A口 b8255 equ ioport+289H ;8255 B口 c8255 equ ioport+28aH ;8255 C口 k8255 equ ioport+28bH ;8255控制口 data segment table1 dw 0770h,0B70h,0D70h,0E70h,07B0h,0BB0h,0DB0h,0EB0h dw 07D0h,0BD0h,0DD0h,0ED0h,07E0h,0BE0h,0DE0h,0EE0h ;键盘扫描码表 char db 09ABCDEF ;字符表 mes db 0ah,0dh, PLAY ANY KEY IN THE SMALL KEYBOARD! ,0ah,0dh db IT WILL BE ON THE SCREEN! END WITH E ,0ah,0dh, $ key_in db 0h data ends stacks segment stack ;堆栈空间 db 100 dup () stacks ends code segment assume cs:code,ds:data,ss:stacks,es:data start: cli mov ax,data mov ds,ax mov es,ax 参考程序:(接上页) mov ax,stacks mov ss,ax mov dx,offset mes ;显示提示信息 mov ah,09 int 21h main_key: call key ;get a char in (key_in) and display it cmp byte ptr key_in, E jnz main_key mov ax,4c00h ;if (dl)= E return to EXIT! int 21h ;退出 key proc near key_loop: mov ah,1 int 16h jnz exit ;pc键盘有键按下则退出 MOV DX,k8255 mov al,8