数码管显示驱动和键盘扫描控制器CH451及其应用
- 格式:pdf
- 大小:133.48 KB
- 文档页数:5
数码管显示驱动和键盘扫描控制器CH451及其应用摘要介绍一种新型的键盘显示驱动芯片451的性能特点和工作原理,给出了451键盘显示驱动芯片与-51单片机的接口方法与相应的软件驱动程序。
关键词键盘显示控制;单片机;451单片机在开发过程中,常常会因为资源不足而不得不大量扩展接口芯片以满足应用系统的需要,其中原因之一是人机界面中的键盘显示占用了系统太多资源,从而造成系统庞大,同时降低了系统的可靠性。
在单片机应用系统中,键盘显示通常可采用以下几种方式1采用并行接口的键盘显示专用芯片8279。
但8279所需外围元件多显示驱动、译码等、占用电路板面积大、综合成本高,在中小系统中常常大材小用;2采用通用并行I/O芯片扩展如用8155等,但此方案同样需要驱动显示,同时键盘显示扫描还需占用CPU大量时间;3采用专用显示控制器,并用CPU的I/O引脚完成键盘输入如MC14499、PS7219、MAX7219、ICM7218、TLC5921等,大多是串行接口并有显示驱动能力,I/O占用少。
这种接口方式省去了显示的扫描,而且电路大多也很简单,通常在系统需要的按键较少时比较适用;4采用带I2C总线的键盘显示芯片如显示用SAA1064,键盘用PCF8574,不过这种方式对于无I2C总线接口的CPU来说,编程显得有些不便;5采用串行接口的键盘显示专用芯片,如BC7280/81、HD7279、CH451等。
这类芯片占用CPU的资源少,传输速度较快,外围器件要求也较少,在中小系统中都可得到广泛的应用。
BC7280/81与HD7279中已有介绍,本文着重介绍CH451的主要特性及接口应用方法。
1CH451的功能与引脚介绍CH451是一个整合了数码管显示驱动和键盘扫描控制以及μP监控的多功能外围芯片。
CH451内置RC振荡电路,可以直接动态驱动8位数码管或者64位LED,具有BCD译码或不译码功能,可实现数据的左移、右移、左循环、右循环、各数字独立闪烁等控制功能。
CH451或CH452的常见问题解答CH451或CH452的常见问题解答转载来自官网需要设计参考资料(光盘资料可以参考FILELIST.TXT文档,网上资料更新)数码管LED显示驱动及键盘扫描的产品选型有CH451和CH452两种,都可以直接驱动数码管LED显示和键盘扫描,同时进行显示驱动和键盘扫描。
详细使用说明可以参考各自的使用手册,其中也有可供参考的应用电路图。
CH451比CH452的驱动电流大一倍,所以显示更亮些;CH452比CH451的功能更多些,并且支持兼容I2C的两线接口。
更详细的性能比较及特征说明请参考CH451PLN.PDF文档。
* 关于电源CH451和CH452都可以支持3.3V和5V电源电压,但是CH451用于3.3V时要外接振荡电阻才能避免显示闪烁。
考虑到直接驱动显示时消耗电流较大,布线时应该确保电源和地线有足够的宽度和良好的电源退耦。
* 刚通电数码管就全亮可能是数码管的极性错误,CH45X能够直接驱动共阴数码管,外加反相驱动器后才能驱动共阳数码管。
CH45X向LED供正向电压为亮,供反向电压为灭,复位后CH45X默认使LED灭,所以当极性反时就全亮。
* 显示或者操作无反应检查硬件接线是否正确,可以先试用公司提供的例子程序,确保硬件无误后再进一步开发。
如果连线距离较远,那么可以先在短距离下试用,无误后再加大距离,必要时可以用缓冲器加强信号的驱动能力。
对于支持4线接口和2线接口的CH452芯片,要检查H3L2引脚确保单片机接口程序与CH452是同一接口方式* 全部或者部分按键无反应1、确保发出设置命令启用了按键功能2、如果电源电压超过5V,或者是CH452S芯片直接驱动数码管,那么应该参考CH452手册在共阴数码管的公共端也就是每个DIG引脚上串接二极管,二级管应该串到LED 显示电路中而非按键扫描电路中3、有其它优先极更高的键一直在按下,导致优先极较低的键始终无效,键码最小的按键优先极最高* 在实际未按键时,CH45X不断主动产生按键中断,或者总是有某个按键在按下,具有随机性1、只有当前一个按键值被读出后,CH45X的DOUT或者KEY#或者INT#引脚才会恢复默认的高电平2、检查线路板是否有漏电或者短路情况3、所接数码管或者LED发光管存在反向漏电现象。
多功能外围芯片CH451及其应用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位。
基于CH451的键盘扫描程序设计简介:基于CH451的键盘扫描程序设计采用AVR单片机ATmega16进行读取CH451的接收到的按键值,CH451可以实现8*8矩阵键盘输入,且带有中断提醒,接收到的按键值在12864液晶上显示。
程序中采用的是2*3矩阵。
系统采用AVR Studio+WinAVR构成的AVR GCC编译环境。
系统源程序如下:#define F_CPU 1000000UL#include <avr/io.h>#include <util/delay.h>#include <math.h>#include <avr/interrupt.h>#define nop() asm("NOP")/*液晶显示引脚定义*//*对rs引脚进行定义与设置*/#define rs_out DDRD|=_BV(PD5)#define rs_in DDRD&=~_BV(PD5)#define rs_1 PORTD|=_BV(PD5)/*对rw引脚进行定义与设置*/#define rw_out DDRD|=_BV(PD6)#define rw_in DDRD&=~_BV(PD6)#define rw_1 PORTD|=_BV(PD6)#define rw_0 PORTD&=~_BV(PD6) /*对使能en引脚进行定义与设置*/ #define en_out DDRD|=_BV(PD7)#define en_in DDRD&=~_BV(PD7) #define en_1 PORTD|=_BV(PD7) #define en_0 PORTD&=~_BV(PD7) #define busy_1 DDRB|=_BV(PB7)#define busy_0 DDRB&=~_BV(PB7)/*ch451引脚定义*//*数据输出与键盘中断*/#define dout_out DDRA|=_BV(PA2)#define dout_in DDRA&=~_BV(PA2) #define dout_1 PORTA|=_BV(PA2) #define dout_0 PORTA&=~_BV(PA2) #define dout_read (PINA&_BV(PA2))/*串行数据加载引脚*/#define load_in DDRA&=~_BV(PA3)#define load_1 PORTA|=_BV(PA3)#define load_0 PORTA&=~_BV(PA3)/*数据输入引脚*/#define din_out DDRA|=_BV(PA4)#define din_in DDRA&=~_BV(PA4)#define din_1 PORTA|=_BV(PA4)#define din_0 PORTA&=~_BV(PA4)/*数据时钟线*/#define dclk_out DDRA|=_BV(PA5)#define dclk_in DDRA&=~_BV(PA5)#define dclk_1 PORTA|=_BV(PA5)#define dclk_0 PORTA&=~_BV(PA5)const unsigned char tabn[]={"0123456789"}; unsigned char temp=0;/*检查引脚是否忙*/void checkbusy(){rs_0;rw_1;en_1;_delay_us(200);busy_0;while((PINB&0x80)==1);en_0;busy_1;}/*写命令*/void write_com(unsigned char cmd) {checkbusy();rs_0;rw_0;en_1;_delay_us(1);PORTB=cmd;_delay_us(2);en_0;}/*写数据*/void write_date(unsigned char dat) {checkbusy();rs_1;rw_0;en_1;_delay_us(2);PORTB=dat;_delay_us(2);en_0;}/*液晶初始化*/void init_lcd(){DDRB=0xff;PORTB=0xff;DDRD=0xff;PORTB=0xff;write_com(0x30);_delay_us(2);write_com(0x0c);_delay_us(2);write_com(0x01);_delay_us(2);write_com(0x06);_delay_us(2);}/*向lcd写入一个字符串*/void write_string(const unsigned char *s){while(*s>0){write_date(*s);s++;_delay_us(1);}_delay_ms(3);}/*向lcd某个地址写入一个字符串*/void write_addstr(unsigned char add,const unsigned char *s) {write_com(add);while(*s>0){write_date(*s);s++;_delay_us(1);}}/*向ch451写命令*/void write_ch451(unsigned int cmd) {unsigned char i;load_0;for(i=0;i<12;i++){if(cmd&0x0001)din_1;elsedin_0;dclk_0;cmd=cmd>>1;dclk_1;}load_1;}/*初始化ch451*/void init_ch451(){din_0;din_1;write_ch451(0x0201);//初始化芯片内部write_ch451(0x0402);//开键盘、关显示、关看门狗write_ch451(0x0508);//BCD译码write_ch451(0x0600);//不闪烁}/*读取ch451的按键值*/unsigned char read_ch451(){unsigned char i,date=0;din_1; //输入下拉load_1;dclk_1;for(i=0;i<4;i++){dclk_0;if(i==3)din_0;dclk_1;}load_0;load_1;for(i=0;i<7;i++){date<<=1;if(dout_read)date|=0x01;dclk_0;din_1;dclk_1;}return date;}/*主函数*/int main(){unsigned char i,j,k;DDRA=0xfb;PORTA=0x04;init_ch451();init_lcd();_delay_ms(1);while(1){temp=read_ch451();i=(temp/100)%10;j=(temp/10)%10;k=temp%10;write_com(0x90);_delay_ms(10);write_date(tabn[i]);write_date(tabn[j]);write_date(tabn[k]);_delay_ms(500);}}。
#include<reg52.h>#define uchar unsigned char#define uint unsigned int#define ch451_rst 0x0201 //复位#define ch451_lmov 0x0300 //设置移动方式-左移#define ch451_lcyc 0x0301 //设置移动方式-左循#define ch451_rmov 0x0302 //设置移动方式-右移#define ch451_rcyc 0x0303 //设置移动方式-右循#define ch451_soff 0x0400 //关显示、键盘、看门狗#define ch451_son 0x0401 //开显示#define ch451_dsp 0x0500 //设置默认显示方式#define ch451_BCD 0x0580 //设置BCD译码方式#define ch451_twinkle 0x0600 //设置闪烁控制#define ch451_DIG0 0x0800 //数码管位0显示#define ch451_DIG1 0x0900 //数码管位1显示#define ch451_DIG2 0x0A00 //数码管位2显示#define ch451_DIG3 0x0B00 //数码管位3显示#define ch451_DIG4 0x0C00 //数码管位4显示#define ch451_DIG5 0x0D00 //数码管位5显示#define ch451_DIG6 0x0E00 //数码管位6显示#define ch451_DIG7 0x0F00 //数码管位7显示sbit ch451_load=P0^0;sbit ch451_din =P0^1;sbit ch451_dclk=P0^2;const uchar DatCode[18]={0x3F,0x06,0x5B,0x4F,//0,1,2,30x66,0x6D,0x7D,0x07,//4,5,6,70x7F,0x6F,0x77,0x7C,//8,9,A,b0x39,0x5E,0x79,0x71,//C,d,E,F0x40,0x00};//-,全灭const uint DigCode[8]={ch451_DIG0,ch451_DIG1,ch451_DIG2,ch451_DIG3,ch451_DIG4,ch451_DIG5,ch451_DIG6,ch451_DIG7};const uinttable[]={0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x00 08,0x0009};void delay(uchar t){uchar tt;for(;t>0;t--)for(tt=200;tt>0;tt--);}void long_delay(uchar t){for(;t>0;t--)delay(255);}void write_ch451(uint cmd){uchar i;ch451_load=0;for(i=0;i<12;i++){ch451_din=cmd&1;ch451_dclk=0;cmd=cmd>>1;ch451_dclk=1;}ch451_load=1;}void ch451_init(){ch451_din=0;ch451_din=1;write_ch451(ch451_rst);write_ch451(0x0401); //开显示}void main(){uchar i;uint temp=0x01;ch451_init();long_delay(5);// write_ch451(0x0c80);write_ch451(0x08ff);write_ch451(0x09ff);write_ch451(0x0aff);write_ch451(0x0bff);write_ch451(0x0cff);write_ch451(0x0dff);write_ch451(0x0eff);write_ch451(0x0fff);while(1){/* for(i=0;i<8;i++){write_ch451(DigCode[i]|table[i]);long_delay(2);} */}}。
CH451或CH452的常见问题解答转载来自官网需要设计参考资料(光盘资料可以参考FILELIST.TXT文档,网上资料更新)数码管LED显示驱动及键盘扫描的产品选型有CH451和CH452两种,都可以直接驱动数码管LED显示和键盘扫描,同时进行显示驱动和键盘扫描。
详细使用说明可以参考各自的使用手册,其中也有可供参考的应用电路图。
CH451比CH452的驱动电流大一倍,所以显示更亮些;CH452比CH451的功能更多些,并且支持兼容I2C的两线接口。
更详细的性能比较及特征说明请参考CH451PLN.PDF文档。
* 关于电源CH451和CH452都可以支持3.3V和5V电源电压,但是CH451用于3.3V时要外接振荡电阻才能避免显示闪烁。
考虑到直接驱动显示时消耗电流较大,布线时应该确保电源和地线有足够的宽度和良好的电源退耦。
* 刚通电数码管就全亮可能是数码管的极性错误,CH45X能够直接驱动共阴数码管,外加反相驱动器后才能驱动共阳数码管。
CH45X向LED供正向电压为亮,供反向电压为灭,复位后CH45X默认使LED灭,所以当极性反时就全亮。
* 显示或者操作无反应检查硬件接线是否正确,可以先试用公司提供的例子程序,确保硬件无误后再进一步开发。
如果连线距离较远,那么可以先在短距离下试用,无误后再加大距离,必要时可以用缓冲器加强信号的驱动能力。
对于支持4线接口和2线接口的CH452芯片,要检查H3L2引脚确保单片机接口程序与CH452是同一接口方式* 全部或者部分按键无反应1、确保发出设置命令启用了按键功能2、如果电源电压超过5V,或者是CH452S芯片直接驱动数码管,那么应该参考CH452手册在共阴数码管的公共端也就是每个DIG引脚上串接二极管,二级管应该串到LED显示电路中而非按键扫描电路中3、有其它优先极更高的键一直在按下,导致优先极较低的键始终无效,键码最小的按键优先极最高* 在实际未按键时,CH45X不断主动产生按键中断,或者总是有某个按键在按下,具有随机性1、只有当前一个按键值被读出后,CH45X的DOUT或者KEY#或者INT#引脚才会恢复默认的高电平2、检查线路板是否有漏电或者短路情况3、所接数码管或者LED发光管存在反向漏电现象。
CH451能够一次性驱动8位数码管,与单片机串行通信。
支持数码管的左移,右移,左循环,右循环,独立闪烁,16级亮度控制等功能。
是单片机控制多个数码管的得力助手,现将MEGA16单片机驱动C H451的程序发布,希望能有所用。
CH451的详细资料可去官方网站下载。
//包含所需头文件#i nclude <ioM16v.h>#i nclude <macros.h>/*------宏定义------*/#define uchar unsigned char#define uint unsigned int#define ch451din PORTB#define ch451dclk0 PORTB&=~BIT(PB1)#define ch451dclk1 PORTB|=BIT(PB1)#define ch451load0 PORTB&=~BIT(PB2)#define ch451load1 PORTB|=BIT(PB2)#define ch451dout0 PORTB&=~BIT(PB3)#define ch451dout1 PORTB|=BIT(PB3)//CH451复位#define CH451_RESET 0x0201//设置移动方式-作移、左循、右移、右循#define CH451_LEFTMOV 0x0300#define CH451_LEFTCYC 0x0301#define CH451_RIGHTMOV 0x0302#define CH451_RIGHTCYC 0x0303//设置BCD译码方式#define CH451_BCD 0x0580//设置闪烁控制#define CH451_TWINKLE 0x0600//数码管各位显示#define CH451_DIG0 0x0800#define CH451_DIG1 0x0900#define CH451_DIG2 0x0a00#define CH451_DIG3 0x0b00#define CH451_DIG4 0x0c00#define CH451_DIG5 0x0d00#define CH451_DIG6 0x0e00#define CH451_DIG7 0x0f00//CH451初始化void ch451_init(){ch451din=0;ch451din=1;}//输出命令子程序//定义一个无符号整型变量存储12字节的命令字void ch451_write(uint command){uchar i;ch451load0;for(i=0;i<12;i++){ch451din=command&1;ch451dclk0;ch451dclk1;command>>=1;}ch451load1;}//端口初始化void port_init(void){PORTA = 0x00;DDRA = 0x00;PORTB = 0x07;DDRB = 0x07;PORTC = 0x00;DDRC = 0x00;PORTD = 0x00;DDRD = 0x00;}//主函数void main(void){port_init();ch451_init();ch451_write(CH451_RESET);ch451_write(0x401);ch451_write(0x580);ch451_write(0x600);ch451_write(CH451_DIG0|0x08);while(1){}}。
标题:CH451多功能外围芯片工作原理及其应用引言CH451是由WCH公司开发的一款高度集成的多功能外围芯片,专为简化系统设计、减少组件数量以及提高系统可靠性而设计。
该芯片集成了数码管显示驱动、键盘扫描控制以及微处理器(uP)监控等多种功能,广泛应用于仪器仪表、工业控制、家电产品以及其他需要直观人机交互界面的嵌入式系统中。
CH451芯片的主要特性- 内置RC振荡器:CH451内部带有高精度RC振荡电路,可直接生成系统时钟,无需外部晶振,简化硬件设计并降低系统成本。
- 显示驱动能力:能够动态驱动8位数码管或64个独立LED,支持静态和动态显示模式,且具备丰富的显示效果控制,如左移、右移、闪烁等。
- 键盘扫描控制:集成多路键盘输入接口,支持矩阵键盘扫描,能有效管理和识别用户按键输入,大大简化了键盘接口的设计与编程。
- 数据处理功能:提供字数据左循环和右循环命令,便于实现数码管显示内容的滚动更新,例如,执行字数据左循环命令后,原本在DIG0位置的数字将移动到DIG7的位置,并从DIG7位置补充进原DIG0的数据。
工作原理概述CH451通过SPI或者特定的指令集与主控制器(如MCS51系列单片机)进行通信,主控器可以向CH451发送命令来控制其显示状态、键盘扫描以及其他相关功能。
对于显示部分,CH451根据接收到的数据流更新数码管或LED的状态;在键盘扫描方面,芯片会自动检测键盘矩阵上的按键动作并将结果返回给主机进行处理。
接口方法与软件驱动程序CH451与单片机之间的接口通常包括数据线、命令/时钟线和使能线。
在软件层面,开发者需按照CH451的数据手册编写相应的初始化代码和驱动函数,以实现对芯片各项功能的精确控制。
例如,设置显示模式、加载待显示的数据、启动键盘扫描任务以及响应按键事件等。
应用实例在实际应用中,CH451常用于智能电表、工业设备控制面板、家电产品的显示屏和控制按键模块,通过灵活配置及简单的编程即可实现复杂的人机交互界面设计。
苦心人,天不负,三千炎黄甲可灭倭苦心人,天不负,三千炎黄甲可灭倭谁也没有权力代表那3500万死去的同胞原谅日本!!--------- "我们要记取的不仅是南京大屠杀到底有多少人罹难,更要谨记这些人是如何惨死的。
" --张纯如主页博客相册|个人档案 |好友查看文章CH451键盘、数码管驱动程序及电路(8051、凌阳61)2009-06-17 15:442.1. 显示驱动● 内置大电流驱动级,段电流不小于25mA,字电流不小于150mA。
● 动态显示扫描控制,直接驱动 8位数码管或者 64 只发光管LED。
● 可选数码管的段与数据位相对应的不译码方式或者 BCD 译码方式。
● 数码管的字数据左移、右移、左循环、右循环。
● 各数码管数字独立闪烁控制。
● 通过占空比设定提供16级亮度控制。
● 支持段电流上限调整,可以省去所有限流电阻。
● 扫描极限控制,支持1到8个数码管,只为有效数码管分配扫描时间。
2.2. 键盘控制● 内置64 键键盘控制器,基于8×8矩阵键盘扫描。
● 内置按键状态输入的下拉电阻,内置去抖动电路。
● 键盘中断,低电平有效输出。
● 提供按键释放标志位,可供查询按键按下与释放。
2.3. 其它● 高速的 4线串行接口,支持多片级联,时钟速度从0 到 10MHz。
● 串行接口中的DIN和DCLK信号线可以与其它接口电路共用,节约引脚。
● 完全内置时钟振荡电路,不需要外接晶体或者阻容振荡。
● 内置上电复位和看门狗Watch-Dog,提供高电平有效和低电平有效复位输出。
详细资料下载地址如果迅雷下载不成功,就用IE下(文件另存为)/axsdffffproteus/filebox/down/fc/010eddef4a38fbcf956375013504d54 7/filebox/down/fc/1bf2b8ae32d118285755d332543cadb c部分程序如下:#define CH451_RESET 0x0201 //复位#define CH451_LEFTMOV 0x0300 //设置移动方式-作移#define CH451_LEFTCYC 0x0301 //设置移动方式-左循#define CH451_RIGHTMOV 0x0302 //设置移动方式-右移#define CH451_RIGHTCYC 0x0303 //设置移动方式-右循#define CH451_SYSOFF 0x0400 //关显示、键盘、看门狗#define CH451_SYSON1 0x0401 //开显示#define CH451_SYSON2 0x0403 //开显示、键盘#define CH451_SYSON3 0x0407 //开显示、键盘、看门狗功能#define CH451_DSP 0x0500 //设置默认显示方式#define CH451_BCD 0x0580 //设置BCD译码方式#define CH451_TWINKLE 0x0600 //设置闪烁控制#define CH451_DIG0 0x0800 //数码管位0显示#define CH451_DIG1 0x0900 //数码管位1显示#define CH451_DIG2 0x0a00 //数码管位2显示#define CH451_DIG3 0x0b00 //数码管位3显示#define CH451_DIG4 0x0c00 //数码管位4显示#define CH451_DIG5 0x0d00 //数码管位5显示#define CH451_DIG6 0x0e00 //数码管位6显示#define CH451_DIG7 0x0f00 //数码管位7显示//须主程序定义的参数sbit ch451_dclk=P2^5; //串行数据时钟上升延激活sbit ch451_din=P2^6; // 串行数据输出,接CH451的数据输入sbit ch451_load=P2^7; //串行命令加载,上升延激活sbit ch451_dout=P3^3; //INT1,键盘中断和键值数据输入,接CH451的数据输出unsigned char ch451_key; // 存放键盘中断中读取的键值//********************************************//初始化子程序void ch451_init(){ch451_din=0; //先低后高,选择4线输入ch451_din=1;IT1=1; //设置下降沿触发PX1=1; //设置低优先级EX1=1; //开中断EA=1;//*****************************************************//输出命令子程序//定义一无符号整型变量存储12字节的命令字。
数码管显示驱动和键盘扫描控制器CH451及其应用施隆照(福州大学物理与电信工程学院,福建福州350002)摘要:介绍一种新型的键盘显示驱动芯片CH451的性能特点和工作原理,给出了CH451键盘显示驱动芯片与M CS-51单片机的接口方法与相应的软件驱动程序。
关键词:键盘显示控制;单片机;CH451分类号:T N873文献标识码:A文章编号:1006-6977(2004)01-0053-05Characteristic and A pp lication of L ED Dis p la y driver and K e y boardControl Chi p CH451SHI Lon g-zhao(Ph y sical and T elecommunication En g ineerin g Colle g e o f Fuzhou Univ er sit y,350002)Abstract:A new-t y p e ke y board and dis p la y driver chi p CH451is introduced,and the p erform ance and w ork2 in g p rinci p le of CH451are p resented.T he interface m ethod and softw are driver p ro g ram betw een M CS-51S in2g le-chi p m icrocom p uter are also g iven.K e y w ords:K e y board and dis p la y control;S in g le-chi p m icrocom p uter;CH451单片机在开发过程中,常常会因为资源不足而不得不大量扩展接口芯片以满足应用系统的需要,其中原因之一是人机界面中的键盘显示占用了系统太多资源,从而造成系统庞大,同时降低了系统的可靠性。
在单片机应用系统中,键盘显示通常可采用以下几种方式:(1)采用并行接口的键盘显示专用芯片8279。
但8279所需外围元件多(显示驱动、译码等)、占用电路板面积大、综合成本高,在中小系统中常常大材小用;(2)采用通用并行I/O芯片扩展(如用8155等),但此方案同样需要驱动显示,同时键盘显示扫描还需占用CPU大量时间;(3)采用专用显示控制器,并用CPU的I/O引脚完成键盘输入(如M C14499、PS7219、M AX7219、ICM7218、T LC5921等,大多是串行接口并有显示驱动能力,I/O占用少)。
这种接口方式省去了显示的扫描,而且电路大多也很简单,通常在系统需要的按键较少时比较适用;(4)采用带I2C总线的键盘显示芯片(如显示用SAA1064,键盘用PCF8574),不过这种方式对于无I2C总线接口的CPU来说,编程显得有些不便;(5)采用串行接口的键盘显示专用芯片,如BC7280/81、H D7279、CH451等。
这类芯片占用CPU 的资源少,传输速度较快,外围器件要求也较少,在中小系统中都可得到广泛的应用。
BC7280/81与H D7279在参考文献[1][2]中已有介绍,本文着重介绍CH451的主要特性及接口应用方法。
1CH451的功能与引脚介绍CH451是一个整合了数码管显示驱动和键盘扫描控制以及μP监控的多功能外围芯片。
CH451内置RC振荡电路,可以直接动态驱动8位数码管或者64位LE D,具有BCD译码或不译码功能,可实现数据的左移、右移、左循环、右循环、各数字独立闪烁等控制功能。
CH451内置大电流驱动级,段电流不小于30m A,字电流不小于160m A,并有16级亮度控制功能;在键盘控制方面,该器件内置64键键盘控制器,可实现8×8矩阵键盘扫描,并内置去抖动电路,可提供按键中断与按键释放标志位等功能;在外部接●新特器件应用口方面,CH451可选择简洁的1线串行接口或高速4线串行接口,且内置上电复位,可提供高电平有效复位和低电平有效复位两种输出,同时内置看门狗电路W atch -D o g 。
CH451提供有28引脚的DIP28与SOP28封装以及DIP24S 封装形式,28脚与24脚在功能上稍有差别,它们的引脚定义见表1所列。
2CH451的操作命令CH451的操作命令均为12位,其中高4位为标识码,低8位为参数,各操作命令如下:●空操作:0000xxxxxxxx B (x 可为任意值,下同)空操作命令对CH451不产生任何影响。
该命令可以在多个CH451级联的应用中透过前级CH451向后级CH451发送操作命令而不影响前级CH451的状态。
例如,要将操作命令001000000001B 发送给两级级联电路中的后级CH451(后级CH451的DIN 引脚连接到前级CH451的DOUT 引脚),只要在该操作命令后添加空操作命令000000000000B 再发送,那么,该操作命令将经过前级CH451到达后级CH451,而空操作命令留给了前级CH451。
另外,为了在不影响CH451的前提下变化DC L K 以清除看门狗计时器,也可以发送空操作命令。
在非级联的应用中,空操作命令可只发送高4位。
●芯片内部复位:001000000001B内部复位命令可将CH451的各个寄存器和各种参数复位到默认的状态。
芯片上电时,CH451均被复位,此时各个寄存器均复位为0,各种参数均恢复为默认值。
●字数据移位:0011000000[D1][D0]B 字数据移位命令共有4个:开环左移、右移,闭环左移、右移。
D0为0时为开环,为1时为闭环,D1为0时左移,为1时为右移。
开环左移时,DIG 0引脚对应的单元补00H ,此时不译码方式显示为空格,BCD 译码方式时显示为0;开环右移时,DIG 7引脚对应的单元补00H;而在闭环时,DIG 0与DIG 7头尾相接,闭环移位。
●设定系统参数:010000000[W DOG][K EY B ][DISP]B该命令用于设定CH451的系统级参数,如看门狗使能W DOG 、键盘扫描使能K EY B 、显示驱动使能DISP 等。
各个参数均可通过1位数据来进行控制,将相应的数据位置为1可启用该功能,否则关闭该功能(默认值)。
●设定显示参数:0101[M ODE][LIMIT][INTENSITY]B此命令用于设定CH451的显示参数,如译码方式M ODE (1位)、扫描极限LIMIT (3位)、显示亮度INTENSITY (4位)等。
译码方式M ODE 为1时选择BCD 译码方式,为0时选择不译码方式。
CH451默认工作于不译码方式,此时8个数据寄存器中字节数据的位7~位0分别对应8个数码管的小数点和段G ~段A ,当数据位为1时,对应的数据段(或发光管)点亮;数据位为0时熄灭。
CH451工作于BCD 译码方式主要应用于数码管驱动,单片机只要给出二进制数的BCD 码,便可由CH451将其译码并直接驱动数码管以显示对应的字符。
BCD 译码方式是对数据寄存器中字节数据的位4~位0进行兼容BCD 的译码,可用于控制段驱动引脚SEG 6~SEG 0的输出,它们对应于数码管的段G ~段A ,同时可用字节数据的位7控制段来驱动引脚SEG 7的输出以对应数码管的小数点,字节数据的位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个字驱动DIG 7~DIG 0。
闪烁属性D7S ~D0S 分别通过1位数据控制,将相应的数据位置为1可使能闪烁显示,否则为正常显示,不闪烁(默认值)。
●加载字数据:1[DIG -ADDR][DIG -DAT A]B 加载字数据命令用于将字节数据DIG -DAT A (8位)写入DIG -ADDR (3位)指定的数据寄存器中。
DIG -ADDR 的000B ~111B 分别用于指定数据寄存器的地址0~7,并分别对应于DIG 0~DIG 7引脚驱动的8个数码管。
DIG -DAT A 为待写入的字节数据。
●读取按键代码:0111xxxxxxxx B读取按键代码命令用于获得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与SEG 4的键被按下时,按键代码为63H ,键被释放后,按键代码是23H 。
单片机可以在任何时候读取按键代码,但一般在CH451检测到有效按键而产生键盘中断时读取按键代码,此时按键代码的位6总是1。
另外,如果需要了解按键何时释放,单片机可以通过查询方式定期读取按键代码,直到按键代码的位6为0。
表2是连接在DIG 7~DIG 0与SEG 7~SEG 0之间的键被按下时,CH451所提供的按键代码。
这些按键代码具有一定的规律,如果需要键被释放时的按键代码,可将表2中的按键代码的位6置0,也可将表中的按键代码减去40H 。
应注意的是:CH451不支持组合键,也就是说,同一时刻,不能有两个或者更多的键被按下。
3串行接口应用电路CH451与M CS -51单片机的连接如图1所示,其中DOUT 引脚最好连接到单片机的中断输入引脚,这样可用中断方式响应按键。