【数码管显示驱动和键盘扫描控制器CH451及其应用】键盘扫描及数码管显示

数码管显示驱动和键盘扫描控制器CH451及其应用

数码管显示驱动和键盘扫描控制器CH451及其应用 关键词:键盘显示控制;
单片机;
CH451 单片机在开发过程中,常常会因为资源不足而不得不大量扩展接口芯片以 满足应用系统的需要,其中原因之一是人机界面中的键盘显示占用了系统太多资 源,从而造成系统庞大,同时降低了系统的可靠性。在单片机应用系统中,键盘 显示通常可采用以下几种方式:
(1)采用并行接口的键盘显示专用芯片8279。但8279所需外围元 件多(显示驱动、译码等)、占用电路板面积大、综合成本高,在中小系统中常 常大材小用;

(2)采用通用并行I/O芯片扩展(如用8155等),但此方案同样需 要驱动显示,同时键盘显示扫描还需占用CPU大量时间;

(3)采用专用显示控制器,并用CPU的I/O引脚完成键盘输入(如M C14499、PS7219、MAX7219、ICM7218、TLC59 21等,大多是串行接口并有显示驱动能力,I/O占用少)。这种接口方式省 去了显示的扫描,而且电路大多也很简单,通常在系统需要的按键较少时比较适 用;

(4)采用带I2C总线的键盘显示芯片(如显示用SAA1064,键盘 用PCF8574),不过这种方式对于无I2C总线接口的CPU来说,编程 显得有些不便;

(5)采用串行接口的键盘显示专用芯片,如BC7280/81、HD7 279、CH451等。这类芯片占用CPU的资源少,传输速度较快,外围器 件要求也较少,在中小系统中都可得到广泛的应用。BC7280/81与HD 7279中已有介绍,本文着重介绍CH451的主要特性及接口应用方法。

1 CH451的功能与引脚介绍 CH451是一个整合了数码管显示驱动和键盘扫描控制以及μP监控的 多功能外围芯片。CH451内置RC振荡电路,可以直接动态驱动8位数码管 或者64位LED,具有BCD译码或不译码功能,可实现数据的左移、右移、 左循环、右循环、各数字独立闪烁等控制功能。CH451内置大电流驱动级,段电流不小于30mA,字电流不小于160mA,并有16 级亮度控制功能;

在键盘控制方面,该器件内置64键键盘控制器,可实现8×8矩阵键盘扫描, 并内置去抖动电路,可提供按键中断与按键释放标志位等功能;
在外部接口方面, CH451可选择简洁的1线串行接口或高速4线串行接口,且内置上电复位, 可提供高电平有效复位和低电平有效复位两种输出,同时内置看门狗电路Wat ch-Dog。CH451提供有28引脚的DIP28与SOP28封装以及 DIP24S封装形式,28脚与24脚在功能上稍有差别,它们的引脚定义见 表1所列。

表1 CH451的引脚说明 引 脚 说 明 2 CH451的操作命令 CH451的操作命令均为12位,其中高4位为标识码,低8位为参数, 各操作命令如下:
●空操作:0000xxxxxxxxB(x可为任意值,下同) 空操作命令对CH451不产生任何影响。该命令可以在多个CH451 级联的应用中透过前级CH451向后级CH451发送操作命令而不影响前 级CH451的状态。例如,要将操作命令001000000001B发送给 两级级联电路中的后级CH451(后级CH451的DIN引脚连接到前级C H451的DOUT引脚),只要在该操作命令后添加空操作命令000000 000000B再发送,那么,该操作命令将经过前级CH451到达后级CH 451,而空操作命令留给了前级CH451。另外,为了在不影响CH451 的前提下变化DCLK以清除看门狗计时器,也可以发送空操作命令。在非级联 的应用中,空操作命令可只发送高4位。

● 芯片内部复位:001000000001B 内部复位命令可将CH451的各个寄存器和各种参数复位到默认的状 态。芯片上电时,CH451均被复位,此时各个寄存器均复位为0,各种参数 均恢复为默认值。

● 字数据移位:0011000000[D1][D0]B字数据移位命令共有4个:开环左移、右移,闭环左移、右移。D0为0 时为开环,为1时为闭环,D1为0时左移,为1时为右移。开环左移时  DI G0引脚对应的单元补00H,此时不译码方式显示为空格,BCD译码方式时 显示为0;
开环右移时,DIG7引脚对应的单元补00H;
而在闭环时  DI G0与DIG7头尾相接,闭环移位。

● 设定系统参数:010000000[WDOG][KEYB][DISP] B 该命令用于设定CH451的系统级参数  如看门狗使能WDOG、键盘 扫描使能KEYB、显示驱动使能DISP等。各个参数均可通过1位数据来进 行控制,将相应的数据位置为1可启用该功能,否则关闭该功能(默认值)。

