sggt/App/APP_WU/Inc/apps_gather.h

298 lines
11 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @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 <string.h>
#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~356行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);
//初始化打包
void my_inits_gather(void);
#endif