/* * @Author: wangxujie wangxujie@wuxismart.com * @Date: 2025-03-10 15:05:20 * @LastEditors: wangxujie wangxujie@wuxismart.com * @LastEditTime: 2025-08-01 10:36:24 * @FilePath: \signal_generator\User\driver\uart_lcd.h * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ #ifndef __UART_LCD_H__ #define __UART_LCD_H__ #include "main.h" #define LCD_CMD_HEAD 0xEE // LCD指令帧头 #define LCD_CMD_TYPE 0xB1 // LCD指令类型,对控件操作基本都为0xB1,具体查询手册 #define LCD_CMD_CTRL_TYPE_SWITCH_SCREEN 0x00 // 切换屏幕命令 #define LCD_CMD_CTRL_TYPE_SET_BUTTON 0x10 // 设置按钮状态命令 #define LCD_CMD_CTRL_TYPE_SET_TXT 0x10 // 设置文本命令 #define LCD_CMD_CTRL_TYPE_SET_SLIDERVALUE 0x10 // 设置滑块值命令 #define LCD_CMD_CTRL_TYPE_MAKE_CURVE 0x32 // 绘制曲线命令 #define LCD_CMD_TAIL 0xFFFCFFFF #define LCD_SCREEN_ID_CRUUENT 0x00 // 电流输出界面ID #define LCD_SCREEN_ID_CURVE 0x01 // 绘制曲线界面ID #define LCD_CTRL_ID_BUTTON1 0x01 // 按钮控件ID #define LCD_CTRL_ID_BUTTON2 0x02 // 按钮控件ID #define LCD_CTRL_ID_BUTTON3 0x03 // 按钮控件ID #define LCD_CTRL_ID_BUTTON4 0x01 // 按钮控件ID #define LCD_CTRL_ID_BUTTON5 0x02 // 按钮控件ID #define LCD_CTRL_ID_TXT1 0x05 // 文本控件ID #define LCD_CTRL_ID_TXT2 0x06 // 文本控件ID #define LCD_CTRL_ID_TXT3 0x07 // 文本控件ID #define LCD_CTRL_ID_SLIDERVALUE1 0x04 // 滑块控件ID #define LCD_CTRL_ID_SLIDERVALUE2 0x05 // 滑块控件ID #define LCD_CTRL_ID_MAKE_CURVE 0x0E // 曲线控件ID #define LCD_CMD_SET_BUTTON_LEN 0x0C // 设置按钮状态命令长度 #pragma pack(1) typedef struct { uint8_t cmd_head; // 帧头 uint8_t cmd_type; // 命令类型 uint8_t cmd_ctrl_type; // 控制类型 uint16_t cmd_screen_id; // 画面ID uint16_t cmd_ctrl_id; // 控件ID uint8_t cmd_curve_channel; // 曲线通道 uint16_t cmd_data_len; // 数据长度 uint8_t cmd_data[256]; // 数据内容 uint32_t cmd_tail; // 帧尾 } lcd_makecurve_t; // lcd绘制曲线结构体 #pragma pack() extern lcd_makecurve_t lcd_makecurve_data; #pragma pack(1) typedef struct { uint8_t cmd_head; // 帧头 uint8_t cmd_type; // 命令类型 uint8_t cmd_ctrl_type; // 控制类型 uint16_t cmd_screen_id; // 画面ID uint16_t cmd_ctrl_id; // 控件ID uint8_t cmd_button_status; // 按钮状态 uint32_t cmd_tail; // 帧尾 } lcd_set_button_t; // lcd设置按钮状态结构体 #pragma pack() extern lcd_set_button_t lcd_set_button1_data; extern lcd_set_button_t lcd_set_button2_data; extern lcd_set_button_t lcd_set_button3_data; extern lcd_set_button_t lcd_set_button4_data; extern lcd_set_button_t lcd_set_button5_data; #pragma pack(1) typedef struct { uint8_t cmd_head; // 帧头 uint8_t cmd_type; // 命令类型 uint8_t cmd_ctrl_type; // 控制类型 uint16_t cmd_screen_id; // 画面ID uint16_t cmd_ctrl_id; // 控件ID float cmd_txt_data; // 文本内容,应该为字符串形式且长度不定,当前项目中只需要上传浮点,需要浮点转ASCII码 uint32_t cmd_tail; // 帧尾 } lcd_set_txt_t; // lcd设置按钮状态结构体 #pragma pack() extern lcd_set_txt_t lcd_set_txt1_data; extern lcd_set_txt_t lcd_set_txt2_data; extern lcd_set_txt_t lcd_set_txt3_data; #pragma pack(1) typedef struct { uint8_t cmd_head; // 帧头 uint8_t cmd_type; // 命令类型 uint8_t cmd_ctrl_type; // 控制类型 uint16_t cmd_screen_id; // 画面ID uint16_t cmd_ctrl_id; // 控件ID uint32_t cmd_slidervalue; // 滑块数值 uint32_t cmd_tail; // 帧尾 } lcd_set_slidervalue_t; // lcd设置滑块结构体 #pragma pack(1) extern lcd_set_slidervalue_t lcd_set_slidervalue1_data; extern lcd_set_slidervalue_t lcd_set_slidervalue2_data; #pragma pack(1) typedef struct { uint8_t cmd_head; // 帧头 uint8_t cmd_type; // 命令类型 uint8_t cmd_ctrl_type; // 控制类型 uint16_t cmd_screen_id; // 画面ID uint32_t cmd_tail; // 帧尾 } lcd_switchscreen_t; // 切换画面 #pragma pack() extern lcd_switchscreen_t lcd_switchscreen_data; typedef struct { uint8_t page_num; uint8_t current_out_channel; // 当前输出通道 uint32_t current_value[2]; uint8_t lcd_flag; } uart_lcd_t; extern uart_lcd_t uart_lcd_state; typedef struct { uint8_t confirm_key_flag; uint8_t confirm_key_flag_last; int direction; int encode_num_last; int encode_num; } ec11_t; extern ec11_t ec11_data; void uart_lcd_draw_ipaddr(void); void uart_lcd_init(void); void uart_lcd_current_out(uint8_t channel); void uart_lcd_current_out_channel_switch(uint8_t channel); void uart_lcd_page_switch(uint8_t page); void uart_lcd_ecll_control_current_out(void); void uart_lcd_ec11_control_current(void); void uart_lcd_makecurvet(lcd_makecurve_t *makecurve_data); void uart_lcd_refresh_screen(void); void uart_lcd_makecurve_test(void); #endif