● 设定显示参数:0101[MODE][LIMIT][INTENSITY] B 此命令用于设定CH451的显示参数,如译码方式MODE(1位)、 扫描极限LIMIT(3位)、显示亮度INTENSITY(4位)等。译码 方式MODE为1时选择BCD译码方式,为0时选择不译码方式。CH451 默认工作于不译码方式,此时8个数据寄存器中字节数据的位7~位0分别对应 8个数码管的小数点和段G~段A,当数据位为1时,对应的数据段(或发光管) 点亮;
数据位为0时熄灭。CH451工作于BCD译码方式主要应用于数码管 驱动,单片机只要给出二进制数的BCD码,便可由CH451将其译码并直接 驱动数码管以显示对应的字符。BCD译码方式是对数据寄存器中字节数据的位 4~位0进行兼容BCD的译码,可用于控制段驱动引脚SEG6~SEG0的 输出,它们对应于数码管的段G~段A,同时可用字节数据的位7控制段来驱动 引脚SEG7的输出以对应数码管的小数点,字节数据的位6和位5不影响BC D译码的输出,它们可以是任意值。将位4~位0进行BCD译码可显示以下2 8个字符,其中00000B~01111B分别对应于“0~F”、10000 B~11010B分别对应于“ ”  空格  、“+”  +或加号  、“-”  负号或 减号  、“=”  等于号  、“  "  左方括号  、“  ”  右方括号  、“_”  下划线  、“H” 、“L” 、“P” 、“.”  小数点  、其余值为空格。

扫描极限LIMIT控制位001B~111B和000B(默认值)可 分别设定扫描极限1~7和8。显示亮度INTENSITY控制位的0001B~1111B和0000B(默认值)则用于分别设定显示驱动占空比1/1 6~15/16 和16/16,以实现16级显示亮度控制。

●设定闪烁控制:0110[D7S][D6S][D5S][D4S][D3S][D 2S][D1S][D0S]B 设定闪烁控制命令用于设定CH451的闪烁显示属性,其中D7S~D 0S 分别对应于8个字驱动DIG7~DIG0。闪烁属性D7S~D0S分 别通过1位数据控制,将相应的数据位置为1可使能闪烁显示,否则为正常显示, 不闪烁(默认值)。

●加载字数据:1[DIG_ADDR][DIG_DATA]B 加载字数据命令用于将字节数据DIG_DATA(8位)写入DIG_ ADDR(3位)指定的数据寄存器中。DIG_ADDR的000B~111 B分别用于指定数据寄存器的地址0~7,并分别对应于DIG0~DIG7引 脚驱动的8个数码管。DIG_DATA为待写入的字节数据。

●读取按键代码:0111xxxxxxxxB 读取按键代码命令用于获得CH451最近检测到的有效按键的按键代 码。该命令是唯一的具有数据返回的命令,CH451通常从DOUT引脚输出 按键代码,按键代码总是7位数据,最高位是状态码,位5~位0是扫描码。读 取按键代码命令的位数据B7~B0可以是任意值,所以控制器可以将该操作命 令缩短为4位数据B11~B8。例如,CH451检测到有效按键并中断时, 如按键代码是5EH,则先向CH451发出读取按键代码命令0111B,然 后再从DOUT获得按键代码5EH。

CH451所提供的按键代码为7位,位2~位0是列扫描码,位5~位 3是行扫描码,位6是状态码(键按下为1,键释放为0)。例如,连接DIG 3与SEG4的键被按下时,按键代码为63H,键被释放后,按键代码是23 H。单片机可以在任何时候读取按键代码,但一般在CH451检测到有效按键 而产生键盘中断时读取按键代码,此时按键代码的位6总是1。另外,如果需要 了解按键何时释放,单片机可以通过查询方式定期读取按键代码,直到按键代码 的位6为0。表2是连接在DIG7~DIG0与SEG7~SEG0之间的键 被按下时,CH451所提供的按键代码。这些按键代码具有一定的规律,如果需要键被释放时的按键代码,可将表2中的按键代码的位6 置0,也可将表中 的按键代码减去40H。应注意的是:CH451不支持组合键,也就是说,同 一时刻,不能有两个或者更多的键被按下。

表2 CH451的键盘编码表3 串行接口应用电路 CH451与MCS-51单片机的连接如图1所示,其中DOUT引脚 最好连接到单片机的中断输入引脚,这样可用中断方式响应按键。如果连接到非 中断输入引脚,则应该使用查询方式确定CH451是否检测到有效按键,同时 还可向单片机提供复位信号RESET并带Watch-Dog功能。CH45 1的段驱动引脚串接的电阻R1(200Ω)用于限制和均衡段驱动电流。在5 V电源电压下,串接200Ω电阻通常对应13mA段电流。CH451具有6 4键的键盘扫描功能,为了防止键被按下后在SEG信号线与DIG信号线之间 形成短路而影响数码管显示,一般应在CH451的DIG0~DIG7引脚与 键盘矩阵之间串接限流电阻R2,其阻值可以从1kΩ至10kΩ。

