小键盘按键识别数码管移位显示
(一) 实验目的
掌握“行扫描”按键识别的原理,并掌握行扫描
按键识别的编程技术
(二) 实验内容
按硬件接好图接好线路,同行扫描技术识别小
键盘,将小键盘键如的任意长度的有0—9组成的数
字串,采用左移位显示的
显示在数码管上(仿
照移动电话显示屏的显示效果)当小键盘按下F键
时程序结束.
(三) 相关知识
Intel8255A-5是一个为8080.8082和8088微型计算机系
统
的通用I/O接口芯片通过它可以将CPU的总线直接
接向外设。(CPU总是通过接口电路才能与外设连接)
并行接口芯片具有以下功能:
(1) 两个或两个以上的具有锁存器或缓冲器的数据端口;
(2) 每个数据端口都有与CPU用应答方式交换信号所必需
的控制和状态信息,也有与外设交换信息所必需的控制
和状态信息;
(3) 通常每个数据端口还具有能用中断方式与CPU交换信
息所必需的电路;
(4) 选片和控制电路;
(5) 通常这类接口芯片可用程序选择数据端口,选择端口的
传送方向,选择与CPU交换信息的方法等,故片中要有
能实现这些选择的控制字的寄存器,它可由CPU用输出
指令来写入。
注:8255A的端口A的地址为—218H
端口A的地址为—219H
控制口的地址为—21BH
(四) 实验原理
a) 可以把PB2与小键盘的列线断开,不识别S YDENG
8个功能键。
b) 在数据段设置两张表,一张是0~9的键值表,一张是
0~9的字形编码表,对应关系表如下表所示: 字0 1 2 3 4 5 6 7 8 9 A B C D E F 型
编码 3F 06 5B 4F 66 6D 7D 07 7F 6F 77 7C 39 5E 79 71 (16
进
制)
(3)在数据段设置一个显示缓冲区,即~BUF+6单元,
其中,BUF~BUF+5单元的初值为数码管熄灭的字形
码。程序应将当前的闭合键字形码存入BUF+6单元,
随后将BUF+1~BUF+6单元的内容移到BUF~BUF+5
单元,再扫描显示BUF~BUF+5单元的内容,从而使
数码管显示左移一位。
(3)按键的识别方法如下:
键盘一般都是矩阵排列,行和列分别接微机的输出、输入端口,每个键都跨接在某行和某列上,当键按下时,该行和该列短路。输入的端口线一般都通过电阻上拉至高电平。识别键盘上的闭合键的常用方法有行扫描和行反转法。
行扫描法是使键盘的某一行输出为低电平,其余行为高电平,然后读取列值,如果列值中有某位为低电平,则表明行列交点处的键被按下;若为全高则再扫描下一行,直至扫完全部的行线为止。这样便可以知道是否有键被按下,若有键按下,还可以知道是哪一行哪一列交点的键按下。
(4)LED显示电路:
LED显示电路的核心是6个共阴极数码管,6个数码管的同名阳极段已经复接。6位数码LED的结构图参见如下图:
该电路有两个端口:位选口为奇地址,片选信号CS取自“I/O地址译码电路”的任一输出端,如果将口地址译码输出的“200-207”连接到数码管电路的CS,则片选地址为200H-207H,此时有以下两种情况: A( 针对奇地址端口执行OUT指令,CS=0,IOW=0,
A0=1,数据线D0-D7上的字形编码存入段选锁
存器,其输出端通过8位同相驱动器分别驱动6
个数码管的a-h阳极段。
B( 对偶地址端口执行OUT指令,CS=0,IOW=0,AO=0,
数据线D0-D7上的位选代码码存入位选锁存器,
其输出端通过6位反相驱动器分别驱动第1至
第6位数码管的共阴极。
DO-D7依次对应6个数码管的a-h段,1-6位数
码管的共阴极依次和数据线D0-D5位一一对应,
因此1-6位数码管的位选代码依次为01H,02H,
04H,08H,10H及20H。
很显然,若要6个数码管显示不同的字形,必须采用“扫描显示”的方法。扫描显示的方法是:从第1位到第6位(后者从第6位到第1位),每位显示一个数字后,延时1ms。
电路连接如图所示:
(五) 原理
要用8255做小键盘的处理电路,首先要将8255按要求初
始化。具体要求是:A口方式0输出,B口方式0输入。
采用“行扫描”技术识别闭合键
参考程序流程图:
开始
8255A初始化:A口为
方式0输出,B口为方
式0输入
扫描并显示
BUF?BUF+5中的6
为位数
行值为0?AH,读B口 行列?AL
Y
AL=3?
N
N 延时
逐行扫描,键值?AX
Y AX=“F”键 N 值“ N
查键值表
取闭合键字形码
?BUF+6
单元
返回 BUF+1-BUF+6单元的 内容上移到
BUF-BUF+5单元
(六)程序
DELAY MACRO N1,N2 ; 延时
MOV AH,86H
MOV CX,N1
MOV DX,N2
INT 15H
ENDM
DATA SEGMENT
MESG DB 'READY...',0DH,0AH,'$'
TAB1 DW 17FH,1BFH,1DFH,1EFH,1FEH ;0~4键值
DW 1FDH,1FBH,1F7H,27FH,2BFH ;5~9键值 TAB2 DB 3FH,06H,5BH,4FH,66H ;0~4字形码
DB 6DH,7DH,07H,7FH,6FH ;5~9字形码 ORIGIN DB 1
BUF DB 0,0,0,0,0,0,? ;显示缓冲区 LINE DB 11111110B ;行扫描初值 A_8255 EQU 220H ;8255A口地址 B_8255 EQU 221H ;8255B口地址 CON_8255 EQU 223H ;8255控制口地址 LED_S EQU 201H ;数码管段选口地址 LED_B EQU 200H ;数码管位选口地址 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
BEG: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AH,9
MOV DX,OFFSET MESG
INT 21H
CALL I8255 ;8255初始化 DISP: CALL DISPLAY ;扫描显示6位数
MOV DX,A_8255
MOV AL,0
OUT DX,AL ;0---->A口
MOV DX,B_8255
IN AL,DX ;读B口
AND AL,03H ;列值---->AL
CMP AL,03H
JE DISP ;无键闭合,转
DELAY 1,3880H ;有键闭合,延时80ms
LAST1: MOV DX,A_8255 ;以下逐行扫描
MOV AL,,LINE
OUT DX,,AL ;行扫描值---->A口
MOV DX,B_8255
IN AL,DX ;读B口,列值---->AL
SHR AL,1
JNC O,1 ;PB0列线为0,转OK1
SHR AL,1
JNC OK,2 ;PB1列线为0,转OK2
ROL LINE,1 ;形成下一个行扫描值
JC LAST1
JMP DISP ;非法键入,转显示 OK1: MOV AH,2 ;列值2---->AH
JMP NEXT
OK2: MOV AH,1 ;列值1---->AH NEXT: MOV AL,LINE ;行值---->AL
CMP AX,2F7H ;AX=F键的键值,
JE EXIT ;是F键闭合,转退出
MOV SI,OFFSET TAB1
MOV DI,OFFSET TAB2
MOV CX,10
AGAIN: CMP AX,[SI] ;查键值表
JE OK
ADD SI,2
INC DI
LOOP AGAIN
JMP DISP ;非法键入,转显示 OK: MOV AL,[DI] ;取字形码
MOV BUF+6,AL ;送BUF+6单元
MOV SI,OFFSET BUF+1
MOV DI,OFFSET BUF
MOV CX,6 ;BUF+1~ BUF+6单元
CLD ;6位字形码
REP MOVS B ;上移1个单元
JMP DISP
EXIT: MOV AH,4CH
INT 21H
DISPLAY PROC ;扫描显示6位数
MOV BX,OFFSET BUF
LAST2: MOV AL,[BX]
MOV DX,LED_S
OUT DX,AL ;输出字形码
MOV AL,ORIGIN
MOV DX,LED_B
OUT DX,AL ;定位显示
DELAY 0,1000 ;延时1ms
INC BX
SAL ORIGIN,1
TEST ORIGIN,40H
JZ LAST2
MOV ORIGIN,1
RET
DISPLAY ENDP
I8255 PROC
MOV DX,CON_8255 ;预置
MOV AL,10000010B ;A口方式0输出
OUT DX,AL ;B口方式0输入
RET
I8255 ENDP
CODE ENDS
END BEG
(七)
通过这次课程设计,我对芯片,CPU,输入输出设备,接口电路等有了更深一层的认识,从课堂上到自我实践,从 似懂非懂到进一步的了解,这需要一个操作的过程。
理论应用的实践,是我们学习的目的,计算机正是这样一个全面要求理论与时间的学科。这次课程设计后,同学之间的了解更深了,团队意识更强了。我们这一组的同学相互协作,共同学习,很快我们就完成了我们的课程。“团结就是力量”这句话的分量真的很强。
在课程设计中,我遇到了不少难
,我对专业知识掌握的还不够,动手能力也还很差。在今后的学习和生活中,多读点专业方面
的书籍,注重培养自己的动手能力。在这次设计中,我要感谢老师和同学们的帮助。
(八)参考文献
微型计算机系统原理及应用(清华大学出版社 周明德 2005年版)