/* * TM1650.c * * Created on: 2023年5月16日 * Author: User */ #include "TM1650.h" // 数码管显示数组 static u8 tab[] = { 0x3F, // 0 0x06, // 1 0x5B, // 2 0x4F, // 3 0x66, // 4 0x6D, // 5 0x7D, // 6 0x07, // 7 0x7F, // 8 0x6F, // 9 0x00, // 10 = Null 0x40, // 11 = - 0x71, // 12 = F 0x79, // 13 = E 0x50, // 14 = r 0x1C, // 15 = u 0x54, // 16 = n }; static void Init(void); // tm1650初始化 static void TM1650_Set(IIC_t *Channel, u8 Add, u8 Value); // 设置tm1650寄存器的值 static void Display_Err(IIC_t *Channel, u8 errCode); // 显示Err static void Display_Fun(IIC_t *Channel, u8 funCode); // 显示Fun static void Display_Num(IIC_t *Channel, u16 num); // 显示数字 static void Display_IDLE(IIC_t *Channel); // 显示---- static void Display_OFF(IIC_t *Channel); // 显示OFF static void Display_Close(IIC_t *Channel); // 显示关闭 void TM1650_Display(IIC_t *Channel, u16 Value, u16 dot); // 显示使能 TM1650_t TM1650 = {1, Init, Display_Err, Display_Fun, Display_Num, Display_OFF, Display_IDLE, Display_Close}; static void Init(void) { TM1650_Set(&IIC, 0x48, 0x31); // 打开通道1 设置亮度3级 开显示 } static void Display_Err(IIC_t *Channel, u8 errCode) { TM1650_Set(Channel, DIG1, tab[13]); // 第一位显示E TM1650_Set(Channel, DIG2, tab[14]); // 第二位显示r TM1650_Set(Channel, DIG3, tab[14]); // 第三位显示r TM1650_Set(Channel, DIG4, tab[errCode % 10]); // 第四位显示数字 } static void Display_Fun(IIC_t *Channel, u8 funCode) { TM1650_Set(Channel, DIG1, tab[12]); // 第一位显示F TM1650_Set(Channel, DIG2, tab[15]); // 第二位显示u TM1650_Set(Channel, DIG3, tab[16]); // 第三位显示n TM1650_Set(Channel, DIG4, tab[funCode % 10]); // 第四位显示数字 } static void Display_Num(IIC_t *Channel, u16 num) { TM1650_Set(Channel, DIG1, tab[(num % 10000) / 1000]); // 第一位数字 TM1650_Set(Channel, DIG2, tab[(num % 1000) / 100]); // 第二位数字 TM1650_Set(Channel, DIG3, tab[(num % 100) / 10]); // 第三位数字 TM1650_Set(Channel, DIG4, tab[(num % 10)]); // 第四位数字 } static void Display_IDLE(IIC_t *Channel) { TM1650_Set(Channel, DIG1, tab[11]); // 第一位显示- TM1650_Set(Channel, DIG2, tab[11]); // 第二位显示- TM1650_Set(Channel, DIG3, tab[11]); // 第三位显示- TM1650_Set(Channel, DIG4, tab[11]); // 第四位显示- } static void Display_OFF(IIC_t *Channel) { TM1650_Set(Channel, DIG1, tab[10]); // 第一位显示关闭 TM1650_Set(Channel, DIG2, tab[0]); // 第二位显示O TM1650_Set(Channel, DIG3, tab[12]); // 第三位显示F TM1650_Set(Channel, DIG4, tab[12]); // 第四位显示F } static void Display_Close(IIC_t *Channel) { TM1650_Set(Channel, DIG1, tab[10]); // 关闭显示 TM1650_Set(Channel, DIG2, tab[10]); // 关闭显示 TM1650_Set(Channel, DIG3, tab[10]); // 关闭显示 TM1650_Set(Channel, DIG4, tab[10]); // 关闭显示 } static void TM1650_Set(IIC_t *Channel, u8 Add, u8 Value) { IIC_t *const COM = Channel; COM->start(); // iic开始 COM->write(Add); // iic写功能或者地址 COM->ACK(); // 等待应答信号 COM->write(Value); // iic写设置数据或显示数据 COM->ACK(); // 等待应答信号 COM->stop(); // iic停止 }