current_v/Src/ht16k33_led_i2c.c

482 lines
12 KiB
C
Raw Normal View History

2025-12-31 08:21:43 +08:00
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file ht16k33_led_i2c.c
* @author Motor Control SDK Team, Yuwell Software XiangenWang
* @brief Voice Recognition Module Initialization Section,
including peripheral initialization and message node insertion, etc.
* @version 1.0
* @changelog version 1.0 <EFBFBD><EFBFBD>ʼ<EFBFBD> 2025.12.17
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>в<EFBFBD><EFBFBD><EFBFBD>
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright (c) 2025 Yuwell Software Danyang.Jiangsu.China.
* All rights reserved.</center></h2>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted, provided that the following conditions are met:
*
* 1. Redistribution of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of Yuwell Software nor the names of other
* contributors to this software may be used to endorse or promote products
* derived from this software without specific written permission.
* 4. This software, including modifications and/or derivative works of this
* software, must execute solely and exclusively on microcontroller or
* microprocessor devices manufactured by or for Yuwell Software.
* 5. Redistribution and use of this software other than as permitted under
* this license is void and will automatically terminate your rights under
* this license.
*
* THIS SOFTWARE IS PROVIDED BY Yuwell Software AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
* SHALL Yuwell Software OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/* USER CODE END Header */
#include "ht16k33_dot_matrix.h"
#define SDA_SET HT16K33_SDA_SET
#define SCL_SET HT16K33_SCL_SET
#define SDA_CLEAR HT16K33_SDA_CLEAR
#define SCL_CLEAR HT16K33_SCL_CLEAR
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>ڴ<EFBFBD> */
uint8_t ht16k33_disp_buff[DISP_BUFFER_SIZE];
/**
* @brief ΢<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
* @param us <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>΢<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval NONE
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD>MCU<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>HT16K33Ҫ<EFBFBD><EFBFBD>
* @author jarvis
* @data 2025.11.25
*/
void I2C_Delay_us(uint32_t us)
{
FL_DelayUs(us);
}
/**
* @brief I2C<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SCL<EFBFBD>ߵ<EFBFBD>ƽʱ<EFBFBD><EFBFBD>SDA<EFBFBD>Ӹ߱<EFBFBD><EFBFBD><EFBFBD>
* @param NONE
* @retval NONE
* @note <EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C<EFBFBD>ٷ<EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD>д
* @author jarvis
* @data 2025.11.25
*/
void I2C_Start(void)
{
SDA_SET();
SCL_SET();
I2C_Delay_us(1);
SDA_CLEAR();
I2C_Delay_us(1);
SCL_CLEAR();
}
/**
* @brief I2Cֹͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SCL<EFBFBD>ߵ<EFBFBD>ƽʱ<EFBFBD><EFBFBD>SDA<EFBFBD>ӵͱ<EFBFBD><EFBFBD><EFBFBD>
* @param NONE
* @retval NONE
* @note <EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C<EFBFBD>ٷ<EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>ֹͣ<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><EFBFBD><EFBFBD>Ȩ
* @author jarvis
* @date 2025.11.25
*/
static void I2C_Stop(void)
{
SDA_CLEAR();
SCL_SET();
I2C_Delay_us(1);
SDA_SET();
I2C_Delay_us(1);
}
/**
* @brief I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
* @param NONE
* @retval uint8_t - Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>Ӧ<EFBFBD><EFBFBD>(ACK)<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>ʾδ<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>Ӧ<EFBFBD><EFBFBD>(NACK)
* @note SDA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PC11<EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>ƽ<EFBFBD>ж<EFBFBD>Ӧ<EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭI2CЭ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
* @author jarvis
* @date 2025.11.25
*/
static uint8_t I2C_ReceiveAck(void)
{
uint8_t ack = 1;
SCL_CLEAR();
SDA_SET(); // <20>ͷ<EFBFBD>SDA<44><41><EFBFBD><EFBFBD>
I2C_Delay_us(1);
SCL_SET();
I2C_Delay_us(1);
if((FL_GPIO_ReadInputPort(HT16K33_SDA_GPIO_GROUP)&HT16K33_SDA_GPIO_PIN) == 0)
{
ack = 0; // <20><><EFBFBD>⵽Ӧ<E2B5BD><D3A6>
}
SCL_CLEAR();
return ack;
}
/**
* @brief I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param data - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>8λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval NONE
* @note <EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(MSB first)<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭI2CЭ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>SCL<EFBFBD>ߵ<EFBFBD>ƽʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
* @author jarvis
* @date 2025.11.25
*/
static void I2C_SendByte(uint8_t data)
{
uint8_t i;
SCL_CLEAR();
for(i = 0; i < 8; i++)
{
if(data & 0x80)
{
SDA_SET(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
}else{
SDA_CLEAR();
}
data <<= 1;
I2C_Delay_us(1);
SCL_SET();
I2C_Delay_us(1);
SCL_CLEAR();
}
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD>HT16K33<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ
* @param disp_buffer - <EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval uint8_t - <EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ͳɹ<EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>(δ<EFBFBD>յ<EFBFBD>Ӧ<EFBFBD><EFBFBD>)
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2Cҳдģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>HT16K33_ADDR(<EFBFBD><EFBFBD><EFBFBD>ַ)<EFBFBD><EFBFBD>HT16K33_CMD_DISP_ADDR(<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ַ)<EFBFBD><EFBFBD>DISP_BUFFER_SIZE(<EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD>С)
* @author jarvis
* @date 2025.11.25
*/
uint8_t ht16k33_send_buffer(uint8_t* disp_buffer)
{
uint8_t i;
// 1.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ź<EFBFBD>
I2C_Start();
// 2.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ַ
I2C_SendByte(HT16K33_ADDR);
// 3.<2E><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ź<EFBFBD>
if(I2C_ReceiveAck() != 0)
{
I2C_Stop();
return 1;
}
// 4.<2E><><EFBFBD>͵<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
I2C_SendByte(HT16K33_CMD_DISP_ADDR); // <20><>ʼ<EFBFBD><CABC>ַ0x00<30><30><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
// 5.<2E><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ź<EFBFBD>
if(I2C_ReceiveAck() != 0)
{
I2C_Stop();
return 1;
}
// 6.<2E><><EFBFBD><EFBFBD>ҳд<D2B3><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ź<EFBFBD>
for(i = 0; i < DISP_BUFFER_SIZE; i++)
{
I2C_SendByte(disp_buffer[i]);
I2C_ReceiveAck();
}
// 7.<2E><><EFBFBD><EFBFBD>ֹͣ<CDA3>ź<EFBFBD>
I2C_Stop();
return 0;
}
/**
* @brief <EFBFBD>·<EFBFBD><EFBFBD><EFBFBD>ʾʹ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
* @param NONE
* @retval NONE
* @note NONE
* @author jarvis
* @date 2025.11.25
*/
static void ht16k33_chip_disp_enable(void)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾʹ<CABE><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3A8><EFBFBD><EFBFBD>˸<EFBFBD><CBB8>
I2C_Start();
I2C_SendByte(HT16K33_ADDR);
if(I2C_ReceiveAck() != 0)
{
I2C_Stop();
}
I2C_SendByte(HT16K33_CMD_DISPLAY_ON);
if(I2C_ReceiveAck() != 0)
{
I2C_Stop();
}
I2C_Stop();
FL_DelayMs(1);
}
/**
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>оƬ
* @param NONE
* @retval NONE
* @note NONE
* @author jarvis
* @date 2025.11.25
*/
void ht16k33_chip_init(void)
{
// <20>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>
SDA_SET();
SCL_SET();
FL_DelayMs(1); // <20>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD>1ms<6D><73>
// 1. <20><><EFBFBD><EFBFBD>ϵͳʱ<CDB3><CAB1>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
I2C_Start();
I2C_SendByte(HT16K33_ADDR); // <20>ӻ<EFBFBD><D3BB><EFBFBD>ַ+д<><D0B4><EFBFBD><EFBFBD>
if(I2C_ReceiveAck() != 0)
{
I2C_Stop();
}
I2C_SendByte(HT16K33_CMD_SYSTEM_ON);
if(I2C_ReceiveAck() != 0)
{
I2C_Stop();
}
I2C_Stop();
FL_DelayMs(1);
// 3. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
I2C_Start();
I2C_SendByte(HT16K33_ADDR);
if(I2C_ReceiveAck() != 0)
{
I2C_Stop();
}
I2C_SendByte(HT16K33_CMD_DIMMING_MAX);
if(I2C_ReceiveAck() != 0)
{
I2C_Stop();
}
I2C_Stop();
FL_DelayMs(1);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>UI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣˢ<EFBFBD><EFBFBD>HT16K33<EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param ui - UIElements<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>UI<EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>ָʾ<EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @retval uint8_t - ˢ<EFBFBD>½<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD>ʾˢ<EFBFBD>³ɹ<EFBFBD>
* @note 1. ֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱģʽ(DISPLAY_MODE_TIMER)<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ũ<EFBFBD><EFBFBD>ģʽ(DISPLAY_MODE_OXYGEN)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ(DISPLAY_MODE_ERROR)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾģʽ
* 2. <EFBFBD><EFBFBD>Ũ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0-999<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>ʾ0.0%-99.9%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0-19999
* 3. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SEG_TAB<EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>0-9<EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>'-'<EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><EFBFBD><EFBFBD>'E'<EFBFBD><EFBFBD>'L'<EFBFBD><EFBFBD>'P'<EFBFBD><EFBFBD>'H'<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ʾ
* 4. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>OK<EFBFBD>ơ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ״̬
* 5. ˢ<EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ht16k33_send_buffer<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD>Ļ
* @author jarvis
* @date 2025.11.25
*/
static void ht16k33_refresh_disp(UIElements ui)
{
// uint8_t o2_hund, o2_ten, o2_unit; // <20><>λ<EFBFBD><CEBB>ʮλ<CAAE><CEBB><EFBFBD><EFBFBD>λ
// uint8_t wh_ten_thou, wh_thou, wh_hund, wh_ten, wh_unit; // <20><>λ<EFBFBD><CEBB>ǧλ<C7A7><CEBB><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ʮλ<CAAE><CEBB><EFBFBD><EFBFBD>λ
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>7<EFBFBD><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>
uint8_t SEG_TAB[SEG_TABLE_SIZE] =
{
//--0--,--1--,--2--,--3--,--4--,--5--,--6--,--7--,--8--,--9--,
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,
//'-', ' ', 'E', 'L', 'P', 'H', 'C', 'F', 'U', 'A',
0x40, 0x00, 0x79, 0x38, 0x73, 0x76, 0x39, 0x71, 0x3E, 0x77,
};
// 0.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9B2A2>ֵ
ui.disp_info.seg_index.first_8_index = (ui.disp_info.seg_index.first_8_index >= SEG_TABLE_SIZE)?(SEG_TABLE_SIZE-1):ui.disp_info.seg_index.first_8_index;
ui.disp_info.seg_index.second_8_index = (ui.disp_info.seg_index.second_8_index >= SEG_TABLE_SIZE)?(SEG_TABLE_SIZE-1):ui.disp_info.seg_index.second_8_index;
ui.disp_info.seg_index.third_8_index = (ui.disp_info.seg_index.third_8_index >= SEG_TABLE_SIZE)?(SEG_TABLE_SIZE-1):ui.disp_info.seg_index.third_8_index;
ui.disp_info.seg_index.fourth_8_index = (ui.disp_info.seg_index.fourth_8_index >= SEG_TABLE_SIZE)?(SEG_TABLE_SIZE-1):ui.disp_info.seg_index.fourth_8_index;
ht16k33_disp_buff[6] = SEG_TAB[ui.disp_info.seg_index.first_8_index];
ht16k33_disp_buff[4] = SEG_TAB[ui.disp_info.seg_index.second_8_index];
ht16k33_disp_buff[2] = SEG_TAB[ui.disp_info.seg_index.third_8_index];
ht16k33_disp_buff[0] = SEG_TAB[ui.disp_info.seg_index.fourth_8_index];
// 1.OK<4F><4B><EFBFBD><EFBFBD>ʾ״̬<D7B4><CCAC><EFBFBD><EFBFBD>
if(ui.ok_led_show == 1)
{
ht16k33_disp_buff[12] |= 0x03;
}else{
ht16k33_disp_buff[12] &= ~(0x03);
}
// 2.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
if(ui.alarm_led_show == 1)
{
ht16k33_disp_buff[12] |= 0x0C;
}else{
ht16k33_disp_buff[12] &= ~(0x0C);
}
// 3.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 100h<30><68><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
if(ui.clean_filter_show == 1)
{
ht16k33_disp_buff[6] |= 0x80;
ht16k33_disp_buff[4] |= 0x80;
ht16k33_disp_buff[7] |= 0x07;
ht16k33_disp_buff[5] |= 0x07;
}else{
ht16k33_disp_buff[6] &= ~ 0x80;
ht16k33_disp_buff[4] &= ~ 0x80;
ht16k33_disp_buff[7] &= ~ 0x07;
ht16k33_disp_buff[5] &= ~0x07;
}
// 4.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD> 10000h<30><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD>
if(ui.replace_box_show == 1)
{
ht16k33_disp_buff[2] |= 0x80;
ht16k33_disp_buff[3] |= 0x07;
}else{
ht16k33_disp_buff[2] &= ~ 0x80;
ht16k33_disp_buff[3] &= ~ 0x07;
}
// 5.<2E><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
if(ui.total_time_chn == 1)
{
ht16k33_disp_buff[12] |= 0xF0; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʾ
ht16k33_disp_buff[13] |= 0x03;
ht16k33_disp_buff[1] |= 0x01; // <20><>h<EFBFBD><68><EFBFBD><EFBFBD>ʾ
}else{
ht16k33_disp_buff[12] &= ~ 0xF0;// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
ht16k33_disp_buff[13] &= ~ 0x03;
ht16k33_disp_buff[1] &= ~ 0x01; // <20><>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
}
// 6.<2E><>Ũ<EFBFBD><C5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
if(ui.oxg_concentration_chn == 1)
{
ht16k33_disp_buff[10] |= 0xFF; // <20><><EFBFBD><EFBFBD>Ũ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ʾ
ht16k33_disp_buff[1] |= 0x06; //<2F><>%<25><><EFBFBD><EFBFBD>ʾ
ht16k33_disp_buff[0] |= 0x80; // <20><>.<2E><><EFBFBD><EFBFBD>ʾ
}else{
ht16k33_disp_buff[10] &= ~ 0xFF; // <20><><EFBFBD><EFBFBD>Ũ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ʾ
ht16k33_disp_buff[1] &= ~ 0x06; //<2F><>%<25><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
ht16k33_disp_buff[0] &= ~ 0x80; // <20><>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
}
// 7.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ
if(ui.disp_info.seg_index.num1_is_show == 1)
{
ht16k33_disp_buff[11] |= 0x03;
}else{
ht16k33_disp_buff[11] &=~ 0x03;
}
ht16k33_send_buffer(ht16k33_disp_buff);
}
/**
* @brief HT16K33<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD>º<EFBFBD><EFBFBD><EFBFBD>
* @param NONE
* @retval NONE
* @note 1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD><EFBFBD>ͷ<EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD>ߡ<EFBFBD>ϵͳʱ<EFBFBD><EFBFBD>ʹ<EFBFBD>ܡ<EFBFBD><EFBFBD><EFBFBD>ʾʹ<EFBFBD>ܡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ˢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* 2. <EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>1msȷ<EFBFBD><EFBFBD>оƬ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD>ÿ<EFBFBD><EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1ms<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>֤<EFBFBD>ȶ<EFBFBD><EFBFBD><EFBFBD>
* 3. <EFBFBD><EFBFBD><EFBFBD>HT16K33<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>HT16K33_CMD_SYSTEM_ON(ϵͳʹ<EFBFBD><EFBFBD>)<EFBFBD><EFBFBD>HT16K33_CMD_DISPLAY_ON(<EFBFBD><EFBFBD>ʾʹ<EFBFBD><EFBFBD>)<EFBFBD><EFBFBD>HT16K33_CMD_DIMMING_MAX(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
* 4. <EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ht16k33_refresh_disp<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD>ui<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* 5. <EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><EFBFBD>
* @author jarvis
* @date 2025.11.25
*/
void ht16k33_refresh_screen(void)
{
ht16k33_chip_init(); // <20><>ʼ<EFBFBD><CABC>оƬ<D0BE><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ht16k33_chip_disp_enable();
ht16k33_refresh_disp(ui); // <20><><EFBFBD><EFBFBD>ui<75><69><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ֵˢ<D6B5><CBA2><EFBFBD><EFBFBD>Ļ
}
/************************ (C) COPYRIGHT YUWELL *****END OF FILE****/