Files
BLTouchTest/App/TM1650.c
2023-05-19 15:50:27 +08:00

101 lines
3.5 KiB
C

/*
* 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停止
}