第九章单片机与键盘、显示器的接口 教学目的和要求 本章介绍单片机与键盘、LED、LCD的接口原理、技术与方法。 要求掌握独立式键盘接口技术,掌握行列式键盘工作原理,理解行列 式键盘按键识别方法。了解LED显示器结构,掌握LED显示器静 态、动态显示技术。掌握专用键盘/显示器管理芯片8279、zg7289的 使用方法。掌握1602LCD、12864LCD与单片机的接口技术和软件设 计方法。 重点:独立式键盘、行列式键盘工作原理、静态、动态显示技术、 1602LCD、12864LCD 难点:1602LCD、12864LCD 学时:4 9.1MCS一51单片机与键盘的接口 一、按键电路和抖动的消除 键盘一般由一组机械按键按一定的规律组成,其结构与产生的波 形如下(P139图7一25): 合特 8031 10m 图a为键盘的工作原理:一般键盘通过I/O口与单片机相连,键 的状态通过读入键值的高低电平来区分。正常状况下,与键盘所连接 的单片机的I/O端口被设置为高电平,当有键按下时,与之相连的单
片机的VO端口将被钳位成低电平。 图b为按键产生的波形,一般情况下,键盘采用机械弹性开关。 由于机械触点的弹性作用,在闭合和断开瞬间会有抖动发生。抖动时 间的长短一般在5~10s之间。为确保按键不产生误动作,必须有 防抖动措施,防抖动措施有硬件和软件两种方法。 硬件防抖动措施的典型做法是采用RS触发器,构成双稳态消抖 电路,一般用在对按键操作过程比较严格的场合(P139:7一26) ?(+5V) 0 厂 省第上哈 无弹跳 1饼 输 号45y 闭合2(低)→1高) 断开:6(低)一4(高)→3(高)且2(高)+1(低) 软件消抖的方法是:当软件检测到第一次按键按下时,执行一个 10s的延时程序,之后再检测该键电平是否仍维持在闭合状态,若 仍然保持,则确认此键是真正按下,从而消除了抖动的影响。 二、独立式键盘与单片机的接口 键盘结构有独立式和行列式两种: 独立式键盘是每个按键独立地占用一条VO接口线,每根【/O 口线上的按键的工作状态不会影响其它I/O口线的工作状态。如下图 所示。无按键按下时,对应的VO线为高电平;当某一按键按下时, 相应的I/0线变为低电平。(P140:图7-27)
+5V (b)查询方式 键盘(独立式和行列式)可工作于中断方式或查询方式: 查询方式:通过执行相应的查询程序来判断有无按键按下。 中断方式:在有任何按键按下时则请求中断,在中断服务程序中 通过执行判健程序,来判断是哪个键按下。 独立式方式电路设计比较直观,软件结构简单,一般用在按键数 目不多的场合。 三、行列式键盘 但当按键数目较多时,独立式键盘方式将大量占用单片机的I/O 口线,通常的办法是采用行列式键盘。行列式键盘也称矩阵式键盘, 般应用在按键较多的系统之中。 行列式键盘通过0口线组成行、列结构,按键设置在行、列的 交叉点上,如下图所示。一个4×4的行列结构可组成16个键的键盘。 这样,当单片机系统的资源有限时,可以节省大量的O口线。(P140: 图7-28)》 按键设置在行列式交点上,行列线分别连 接到按键开关的两端,当有按键按下时,行线 与列线相连,行列线同为高电平
也可以是P140:图7一28的连接方式。(软件不同) 说明:键盘的连接方式: ①、直接与单片机的/O端口相连: ②、通过8255、8155等V0口扩展芯片来外接键盘(用的较多): ③、利用键盘、显示接口芯片(如8279、7289等)进行连接。 后面讲 下列通过一个例子说明键盘的识别过程: 例: 8155 行列式键盘必须由软件来判断是否有键按下和按下键盘的键值 其判别方法是: 1、是否有键按下的判别过程: 首先由CPU从PA口输出一个全为0的数据,此时PA.7一PA.0 全部为低电平,这时如果有键按下,则PB.0一PB.3中总会有一根线 被拉至低电平(行列相连),当CPU去读8155PB口时,PB.3-PB.0 不全为1,表明这时有键按下。相反当CPU去读8155PB口时, PB.3—PB.0全为1(高电平),表明这时无键按下
2、键值的判别 ①、列值 現在我们假设第5行第4列键是按下的(即图中箭头指着的那个 键)。由于该键被按下,使第4根列线与第5根行线导通,原先处于 高电平的第4根列线被第5根行线钳位到低电平。所以这时CPU读 8155PB口时PB.3=0: 从硬件图中我们可以看到,只要是第4列键按下,CPU读8155PB 口时PB.3始终为0。其PB口的读得值为XXXX0111B,这就是第4 列键按下的特征。如果此时读得PB口值为XXXX1101B,显然可以 断定是第2列键被按下。 ②、行值 读取被按键盘的行值,可用扫描方法。 首先使8155的PA口输出仅PA.0为0、其余位都是1然后去读 PB口的值,如读得PB.3一PB.0为全1,则按键肯定不再第一行:接 着使PA.1为0其余位都是1,再读PB口,若仍为全1,则按键肯定 不再第二行;再继续使PA.2为0,其余位为1,再读PB口.直到读 出PB.0-PB.3不全为1或0位移到PA.7为0为止。当PB.0-PB.3 不全为1时,对应行的键一定被按下。 很明显,对于我们上例中的第5行第4列键按下,必然有:在 PA口输出为11101111B时PB.0-PB.3不全为1,而是XXXX0111B。 ③、键值一此时行输出(PA口)数据和列输入(PB口)数据 中0对应的位置,即表示了该键的键值。假如在上图中,设定:
行号-0,1,2,3,4,5,6,7:列号=0,1,2,3: 可得:键值=行号×10H+列号, 如右图所示 若求得键值,则可利用散转指令(AJMP,SMP等),去执行键盘 各自的功能程序 四、键盘、显示接口芯片及其应用 前面介绍的键盘接口电路,无论是独立式还是行列式,都要占用 CPU大量的IVO端口,这对于I/O资源紧张的单片机而言,无疑是 个沉重的负担。近年,一些公司为解决这个问题,推出了通用键盘、 显示接口芯片,比较典型的有Intel公司早期的8279,广州周立功单 片机有限公司近期推出的7289等等。早期的键盘/显示芯片如8279 一般采用并行接口方式,现在推出的一些芯片则采用流行的SPI或 I2C总线接口方式,易于和单片机接口使用,可最大限度地简化系统 的硬件设计,同时节省了CPU的IVO口资源。 1、8279管脚、引线及功能说明(P143:图7一29) NTEL8279是一种可编程键盘、显示器接口芯片,它含有键盘输 入和显示器输出两种功能。键盘输入时,它提供自动扫描,能与键盘 或传感器组成的矩阵相连,接收输入信息。它能自动消除开关抖动并 能对多键同时按下提供保护。显示输出时,它有一个16×8位显示 RAM,其内容通过自动扫描,可由8或16位LED数码管显示。8279 为40脚双列直插封装,详细说明如下: ①、DB0~DB7(数据总线):双向、三态总线。和单片机的数据 总线相连,在CPU和8279之间传递命令或数据
②、CLK(系统时钟):输入线。用于8279内部定时,以产生其 工作所需时序。 ③、RESET(复位输入线):高电平有效。当复位信号RESET=1 时,8279被复位。复位后8279内部状态如下: 1)显示为16字符格式,左入口 2)编码扫描键盘,双键锁定; 3)程序时钟编程为31。 ④、C下(片选):输入线,低电平有效。当C=0时,8279被 选中,允许CPU对其进行读、写操作,否则被禁止。 ⑤、A0(缓冲器地址):输入线。当A0=1时,若CPU进行写操 作,则写入字节是命令字。若进行读操作,则从8279读出的字节是 状态字。当A0-0时,写入字节或读出字节均为数据 ⑥、D、而(读、写信号):输入线,低电平有效。这两个来 自CPU的控制信号,控制8279的读写操作。 ⑦、RQ(中断请求):输出线,高电平有效。 在键盘工作方式中,当FIFO/传感器RAM中存有数据时,RQ 为高电平,向CPU提出中断申请。CPU每次从RAM中读出一个字 节数据时,IRQ就变成低电平。如果RAM中还有未读完的数据,RQ 将再次变为高电平,再次提出中断申请求。 在传感器工作方式中,每当检测到传感器状态变化时,RQ就出 现高电平。 ⑧、SHFT(移位信号):输入线,高电平有效。该输入信号是
8279键盘数据的次高位D6,通常用来补充键盘开关的功能,可以用 作键盘上下挡的功能键。在传感器方式和选通方式中,SHFT无效。 ⑨、CNTL/STB(控制/选通输入线):高电平有效。 在键盘方式时,该输入信号是键盘数据的最高位D7,通常用来 扩充键开关的控制功能,作为控制功能键用。在传感器方式下,CNTL 信号无效。 在选通输入方式下,该信号的上升沿可将来自RL0~RL7的数据 存放入FIFO RAM中。 ⑩、DB(消隐显示):输出线,低电平有效。该输出信号在数字 切换显示或使用显示消隐命令时,将显示消隐。 M)、SL0-SL3(扫描输出线):这四条输出线用来扫描键盘和显 示器。它们可以编程设定为编码输出(16中取1)或译码输出(4中 取1)。 ②、RL0~RL7(扫描输出回复线):是键盘矩阵或传感器矩阵的 列信号输入线。 3、OUTA0-OUTA3(A组显示信号):输出线。④、 OUTB0-OUTB3(B组显示信号):输出线。这两组引线均是显示信 息输出线,它们与多路数字显示的扫描线SL0~SL3同步。两组可以 独立使用,也可以合并使用。 2、8279内部的主要结构(P144:图7一30) ①、输入输出数据缓冲器:用来接收CPU送来得命令或数据, 8279与CPU之间的数据通道
②、控制与定时寄存器:用来寄存显示与键盘的工作方式,并通 过译码产生相应的操作。 ③、扫描计数器:用于输出显示/键盘的扫描信号。 在“编码方式”中该电路输出二进制计数器的代码(此时外部必须 使用一个译码器对其译码产生真正的扫描信号。这种方式的特点是可 以产生多达16条扫描线。 在“译码方式”时,电路直接输出4选1的扫描信号(外部不必使 用译码器),缺点是只能产生4条扫描线的信号。 ④、回复缓冲器、键盘消抖及控制:通过L0-7用来接收键盘的 数据,并自动加入10mS的延时进行防抖。 ⑤、FIFO/传感器RAM及状态寄存器:双重功能的8*8位RAM。 在键盘或选通方式中:它是FI℉O寄存器。进入和读出数据是按 FIFO规则进行的。此时FIFO状态字用来存放FIFO RAM的工作状 态。每当FIFO不空时(由键盘数据),IRQ=1向CPU发中断申请。 在传感器矩阵方式时:它又是传感器RAM。用来存放每一个传 感器的状态,如果传感器的状态发生变化,则是RQ1向CPU发中断 申请。 ⑥、显示RAM和显示地址寄存器:由16*8位RAM构成,可以 存放16个显示的数据。8279在动态显示数据时,就是将此RAM单元 中的数据轮流从显示RAM中输出。 数据的输出分为两组OUTA、OUTB。它们可以单独使用也可以 合并为8位。在输出RAM中的数据时,扫描电路同步的发出与位对应
的显示驱动位扫描信号,以实现数据的动态显示。 显示地址寄存器是寄存CPU进行读/写的显示RAM地址,它可由 命令字中的低4位来设定,也可以按照命令字中的AI的状态自动加 或自动减一。 3、8279的命令字 8279的各种工作方式都要通过对命令寄存器的设置来实现.8279 共有8种命令,通过这些命令设置工作寄存器,来选择各种工作方式。 命令寄存器共8位,格式为: 如上图,8279的一条命令由两大部分组成,一部分表征命令类 型,为命令特征位,由命令寄存器高3位D7一D5决定。D7一D5三 位的状态可组合出8种形式,对应8类命令。另一部分为命令的具体 内容,由D4-D0决定。每种特征所代表的命令如下表所示: 下面详细说明各种命令中,D4-D0各位的设置方法,以便确定 各种命令字。 (1)键盘/显示命令—特征位D7D6D5-000 D4、D3:两位用来设定4种显示方式,D2--D0三位用以设定8 种键盘/显示扫描方式,分别如下表所示。 表中所谓译码扫描指扫描代码直接由扫描线SL0--SL3输出,每 次只有1位是低电平(4选1)。所谓编码扫描是指扫描代码经 SL0--SL3外接译码器输出