1、1第第1010章章 89C5189C51与键盘、显示器、拨盘、打印机的接与键盘、显示器、拨盘、打印机的接 口设计口设计大多数应用系统,都要配置输入外设和输出外设。大多数应用系统,都要配置输入外设和输出外设。输入外设:输入外设:键盘、键盘、BCDBCD码拨盘等;码拨盘等;输出外设:输出外设:LEDLED显示器、显示器、LCDLCD显示器、打印机等。显示器、打印机等。10.1 10.1 LEDLED显示器接口原理显示器接口原理 LED LED(Light Emitting Diode)(Light Emitting Diode):发光二极管的缩写。显示器发光二极管的缩写。显示器前面冠以前面冠以“L
2、ED”LED”。10.1.1 10.1.1 LEDLED显示器的结构显示器的结构 常用的常用的LEDLED显示器为显示器为8 8段段(或(或7 7段段,8 8段比段比7 7段多了一个小数段多了一个小数点点“dp”dp”段)。段)。有有共阳极共阳极和和共阴极共阴极两种。如两种。如图图10-110-1所示。所示。2图图10-110-1 8 8端端LEDLED结构及外形结构及外形3 为使为使LEDLED显示不同的符号或数字显示不同的符号或数字,要为,要为LEDLED提供提供段码段码(或(或称称字型码字型码)。)。提供给提供给LEDLED显示器的段码显示器的段码(字型码字型码)正好是一个字节(正好是一
3、个字节(8 8段)段)。各段与字节中各位对应关系如各段与字节中各位对应关系如表表10-110-1。按上述格式,按上述格式,8 8段段LEDLED的段码如的段码如表表10-10-2 2所示。所示。表表10-1 10-1 段码与字节中各位对应关系段码与字节中各位对应关系4表表10-10-2 LED2 LED段码(段码(8 8段)段)表表10-10-2 2只列出了部分段码,只列出了部分段码,可根据实际情况选用可根据实际情况选用,也可重新定义。,也可重新定义。5 N N个个LEDLED显示块有显示块有N N位位位选线位选线和和8 8N N根根段码线。段码线。段码线段码线控制显示字符的字型,而控制显示字
4、符的字型,而位选线位选线为各个为各个LEDLED显示块中各显示块中各段的公共端,它控制该段的公共端,它控制该LEDLED显示位的亮与暗。显示位的亮与暗。10.1.2 10.1.2 LEDLED显示器工作原理显示器工作原理图图10-210-2是是4 4位位LEDLED显示器的结构原理图。显示器的结构原理图。图图10-210-2 4 4位位LEDLED显示器的结构原理图显示器的结构原理图61.LED1.LED静态显示方式静态显示方式 各位的公共端连接在一起(接地或各位的公共端连接在一起(接地或+5+5V V)。)。每位的段码线(每位的段码线(a adpdp)分别分别与一个与一个8 8位的锁存器输出
5、相连。位的锁存器输出相连。之所以称为静态显示,是因为各个之所以称为静态显示,是因为各个LEDLED的显示字符一经确定,的显示字符一经确定,相应锁存器的段码输出将维持不变,直到送入另一个字符的段码相应锁存器的段码输出将维持不变,直到送入另一个字符的段码为止。为止。静态显示器的静态显示器的显示的亮度高显示的亮度高。图图10-3:10-3:4 4位静态位静态LEDLED显示器电路显示器电路。该电路各位可独立显示,。该电路各位可独立显示,只要在该位的段码线上保持段码电平,该位就能保持相应的显示只要在该位的段码线上保持段码电平,该位就能保持相应的显示字符。字符。7 由于各位分别由一个由于各位分别由一个8
6、 8位的数据输出口(如位的数据输出口(如82C5582C55的的PAPA、PBPB、PCPC口)控制段码线,故在同一时间内,每一个显示的字符可以各口)控制段码线,故在同一时间内,每一个显示的字符可以各不相同。不相同。这种显示方式编程容易,但是占用口线较多。如图这种显示方式编程容易,但是占用口线较多。如图10-310-3,若,若用用IOIO口线接口,要占用口线接口,要占用4 4个个8 8位位IOIO口,若用锁存器(如口,若用锁存器(如74LS37374LS373)接)接口,要用口,要用4 4片片74LS37374LS373芯片。如果显示的位数增多的话,则需要增芯片。如果显示的位数增多的话,则需要
7、增加锁存器。加锁存器。在在显示位数较多的情况显示位数较多的情况下,一般都采用下,一般都采用动态显示动态显示方式。方式。82.2.LEDLED动态显示方式动态显示方式 在多位在多位LEDLED显示时,为简化硬件电路,通常将所有位的段码显示时,为简化硬件电路,通常将所有位的段码线线相应段并在一起,由一个相应段并在一起,由一个8 8位位I/OI/O口控制口控制,形成,形成段码线的多路复段码线的多路复用;用;而各位的共阳极或共阴极分别由相应的而各位的共阳极或共阴极分别由相应的I I/O O线控制,形成各线控制,形成各位的分时选通。位的分时选通。图图10-410-4:4 4位位8 8段段LEDLED动态
8、显示电路。其中动态显示电路。其中段码线占用一个段码线占用一个8 8位位I/OI/O口口,而,而位选线占用一个位选线占用一个4 4位位I/OI/O口口。由于各位的段码线并联,由于各位的段码线并联,8 8位位I I/O O口输出端的段码对各个显示口输出端的段码对各个显示位来说都是相同的。因此,在同一时刻,如果各位位选线都处于位来说都是相同的。因此,在同一时刻,如果各位位选线都处于选通状态,选通状态,4 4位位LEDLED将显示相同的字符。将显示相同的字符。9 若要各位都显示出与本位相应的显示字符,就必须采用若要各位都显示出与本位相应的显示字符,就必须采用动态动态显示方式显示方式,即在,即在某一时刻
9、,只让某一位的位选线处于选通状态某一时刻,只让某一位的位选线处于选通状态,而其他各位的位选线处于关闭状态,同时,段码线上要输出相应而其他各位的位选线处于关闭状态,同时,段码线上要输出相应的字符的段码。的字符的段码。这样,在同一时刻,这样,在同一时刻,4 4位位LEDLED中中只有选通只有选通的那一位显示出字符,的那一位显示出字符,而其他三位则是熄灭的。下一时刻,只而其他三位则是熄灭的。下一时刻,只让下一位的位选线处于选让下一位的位选线处于选通状态通状态,而其他各位的位选线处于关闭状态,在段码线上输出将,而其他各位的位选线处于关闭状态,在段码线上输出将要显示的字符的段码,此时只有选通位显示出相应
10、的字符,其他要显示的字符的段码,此时只有选通位显示出相应的字符,其他位熄灭的。如此循环下去。位熄灭的。如此循环下去。10 虽然这些字符是在不同的时刻出现的,而虽然这些字符是在不同的时刻出现的,而在同一时刻,只有在同一时刻,只有一位显示一位显示,其他位熄灭,但由于,其他位熄灭,但由于LEDLED显示器的余辉和人眼的显示器的余辉和人眼的“视视觉暂留觉暂留”作用,只要每位显示间隔足够短,则可以造成作用,只要每位显示间隔足够短,则可以造成“多位同多位同时亮时亮”的假象,达到同时显示的效果。的假象,达到同时显示的效果。LED LED不同位显示的时间间隔应根据实际情况而定。发光二极不同位显示的时间间隔应根
11、据实际情况而定。发光二极管管从导通到发光有一定的延时从导通到发光有一定的延时,导通时间太短,则发光太弱,人,导通时间太短,则发光太弱,人眼无法看清;但也不能太长,因为要受限于临界闪烁频率,而且眼无法看清;但也不能太长,因为要受限于临界闪烁频率,而且此时间越长,占用单片机时间越多。另外,显示位数增多,也将此时间越长,占用单片机时间越多。另外,显示位数增多,也将占用大量的单片机时间,因此动态显示的实质以牺牲单片机时间占用大量的单片机时间,因此动态显示的实质以牺牲单片机时间来换取来换取IOIO端口的减少。端口的减少。11图图10-510-5为为8 8位位LEDLED动态显示动态显示2002008.1
12、0.108.10.10的过程的过程。图(图(a)a)是显示过程,是显示过程,某一时刻,只有一位某一时刻,只有一位LEDLED被选通显示,其被选通显示,其 余位则是熄灭的;余位则是熄灭的;图(图(b)b)是实际显示结果,是实际显示结果,人眼看到的是人眼看到的是8 8位稳定位稳定的的同时显示同时显示的的字符。字符。图图10-510-5 8 8位位LEDLED动态显示过程和结果动态显示过程和结果1210.2 10.2 键盘接口原理键盘接口原理1.1.键盘输入的特点键盘输入的特点 单片机系统中键盘有两种:机械式键盘和薄膜式键盘。单片机系统中键盘有两种:机械式键盘和薄膜式键盘。键盘:一组按键开关的集合键
13、盘:一组按键开关的集合。一个电压信号通过键盘开关机械触点的断开、闭合,其行线一个电压信号通过键盘开关机械触点的断开、闭合,其行线电压的输出波形如电压的输出波形如图图10-610-6。图图10-610-6 键盘开关及其波形键盘开关及其波形抖动期(抖动期(t1t1、t3t3):一般为):一般为5 510ms10ms;稳定的闭合期间(稳定的闭合期间(t2t2):一般为十分之几秒到几秒;):一般为十分之几秒到几秒;断开期(断开期(t0t0、t4t4)13 2.2.按键的确认按键的确认检测检测行线行线电平电平(图(图10-610-6)高电平:高电平:断开;断开;低电平低电平:闭合。:闭合。为了确保对一次
14、按键动作只确认一次按键有效,必须消除抖为了确保对一次按键动作只确认一次按键有效,必须消除抖动期动期t1t1和和t3t3的影响。的影响。3.3.如何消除按键的抖动如何消除按键的抖动 常用常用软件来消除按键抖动。软件来消除按键抖动。基本思想基本思想:检测到有键按下,键对应的行线为低,软件延时检测到有键按下,键对应的行线为低,软件延时1010msms后,行线如仍为低,则确认该行有键按下。后,行线如仍为低,则确认该行有键按下。当键松开时当键松开时,行线变高,软件延时,行线变高,软件延时1010msms后,行线仍为高,说后,行线仍为高,说明按键已松开。明按键已松开。采取以上措施,采取以上措施,躲开了两个
15、抖动期躲开了两个抖动期t1t1和和t3t3的影响的影响。1410.2.2 10.2.2 键盘接口的工作原理键盘接口的工作原理独立式独立式按键接口和按键接口和行列式行列式键盘接口。键盘接口。1.1.独立式键盘接口独立式键盘接口 各键相互独立,每个按键各接一根输入线,通过各键相互独立,每个按键各接一根输入线,通过检测输入线检测输入线的电平状态的电平状态可很容易判断那个键被按下。可很容易判断那个键被按下。此种接口此种接口适于键数较少适于键数较少或或操作速度较高操作速度较高的场合。的场合。图图10-710-7(a a)为为中断方式的独立式中断方式的独立式键盘工作电路。只要有一键盘工作电路。只要有一个键
16、按下,与门的输出即为低电平,并向个键按下,与门的输出即为低电平,并向89C5189C51发出中断请求,发出中断请求,在中断服务程序中,对按下的键进行识别。在中断服务程序中,对按下的键进行识别。图图10-710-7(b b)为为查询方式的独立式查询方式的独立式键盘工作电路。按键直接键盘工作电路。按键直接与与89C5189C51的的IOIO口线相连,通过读口线相连,通过读IOIO口,判断各口,判断各IOIO口线的电平的状口线的电平的状态,即可以识别出按下的键。态,即可以识别出按下的键。15图图10-710-7 独立式键盘接口电路独立式键盘接口电路16图图10-810-8为为82C5582C55扩展
17、扩展I/OI/O口口的的独立式独立式按键接口电路。按键接口电路。图图10-810-8 通过通过82C5582C55扩展的独立式键盘接口扩展的独立式键盘接口 在各种独立式键盘电路中,在各种独立式键盘电路中,各按键均采用了上拉电阻各按键均采用了上拉电阻,以确,以确保在按键断开时候,各保在按键断开时候,各I I/O O口又确定的高电平。如果输入口线内部口又确定的高电平。如果输入口线内部已有上拉电阻,则外电路上拉电阻可省去。已有上拉电阻,则外电路上拉电阻可省去。172.2.行列式行列式(矩阵式矩阵式)键盘接口键盘接口 用于按键数目较多的场合,用于按键数目较多的场合,由由行线和列线组成行线和列线组成,按
18、键位于,按键位于行、列的交叉点上。如行、列的交叉点上。如图图10-10-9 9所示。所示。按键数目较多的场合按键数目较多的场合,行列式键盘与独立式键盘相比,行列式键盘与独立式键盘相比,要要节省很多的节省很多的I/OI/O口线口线。图图10-910-9 4 44 4行列式键盘结构行列式键盘结构18(1 1)行列式键盘工作原理)行列式键盘工作原理 按键设在行、列线交点上。行线按键设在行、列线交点上。行线通过上拉电阻接到通过上拉电阻接到+5V+5V上上。无键按下,该行线为高电平;无键按下,该行线为高电平;当有键按下时,行线电平由列当有键按下时,行线电平由列线的电平来决定线的电平来决定。由于行、列线为
19、多键共用,各按键彼此将相互发生影响,由于行、列线为多键共用,各按键彼此将相互发生影响,必须必须将行、列线信号将行、列线信号配合起来并作适当的处理配合起来并作适当的处理,才能确定闭合,才能确定闭合键的位置。键的位置。(2 2)按键的识别方法按键的识别方法a.a.扫描法扫描法 图图10-10-9 9(b b)中中3 3号键被按下为例,来说明此键时如何被识号键被按下为例,来说明此键时如何被识别出来的。别出来的。19识别键盘有无键被按下的方法,分两步进行:识别键盘有无键被按下的方法,分两步进行:第第1 1步步:识别键盘有无键按下识别键盘有无键按下。把所有的列线均置为。把所有的列线均置为0 0电平,然电
20、平,然后检查各行线是否都为高电平,如果不全为高电平,则说明后检查各行线是否都为高电平,如果不全为高电平,则说明该行该行有键按下有键按下,否则说明无键按下。,否则说明无键按下。当键当键3 3按下时,第按下时,第1 1行为低电平,但还不能确定是键行为低电平,但还不能确定是键3 3被按下被按下(键(键2 2、1 1或或0 0按下都可以使第按下都可以使第1 1行线为低电平)行线为低电平)第第2 2步:步:如有键被按下,识别出具体的按键如有键被按下,识别出具体的按键。扫描法扫描法:在某一时刻:在某一时刻只让一条列线只让一条列线处于低电平,其余所有列处于低电平,其余所有列线处于高电平。线处于高电平。当第当
21、第1 1列为低电平,其余列为高电平时,因为是键列为低电平,其余列为高电平时,因为是键3 3被按下,被按下,所以第所以第1 1行的行线仍处于高电平;依次类推,直到第行的行线仍处于高电平;依次类推,直到第4 4列为低电平列为低电平时,第时,第1 1行的行线行的行线变为低电平。可判断出第变为低电平。可判断出第1 1行第行第4 4列被按下。列被按下。上述方法称为上述方法称为扫描法扫描法,即,即先把某一列置低电平,其余各列为先把某一列置低电平,其余各列为高电平,检查各行线电平的变化高电平,检查各行线电平的变化,如果某行线电平为低,可确定,如果某行线电平为低,可确定此行列交叉点此行列交叉点处的按键被按下。
22、处的按键被按下。20 b.b.线反转法线反转法 只需两步便能获得此按键所在的行列值,线反转法的原理如只需两步便能获得此按键所在的行列值,线反转法的原理如图图10-10-1010。假设。假设3 3号键被按下。号键被按下。第第1 1步:步:列线输出为全低电平列线输出为全低电平,则行线中电平由高变低的所,则行线中电平由高变低的所在行为按键所在行。在行为按键所在行。P1.0 P1.0P1.3P1.3全为全为“0”“0”,读,读P1.4P1.4P1.7P1.7的状态,则的状态,则P1.4=0P1.4=0,其,其余为余为1 1。第。第1 1行电平有变化,说明行电平有变化,说明第第1 1行有键按下行有键按下
23、。第第2 2步:步:行线输出为全低电平行线输出为全低电平,则列线中电平由高变低所在,则列线中电平由高变低所在列为按键所在列。列为按键所在列。P1.4 P1.4P1.7P1.7全为全为“0”“0”,读,读P1.0P1.0P1.3P1.3的状态,则的状态,则P1.0=0P1.0=0,其余为其余为1 1。第。第4 4行电平有变化,说明行电平有变化,说明第第4 4列有键按下列有键按下。结合上述两步,可确定按键所在行和列。结合上述两步,可确定按键所在行和列。21图图10-1010-10 线反转法原理图线反转法原理图2210.2.3 10.2.3 键盘的工作方式键盘的工作方式 单片机在忙于各项工作任务时,
24、如何兼顾键盘的输入,取单片机在忙于各项工作任务时,如何兼顾键盘的输入,取决于键盘的工作方式。决于键盘的工作方式。原则:原则:即要保证能及时响应按键操作,又不要过多占用即要保证能及时响应按键操作,又不要过多占用CPUCPU的工作时间。的工作时间。键盘工作方式有键盘工作方式有3 3种种,即编程扫描、定时扫描和中断扫描。,即编程扫描、定时扫描和中断扫描。1.1.编程扫描方式编程扫描方式 只有当单片机空闲时,才调用键盘扫描子程序,扫描键盘。只有当单片机空闲时,才调用键盘扫描子程序,扫描键盘。工作过程:工作过程:(1 1)在键盘扫描子程序中,先判断有无键按下。)在键盘扫描子程序中,先判断有无键按下。(2
25、 2)用软件来消除按键抖动的影响。如有键按下,则进行下一)用软件来消除按键抖动的影响。如有键按下,则进行下一步。步。(3 3)求按下键的键号。)求按下键的键号。(4 4)等待按键释放后,再进行按键功能的处理操作。)等待按键释放后,再进行按键功能的处理操作。232.2.定时扫描工作方式定时扫描工作方式 利用单片机内的定时器,产生利用单片机内的定时器,产生1010msms的定时中断,对键盘进的定时中断,对键盘进行扫描。行扫描。3.3.中断工作方式中断工作方式 只有在键盘有键按下时,才执行键盘扫描程序,如无键按只有在键盘有键按下时,才执行键盘扫描程序,如无键按下,单片机将不理睬键盘。下,单片机将不理
26、睬键盘。键盘所做的工作分为三个层次键盘所做的工作分为三个层次。第第1 1层:层:单片机如何来监视键盘的输入。三种工作方式:单片机如何来监视键盘的输入。三种工作方式:编程扫描;定时扫描;中断扫描。编程扫描;定时扫描;中断扫描。第第2 2层:层:确定具体按键的键号。体现在按键的识别方法上确定具体按键的键号。体现在按键的识别方法上就是:扫描法;线反转法。就是:扫描法;线反转法。第第3 3层:层:执行键处理程序。执行键处理程序。2410.3 10.3 键盘键盘/显示器接口设计实例显示器接口设计实例 一般把键盘和显示器放在一起考虑。一般把键盘和显示器放在一起考虑。10.3.1 10.3.1 利用并行利用
27、并行I/OI/O芯片实现键盘芯片实现键盘/显示器接口显示器接口 图图10-110-11 1:80318031用扩展用扩展I/OI/O接口芯片接口芯片8181C55C55实现的实现的6 6位位LEDLED显示显示3232键的键键的键盘盘/显示器接口显示器接口电路。电路。图中图中8181C55C55也可用也可用8282C55C55来来替代。替代。25 8 89C519C51外扩一片外扩一片81558155H H。RAMRAM地址:地址:7 7E00HE00H7EFFH7EFFH。I/O I/O口地址:口地址:7 7F00HF00H7F05H7F05H。PAPA口口为输出口为输出口,控制键盘控制键盘
28、列线的扫描列线的扫描,同时又是,同时又是6 6位共阴极位共阴极显示器的显示器的位扫描口位扫描口。PBPB口口作为显示器段码输出口,作为显示器段码输出口,PCPC口作为键盘的行线状态的口作为键盘的行线状态的输入口。输入口。75452 75452:反相驱动器,反相驱动器,74077407:同相驱动器。同相驱动器。1 1动态显示程序设计动态显示程序设计 内部内部RAM RAM 6 6个显示缓冲单元:个显示缓冲单元:7979H H7EH7EH,存放要显示的存放要显示的6 6位位数据。数据。81 81C55C55的的PBPB口输出相应位的段码,口输出相应位的段码,依次改变依次改变PAPA口输出为口输出为
29、高高的的位位使某一位显示某一字符,其它位为暗。动态地显示出由缓冲使某一位显示某一字符,其它位为暗。动态地显示出由缓冲区中显示数据所确定的字符。区中显示数据所确定的字符。26DIRDIR:MOV R0,MOV R0,79H79H;置缓冲器指针初值置缓冲器指针初值 MOV R3,MOV R3,01H01H;位选码的初值送位选码的初值送R3R3 MOV A,R3MOV A,R3LD0LD0:MOV DPTR,MOV DPTR,7F01H 7F01H;位选码位选码PAPA口口 MOVX DPTR,AMOVX DPTR,A ;(;(PA.0PA.0位位)最左边最左边LEDLED亮亮 INC DPTRIN
30、C DPTR ;数据指针指向数据指针指向PBPB口口 MOV A,R0 MOV A,R0 ;显示数据显示数据A A ADD A,ADD A,0DH 0DH ;加偏移量加偏移量 MOVC A,AMOVC A,APC PC ;根据显示数据来查表取段码根据显示数据来查表取段码DIR1DIR1:MOVX DPTR,AMOVX DPTR,A ;段码段码81558155H H PBPB口口 ACALL DL1ms ACALL DL1ms ;该位显示该位显示1 1msms INC R0INC R0 ;指针指向下一个数据单元指针指向下一个数据单元 MOV A,R3MOV A,R3 ;位选码送入位选码送入A A
31、中中 JB Acc.5,LD1JB Acc.5,LD1 ;判断是否扫描到最右边判断是否扫描到最右边,到则返回到则返回 RL A RL A ;位选码左移一位,准备让下一位位选码左移一位,准备让下一位LEDLED亮亮 MOV R3,AMOV R3,A ;位选码送位选码送R3R3中保存中保存 AJMP LD0 AJMP LD0 LD1LD1:RET RET 27DSEGDSEG:DB 3FH,06H,5BH,4FH,66H,6DH DB 3FH,06H,5BH,4FH,66H,6DH;共阴极段码表共阴极段码表 DB 7DH,07H,7FH,6FH,77H,7CH DB 7DH,07H,7FH,6FH
32、,77H,7CH DB 39H,5EH,79H,71H,73H,3EH DB 39H,5EH,79H,71H,73H,3EH DB 31H,6EH,1CH,23H,40H,03HDB 31H,6EH,1CH,23H,40H,03H DB 18H,00HDB 18H,00HDL1msDL1ms:MOV R7,MOV R7,02H02H;延时延时1 1msms子程序子程序 DLDL:MOV R6,MOV R6,0FFH0FFHDL6DL6:DJNZ R6,DL6DJNZ R6,DL6 DJNZ R7,DLDJNZ R7,DL RETRET282 2键盘程序设计键盘程序设计(1 1)判别键盘上有无键
33、闭合)判别键盘上有无键闭合 方法为扫描口方法为扫描口PA0PA0PA7PA7输出全输出全0 0,读,读PCPC口的状态,若口的状态,若PC0PC0PC3PC3全为全为1 1(键盘上的行线全为高电平),则键盘上没有键闭(键盘上的行线全为高电平),则键盘上没有键闭合,若合,若PC0PC0PC3PC3不全为不全为1 1,则有键处于闭合状态。,则有键处于闭合状态。(2 2)去除键的机械抖动)去除键的机械抖动 判别出键盘上有键闭合后,延迟一段时间再判别键盘的状判别出键盘上有键闭合后,延迟一段时间再判别键盘的状态,若仍有键闭合,则认为键盘上有一个键处于稳定的闭合期,态,若仍有键闭合,则认为键盘上有一个键处
34、于稳定的闭合期,否则认为是键的抖动。否则认为是键的抖动。(3 3)判别闭合键的键号)判别闭合键的键号 方法方法:对键盘的列线进行逐列扫描对键盘的列线进行逐列扫描,扫描口,扫描口PA0PA0PA7PA7依次输依次输出下列编码,即出下列编码,即只有一列为低电平只有一列为低电平,其余各列为高电平。,其余各列为高电平。29 相应地,依次读相应地,依次读PCPC口的状态口的状态,若若PC0PC0PC3PC3全为全为“1”“1”,则列线,则列线为为“0”“0”的这一列上没有键闭合。的这一列上没有键闭合。闭合键的键号等于闭合键的键号等于为低电平的为低电平的列列号号加上行线为低电平的加上行线为低电平的行的首键
35、号行的首键号。例如,例如,PAPA口输出口输出1111110111111101时读出时读出PC3PC3PC0PC0为为11011101,则,则1 1行行1 1列列相交的键处于闭合状态,第一列的首键号为相交的键处于闭合状态,第一列的首键号为8 8,列号为,列号为1 1。因此,因此,闭合键的键号闭合键的键号N N为为N N=行首键号列号行首键号列号=8=81=91=9 30 (4 4)使)使CPUCPU对键的一次闭合仅作一次处理键盘程序的流程如对键的一次闭合仅作一次处理键盘程序的流程如图图10-1210-12。图图10-1210-12 键盘子程序流程图键盘子程序流程图31KEYIKEYI:ACAL
36、L KS1ACALL KS1 ;调用判有无键闭合子程序调用判有无键闭合子程序 JNZ LK1 ;JNZ LK1 ;有键闭合,跳有键闭合,跳LK1LK1NINI:ACALL DIR ACALL DIR ;无键闭合,调显示子程序无键闭合,调显示子程序,延迟延迟 ;6ms6ms后,跳后,跳KEYIKEYI AJMP KEYI AJMP KEYILK1LK1:ACALL DIR ACALL DIR ;可能有键闭合,软件延迟可能有键闭合,软件延迟12ms12ms去抖去抖 ACALL DIR ACALL DIR ACALL KS1 ;ACALL KS1 ;调用判有无键闭合子程序调用判有无键闭合子程序 JN
37、Z LK2 JNZ LK2 ;经去抖,判键确实闭合,跳经去抖,判键确实闭合,跳LK2LK2 ACALL DIR ACALL DIR ;调用显示子程序延迟调用显示子程序延迟6ms6ms AJMP KEYI AJMP KEYI ;抖动引起,跳抖动引起,跳KEYIKEYI32LK2LK2:MOV R2,MOV R2,#0FEH#0FEH;列选码列选码R2R2 MOV R4,MOV R4,#00H#00H;R4R4为列号计数器为列号计数器LK4LK4:MOV DPTR,#7F01H;MOV DPTR,#7F01H;列选码列选码81C5581C55的的PAPA口口 MOV A,R2 MOV A,R2 M
38、OVX DPTR,A MOVX DPTR,A INC DPTR INC DPTR ;数据指针增数据指针增2 2,指向,指向PCPC口口 INC DPTR INC DPTR MOVX A,DPTR MOVX A,DPTR ;读读81C55 PC81C55 PC口口JB Acc.0,LONEJB Acc.0,LONE ;0;0行线为高行线为高,无键闭合无键闭合,跳跳LON,LON,转判转判1 1行行 MOV A,MOV A,00H00H ;0;0行有键闭合行有键闭合,首键号首键号0A0A AJMP LKP AJMP LKP ;跳跳LKPLKP,计算键号,计算键号33LONELONE:JB Acc.
39、1,LTW0JB Acc.1,LTW0 ;1 1行线为高行线为高,无键闭合无键闭合,跳跳LTW0LTW0判判2 2行行 MOV A,MOV A,08H ;108H ;1行有键闭合行有键闭合,首键号首键号8A8A AJMP LKP AJMP LKPLTW0LTW0:JB A.2,LTHR ;JB A.2,LTHR ;2 2行线为高行线为高,无键闭合无键闭合,跳跳LTHRLTHR判判3 3行行 MOV A,MOV A,10H ;210H ;2行有键闭合行有键闭合,首键号首键号10HA10HA AJMP LKP AJMP LKP;跳跳LKPLKP,计算键号,计算键号LTHRLTHR:JB Acc.3
40、,NEXTJB Acc.3,NEXT ;3 3行线为高行线为高,无键闭合无键闭合 ;跳跳NEXT,NEXT,准备下一列扫描准备下一列扫描 MOV A,MOV A,18H18H;3;3行有键闭合行有键闭合,首键号首键号18HA18HA34LKPLKP:ADD A,R4ADD A,R4 ;计算键号计算键号:首键号列号首键号列号=键号键号 PUSH A PUSH A ;键号进栈保护键号进栈保护LK3LK3:ACALL DIR ACALL DIR;调用显示子程序,延时调用显示子程序,延时6ms6ms ACALL KS1 ACALL KS1;调用判有无键闭合子程序,延时调用判有无键闭合子程序,延时6ms
41、6ms JNZ LK3 JNZ LK3 ;判键释放否,未释放,则循环判键释放否,未释放,则循环 POP A POP A ;键已释放,键号出栈键已释放,键号出栈AA RET RETNEXTNEXT:INC R4 ;INC R4 ;列计数器加列计数器加1,1,为下一列扫描作准备为下一列扫描作准备 MOV A,R2 ;MOV A,R2 ;判是否已扫到最后一列(最右一列)判是否已扫到最后一列(最右一列)JNB Acc.7,KND ;JNB Acc.7,KND ;键扫描已扫到最后一列键扫描已扫到最后一列 ;跳跳KND,KND,重新进行整个键盘扫描重新进行整个键盘扫描 RL A RL A ;未扫到最后一列
42、,位选码左移一位未扫到最后一列,位选码左移一位 MOV R2,A ;MOV R2,A ;位选码位选码R2R2 AJMP LK4 AJMP LK4KNDKND:AJMP KEYI AJMP KEYI35KS1KS1:MOV DPTR,#7F01H;MOV DPTR,#7F01H;判有无键闭合子程序判有无键闭合子程序 ;全全“0”“0”扫描口(扫描口(PAPA口)口)MOV A,#00H MOV A,#00H ;即列线全为低电平即列线全为低电平 MOVX DPTR,A MOVX DPTR,A INC DPTR INC DPTR ;DPTR;DPTR增增2 2,指向,指向PCPC口口 INC DPT
43、R INC DPTR MOVX MOVX A,DPTR ;A,DPTR ;从从PCPC口读行线的状态口读行线的状态 CPL A CPL A ;行线取反,如无键按下,则行线取反,如无键按下,则A A为为0 0 ANL A,ANL A,0FH ;0FH ;屏蔽无用的高屏蔽无用的高4 4位位 RET RET3610.3.2 10.3.2 键盘键盘/显示器专用芯片显示器专用芯片82798279实现的键盘实现的键盘/显示器接口显示器接口 采用并行采用并行I I/O O口实现的键盘口实现的键盘/显示器接口电路,需要用户自行显示器接口电路,需要用户自行编写键盘编写键盘/显示器的程序。当键盘中有双键或显示器的
44、程序。当键盘中有双键或N N键同时按下时,还键同时按下时,还要考虑编写处理这种情况的程序端。要考虑编写处理这种情况的程序端。目前已经有各种。目前已经有各种。专用的键盘专用的键盘/显示器接口芯片显示器接口芯片可供用户选择。可供用户选择。用户可省去编写键盘用户可省去编写键盘/显示器动态扫描程序的繁琐工作,只需显示器动态扫描程序的繁琐工作,只需对键盘对键盘/显示器接口芯片中的各个控制寄存器进行显示器接口芯片中的各个控制寄存器进行正确的设置正确的设置以及以及与键盘与键盘/显示器进行显示器进行正确的连接正确的连接即可。即可。常用的常用的专用可编程键盘专用可编程键盘/显示器接口电路芯片为显示器接口电路芯片
45、为Intel 8279Intel 8279和和HD7279AHD7279A。3710.3.2 10.3.2 键盘键盘/显示器专用芯片显示器专用芯片82798279实现的键盘实现的键盘/显示器接口显示器接口 Intel8279Intel8279芯片是一种芯片是一种可编程的专用键盘可编程的专用键盘/显示器接口电路芯显示器接口电路芯片片,它能,它能同时完成同时完成监视键盘输入监视键盘输入和和显示控制显示控制两种功能。两种功能。82798279芯片芯片对键盘部分对键盘部分提供扫描工作方式,能对提供扫描工作方式,能对6464个按键个按键的键的键 盘阵列不断扫描,自动消除抖动,自动识别出闭合的键并得到键盘
46、阵列不断扫描,自动消除抖动,自动识别出闭合的键并得到键号,能对号,能对双键或双键或N N个键同时按下进行处理个键同时按下进行处理。显示部分显示部分为为LEDLED或其他显示器或其他显示器提供按扫描方式工作的显示接提供按扫描方式工作的显示接口口,可显示多达,可显示多达1616位位的字符或数字。的字符或数字。381.82791.8279的引脚及内部结构的引脚及内部结构 图图10-1310-13 8279 8279的引脚功能图的引脚功能图39图图10-1410-14 8279 8279的引脚功能的引脚功能402.2.引脚功能介绍引脚功能介绍(1)(1)与单片机的接口引脚与单片机的接口引脚【P199P
47、199】DB0DB0DB7DB7:数据总线、双向、三态,与单片机数据总线相连,数据总线、双向、三态,与单片机数据总线相连,在单片机和在单片机和82798279之间传送命令或数据。之间传送命令或数据。接单片机接单片机P0P0口。口。CLKCLK:系统时钟,输入线。用于系统时钟,输入线。用于82798279内部定时,以产生其工内部定时,以产生其工作所需的时序。作所需的时序。可接可接89C5189C51的的/ALEALE(时钟频率(时钟频率6 6分频)。分频)。RESETRESET:复位输入线,高电平有效。复位输入线,高电平有效。82798279被复位,被复位,复位后的复位后的状态如下状态如下:*1
48、616个字符左边输入显示方式个字符左边输入显示方式 *编码扫描编码扫描键盘、双键锁定方式键盘、双键锁定方式 /CSCS:片选线,输入,低电平有效。片选线,输入,低电平有效。/CS=0,8279=0,8279被选中,允许单片机对其进行读、写操作。被选中,允许单片机对其进行读、写操作。/CS=1=1,禁止对,禁止对92799279进行读、写。进行读、写。41 A0A0:命令字:命令字/状态字、数据选择状态字、数据选择 A0A0=1=1,89C5189C51写入写入82798279的是的是命令命令字节字节;读出读出的是的是状态状态字节。字节。A0A0=0=0,89C5189C51写入或读出写入或读出
49、的字节均为的字节均为数据数据。/RDRD、/WRWR:读、写控制引脚,输入线,低电平有效。这两个读、写控制引脚,输入线,低电平有效。这两个来自单片机的控制信号,控制单片机对来自单片机的控制信号,控制单片机对82798279的读、写操作。的读、写操作。IRQIRQ:中断请求线,高电平有效。中断请求线,高电平有效。在键盘方式中,当键盘在键盘方式中,当键盘RAMRAM(先进先出方式)中先进先出方式)中存有按下键存有按下键的数据时,的数据时,IRQIRQ为高电平为高电平,向,向CPUCPU提出中断申请。提出中断申请。CPUCPU每次从键盘每次从键盘RAMRAM中读出一个字节数据时,中读出一个字节数据时
50、,IRQIRQ就变为低电就变为低电平。平。如果键盘如果键盘RAMRAM中还有未读完的数据,中还有未读完的数据,IRQIRQ将再次变为高电平,将再次变为高电平,再次提出中断请求。再次提出中断请求。42(2 2)扫描信号输出引脚扫描信号输出引脚 SL0SL0SL3SL3:扫描输出线扫描输出线。用来扫描键盘和显示器。用来扫描键盘和显示器。可编程设定为可编程设定为编码输出编码输出,即,即SL0SL0SL3SL3需外接需外接4-164-16译码器,输译码器,输出出1616取取1 1的扫描信号。的扫描信号。也可编程设定为也可编程设定为译码输出译码输出,即由,即由SL0SL0SL3SL3直接输出直接输出4