149 lines
3.5 KiB
C
149 lines
3.5 KiB
C
/*
|
|
* TM1650.c
|
|
*
|
|
* Created on: 2022年03月12日
|
|
* Author: User
|
|
*/
|
|
|
|
#include <Main.h>
|
|
|
|
// 数码管显示数组
|
|
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;
|
|
Init(); //每次显示以前初始化TM1650
|
|
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]); //关闭显示
|
|
}
|