/**************************************************************************** * * 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