Files
kunlun/import/ht16k23_lcd/iot_lcd.h
2024-09-28 14:24:04 +08:00

293 lines
11 KiB
C

/****************************************************************************
*
* Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
*
* This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics Ltd and MAY NOT
* be copied by any method or incorporated into another program without
* the express written consent of Aerospace C.Power. This Information or any portion
* thereof remains the property of Aerospace C.Power. The Information contained herein
* is believed to be accurate and Aerospace C.Power assumes no responsibility or
* liability for its use in any way and conveys no license or title under
* any patent or copyright and makes no representation or warranty that this
* Information is free from patent or copyright infringement.
*
* ****************************************************************************/
#ifndef _INCLUDE_LCD_HT16K23_H_
#define _INCLUDE_LCD_HT16K23_H_
#ifdef __cplusplus
extern "C" {
#endif
/* Maximum of the display ram length. */
#define HT16K23_MAX_DISPLAY_RAM_LEN 15
/* bitmap of the lcd keypad.*/
typedef enum {
HT16K23_K0_BIT = 1, /* K0_BIT 00000001*/
HT16K23_K1_BIT = 2, /* K1_BIT 00000010*/
HT16K23_K2_BIT = 4, /* K2_BIT 00000100*/
HT16K23_K3_BIT = 8, /* K3_BIT 00001000*/
}keypad_bit_map;
/* the lcd work status.*/
enum {
HT16K23_STAT_STANDBY = 0, /* standby mode*/
HT16K23_STAT_NORMAL = 1, /* normal mode*/
};
typedef union _display_bitmap {
uint8_t display_data[HT16K23_MAX_DISPLAY_RAM_LEN];
struct {
struct {
uint8_t com7:1, //symbol_relay_2 继电器2
com6:1, //symbol_relay_1 继电器1
com5:1, //symbol_switch_6 开关6
com4:1, //symbol_switch_5 开关5
com3:1, //symbol_switch_4 开关4
com2:1, //symbol_switch_3 开关3
com1:1, //symbol_switch_2 开关2
com0:1; //symbol_switch_1 开关1
} seg_0;
struct {
uint8_t com7:1, //symbol_float 平---尖峰平谷
com6:1, //symbol_demand 需量
com5:1, //symbol_zero 零序
com4:1, //symbol_Hz 单位Hz
com3:1, //symbol_% %
com2:1, //symbol_h 单位h
com1:1, //symbol_var 单位var
com0:1; //symbol_k 单位k --- kvarh
} seg_1;
struct {
uint8_t com7:1, //symbol_tip 尖---尖峰平谷
com6:1, //symbol_peak 峰---尖峰平谷
com5:1, //symbol_h 单位h
com4:1, //symbol_A 单位A
com3:1, //symbol_V 单位V
com2:1, //symbol_V 单位V ---W
com1:1, //symbol_k 单位k ---kVVAh
com0:1; //none
} seg_2;
struct {
uint8_t com7:1, //symbol_total 总
com6:1, //symbol_harmonic 谐波
com5:1, //symbol_cosφ 功率因数
com4:1, //symbol_S
com3:1, //symbol_E
com2:1, //symbol_Q
com1:1, //symbol_P PQES
com0:1; //symbol_P8_2 第二个冒号上面的点,point_8
} seg_3;
struct {
uint8_t com7:1, //symbol_month 月
com6:1, //symbol_combination 组合
com5:1, //symbol_positive 正
com4:1, //symbol_reverse 反
com3:1, //symbol_direction 向---正|反向
com2:1, //symbol_U 电压符号
com1:1, //symbol_I 电流符号
com0:1; //symbol_last 上---上1X月
} seg_4;
struct {
uint8_t com7:1, //symbol_digit1_7bit---上1X月:个位
com6:1,
com5:1,
com4:1,
com3:1,
com2:1,
com1:1,
com0:1; //symbol_decade_1 上1x月:十位
} seg_5;
struct {
uint8_t com7:1, //symbol_vally 谷---尖峰平谷
com6:1, //symbol_digit9_7bit
com5:1,
com4:1,
com3:1,
com2:1,
com1:1,
com0:1;
} seg_6;
struct {
uint8_t com7:1, //symbol_P9 小数点:decimal point
com6:1, //symbol_digit8_7bit
com5:1,
com4:1,
com3:1,
com2:1,
com1:1,
com0:1;
} seg_7;
struct {
uint8_t com7:1, //symbol_P7_2 小数点|第二个冒号下面的点,point_7
com6:1, //symbol_digit7_7bit
com5:1,
com4:1,
com3:1,
com2:1,
com1:1,
com0:1;
} seg_8;
struct {
uint8_t com7:1, //symbol_P6 小数点:decimal point
com6:1, //symbol_digit6_7bit
com5:1,
com4:1,
com3:1,
com2:1,
com1:1,
com0:1;
} seg_9;
struct {
uint8_t com7:1, //symbol_P4_1 小数点|第一个冒号下面的点,point_4
com6:1, //symbol_digit5_7bit
com5:1,
com4:1,
com3:1,
com2:1,
com1:1,
com0:1;
} seg_10;
struct {
uint8_t com7:1, //symbol_P3 小数点:decimal point
com6:1, //symbol_digit4_7bit
com5:1,
com4:1,
com3:1,
com2:1,
com1:1,
com0:1;
} seg_11;
struct {
uint8_t com7:1, //symbol_P2 小数点:decimal point
com6:1, //symbol_digit3_7bit
com5:1,
com4:1,
com3:1,
com2:1,
com1:1,
com0:1;
} seg_12;
struct {
uint8_t com7:1, //symbol_P1 小数点:decimal point
com6:1, //symbol_digit2_7bit
com5:1,
com4:1,
com3:1,
com2:1,
com1:1,
com0:1;
} seg_13;
struct {
uint8_t com7:1, //symbol_c
com6:1, //symbol_b bc
com5:1, //symbol_a
com4:1, //symbol_b ab
com3:1, //symbol_c
com2:1, //symbol_a va
com1:1, //none
com0:1; //symbol_P5_1 第一个冒号上面的点,point_5
} seg_14;
}display_ram_bitmap;
/* COM value of digit 0 ~ 9
#define NUM_0 (1<<0)|(1<<1)|(1<<2)|(1<<4)|(1<<5)|(1<<6) //1110111 0x77
#define NUM_1 (1<<1)|(1<<4) //0010010 0x12
#define NUM_2 (1<<0)|(1<<1)|(1<<6)|(1<<5)|(1<<3) //1101011 0x6b
#define NUM_3 (1<<0)|(1<<1)|(1<<3)|(1<<4)|(1<<6) //1011011 0x5b
#define NUM_4 (1<<1)|(1<<4)|(1<<3)|(1<<2) //0011110 0x1e
#define NUM_5 (1<<0)|(1<<2)|(1<<3)|(1<<4)|(1<<6) //1011101 0x5d
#define NUM_6 (1<<0)|(1<<2)|(1<<3)|(1<<4)|(1<<6)|(1<<5) //1111101 0x7d
#define NUM_7 (1<<0)|(1<<1)|(1<<4) //0010011 0x13
#define NUM_8 (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6) //1111111 0x7f
#define NUM_9 (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<6) //1011111 0x5f
*/
}display_bitmap;
/* The upper app callback function
* used to get the pressed key, reference HT16K23_K0_XXX.
*/
typedef uint8_t(* iot_lcd_key_handle_cb)(uint8_t which_key);
/*
@brief iot_lcd_key_handle_register() - register lcd key handle callback func.
@param: keycb the lcd key handle callback func.
return: ERR_OK:success.
* ERR_FAIL:failed.
*/
uint8_t iot_lcd_key_handle_register(iot_lcd_key_handle_cb keycb);
/*
@brief lcd_init() - lcd i2c init, open lcd, clear screen.
return: ERR_OK:success.
* ERR_FAIL:failed.
*/
uint8_t iot_lcd_init();
/*
@brief iot_lcd_int_init() - init interrupt
return: ERR_OK:success.
* ERR_FAIL:failed.
*/
uint8_t iot_lcd_int_init();
/*
@brief lcd_stand_by_set() - set system mode to standby
return: ERR_OK:success.
* ERR_FAIL:failed.
*/
uint8_t iot_lcd_set_standby();
/*
@brief iot_lcd_set_weakup() - set system mode to normal working.
return: ERR_OK:success.
* ERR_FAIL:failed.
*/
uint8_t iot_lcd_set_weakup();
/*
@brief iot_lcd_get_status() - get lcd work status, normal or standy.
return: reference HT16K23_STAT_XXX.
*/
uint8_t iot_lcd_get_status();
/*
@brief lcd_clear_screen() - clear lcd screen
return: ERR_OK:success.
* ERR_FAIL:failed.
*/
uint8_t iot_lcd_clear_screen();
/*
@brief iot_lcd_get_display_data() - query display status.
@param: display_buf the buffer that save display ram data.
return: ERR_OK:success.
* ERR_FAIL:failed.
*/
uint8_t iot_lcd_get_display_data(display_bitmap *display_buf);
/*
@brief iot_lcd_set_display_data() - set display data.
@param: display_data data that set to the display memory.
@param: data_len the length of the display data.
return: ERR_OK:success.
* ERR_FAIL:failed.
*/
uint8_t iot_lcd_set_display_data(display_bitmap *display_data);
/*
@brief iot_poll_read_key_data() - poll read ram key data
If enable interrupt,when interrupt triggered will call it.
otherwise upper-app polling call is required
* @return which key was pressed.
* ERR_FAIL: something error.
*/
uint8_t iot_poll_read_key_data();
#ifdef __cplusplus
}
#endif
#endif //IOT_LED_H