admin 管理员组文章数量: 887007
数码管驱动及键盘控制芯片 CH455 STM32F407使用
1、概述
CH455 是数码管显示驱动和键盘扫描控制芯片。CH455内置时钟振荡电路,可以动态驱动4 位数
码管或者32 只LED;同时还可以进行28 键的键盘扫描;CH455 通过SCL 和SDA 组成的2 线串行接口
与单片机等交换数据。
2、键盘扫描
下表是在DIG3~DIG0 与SEG6~SEG0 之间7×4 矩阵的按键编址,也是数码管段位和发光管LED
阵列的顺序编址。由于按键代码是8 位,键按下时位6 总是1,所以当键按下时,CH455 所提供的实
际按键代码是表中的按键编址加上40H,也就是说,此时的按键代码应该在44H 到7FH 之间。
在编程时,可以使判断读取的数值第六位是否为1判断是否有按键按下以及按键是否松开。
3、LED 灯驱动
CH455 内部具有4个8位的数据寄存器,用于保存4个字数据,分别对应于CH455 所驱动的4个
数码管或者4 组每组8个的发光二极管。数据寄存器中字数据的位7~位0 分别对应各个数码管的小
数点和段G~段A,对于发光二极管阵列,则每个字数据的数据位唯一地对应一个发光二级管。当数
据位为1 时,对应的数码管的段或者发光管就会点亮;当数据位为0 时,则对应的数码管的段或者发
光管就会熄灭。
4、串行通信接口
CH455 具有硬件实现的2线串行接口,包含2个主要信号线:串行数据时钟输入线SCL、串行数
据输入和输出线SDA;以及1个辅助信号线:中断输出线INT#。其中,SCL 是带上拉的输入信号线,默认是高电平;SDA是带上拉的准双向信号线,默认是高电平;INT#是带上拉的开漏输出,在启用键
盘扫描功能后作为键盘中断输出线,默认是高电平。
SDA 用于串行数据输入和输出,高电平表示位数据1,低电平表示位数据0,串行数据输入的顺
序是高位在前,低位在后。
SCL 用于提供串行时钟,CH455 在其上升沿从SDA 输入数据,在其下降沿从SDA 输出数据。
在SCL 为高电平期间发生的SDA 下降沿定义为串行接口的启动信号,在SCL 为高电平期间发生
的SDA 上升沿定义为串行接口的停止信号。CH455只在检测到启动信号后才接收并分析命令。所以在
单片机I/O引脚资源紧张时,可以在保持SDA 引脚状态不变的情况下,将SCL引脚与其它接口电路共
用;如果能够确保SDA引脚的变化仅在SCL引脚为低电平期间发生,那么SCL引脚和SDA 引脚都可以
与其它接口电路共用。
INT#用于键盘中断输出,默认是高电平。当CH455 检测到有效按键时,INT#输出低电平有效的
键盘中断;单片机被中断后,对CH455执行读操作,CH455将INT#恢复为高电平,并从SDA 输出按键
代码,单片机从SDA 获得一个字节的数据,即按键代码。
单片机与CH455 的通讯过程总是分为6 个步骤,按单片机的操作方向分成两种类型,一种是写
操作,用于输出数据,一种是读操作,用于输入数据。具体过程可以参考例子程序中的说明。
写操作包括以下6 个步骤:输出启动信号、输出字节1、应答1、输出字节2、应答2、输出停
止信号。其中,启动信号和停止信号如上所述,应答1 和应答2 总是固定为1,输出字节1和输出字
节2 各自包含8个数据位,即一个字节数据。
读操作包括以下6 个步骤:输出启动信号、输出字节1、应答1、输入字节2、应答2、输出停
止信号。其中,启动信号和停止信号如上所述,应答1 和应答2 总是固定为1,输出字节1和输入字
节2 各自包含8个数据位,即一个字节数据。
下图是一个写操作的实例,字节1为01001000B,即48H;字节2 为00000001B,即01H
5、编程例程
主要是两个函数:
/*********************************************************************
函数名: CH455_Read
功能: 读取CH455一个字节数据数据(按键码值)
输入:
输出:
返回:
*********************************************************************/
unsigned char CH455_Read(void)
{unsigned char keycode;CH455_I2C_Start(); //启动总线CH455_I2C_WriteByte(0x4F);keycode = CH455_I2C_ReadByte(); //读取数据CH455_I2C_Stop(); //结束总线return keycode;
} /*********************************************************************
函数名: CH455_Write
功能: 向CH455寄存器写入命令值
输入: 写入命令值
输出:
返回:
*********************************************************************/
unsigned char CH455_Write(unsigned short cmd)
{CH455_I2C_Start(); //启动总线CH455_I2C_WriteByte(((unsigned char)(cmd>>7)&CH455_I2C_MASK)|CH455_I2C_ADDR);CH455_I2C_WriteByte((unsigned char)cmd); //发送数据CH455_I2C_Stop(); //结束总线 return 0;}
点亮LED灯
CH455_Write(CH455_DIG0 | 0x01);
CH455_Write(CH455_DIG1 | 0x02);
CH455_Write(CH455_DIG0 | 0x04);
CH455_Write(CH455_DIG1 | 0x08);/* */
获取按键码值
void Keyboard_proc(void)
{ unsigned char keyID; keyID = CH455_Read();if(0xFF == keyID){/* 无按键按下 */return;}else if(keyID & 0x40) {/* 有按键按下,记录下按键键值 */keyID &= ~0x40; gu8KeyID = keyID;}else {/* 按键松开,处理键值 */if(keyID == gu8KeyID){/* 处理函数 */gu8KeyID = 0xFF;}else{gu8KeyID = 0xFF;}} return;
}
// 加载字数据命令
#define CH455_DIG0 0x1400 // 数码管位0显示,需另加8位数据
#define CH455_DIG1 0x1500 // 数码管位1显示,需另加8位数据
#define CH455_DIG2 0x1600 // 数码管位2显示,需另加8位数据
#define CH455_DIG3 0x1700 // 数码管位3显示,需另加8位数据// 读取按键代码命令
#define CH455_GET_KEY 0x0700 // 获取按键,返回按键代码/*CH455接口定义*/
#define CH455_I2C_ADDR 0x40 // CH455的地址
#define CH455_I2C_MASK 0x3E // CH455的高字节命令掩码#define CH455_BIT_ENABLE 0x01 // 开启/关闭位
#define CH455_BIT_SLEEP 0x04 // 睡眠控制位
#define CH455_BIT_7SEG 0x08 // 7段控制位
#define CH455_BIT_INTENS1 0x10 // 1级亮度
#define CH455_BIT_INTENS2 0x20 // 2级亮度
#define CH455_BIT_INTENS3 0x30 // 3级亮度
#define CH455_BIT_INTENS4 0x40 // 4级亮度
#define CH455_BIT_INTENS5 0x50 // 5级亮度
#define CH455_BIT_INTENS6 0x60 // 6级亮度
#define CH455_BIT_INTENS7 0x70 // 7级亮度
#define CH455_BIT_INTENS8 0x00 // 8级亮度#define CH455_SYSOFF ( 0x0400) // 关闭显示、关闭键盘
#define CH455_SYSON ( CH455_SYSOFF | CH455_BIT_ENABLE ) // 开启显示、键盘
#define CH455_SLEEPOFF ( CH455_SYSOFF) // 关闭睡眠
#define CH455_SLEEPON ( CH455_SYSOFF | CH455_BIT_SLEEP ) // 开启睡眠
#define CH455_7SEG_ON ( CH455_SYSON | CH455_BIT_7SEG ) // 开启七段模式
#define CH455_8SEG_ON ( CH455_SYSON | 0x00 ) // 开启八段模式
#define CH455_SYSON_4 ( CH455_SYSON | CH455_BIT_INTENS4 ) // 开启显示、键盘、4级亮度
#define CH455_SYSON_8 ( CH455_SYSON | CH455_BIT_INTENS8 ) // 开启显示、键盘、8级亮度
本文标签: 数码管驱动及键盘控制芯片 CH455STM32F407使用
版权声明:本文标题:数码管驱动及键盘控制芯片 CH455STM32F407使用 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1732352276h1533430.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论