1、154.2 通用键盘显示电路设计4.2.1 通用可编程键盘和显示器的接口电路芯片 8279通用键盘显示电路采用 Intel 公司生产的通用可编程键盘和显示器的接口电路芯片8279。8279 可以实现对键盘和显示器的自动扫描,识别闭合键的键号,完成显示器动态显示,可以节省 CPU 处理键盘和显示器的时间,提高 CPU 的工作效率。另外,8279 与单片机的接口简单,显示稳定,工作可靠。所以使用 8279 的通用键盘显示电路可使系统设计简单化。1. 8279 芯片的信号引脚及功能8279 采用 40 脚双列直插式封装,引脚封装形式如图 4.2.1 所示。图 4.2.1 8279 引脚分布图其中:D
2、B0DB7:双向数据总线。在 CPU 与 8279 间做数据与命令的传送。CLK:8279 的系统时钟,100KHz 为最佳选择。RESET:复位信号,输入线,当 RESET=1 时,8279 复位,其复位状态为:16 个字符显示,编码扫描键盘双键锁定,程序时钟编码 1。:芯片选择信号,低电平有效。CSA0:区分信息的特征位。A0=1 时,读取状态标志位或写入命令;A0=0 时,读写一般数据。16:读取控制线。 =0,8279 会送数据至外部总线。RDRD:写入控制线。 =0,8279 会从外部总线捕捉数据。WIRQ:中断请求输出线,高电平有效。在键盘工作方式中,当 FIFO 传感器 RAM
3、中有数据时为“1”,CPU 每读一次就变为 0,如果 RAM 中仍有数据则 IRQ 又变为“1” 。在传感器工作方式中,传感器矩阵无论哪里发生变化都会使 IRQ 为“1” 。 SL0SL3:扫描按键开关或传感器矩阵及显示器,可以是编码模式或解码模式。RL0RL7:回复输入线,它们是键盘或传感器的列(或行)信号输入线;平时保持为 “1”,当矩阵结点上有键(开关)闭合时变为“0” 。SHIFT:移位信号输入线,高电平有效。通常用来扩充键开关的功能,可以用作键盘上、下档功能键。在传感器方式和选通方式中,SHIFT 无效。CNTL/ :控制/选通输入线,高电平有效。通常用来扩充键开关的控制功能,作为控
4、制STB功能键用。在选通输入方式时,该信号的上升沿可把来自 RL0RL7 的数据存入 FIFO/RAM 中;在传感器方式下,该信号无效。OUT A0OUT A3:动态扫描显示的输出口(高四位) 。OUT B0OUT B3:动态扫描显示的输出口(低四位) 。:消隐输出线,低电平有效,当显示器切换或使用显示消隐命令时,将显示器消隐。BD4.2.2 基于 8279 的通用键盘和显示电路硬件设计基于 8279 的通用键盘和显示电路原理图如图 4.2.2 所示。17图 4.2.2 键盘与显示器的接口电路图元器件布局图如图 4.2.3 所示,印制板图如图 4.2.4 所示。图 4.2.3 键盘与显示器的接
5、口电路元器件布局图18(a) 印制板图(顶层)(b) 印制板图(底层)图 4.2.4 键盘与显示器的接口电路印制板图194.2.3 8279 与单片机最小系统电路板的连接本系统板设置了一个 8279 的接口电路 J2,供用户扩展键盘和显示器所用,如图 4.2.5所示。ALE 信号作为 8279 的时钟信号,从而与系统时钟同步。8279 的中断信号 IRQ 接到单片机的 INT0 引脚。缓冲器地址 A0 接到单片机的地址线 A8,信号 则接到 74LS138 译码器CS的 CS7 引脚,这样 8279 的命令口地址为 0XFFFFH,数据口地址为 0XFEFFH。读写信号分别和单片机的 RD 和
6、 WR 相连。8279 的数据线 D0D7 与单片机的数据线直接相连。图 4.2.5 单片机最小系统电路板上的 8279 接口电路8279 与 80C51 的许多信号是兼容的,可直接连接,十分方便。连接示例图如图 4.2.2所示。8279 的 8 位数据线(DB0DB7)直接接 80C51 的 P0 口。 、 与 80C51 的RDW读写信号( 、 )直接连接。80C51 的地址锁存信号 ALE 接 8279 的 CLK,在内部RDW分频后产生其内部时钟信号。8279 的中断请求信号(IRQ)经一个反相器反相后接 80C51的 。8279 的三个可寻址的寄存器只需两个地址,即:命令/状态寄存器
7、地址和数据寄1INT存器地址。8279 中与地址有关的信号为 A0 和 ,它们的连接情况直接决定着寄存器的CS地址,一旦硬件电路确定,寄存器的地址也就确定下来了。在图 4.2.2 中,命令和状态区分信号 A0 接 80C51 的 P2.0,片选信号 接 CS7。当CSP2.0=1 时,对应命令/状态寄存器;当 P2.0=0 时,对应数据寄存器;CS7=0 时 8279 芯片被选通。因此,命令/状态寄存器的地址为 0FFFFH,数据寄存器的地址为 0FFFFH。4.2.4 基于 8279 的通用键盘和显示电路程序设计8279 的编程可分为初始化、向显示 RAM 中写入数据和读键盘数据三部分。在实
8、际应用20中,通常初始化编程在主程序中完成;显示部分一般作为子程序;而键盘读入部分作为中断服务程序编写。在此主要介绍 8279 的初始化编程。初始化编程是向 8279 写入工作方式命令字,确定其工作方式及相关操作功能。1. 8279 的命令及格式8279 共有 8 条命令,均为 8 位,各命令的格式及功能分述如下:(1)键盘/显示器方式设置命令此命令用于设置键盘与显示器的工作方式,其各位定义为:D7 D6 D5=000 为此命令的特征位或称命令码。D4 D3 用来设定显示方式0 0 8 个 LED 显示器,从左端输入0 1 16 个 LED 显示器,从左端输入1 0 8 个 LED 显示器,从
9、右端输入1 1 16 个 LED 显示器,从右端输入D2 D1 D0 用来设定键盘、传感器矩阵、显示器操作方式0 0 0 编码扫描键盘,双键锁定0 0 1 译码扫描键盘,双键锁定0 1 0 编码扫描键盘,N 键依次读出0 1 1 译码扫描键盘,N 键依次读出1 0 0 编码扫描传感器矩阵1 0 1 译码扫描传感器矩阵1 1 0 选通输入,编码显示扫描1 1 1 选通输入,译码显示扫描译码方式即为内部译码方式;编码方式即为外部译码方式。(2)程序时钟命令此命令用来设置分频系数,其定义为:D7 D6 D5=001 为此命令的命令码。D4D 0=231 此 5 位用来设定对外部输入时钟 CLK 进行
10、分频值,用以产生100kHz 的频率信号作为 8279 的内部时钟,其值可取 231。例如:假定 CLK 为 2MHz,为取得 100kHz 的内部时钟信号,则分频系数=2MHz/100kHz=20,应使 D4D3D2D1D0=10100B,即十进制数 20D。21(3)读 FIFO/传感器 RAM 命令此命令用来设置读 FIFO/传感器 RAM,其定义为:D7 D6 D5=010 为此命令的命令码。D4=1 设置 FIFO/传感器 RAM 地址读后自动加 1。D4=0 读后地址保持不变。D3位没有定义,可为任意。D2 D1 D0 在传感器方式及选通输入方式时该三位为 FIFO RAM 的地址
11、。在键盘扫描方式时,每次读取数据总是按先进先出的原则依次读出的,D 4位和此 3 位无关。(4)读显示 RAM 命令此命令用来设置读显示 RAM,各位定义为:D7 D6 D5 =011 为此命令的命令码。 D4位定义同上。D3 D2 D1 D0:为显示 RAM 的存储单元地址。当 D4设为 1 时,每次读出显示 RAM 后地址自动加 1,指向下一个单元地址,D 4为 0 时读出后地址保持不变。(5)写显示 RAM 命令此命令用来设置写显示 RAM,其各位定义为:D7 D6 D5 =100 为此命令的命令码。D4D 0 定义同上。(6)显示禁止写入/熄灭(消隐)命令此命令用来禁止数据写入显示 R
12、AM 或向显示 RAM 写入空格(即熄灭) ,其各位定义为:D7 D6 D5=101 为此命令的命令码。D4没有定义,可以任意。D3 D2位分别 A、B 组显示 RAM 或写入屏蔽位,设为“1”时禁止写入。这样可以使得A、B 组显示 RAM 单独送数,而又不影响另一组的显示。D1 D0两位分别为 A、B 组的熄灭设置位,若设为 1,则对应组的显示输出被熄灭;若设为 0 则被恢复显示。(7)清除命令此命令用来清除显示器 RAM 和 FIFO RAM,其格式为:22D7 D6 D5=110 为此命令命令码。D4=1 清除显示 RAM 有效,与 D3 D2配合使用。D3 D2 用来设定清除显示 RA
13、M 的方式。0 x 将显示 RAM 全部清 01 0 将显示 RAM 置为 20H(即 A 组=0010,B 组=0000)1 1 将显示 RAM 全部置 1若 D4=0,则不清除显示 RAM,D 3 D2位设置无效;但若 D0=1,则 D3D2的设置仍有效。D1=1 清除 FIFO RAM 存储器,并使中断输出线复位;同时传感器 RAM 的读出地址也被置 0。D0位为中断清除标志位。(8)中断结束/出错方式设置命令此命令用来设置中断结束及出错方式,其格式为:D7 D6 D5=111 为此命令的命令码。D4=1 时,对 N 键依次读出方式可工作在特殊出错方式(多重按键按下时出错) 。对于传感器
14、工作方式,此命令使 IRQ 变低,而结束中断,并允许 FIFO RAM 的再次写入。D3D 0位没有定义,可为任意。8279 这 8 条命令根据程序的需要可在主程序,显示子程序和中断服务程序中使用。2. 8279 编程举例下面是一个带键盘设定时间的时钟程序。该程序详细说明了对 8279 进行编程的方法,同时给出了使用键盘和显示器的方法。在程序设计中首先进行 8279 初始化,其中包括:指定 8279 的数据口和控制口、设置键盘/显示器方式、设置分频系数、清除 8279 内部显示 RAM、指向显示的数码管位置等。接着是运行显示程序,通过调用查表子程序将要显示的内容显示在数码管上。最后是运行键盘扫
15、描程序,测试是否有闭合键出现。中断服务子程序主要是每隔一秒中断一次,实现时、分、秒自动加一。(1)汇编语言程序汇编语言编写的程序如下:org 0000hajmp mainorg 000bh23ajmp intt0org 0100hmain:mov sp,#60hmov tmod,#01h ;计数器方式选择mov th0,#3ch mov tl0,#0b0h ;T0 计数器初始化mov r7,#20 ;工作寄存器初始化每 20 次中断(1 秒)mov r2,#30h ;初始值设定mov r3,#59hmov r4,#23hsetb ea ;开总中断 setb et0 ;允许 T0 溢出中断set
16、b tr0 ;T0 开始计数mov dptr,# 0FFFFh ;指向 8279 控制口mov a,#00h ;设定 8279 显示/键盘方式movx dptr,amov a,#32h ;设定分频系数movx dptr,amov a,#0dfh ;清除 8279 内部显示 RAMmovx dptr,aloop:movx a,dptrjb acc.7,loop ;显示 RAM 清除完毕吗?disp:mov dptr,# 0FFFFh ;显示程序段mov a,#80h ;指向第一位数码管movx dptr,amov a,r4 ;取 r4 中的高四位内容并送数码管显示swap aanl a,#0fh
17、lcall tablemov dptr,# 0FEFFh24movx dptr,alcall delaymov a,#81h ;指向第二位数码管mov dptr,# 0FFFFhmovx dptr,amov a,r4 ;取 r4 中的低四位内容并送数码管显示anl a,#0fhlcall tablemov dptr,# 0FEFFhmovx dptr,alcall delaymov a,#82h ;指向第三位数码管mov dptr,# 0FFFFhmovx dptr,amov a,#0f7h ;显示.mov dptr,# 0FEFFhmovx dptr,amov a,#83h ;指向第四位数码管mov dptr,#7001hmovx dptr,amov a,r3 ;取 r3 中的高四位内容并送数码管显示swap aanl a,#0fhlcall tablemov dptr,# 0FEFFhmovx dptr,aacall delaymov a,#84h ;指向第五位数码管mov dptr,# 0FFFFhmovx dptr,a