多功能外围芯片CH451及其应用

2005-04-29 05:26解文军
电子世界 2005年10期
关键词:数码管译码寄存器

解文军

CH451是一个整合了数码管显示驱动和键盘扫描控制以及μP监控的多功能外围芯片。用CH451扩展键盘显示接口,具有接口简单、占用CPU资源少、外围器件简单、性价比高等优点,可在各种单片机系统中得到广泛的应用。

功能说明

CH451内置RC振荡电路,可以直接动态驱动8位数码管或者64位LED,具有BCD译码或不译码功能,可实现数据的左移、右移、左循环、右循环、各数字独立闪烁等控制功能。CH451内置大电流驱动级,段电流不小于30mA,字电流不小于160mA,并有16级亮度控制功能。该器件内置64键键盘控制器,可实现8×8矩阵键盘扫描,并内置去抖动电路,可提供按键中断与按键释放标志位等功能。CH451可选择简洁的1线串行接口或高速4线串行接口,且内置上电复位,可提供高电平有效复位和低电平有效复位两种输出,同时内置看门狗电路。

封装及引脚功能

CH451有28引脚的DIP28与SOP28封装以及DIP24S封装形式,28脚与24脚在功能上稍有差别,它们的引脚定义见表1所列。

操作命令

CH451共有11条操作命令,每条操作命令均为12位,其中高4位为标识码,低8位为参数,x可为任意值(下同)。

空操作(0000xxxxxxxxB)空操作命令对CH451不产生任何影响,该命令可以在多个CH451级联的应用中透过前级CH451向后级CH451发送操作命令,而不影响前级CH451的状态。例如,要将操作命令001000000001B发送给两级级联电路中的后级CH451(后级CH451的DIN引脚连接到前级CH451的DOUT引脚),只要在该操作命令后添加空操作命令000000000000B再发送,那么,该操作命令将经过前级CH451到达后级CH451,而空操作命令留给了前级CH451。另外,为了在不影响CH451的前提下变化DCLK以清除看门狗计时器,也可以发送空操作命令。在非级联的应用中,空操作命令可只发送高4位。

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

字数据左移(001100000000B)字数据左移命令将CH451的字数据左移一次,即从DIG0向DIG7移动一位,然后最右边的DIG0补进数据00H。例如,在数码管DIG7~DIG0 显示“87654321”时,执行字数据左移命令,显示变为“7654321 ”(不译码方式)或者“76543210”(BCD 译码方式)。

字数据右移(001100000010B) 字数据右移命令将CH451的字数据右移一次,即从DIG7向DIG0移动一位,然后最左边的DIG7补进数据00H。例如,在数码管DIG7~DIG0 显示“87654321”时,执行字数据右移命令,显示变为“8765432”(不译码方式)或者“08765432”(BCD 译码方式)。

字数据左循环(001100000001B) 字数据左循环命令将CH451的字数据左循环一次,即从DIG0向DIG7移动一位,然后最右边的DIG0补进原DIG7的数据。例如,在数码管DIG7~DIG0显示“87654321”时,执行字数据左循环命令,显示变为“76543218”。

字数据右循环(001100000011B) 字数据右循环命令将CH451的字数据右循环一次,即从DIG7向DIG0移动一位,然后最左边的DIG7补进原DIG0的数据。例如,在数码管DIG7~DIG0显示“87654321”时,执行字数据右循环命令,显示变为“18765432”。

设定系统参数(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不影响BCD译码的输出,它们可以是任意值。将位4~位0进行BCD译码可显示以下28个字符,其中00000B~01111B分别对应于“0~F”,10000B~11010B分别对应于“”空格、“+”、+或加号、“-”或减号、“=”等于号、“左方括号”、“右方括号”、“_”下划线、“H”、“L”、“P”、“.”小数点、其余值为空格。

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

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

加载字数据(1[DIG_ADDR]DIG_DATA]B) 加载字数据命令用于将字节数据DIG_DATA(8位)写入DIG_ADDR(3位)指定的数据寄存器中。DIG_ADDR的000B~111B分别用于指定数据寄存器的地址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)。例如,连接DIG3与SEG4的键被按下时,按键代码为63H,键被释放后,按键代码是23H。单片机可以在任何时候读取按键代码,但一般在CH451检测到有效按键而产生键盘中断时读取按键代码,此时按键代码的位6总是1。另外,如果需要了解按键何时释放,单片机可以通过查询方式定期读取按键代码,直到按键代码的位6为0。表2是连接在DIG7~DIG0与SEG7~SEG0之间的键被按下时,CH451所提供的按键代码。这些按键代码具有一定的规律,如果需要键被释放时的按键代码,可将表2中的按键代码的位6 置0,也可将表中的按键代码减去40H。应注意的是CH451不支持组合键,也就是说,同一时刻,不能有两个或者更多的键被按下。

串行接口应用电路

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

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

猜你喜欢
数码管译码寄存器
基于校正搜索宽度的极化码译码算法研究
Lite寄存器模型的设计与实现
Arduino编程
MC9S08FL16单片机数码管静态显示分析
单片机控制的四位数码管动态显示编程
基于Qt的数码管数字编码系统的设计与实现
分簇结构向量寄存器分配策略研究*
从霍尔的编码译码理论看弹幕的译码
LDPC 码改进高速译码算法
基于概率裁剪的球形译码算法