96 lines
2.4 KiB
C
96 lines
2.4 KiB
C
/*
|
|
* TM1650.c
|
|
*
|
|
* Created on: 2022年03月12日
|
|
* Author: User
|
|
*/
|
|
|
|
#include <Main.h>
|
|
|
|
// 数码管显示数组
|
|
static uint8_t tab[] = {
|
|
0x3F, // 0
|
|
0x06, // 1
|
|
0x5B, // 2
|
|
0x4F, // 3
|
|
0x66, // 4
|
|
0x6D, // 5
|
|
0x7D, // 6
|
|
0x07, // 7
|
|
0x7F, // 8
|
|
0x6F, // 9
|
|
0x00, // 10 = Null
|
|
0x61, // 11 = 上c
|
|
};
|
|
|
|
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};
|
|
|
|
static void Init(void)
|
|
{
|
|
TM1650_Set(&IIC_1, 0x48, 0x31); //打开通道1 设置亮度3级 开显示
|
|
}
|
|
|
|
static void TM1650_Set(IIC_t *Channel, uint8_t Add, uint8_t Value)
|
|
{
|
|
IIC_t *const COM = Channel;
|
|
COM->start(); // iic开始
|
|
COM->write(Add); // iic写功能或者地址
|
|
COM->ACK(); //等待应答信号
|
|
COM->write(Value); // iic写设置数据或显示数据
|
|
COM->ACK(); //等待应答信号
|
|
COM->stop(); // iic停止
|
|
}
|
|
|
|
void TM1650_Display(IIC_t *Channel, uint16_t Value, uint8_t dot)
|
|
{
|
|
IIC_t *const IIC = Channel;
|
|
if (Value < 100)
|
|
{
|
|
TM1650_Set(IIC, DIG1, tab[10]); //如果温度不到100 关闭最高位数码管
|
|
}
|
|
else
|
|
{
|
|
TM1650_Set(IIC, DIG1, tab[Value % 1000 / 100]);
|
|
}
|
|
if (dot == 1) //判断是否加点
|
|
{
|
|
TM1650_Set(IIC, DIG2, (tab[Value % 100 / 10] | 0x80));
|
|
}
|
|
else
|
|
{
|
|
TM1650_Set(IIC, DIG2, tab[Value % 100 / 10]);
|
|
}
|
|
TM1650_Set(IIC, DIG3, tab[Value % 10 / 1]);
|
|
TM1650_Set(IIC, DIG4, tab[11]); //不带点 显示小c
|
|
}
|
|
|
|
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]); //第四位显示关闭
|
|
}
|
|
|
|
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]); //关闭显示
|
|
}
|