第九章单片机与键盘、显示器的接口 教学目的和要求 本章介绍单片机与键盘、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对应的位置,即表示了该键的键值。假如在上图中,设定: