#ifndef __TM1637_H__ #define __TM1637_H__ #include "config.h" #ifndef LEDKEY_TM1637 #define LEDKEY_TM1637 0 #endif // tm1637 提供 8x2键盘 和 6 个8段数码管 的控制 //----------------------------------------------------------------- /* ------------------------------------------------------------------------------------------------- | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 | |-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------| | 命令类型 | 保留,为0 | 不同模式定义 | |-----------------------|-----------------------|-----------------------------------------------| | | | | | 0 | 0 | 写数据到显示寄存器 | 数据设置 | | | | 1 | 0 | 读键扫数据 | 0 1 | | | 0 | | | 自动地址增加 | | | | 1 | | | 固定地址 | | | 0 | | | | 普通模式 | | | 1 | | | | 测试模式(内部使用) |-----------------------|-----------------------|-----------------------------------------------| | | | 0 | 0 | 0 | 0 | 显示地址0 | 地址设置 | | 0 | 0 | 0 | 1 | 显示地址1 | 1 1 | | 0 | 0 | 1 | 0 | 显示地址2 | | | 0 | 0 | 1 | 1 | 显示地址3 | | | 0 | 1 | 0 | 0 | 显示地址4 | | | 0 | 1 | 0 | 1 | 显示地址5 |-----------------------|-----------------------|-----------------------------------------------| | | | | 0 | 0 | 0 | 设置脉冲宽度为 1/16 | 显示控制 | | | 0 | 0 | 1 | 设置脉冲宽度为 2/16 | 1 0 | | | 0 | 1 | 0 | 设置脉冲宽度为 4/16 | | | | 0 | 1 | 1 | 设置脉冲宽度为 10/16 | | | | 1 | 0 | 0 | 设置脉冲宽度为 11/16 | | | | 1 | 0 | 1 | 设置脉冲宽度为 12/16 | | | | 1 | 0 | 0 | 设置脉冲宽度为 13/16 | | | | 1 | 0 | 1 | 设置脉冲宽度为 14/16 | | | 0 | | | | 显示关 | | | 1 | | | | 显示开 |-----------------------|-----------------------|-----------------------------------------------| 由于该芯片的控制时序和接口协议和标准I2C有差别(没有地址字段,每个字节的传输顺序不一样 LSB 标准是 MSB),所以,本芯片采用软件模拟I2C实现。 */ //-------------------------- // bit7 bit6 命令类型 #define DATA_CMD_BITS 0x40 // 数据设置命令 #define ADDR_CMD_BITS 0xC0 // 地址设置命令(显示寄存器地址) #define DISP_CTRL_BITS 0x80 // 显示控制 //-------------------------- // 数据设置命令的定义 // 数据设置命令 bit1 bit0 #define WRITE_LED_REG 0x00 // 写数据到显示寄存器 #define READ_KEY_VAL 0x02 // 读按键命令 // 数据设置命令 bit2 #define ADDR_AUTO_INC 0x00 // 地址自动增加 #define ADDR_FIXED 0x04 // 地址固定 //-------------------------- // 地址设置命令的定义 #define LED_REG_BEG_ADDR 0x00 #define LED_REG1_ADDR (LED_REG_BEG_ADDR+0x00) #define LED_REG2_ADDR (LED_REG_BEG_ADDR+0x01) #define LED_REG3_ADDR (LED_REG_BEG_ADDR+0x02) #define LED_REG4_ADDR (LED_REG_BEG_ADDR+0x03) #define LED_REG5_ADDR (LED_REG_BEG_ADDR+0x04) #define LED_REG6_ADDR (LED_REG_BEG_ADDR+0x05) //-------------------------- // 显示设置命令的定义 #define DISP_OFF 0x00 #define DISP_ON 0x08 #define DISP_LEV(lev) ((lev)&0x07) //--------------------------------------- // 按键数据, 键值定义 (16个按键) #define KEY_NONE 0xFF #define KEY_K1SG1 0xF7 #define KEY_K1SG2 0xF6 #define KEY_K1SG3 0xF5 #define KEY_K1SG4 0xF4 #define KEY_K1SG5 0xF3 #define KEY_K1SG6 0xF2 #define KEY_K1SG7 0xF1 #define KEY_K1SG8 0xF0 #define KEY_K2SG1 0xEF #define KEY_K2SG2 0xEE #define KEY_K2SG3 0xED #define KEY_K2SG4 0xEC #define KEY_K2SG5 0xEB #define KEY_K2SG6 0xEA #define KEY_K2SG7 0xE9 #define KEY_K2SG8 0xE8 //------------------------------------------------------------------------------ // 读取键值 u8 TM1637ReadKey(void); // 写显示寄存器(地址自增) void TM1637WriteLedData(u8 baddr, u8 * pBuff, u8 disp); // 设置显示模式(开关和亮度) void TM1637SetLedDisp(u8 disp); //------------------------------------------------------------------------------ // #endif