/* * TM1650.c * * Created on: 2022年03月12日 * Author: User */ #include // 数码管显示数组 static xdata uint8_t tab[] = { 0x3F, // 0 0x06, // 1 0x5B, // 2 0x4F, // 3 0x66, // 4 0x6D, // 5 0x7D, // 6 0x07, // 7 0x7F, // 8 0x6F, // 9 0x40, // 10 = - 0x79, // 11 = E 0x50, // 12 = r 0x00, // 13 = Null 0x09, // 14 0x58, // 15 = 下c 0x1c, // 16 = u 0x63, // 17 = 上o 0x39, // 18 = C 0x5C, // 19 = 下o 0x0f, // 20 = 大反C 0x61, // 21 = 上c 0x71, // 22 = F 0x37, // 23 = N 0x77, // 24 = A 0x10, // 25 下| 0x14 // 26 下|下| }; static void Init(void); // tm1650初始化 static void TM1650_Set(IIC_t *Channel, uint8_t Add, uint8_t Value); //设置tm1650寄存器的值 static void Display_OFF(IIC_t *Channel); //显示OFF 字符 static void Display_Close(IIC_t *Channel); //显示暂时关闭 void TM1650_Display(IIC_t *Channel, uint16_t Value, uint8_t dot); //显示使能 TM1650_t TM1650 = { 1, Init, Display_OFF, Display_Close}; /* * @name Init * @brief 1650初始化 * @param None * @retval None */ static void Init(void) { TM1650_Set(&IIC_1, 0x48, 0x31); //打开通道1 设置亮度3级 开显示 } /* * @name TM1650_Set * @brief 1650写数据 * @param Channel Add Value * @retval None */ static void TM1650_Set(IIC_t *Channel, uint8_t Add, uint8_t Value) { IIC_t *const COM = Channel; EA = 0; COM->start(); // iic开始 COM->write(Add); // iic写功能或者地址 COM->ACK(); //等待应答信号 COM->write(Value); // iic写设置数据或显示数据 COM->ACK(); //等待应答信号 COM->stop(); // iic停止 EA = 1; } /* * @name TM1650_Set * @brief 1650显示函数 * @param Channel Value CHANNEL * @retval None */ void TM1650_Display(IIC_t *Channel, uint16_t Value, uint8_t CHANNEL) { IIC_t *const IIC = Channel; if (CHANNEL == 1) //判断显示通道 { TM1650_Set(IIC, DIG1, tab[25]); //显示| } else { TM1650_Set(IIC, DIG1, tab[26]); //显示|| } if (Value < 100) { TM1650_Set(IIC, DIG2, tab[13]); //如果温度不到100 关闭最高位数码管 } else { TM1650_Set(IIC, DIG2, tab[Value % 1000 / 100]); } TM1650_Set(IIC, DIG3, tab[Value % 100 / 10]); TM1650_Set(IIC, DIG4, tab[Value % 10 / 1]); // TM1650_Set(IIC, DIG1, tab[Value / 1000]); // TM1650_Set(IIC, DIG2, tab[Value / 100 % 10]); // TM1650_Set(IIC, DIG3, tab[Value / 10 % 10]); // TM1650_Set(IIC, DIG4, tab[Value / 1 % 10]); } /* * @name Display_OFF * @brief TM1650显示OFF * @param Channel * @retval None */ static void Display_OFF(IIC_t *Channel) { IIC_t *const IIC = Channel; TM1650_Set(IIC, DIG1, tab[0]); //第一位显示O TM1650_Set(IIC, DIG2, tab[22]); //第二位显示F TM1650_Set(IIC, DIG3, tab[22]); //第三位显示F TM1650_Set(IIC, DIG4, tab[13]); //第四位显示关闭 } /* * @name Display_Close * @brief 1650显示关闭 * @param Channel * @retval None */ static void Display_Close(IIC_t *Channel) { IIC_t *const IIC = Channel; TM1650_Set(IIC, DIG1, tab[13]); //关闭显示 TM1650_Set(IIC, DIG2, tab[13]); //关闭显示 TM1650_Set(IIC, DIG3, tab[13]); //关闭显示 TM1650_Set(IIC, DIG4, tab[13]); //关闭显示 }