current_v/8F_5AW_Display/8f_5aw_display.c

557 lines
19 KiB
C
Raw Normal View History

/**
******************************************************************************
* @file 8f_5aw_display.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> 2026.1.8
******************************************************************************
* @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 "8f_5aw_display.h"
uint8_t display_buffer[BL55072A_DISP_BUF_SIZE];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>Ϣ<EFBFBD><EFBFBD><E1B9B9>
volatile PanelDisplayInfo panel_display_info;
#define ENABLE_PRECISE_I2C_DELAY (1)
#define configCPU_CLOCK_HZ (8000000)
/************************************************** <20>ⲿӳ<E2B2BF><D3B3>API **************************************************/
#define SDA_SET BL55072A_SDA_SET
#define SCL_SET BL55072A_SCL_SET
#define SDA_CLEAR BL55072A_SDA_CLEAR
#define SCL_CLEAR BL55072A_SCL_CLEAR
/************************************************** <20><>̬<EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> **************************************************/
/**
* @brief I2Cר<EFBFBD><EFBFBD>us<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>volatile<EFBFBD><EFBFBD><EFBFBD>ޱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>
* @param us: Ҫ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>΢<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @note ѭ<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>
*/
static void I2C_Delay_us(uint32_t us)
{
#if ENABLE_PRECISE_I2C_DELAY
const uint32_t cycles_per_us = configCPU_CLOCK_HZ / 1000000UL;
const uint32_t Calib_Num = 8;
const uint32_t Calib_Den = 10;
uint32_t total_cycles = (us * cycles_per_us * Calib_Num) / Calib_Den;
if (total_cycles == 0 && us > 0)
{
total_cycles = 1;
}
volatile uint32_t i, j = 0;
for (i = 0; i < total_cycles; i++)
{
j++;
j--;
__NOP();
}
#else
// <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for(uint32_t i = 0;i < us;i++)
{
__NOP();
}
#endif
}
/**
* @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
*/
static 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(BL55072A_SDA_GPIO_PORT)&BL55072A_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();
}
}
/************************** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> **************************/
static const PanelDisplayInfo panel_display_default =
{
.timer =
{
.hours = 88,
.minutes = 88,
.is_light = LIGHT_ON
},
.total_time =
{
.time_mode = MODE_TIME_TOTAL_TIME,
.hours = 88888,
.first8_segtable_index = 10,
.second8_segtable_index = 10,
.third8_segtable_index = 10,
.fourth8_segtable_index = 10,
.fifth8_segtable_index = 10,
.is_light = LIGHT_ON
},
.oxg =
{
.value = 888,
.is_light = LIGHT_ON
},
};
#define SEG_TABLE_SIZE (20) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
const uint8_t SEG_TAB[SEG_TABLE_SIZE] =
{
//--0--,--1--,--2--,--3--,--4--,--5--,--6--,--7--,--8--,--9--,
0x5F, 0x50, 0x6B, 0x79, 0x74, 0x3D, 0x3F, 0x58, 0x7F, 0x7D,
//'-', ' ', 'E', 'L', 'P', 'H', 'C', 'F', 'U', 'A',
0x20, 0x00, 0x2F, 0x07, 0x6E, 0x76, 0x0F, 0x2E, 0x57, 0x7E,
};
/************************** <20><><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>õ<EFBFBD>API<50><49><EFBFBD><EFBFBD> **************************/
/**
* @brief BL55072AҺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾоƬ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD>GPIO<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><EFBFBD>ڹر<EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>user_display_refresh<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
* @param <EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
* @author jarvis
* @date 2026.01.09
*/
void user_display_init(void)
{
// <20><>ʼ<EFBFBD><CABC>I2C<32><43><EFBFBD><EFBFBD>GPIO<49><4F><EFBFBD><EFBFBD>
FL_GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.pin = BL55072A_SDA_GPIO_PIN;
GPIO_InitStruct.mode = FL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.pull = FL_DISABLE;
GPIO_InitStruct.remapPin = FL_DISABLE;
GPIO_InitStruct.analogSwitch = FL_DISABLE;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_OPENDRAIN;
FL_GPIO_Init(BL55072A_SDA_GPIO_PORT, &GPIO_InitStruct); // <20><>ʼ<EFBFBD><CABC>SDA<44><41><EFBFBD><EFBFBD>
GPIO_InitStruct.pin = BL55072A_SCL_GPIO_PIN;
GPIO_InitStruct.pull = FL_ENABLE;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
FL_GPIO_Init(BL55072A_SCL_GPIO_PORT, &GPIO_InitStruct); // <20><>ʼ<EFBFBD><CABC>SCL<43><4C><EFBFBD><EFBFBD>
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊȫ1
memset(display_buffer, 0xFF, sizeof(display_buffer));
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>ýṹ<C3BD><E1B9B9>
panel_display_info = panel_display_default;
// ------------------- I2C<32><43><EFBFBD>߼<EFBFBD>оƬ<D0BE><C6AC>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -------------------
// ȷ<><C8B7>I2C<32><43><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD>ֹͣ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
I2C_Stop();
I2C_Delay_us(100); // <20><><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD><C8B6><EFBFBD>ʱ<EFBFBD><CAB1>100us<75><73>
// <20><><EFBFBD><EFBFBD>I2C<32><43>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
I2C_Start();
// <20><><EFBFBD><EFBFBD>оƬд<C6AC><D0B4>ַ<EFBFBD><D6B7>0x7C<37><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ACK<43><4B><EFBFBD><EFBFBD><E2A3A8><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
I2C_SendByte(BL55072A_I2C_ADDR_W);
(void)I2C_ReceiveAck(); // <20><>ʽ<EFBFBD><CABD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>ICSET<45><54><EFBFBD>оƬ<D0BE><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
I2C_SendByte(BL55072A_CMD_ICSET);
(void)I2C_ReceiveAck();
// <20><><EFBFBD><EFBFBD>DISCTL<54><4C><EFBFBD><EFBFBD><EEA3BA>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>֡Ƶ<D6A1><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>
I2C_SendByte(BL55072A_CMD_DISCTL);
(void)I2C_ReceiveAck();
// <20><><EFBFBD><EFBFBD>MODESET<45><54><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD>ʾ<EFBFBD><CABE>1/3ƫ<33>ã<EFBFBD>
I2C_SendByte(MODESET_BASIC | MODESET_DISP_OFF | MODESET_BIAS_1_3);
(void)I2C_ReceiveAck();
// <20><><EFBFBD><EFBFBD>ADSET<45><54><EFBFBD><EFBFBD><EEA3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַΪSEG0
I2C_SendByte(BL55072A_CMD_ADSET);
(void)I2C_ReceiveAck();
// <20><><EFBFBD><EFBFBD><EFBFBD>Դ棨0x00~0x23<32><33>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>
for(uint8_t i = 0; i < BL55072A_DISP_BUF_SIZE; i++)
{
I2C_SendByte(0x00);
(void)I2C_ReceiveAck();
}
// <20><><EFBFBD><EFBFBD>I2Cֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>Ч
I2C_Stop();
// <20><>ʾ<EFBFBD>ȶ<EFBFBD><C8B6><EFBFBD>ʱ<EFBFBD><CAB1>100us<75><73>
I2C_Delay_us(100);
}
/**
* @brief BL55072AҺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾˢ<EFBFBD>º<EFBFBD><EFBFBD><EFBFBD>
* @note <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>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>display_buffer<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param <EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
* @author jarvis
* @date 2026.01.09
*/
void user_display_refresh(void)
{
uint8_t timer_hour_ten; // Сʱʮλ<CAAE><CEBB>0-9<><39>
uint8_t timer_hour_unit; // Сʱ<D0A1><CAB1>λ<EFBFBD><CEBB>0-9<><39>
uint8_t timer_minute_ten; // <20><><EFBFBD><EFBFBD>ʮλ<CAAE><CEBB>0-9<><39>
uint8_t timer_minute_unit; // <20><><EFBFBD>Ӹ<EFBFBD>λ<EFBFBD><CEBB>0-9<><39>
uint8_t total_time_unit; // <20><EFBFBD><E6B4A2>ʱ<EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD>١<EFBFBD>ǧ<EFBFBD><C7A7><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t total_time_ten;
uint8_t total_time_hundred;
uint8_t total_time_thousand;
uint8_t total_time_ten_thousand;
uint8_t oxg_ten; // <20>洢Ũ<E6B4A2>ȵĸ<C8B5><C4B8><EFBFBD>ʮ<EFBFBD><CAAE>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
uint8_t oxg_unit;
uint8_t oxg_decimal;
// ------------------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD><EFBFBD>Դ<EFBFBD> -------------------
memset(display_buffer, 0x00, sizeof(display_buffer));
// ȷ<><C8B7><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD>
if(panel_display_info.timer.is_light == LIGHT_ON)
{
timer_hour_ten = (panel_display_info.timer.hours / 10) % 10; // ʮλ<CAAE><CEBB><EFBFBD>ȳ<EFBFBD>10<31><30>ȡ<EFBFBD><C8A1>10
timer_hour_unit = panel_display_info.timer.hours % 10;
timer_minute_ten = (panel_display_info.timer.minutes / 10) % 10; // ʮλ<CAAE><CEBB><EFBFBD>ȳ<EFBFBD>10<31><30>ȡ<EFBFBD><C8A1>10
timer_minute_unit = panel_display_info.timer.minutes % 10;
display_buffer[TIMER_FIRST8_AFED_SEG_NUM/2] |= (SEG_TAB[timer_hour_ten]&0x0F)<<4;
display_buffer[TIMER_FIRST8_BGC_SEG_NUM/2] |= (SEG_TAB[timer_hour_ten]&0xF0)>>4;
display_buffer[TIMER_SECOND8_AFED_SEG_NUM/2] |= (SEG_TAB[timer_hour_unit]&0x0F)<<4;
display_buffer[TIMER_SECOND8_BGC_SEG_NUM/2] |= (SEG_TAB[timer_hour_unit]&0xF0)>>4;
display_buffer[TIMER_THIRD8_AFED_SEG_NUM/2] |= (SEG_TAB[timer_minute_ten]&0x0F)<<4;
display_buffer[TIMER_THIRD8_BGC_SEG_NUM/2] |= (SEG_TAB[timer_minute_ten]&0xF0)>>4;
display_buffer[TIMER_FOURTH8_AFED_SEG_NUM/2] |= (SEG_TAB[timer_minute_unit]&0x0F)<<4;
display_buffer[TIMER_FOURTH8_BGC_SEG_NUM/2] |= (SEG_TAB[timer_minute_unit]&0xF0)>>4;
display_buffer[TIMER_COL_ARRAY_INDEX] |= ADDITION_SEG_POS;
display_buffer[TIMER_H1_ARRAY_INDEX] |= ADDITION_SEG_POS;
}
// ȷ<><C8B7><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD>
if(panel_display_info.total_time.is_light == LIGHT_ON)
{
if(panel_display_info.total_time.time_mode == MODE_TIME_TOTAL_TIME)
{
// <20><>Զֻȡǰ<C8A1><C7B0>λ <20><><EFBFBD>÷<EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
total_time_unit = panel_display_info.total_time.hours % 10;
total_time_ten = (panel_display_info.total_time.hours / 10) % 10; // ʮλ<CAAE><CEBB><EFBFBD>ȳ<EFBFBD>10<31><30>ȡ<EFBFBD><C8A1>10
total_time_hundred = (panel_display_info.total_time.hours / 100) % 10; // <20><>λ<EFBFBD><CEBB><EFBFBD>ȳ<EFBFBD>100<30><30>ȡ<EFBFBD><C8A1>10
total_time_thousand = (panel_display_info.total_time.hours / 1000) % 10; // ǧλ<C7A7><CEBB><EFBFBD>ȳ<EFBFBD>1000<30><30>ȡ<EFBFBD><C8A1>10
total_time_ten_thousand = (panel_display_info.total_time.hours / 10000) % 10; // <20><>λ<EFBFBD><CEBB><EFBFBD>ȳ<EFBFBD>10000<30><30>ȡ<EFBFBD><C8A1>10
display_buffer[TIME_FIRST8_AFED_SEG_NUM/2] |= (SEG_TAB[total_time_ten_thousand]&0x0F)<<4;
display_buffer[TIME_FIRST8_BGC_SEG_NUM/2] |= (SEG_TAB[total_time_ten_thousand]&0xF0)>>4;
display_buffer[TIME_SECOND8_AFED_SEG_NUM/2] |= (SEG_TAB[total_time_thousand]&0x0F)<<4;
display_buffer[TIME_SECOND8_BGC_SEG_NUM/2] |= (SEG_TAB[total_time_thousand]&0xF0)>>4;
display_buffer[TIME_THIRD8_AFED_SEG_NUM/2] |= (SEG_TAB[total_time_hundred]&0x0F)<<4;
display_buffer[TIME_THIRD8_BGC_SG_NUM/2] |= (SEG_TAB[total_time_hundred]&0xF0)>>4;
display_buffer[TIME_FOURTH8_AFED_SEG_NUM/2] |= (SEG_TAB[total_time_ten]&0x0F)<<4;
display_buffer[TIME_FOURTH8_BGC_SEG_NUM/2] |= (SEG_TAB[total_time_ten]&0xF0)>>4;
display_buffer[TIME_FIFTH8_AFED_SEG_NUM/2] |= (SEG_TAB[total_time_unit]&0x0F)<<4;
display_buffer[TIME_FIFTH8_BGC_SEG_NUM/2] |= (SEG_TAB[total_time_unit]&0xF0)>>4;
display_buffer[TOTAL_TIME_H2_ARRAY_INDEX] |= ADDITION_SEG_POS;
}else if(panel_display_info.total_time.time_mode == MODE_TIME_INDEX)
{
// <20>м<EFBFBD><D0BC><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ְ<EFBFBD><D6B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
display_buffer[TIME_FIRST8_AFED_SEG_NUM/2] |= (SEG_TAB[panel_display_info.total_time.first8_segtable_index]&0x0F)<<4;
display_buffer[TIME_FIRST8_BGC_SEG_NUM/2] |= (SEG_TAB[panel_display_info.total_time.first8_segtable_index]&0xF0)>>4;
display_buffer[TIME_SECOND8_AFED_SEG_NUM/2] |= (SEG_TAB[panel_display_info.total_time.second8_segtable_index]&0x0F)<<4;
display_buffer[TIME_SECOND8_BGC_SEG_NUM/2] |= (SEG_TAB[panel_display_info.total_time.second8_segtable_index]&0xF0)>>4;
display_buffer[TIME_THIRD8_AFED_SEG_NUM/2] |= (SEG_TAB[panel_display_info.total_time.third8_segtable_index]&0x0F)<<4;
display_buffer[TIME_THIRD8_BGC_SG_NUM/2] |= (SEG_TAB[panel_display_info.total_time.third8_segtable_index]&0xF0)>>4;
display_buffer[TIME_FOURTH8_AFED_SEG_NUM/2] |= (SEG_TAB[panel_display_info.total_time.fourth8_segtable_index]&0x0F)<<4;
display_buffer[TIME_FOURTH8_BGC_SEG_NUM/2] |= (SEG_TAB[panel_display_info.total_time.fourth8_segtable_index]&0xF0)>>4;
display_buffer[TIME_FIFTH8_AFED_SEG_NUM/2] |= (SEG_TAB[panel_display_info.total_time.fifth8_segtable_index]&0x0F)<<4;
display_buffer[TIME_FIFTH8_BGC_SEG_NUM/2] |= (SEG_TAB[panel_display_info.total_time.fifth8_segtable_index]&0xF0)>>4;
}
}
// <20><>Ũ<EFBFBD><C5A8><EFBFBD><EFBFBD>ʾ
if(panel_display_info.oxg.is_light == LIGHT_ON)
{
if(panel_display_info.oxg.oxg_mode == MODE_OXG_VALUE)
{
oxg_decimal = panel_display_info.oxg.value % 10;
oxg_unit = (panel_display_info.oxg.value / 10) % 10;
oxg_ten = (panel_display_info.oxg.value / 100) % 10;
display_buffer[OXG_FIRST8_AFED_SEG_NUM/2] |= (SEG_TAB[oxg_ten]&0x0F);
display_buffer[OXG_FIRST8_BGC_SEG_NUM/2] |= (SEG_TAB[oxg_ten]&0xF0);
display_buffer[OXG_SECOND8_AFED_SEG_NUM/2] |= (SEG_TAB[oxg_unit]&0x0F);
display_buffer[OXG_SECOND8_BGC_SEG_NUM/2] |= (SEG_TAB[oxg_unit]&0xF0);
display_buffer[OXG_THIRD8_AFED_SEG_NUM/2] |= (SEG_TAB[oxg_decimal]&0x0F);
display_buffer[OXG_THIRD8_BGC_SG_NUM/2] |= (SEG_TAB[oxg_decimal]&0xF0);
display_buffer[OXG_S1_ARRAY_INDEX] |= ADDITION_SEG_POS<<4;
display_buffer[OXG_POINT_ARRAY_INDEX] |= ADDITION_SEG_POS<<4;
display_buffer[OXG_PERCEENET_ARRAY_INDEX] |= ADDITION_SEG_POS<<4;
}else if(panel_display_info.oxg.oxg_mode == MODE_OXG_INDEX)
{
display_buffer[OXG_FIRST8_AFED_SEG_NUM/2] |= (SEG_TAB[panel_display_info.oxg.first8_segtable_index]&0x0F);
display_buffer[OXG_FIRST8_BGC_SEG_NUM/2] |= (SEG_TAB[panel_display_info.oxg.first8_segtable_index]&0xF0);
display_buffer[OXG_SECOND8_AFED_SEG_NUM/2] |= (SEG_TAB[panel_display_info.oxg.second8_segtable_index]&0x0F);
display_buffer[OXG_SECOND8_BGC_SEG_NUM/2] |= (SEG_TAB[panel_display_info.oxg.second8_segtable_index]&0xF0);
display_buffer[OXG_THIRD8_AFED_SEG_NUM/2] |= (SEG_TAB[panel_display_info.oxg.third8_segtable_index]&0x0F);
display_buffer[OXG_THIRD8_BGC_SG_NUM/2] |= (SEG_TAB[panel_display_info.oxg.third8_segtable_index]&0xF0);
if(panel_display_info.oxg.chn_is_light == LIGHT_ON)
{
display_buffer[OXG_S1_ARRAY_INDEX] |= ADDITION_SEG_POS<<4;
display_buffer[OXG_POINT_ARRAY_INDEX] |= ADDITION_SEG_POS<<4;
display_buffer[OXG_PERCEENET_ARRAY_INDEX] |= ADDITION_SEG_POS<<4;
}
}
}
// ------------------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -------------------
// <20><><EFBFBD><EFBFBD>I2C<32><43>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
I2C_Start();
// <20><><EFBFBD><EFBFBD>оƬд<C6AC><D0B4>ַ
I2C_SendByte(BL55072A_I2C_ADDR_W);
(void)I2C_ReceiveAck(); // <20><>ʽ<EFBFBD><CABD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>BLKCTL<54><4C><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>
I2C_SendByte(BL55072A_CMD_BLKCTL);
(void)I2C_ReceiveAck();
// <20><><EFBFBD><EFBFBD>DISCTL<54><4C><EFBFBD><EFBFBD><EEA3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
I2C_SendByte(BL55072A_CMD_DISCTL);
(void)I2C_ReceiveAck();
// <20><><EFBFBD><EFBFBD>ICSET<45><54><EFBFBD>оƬ<D0BE><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
I2C_SendByte(BL55072A_CMD_ICSET);
(void)I2C_ReceiveAck();
// <20><><EFBFBD><EFBFBD>ADSET<45><54><EFBFBD><EFBFBD><EEA3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
I2C_SendByte(BL55072A_CMD_ADSET);
(void)I2C_ReceiveAck();
// <20><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>оƬ<D0BE>Դ棨0x00~0x23<32><33>ַ<EFBFBD><D6B7>
for(uint8_t i = 0; i < BL55072A_DISP_BUF_SIZE; i++)
{
I2C_SendByte(display_buffer[i]);
(void)I2C_ReceiveAck();
}
// ֹͣI2C<32><43><EFBFBD>䣬ȷ<E4A3AC><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
I2C_Stop();
// ------------------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ -------------------
I2C_Delay_us(100); // <20><><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD><C8B6><EFBFBD>ʱ<EFBFBD><CAB1>100us<75><73>
// <20><><EFBFBD><EFBFBD>I2C<32><43>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
I2C_Start();
// <20><><EFBFBD><EFBFBD>оƬд<C6AC><D0B4>ַ<EFBFBD><D6B7>0x7C<37><43>
I2C_SendByte(BL55072A_I2C_ADDR_W);
(void)I2C_ReceiveAck(); // <20><>ʽ<EFBFBD><CABD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>MODESET<45><54><EFBFBD><EFBFBD><EEA3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2>
I2C_SendByte(BL55072A_CMD_MODESET);
(void)I2C_ReceiveAck();
// ֹͣI2C<32><43><EFBFBD><EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
I2C_Stop();
}
/************************ (C) COPYRIGHT YUWELL *****END OF FILE****/