博客
关于我
TM16xx LED驱动和键盘扫描芯片使用
阅读量:379 次
发布时间:2019-03-05

本文共 3786 字,大约阅读时间需要 12 分钟。

TM1620B数码管芯片驱动与应用说明

TM1620B是一款高性能的数码管芯片,支持多种显示模式和通信接口,是开发者和工程师的理想选择。以下将从接法、功能、通信接口以及驱动代码等方面详细介绍其使用方法。

接法与功能介绍

TM1620B采用数码管共阳接法,控制方便且程序简单。这种接法通过写入显示寄存器来控制数码管的显示状态,具体包括以下功能:

  • 共阳接法:通过对显示寄存器进行操作,可以实现对数码管的亮度和显示模式的控制。相比于共阴接法,共阳接法的优点是控制简单,且不需要频繁刷新显存。
  • 芯片功能:TM1620B支持多种显示模式,包括普通模式、固定地址模式和数据命令模式。普通模式下,地址自动增加,数据一次性写入显存;固定地址模式下,地址值需手动设置。
  • 功能扩展:芯片内置消抖滤波器,能够有效处理按键输入的抖动问题。此外,支持长按和短按两种按键模式,具体实现方式需结合对应的驱动代码进行配置。

通信接口与数据传输

TM1620B采用I2C通信接口,支持3线和2线制两种模式。无论是3线制还是2线制,芯片都能通过 CLK 和 DIO 两条线实现数据的高效传输。以下是通信接口的详细说明:

  • 3线制接口:STB 信号用于数据传输的开始和停止控制。STB 的高电平表示数据传输开始,低电平表示停止。
  • 2线制接口:通过 CLK 和 DIO 的组合信号来实现数据传输。 CLK 的高电平表示 DIO 可以改变,而 CLK 的低电平表示 DIO 不能变化。
  • 数据传输特性:TM1637 芯片支持数据传输的应答机制。当数据传输正确时,芯片会在第八个时钟周期下降沿产生 ACK 应答信号。

驱动代码示例

以下是 TM1637 芯片的驱动代码示例,展示了如何实现数码管的显示控制和按键处理:

/* 定义控制端口 */sbit CLK = P2^2;sbit DIO = P2^3;/* 显示数据对应表 */unsigned char CODE[14] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};/* 数码管不显示状态 */unsigned char CODE_NO[14] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};/* 定义延时函数 */void delay_nms(unsigned int n) {    unsigned int i;    while (n--) {        for (i = 0; i < 550; i++) {}    }}/* 启动I2C通信 */void I2CStart() {    DIO = 1;    CLK = 1;    nop();    DIO = 1;    nop();    DIO = 0;    nop();    CLK = 0;}/* 停止I2C通信 */void I2CStop() {    CLK = 0;    nop();    nop();    DIO = 0;    nop();    nop();    CLK = 1;    nop();    nop();    nop();    DIO = 1;    nop();    CLK = 0;    DIO = 0;}/* 8位数据的写入函数 */void I2CWritebyte(unsigned char oneByte) {    unsigned char i;    for (i = 0; i < 8; i++) {        CLK = 0;        if (oneByte & 0x01) {            DIO = 1;        } else {            DIO = 0;        }        nop();        CLK = 1;        oneByte >>= 1;    }    CLK = 0;    nop();    while (DIO == 1) {        nop();    }    CLK = 1;    nop();}/* 读取按键函数 */unsigned char read_key() {    unsigned char rekey, i;    I2CStart();    I2CWritebyte(0x42);    DIO = 1;    for (i = 0; i < 8; i++) {        CLK = 0;        nop();        rekey = rekey >> 1;        nop();        nop();        CLK = 1;        if (DIO) {            rekey |= 0x80;        } else {            rekey |= 0x00;        }        nop();    }    CLK = 0;    nop();    while (DIO == 1) {        nop();    }    CLK = 1;    nop();    nop();    I2CStop();    return rekey;}/* 显示控制函数 */void disp0(unsigned char *p) {    unsigned char i;    I2CStart();    I2CWritebyte(0x40);    I2CStop();    I2CStart();    I2CWritebyte(0xC0);    for (i = 0; i < 6; i++) {        I2CWritebyte(*p);        p++;    }    I2CStop();    I2CStart();    I2CWritebyte(0x8C);    I2CStop();}/* 固定地址写数据函数 */void disp(unsigned char add, unsigned char value) {    I2CStart();    I2CWritebyte(0x44);    I2CStop();    I2CStart();    I2CWritebyte(add);    I2CWritebyte(CODE[value]);    I2CStop();    I2CStart();    I2CWritebyte(0x8C);    I2CStop();}/* 按键处理函数 */void key_process() {    unsigned char temp;    temp = read_key();    if (temp != 0xFF) {        disp0(TAB);        switch (temp) {            case 0xF7:                disp(0xC0, 1);                break;            case 0xF6:                disp(0xC1, 2);                break;            case 0xF5:                disp(0xC2, 3);                break;            case 0xF4:                disp(0xC3, 4);                break;            case 0xEF:                disp(0xC4, 5);                break;            case 0xEE:                disp(0xC5, 6);                break;            case 0xED:                disp(0xC0, 7);                break;            default:                break;        }    }}/* 主程序 */void main() {    disp0(CODE);    delay_nms(1);    while (1) {        key_process();        delay_nms(100);    }}

以上驱动代码为 TM1637 芯片的驱动程序,适用于对数码管进行显示控制和按键处理。此代码涵盖了芯片的主要功能,包括I2C通信、数据写入、显示控制以及按键事件处理。

转载地址:http://trgg.baihongyu.com/

你可能感兴趣的文章
MySQL 索引深入解析及优化策略
查看>>
MySQL 索引的面试题总结
查看>>
mysql 索引类型以及创建
查看>>
MySQL 索引连环问题,你能答对几个?
查看>>
Mysql 索引问题集锦
查看>>
Mysql 纵表转换为横表
查看>>
mysql 编译安装 window篇
查看>>
mysql 网络目录_联机目录数据库
查看>>
MySQL 聚簇索引&&二级索引&&辅助索引
查看>>
Mysql 脏页 脏读 脏数据
查看>>
mysql 自增id和UUID做主键性能分析,及最优方案
查看>>
Mysql 自定义函数
查看>>
mysql 行转列 列转行
查看>>
Mysql 表分区
查看>>
mysql 表的操作
查看>>
mysql 视图,视图更新删除
查看>>
MySQL 触发器
查看>>
mysql 让所有IP访问数据库
查看>>
mysql 记录的增删改查
查看>>
MySQL 设置数据库的隔离级别
查看>>