101 lines
3.5 KiB
C
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停止
|
|
}
|