/* * @Author: wujunchao wujunchao@wuxismart.com * @Date: 2024-12-27 11:51:06 * @LastEditors: wujunchao wujunchao@wuxismart.com * @LastEditTime: 2025-04-01 11:42:55 * @FilePath: \signal_generator\App\APP_WU\Inc\apps_gather.h * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ #ifndef __APPS_GATHER_H #define __APPS_GATHER_H //provided by ZhangXiaoMing //{ #include "main.h" #include "tm1650.h" #include "mux_signal.h" #include "JLX240-00301-BN.h" #include #include "gpio.h" #include "modbus.h" #include "ble.h" #include "hart.h" #include "rn7302.h" #include "SIG24130.h" #include "FreeRTOS.h" #include "task.h" //} //LVGL #include "lvgl.h" // 它为整个LVGL提供了更完整的头文件引用 #include "lv_port_disp.h" // LVGL的显示 #include "gui_guider.h" // Gui Guider 生成的界面和控件的声明 #include "events_init.h" // Gui Guider 生成的初始化事件、回调函数 extern lv_ui guider_ui; extern const lv_img_dsc_t * screen_main_animimg_battery_imgs[6]; extern const lv_img_dsc_t * screen_main_ani_in_0_imgs[11]; extern const lv_img_dsc_t * screen_main_ani_in_1_imgs[11]; extern const lv_img_dsc_t * screen_main_ani_in_2_imgs[11]; extern const lv_img_dsc_t * screen_main_ani_in_3_imgs[11]; extern const lv_img_dsc_t * screen_main_ani_in_4_imgs[11]; extern const lv_img_dsc_t * screen_main_ani_in_5_imgs[11]; extern const lv_img_dsc_t * screen_main_ani_in_6_imgs[11]; extern const lv_img_dsc_t * screen_main_ani_out_0_imgs[11]; extern const lv_img_dsc_t * screen_main_ani_out_1_imgs[11]; extern const lv_img_dsc_t * screen_main_ani_out_2_imgs[11]; extern const lv_img_dsc_t * screen_main_ani_out_3_imgs[11]; extern const lv_img_dsc_t * screen_main_ani_out_4_imgs[11]; extern const lv_img_dsc_t * screen_main_ani_out_5_imgs[11]; extern const lv_img_dsc_t * screen_main_ani_out_6_imgs[11]; extern const lv_img_dsc_t * screen_main_ani_in_sign_imgs[3]; extern const lv_img_dsc_t * screen_main_ani_out_sign_imgs[3]; //written bt WuJunChao #include "timer.h" #include "stdio.h" #include "ip5310_i2c.h" #include "eeprom_spi.h" #include "stdlib.h" //#include "lv_demo_benchmark.h" typedef enum { SIG_VOLTAGE = 0, //电压 SIG_CURRENT, //电流 SIG_RESISTANT, //电阻 SIG_FREQUENCE, //频率 SIG_TC, //热电偶 SIG_RTD //热电阻 }SIG_FUNCTIONS; typedef enum { VOLTAGE_MV = 0, //电压mV VOLTAGE_V, //电压V CURRENT_MA, //电流mA RESISTANT_OHM, //电阻Ω FREQUENCE_KHZ, //频率KHz TC_K, //热电偶K TC_S, //热电偶S TC_N, //热电偶N TC_B, //热电偶B TC_E, //热电偶E TC_J, //热电偶J TC_R, //热电偶R TC_T, //热电偶T RTD_DC //热电阻摄氏度 }SIG_FUNCTIONS_TYPE; typedef struct { //general uint8_t scr_now; //当前屏幕,通过按键切换, [0->init, 1->main, 2->setting] int tick_prv; //前一个时刻 int tick_cur; //当前时刻 uint8_t menu_reset_flag; //复位标志,在keil的debug中手动写入 //screen_init uint8_t scr_init_flag; //初始界面标志,是否播放过开机动画 //screen_main uint8_t key_main_enable; //按键功能使能标志 uint8_t runtime_seconds; uint8_t runtime_minutes; uint8_t runtime_hours; char runtime_show[16]; //存放运行时间转化得到的字符串 uint8_t battery_cnt; //电池计数 uint8_t io_cursor; //当前游标位置, [0000,000], 0~6整数表示7个位置 uint8_t io_cursor_prv; //前一时刻的游标位置 uint8_t i_numbers[7]; //实时显示的字符,输入 uint8_t o_numbers[7]; //实时显示的字符,输出 uint8_t io_on2off; //ON & OFF uint8_t io_mode; //当前工作模式,0输入,1输出 SIG_FUNCTIONS input_mode; //当前的输入模式 SIG_FUNCTIONS_TYPE input_mode_type; //当前输入模式的类型 SIG_FUNCTIONS output_mode; //当前的输出模式 SIG_FUNCTIONS_TYPE output_mode_type; //当前输出模式的类型 #if NIXIE_CUBE_ENABLE uint8_t twk_flag; //闪烁使能标志 uint8_t twk_flip; //0-1变量,用于控制显示内容翻转(显示/不显示) uint8_t twk_cnt; //闪烁计数,计数达到上限后闪烁停止 #endif uint8_t overflow_flag_up; //向上溢出标志 uint8_t overflow_flag_low; //向下溢出标志 uint8_t sign_flag_in; //输入信号符号位标志,0->不显示,1->显示负号 uint8_t sign_flag_out; //输出信号符号位标志,0->不显示,1->显示负号 //screen_setting uint8_t key_setting_enable; //按键功能使能标志 }MENU_DATA; typedef struct { //lv_chart_set_range(ui->screen_main_chart_1, LV_CHART_AXIS_PRIMARY_Y, y_pri_low, y_pri_up); uint8_t y_pri_up; //纵轴(主)上限,一般不做修改 uint8_t y_pri_low; //纵轴(主)下限,一般不做修改 int16_t yreal_pri_up; //实际值y上限 int16_t yreal_pri_low; //实际值y下限 //lv_chart_set_range(ui->screen_main_chart_1, LV_CHART_AXIS_SECONDARY_Y, y_scd_low, y_scd_up); uint8_t y_scd_up; //纵轴(副)上限,一般不做修改 uint8_t y_scd_low; //纵轴(副)下限,一般不做修改 int16_t yreal_scd_up; //实际值y上限 int16_t yreal_scd_low; //实际值y下限 //lv_chart_set_next_value(ui->screen_main_chart_1, ui->screen_main_chart_1_0, 1); uint8_t pri_wait_tick; //主轴等待滴答数,一段时间没变化后不更新曲线 uint8_t y_pri_value; //0号曲线的下一个点,主y轴 uint8_t y_pri_value_prv; //前一时刻的点,用于判断是否需要更新内容 float32 yreal_pri_value; //0号曲线的下一个实际值 //lv_chart_set_next_value(ui->screen_main_chart_1, ui->screen_main_chart_1_1, 1); uint8_t scd_wait_tick; //副轴等待滴答数,一段时间没变化后不更新曲线 uint8_t y_scd_value; //1号曲线的下一个点,副y轴 uint8_t y_scd_value_prv; //前一时刻的点,用于判断是否需要更新内容 float32 yreal_scd_value; //1号曲线的下一个实际值 float32 yreal_scd_value_prv; //前一时刻的点,用于判断是否需要更新内容 }PLOT_DATA; typedef struct { SIG_FUNCTIONS tag; //物理量标签 SIG_FUNCTIONS_TYPE typ; //类型 int16_t up; //上限 int16_t low; //下限 float32 pv; //当前值 }PHYSICAL_QUANTITY; typedef struct { uint8_t item_cursor; //选项卡游标,后续根据实际需求进行宏定义 uint8_t item_cursor_prv; //前一时刻的选项卡游标 uint8_t item_page; //当前页 uint8_t item_page_prv; //前一页 uint8_t content_cursor; //选项内部的游标, 最大范围0~35(6行6列,从左至右,从上至下),99代表未选中。 uint8_t content_cursor_prv; //前一时刻的内部游标 uint8_t content_focus; //内容焦点 //ITEMS_0 SIG_FUNCTIONS_TYPE item0_page0_vunit; int16_t item0_page0_vup[2]; int16_t item0_page0_vlow[2]; uint8_t item0_page0_cup; uint8_t item0_page0_clow; int16_t item0_page0_rup; int16_t item0_page1_rlow; uint8_t item0_page1_fup; uint8_t item0_page1_flow; SIG_FUNCTIONS_TYPE item0_page1_TCtype; int16_t item0_page1_TCup[8]; int16_t item0_page1_TClow[8]; int16_t item0_page2_RTDup; int16_t item0_page2_RTDlow; //ITEMS_1 uint16_t item1_page0_sample_interval; //采样间隔ms uint8_t item1_page0_plot_num; //曲线上显示的点数 int8_t item1_page0_color_input; //输出曲线及其图例的颜色 int8_t item1_page0_color_output; //输出曲线及其图例的颜色 //ITEMS_2 uint8_t item2_page0_saveflag; //[0, 1,2 ] -> [未保存,保存中,已保存] float32 input_log_temp; //无纸化记录,中转,存入eeprom float32 output_log_temp; //无纸化记录,中转,存入eeprom uint8_t item2_page0_resetflag; //[0, 1,2 ] -> [未复位,复位中,已复位] //ITEMS_3 uint8_t item3_page0_lightflag; //照明状态标志,0熄灭,1开启 uint8_t item3_page0_language; //语言类型 }TABVIEW_DATA; //避免无法定位上面自定义的枚举和结构体 #include "app_screen_main.h" #include "app_screen_setting.h" #include "scr_setting_item_text.h" #include "scr_setting_item_value.h" extern MENU_DATA m5data; //界面参数初始化 extern PLOT_DATA pltdata; //chart绘图参数初始化 extern TABVIEW_DATA tabdata; //设置页面参数初始化 extern PHYSICAL_QUANTITY VOL[2]; //电压,VOL[0]-V, VOL[1]-mV extern PHYSICAL_QUANTITY CUR; //电流,mA extern PHYSICAL_QUANTITY RES; //电阻,Ω extern PHYSICAL_QUANTITY FRE; //频率,KHz extern PHYSICAL_QUANTITY TC[8]; //热电偶,共8种 extern PHYSICAL_QUANTITY RTD; //热电阻 extern uint16_t screen_switch_wait; //屏幕切换的等待时间 //按键值 #define KEY_OUT 76 #define KEY_UP 84 #define KEY_MENU 68 #define KEY_IN 78 #define KEY_LEFT 77 #define KEY_OK 85 #define KEY_RIGHT 94 #define KEY_SWITCH 69 #define KEY_SOURCE 111 #define KEY_DOWN 86 #define KEY_BACK 70 //语言 #define MENU_SIMPLYFY_CHINESE 0 #define MENU_ENGLISH 1 //绝对值计算 #define MY_ABS(pa) ( ( (pa) >= 0 )?( (pa) ):( 0 - (pa) ) ) //模拟正式产品,实现基本功能 void screen_run(void); //计算a的b次方 float32 my_power(int a, int b); //物理量内容初始化 void physical_quantity_init(void); //热电偶数据初始化 void TC_init(void); //通道选择与切换 void sig_channel_select(uint8_t io, SIG_FUNCTIONS_TYPE type); //更新设定值(根据ON\OFF状态) void sig_sv_update(void); //数据转换,mux_signal.pv -> real_value float32 mux2real(float32 mux_pv); //数据转换,real_value -> mux_signal.sv float32 real2mux(float32 real_value); //数据转换,将输入热电偶电压值转换为实际温度值℃ float32 tcmv2temp(SIG_FUNCTIONS_TYPE type, float32 mv); //数据转换,将需要模拟的温度值℃转化为热电偶对应的mv float32 temp2tcmv(SIG_FUNCTIONS_TYPE type, float32 temp); //数据转换,热电阻阻值 Ω 转化为温度 ℃ float32 ohm2temp(float32 ohm); //数据转换,温度 ℃ 转化为热电阻阻值 Ω float32 temp2ohm(float32 temp); #endif