将P1.0与DIN连接可用于输入串行数据,串行数据输入的顺序是低 位在前,高位在后。另外,在上电复位后,CH451 默认选择1线串行接口, 如需选择4线串行接口,则应在DCLK输出串行时钟之前,先在DIN上输出 一个低电平脉冲,以通知CH451为4线串行接口。将P1.1与DCLK连 接可提供串行时钟,以使CH451在其上升沿从DIN输入数据,并在其下降 沿从DOUT输出数据。LOAD用于加载串行数据,CH451一般在其上升 沿加载移位寄存器中的12位数据以作为操作命令进行分析并处理。也就是说, LOAD的上升沿是串行数据帧的帧完成标志,此时无论移位寄存器中的12位 数据是否有效,CH451都会将其当作操作命令来处理。应注意的是,在级联电路中,单片机每次输出的串行数据必须是单个CH451的串行数据的位数乘 以级联的级数。

下面是该电路的驱动程序:

主程序需要定义的参数 DCLK BIT P1.1 ;
串行数据时钟,上升沿激活 DIN BIT P1.0 ;
串行数据输入 LOAD BIT P1.2 ;
串行命令加载,上升沿激活 DOUT BIT P3.2 ;
接INT0,键盘中断和键值数据输出 KEY DATA 7FH ;
存放键盘中断时读取的键值 ;
******* 初始化子程序 ******* INIT  CLR DIN ;
先低后高,输出上升沿通知 CH451选择4线串行接口 SETB DCLK ;
置为默认的高电平 SETB DIN SETB LOAD SETB DOUT ;
置为输入 MOV B  #04H ;
设置系统参数命令 MOV A  #07H ;

Watch-Dog使能,开键盘、显示功能 LCALL WRITE MOV B  #03H ;
设置移位命令 MOV A  #00H ;
开环左移LCALL WRITE MOV B  #05H ;
设置显示参数 MOV A  #00H ;
不译码,8位显示,最亮 LCALL WRITE MOV B  #06H ;
设置闪烁控制 MOV A  #00H ;
不闪烁 LCALL WRITE CLR IT0 ;
置外部信号为低电平触发 CLR IE0 ;
清中断标志 SETB EX0 ;
允许键盘中断 SETB EA RET ;
******* 输出命令子程序 ****** ;
入参:B、ACC待写的12位数据  低8位在ACC中  高4位在 B的低4位中 WRITE  CLR EX0 ;
禁止键盘中断 CLR LOAD ;
命令开始,此命令可以放在后面 MOV R7  #08H ;
将ACC中8位送出 WRITE_8  RRC A ;
低位在前,高位在后 CLR DCLK MOV DIN  C ;
送出一位数据SETB DCLK ;
产生时钟上升沿通知 CH451输入位数据 DJNZ R7  WRITE 8 ;
位数据未完,继续 MOV A  B MOV R7  #04H ;
将B中4位送出 WRITE 4  RRC A ;
低位在前  高位在后 CLR DCLK MOV DIN  C SETB DCLK DJNZ R7  WRITE 4 SETB LOAD ;
产生加载上升沿通知 CH451处理命令数据 SETB EX0 ;
允许键盘中断 RET  ******* 输入键值子程序 ******  出参  ACC键值数据 READ  CLR EX0 ;
禁止键盘中断 CLR LOAD ;
命令开始 MOV A  #07H ;
读取键值命令的高4 位0111B MOV R7  #04H ;
忽略12位命令的低8位 READ 4  RRC A ;
低位在前,高位在后 CLR DCLK MOV DIN  C SETB DCLK DJNZ R7  READ 4 SETB LOAD ;
产生加载上升沿通知 CH451处理命令数据 CLR A ;
先清除键值单元以便移位 MOV R7  #07H ;
读入7位键值 READ_7  MOV C  DOUT ;
读入一位数据 CLR DCLK ;
产生时钟下降沿通知 CH451输出下一位 RLC A ;
数据移入ACC,高位 在前,低位在后 SETB DCLK DJNZ R7  READ_7 ;
位数据未完继续 CLR IE0 ;
清中断标志,读操作 过程中有低电平脉冲 SETB EX0 ;
允许键盘中断RET 4 结束语 用CH451扩展键盘显示接口,具有接口简单、占用CPU资源少、外 围器件简单、性能价格比高等优点,可在各种单片机系统中得到广泛的应用。