561 lines
18 KiB
C
561 lines
18 KiB
C
|
|
/**
|
|||
|
|
******************************************************************************
|
|||
|
|
* @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>© 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_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
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
|
|||
|
|
.error =
|
|||
|
|
{
|
|||
|
|
.first8_segtable_index = 8,
|
|||
|
|
.second8_segtable_index = 8,
|
|||
|
|
.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_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_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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
|||
|
|
if(panel_display_info.error.is_light == LIGHT_ON)
|
|||
|
|
{
|
|||
|
|
// <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
|
|||
|
|
panel_display_info.error.first8_segtable_index = panel_display_info.error.first8_segtable_index >= SEG_TABLE_SIZE?\
|
|||
|
|
(SEG_TABLE_SIZE-1):panel_display_info.error.first8_segtable_index;
|
|||
|
|
|
|||
|
|
panel_display_info.error.second8_segtable_index = panel_display_info.error.second8_segtable_index >= SEG_TABLE_SIZE?\
|
|||
|
|
(SEG_TABLE_SIZE-1):panel_display_info.error.second8_segtable_index;
|
|||
|
|
|
|||
|
|
display_buffer[ERROR_FIRT8_AFED_SEG_NUM/2] |= (SEG_TAB[panel_display_info.error.first8_segtable_index]&0x0F);
|
|||
|
|
display_buffer[ERROR_FIRT8_BGC_SEG_NUM/2] |= (SEG_TAB[panel_display_info.error.first8_segtable_index]&0xF0);
|
|||
|
|
|
|||
|
|
display_buffer[ERROR_SECOND8_AFED_SEG_NUM/2] |= (SEG_TAB[panel_display_info.error.second8_segtable_index]&0x0F);
|
|||
|
|
display_buffer[ERROR_SECOND8_BGC_SEG_NUM/2] |= (SEG_TAB[panel_display_info.error.second8_segtable_index]&0xF0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><>Ũ<EFBFBD><C5A8><EFBFBD><EFBFBD>ʾ
|
|||
|
|
if(panel_display_info.oxg.is_light == LIGHT_ON)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
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;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
// ------------------- <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****/
|