/* * @Author: wujunchao wujunchao@wuxismart.com * @Date: 2024-12-27 11:50:56 * @LastEditors: wujunchao wujunchao@wuxismart.com * @LastEditTime: 2025-03-20 09:47:34 * @FilePath: \signal_generator\App\APP_WU\Src\apps_gather.c * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ #include "apps_gather.h" //用于头文件打包汇总,函数声明和变量定义 // lv_conf.h { line:282->CPU&FPS; line:289->MEM used } TABVIEW_DATA tabdata; //设置页面参数初始化 PHYSICAL_QUANTITY VOL[2]; //电压,VOL[0]-V, VOL[1]-mV PHYSICAL_QUANTITY CUR; //电流,mA PHYSICAL_QUANTITY RES; //电阻,Ω PHYSICAL_QUANTITY FRE; //频率,KHz PHYSICAL_QUANTITY TC[8]; //热电偶,共8种 PHYSICAL_QUANTITY RTD; //热电阻 //物理量内容初始化 //底层数据,无法通过按键&菜单修改,用户使用时,仅修改tabdata里的变量 void physical_quantity_init(void) { VOL[0].tag = SIG_VOLTAGE; VOL[0].typ = VOLTAGE_V; VOL[0].low = 0; VOL[0].up = 30; VOL[0].pv = 0; VOL[1].tag = SIG_VOLTAGE; VOL[1].typ = VOLTAGE_MV; VOL[1].low = -2500; VOL[1].up = 2500; VOL[1].pv = 0; CUR.tag = SIG_CURRENT; CUR.typ = CURRENT_MA; CUR.low = 0; CUR.up = 25; CUR.pv = 0; RES.tag = SIG_RESISTANT; RES.typ = RESISTANT_OHM; RES.low = 0; RES.up = 4000; RES.pv = 0; FRE.tag = SIG_FREQUENCE; FRE.typ = FREQUENCE_KHZ; FRE.low = 0; FRE.up = 100; FRE.pv = 0; //热电偶K TC[0].tag = SIG_TC; TC[0].typ = TC_K; TC[0].low = -270; TC[0].up = 1372; TC[0].pv = 0; //热电偶S TC[1].tag = SIG_TC; TC[1].typ = TC_S; TC[1].low = -50; TC[1].up = 1768; TC[1].pv = 0; //热电偶N TC[2].tag = SIG_TC; TC[2].typ = TC_N; TC[2].low = -270; TC[2].up = 1300; TC[2].pv = 0; //热电偶B TC[3].tag = SIG_TC; TC[3].typ = TC_B; TC[3].low = 0; TC[3].up = 1820; TC[3].pv = 0; //热电偶E TC[4].tag = SIG_TC; TC[4].typ = TC_E; TC[4].low = -270; TC[4].up = 1000; TC[4].pv = 0; //热电偶J TC[5].tag = SIG_TC; TC[5].typ = TC_J; TC[5].low = -210; TC[5].up = 1200; TC[5].pv = 0; //热电偶R TC[6].tag = SIG_TC; TC[6].typ = TC_R; TC[6].low = -50; TC[6].up = 1768; TC[6].pv = 0; //热电偶T TC[7].tag = SIG_TC; TC[7].typ = TC_T; TC[7].low = -270; TC[7].up = 400; TC[7].pv = 0; RTD.tag = SIG_RTD; RTD.typ = RTD_DC; RTD.low = -200; RTD.up = 660; RTD.pv = 0; } void screen_run(void) { if(m5data.menu_reset_flag) { menu_reset(); //触发显示内容复位 m5data.menu_reset_flag = 0; return; } if(m5data.scr_init_flag == 0) { scr_init_run(); //播放开机动画 } else { switch (m5data.scr_now) { case SCREEN_MAIN: { scr_main_run(); //主界面显示 key_functions_main(); //主界面的按键功能 } break; case SCREEN_SETTING: { scr_setting_run(); //设置界面 key_functions_setting(); //设置界面的按键功能 } break; default: break; } } } //通道选择与切换 void sig_channel_select(uint8_t io, SIG_FUNCTIONS_TYPE type) { switch (io) { case IO_INPUT: { switch (type) { case VOLTAGE_MV: { mux_signal.channel = CH6_IN_MVOL; } break; case VOLTAGE_V: { mux_signal.channel = CH5_IN_VOL; } break; case CURRENT_MA: { mux_signal.channel = CH7_IN_CUR; } break; case RESISTANT_OHM: {} break; case FREQUENCE_KHZ: { mux_signal.channel = CH8_IN_FRE; } break; case TC_K: { mux_signal.channel = CH9_IN_TC; } break; case TC_S: { mux_signal.channel = CH9_IN_TC; } break; case TC_N: { mux_signal.channel = CH9_IN_TC; } break; case TC_B: { mux_signal.channel = CH9_IN_TC; } break; case TC_E: { mux_signal.channel = CH9_IN_TC; } break; case TC_J: { mux_signal.channel = CH9_IN_TC; } break; case TC_R: { mux_signal.channel = CH9_IN_TC; } break; case TC_T: { mux_signal.channel = CH9_IN_TC; } break; case RTD_DC: { mux_signal.channel = CH10_IN_RTD; } break; default: break; } } break; case IO_OUTPUT: { switch (type) { case VOLTAGE_MV: { mux_signal.channel = CH1_OUT_VOL_MV; } break; case VOLTAGE_V: { mux_signal.channel = CH0_OUT_VOL_V; } break; case CURRENT_MA: { mux_signal.channel = CH2_OUT_CUR; } break; case RESISTANT_OHM: { mux_signal.channel = CH4_OUT_RES; } break; case FREQUENCE_KHZ: { mux_signal.channel = CH3_OUT_FRE; } break; case TC_K: { } break; case TC_S: { } break; case TC_N: { } break; case TC_B: { } break; case TC_E: { } break; case TC_J: { } break; case TC_R: { } break; case TC_T: { } break; case RTD_DC: { } break; default: break; } } break; default: break; } } //更新设定值(根据ON\OFF状态) void sig_sv_update(void) { switch (m5data.io_on2off) { case IO_ON: { mux_signal.data_sv = real2mux( get_output_value() ); } break; case IO_OFF: { mux_signal.data_sv = 0; } break; default: break; } } //数据转换,mux_signal.pv -> real_value float32 mux2real(float32 mux_pv) { float32 result = 0; SIG_FUNCTIONS mode; SIG_FUNCTIONS_TYPE type; switch (m5data.io_mode) { case IO_INPUT: { mode = m5data.input_mode; type = m5data.input_mode_type; } break; case IO_OUTPUT: { mode = m5data.output_mode; type = m5data.output_mode_type; } break; default: break; } switch (mode) { //电压 case SIG_VOLTAGE: { switch (type) { //[-2.5, 2.5V] -> [-2500mv, 2500mv] case VOLTAGE_MV: { result = mux_pv * 1000; } break; //1:1 case VOLTAGE_V: { result = mux_pv; } break; default: break; } } break; //电流 case SIG_CURRENT: { switch (type) { //1:1 case CURRENT_MA: { result = mux_pv; } break; default: break; } } break; //电阻 case SIG_RESISTANT: { switch (type) { case RESISTANT_OHM: { result = mux_pv; } break; default: break; } } break; //频率 case SIG_FREQUENCE: { switch (type) { case FREQUENCE_KHZ: { //Hz -> KHz result = mux_pv / 1000; } break; default: break; } } break; //热电偶 case SIG_TC: { switch (type) { case TC_K: { result = mux_pv; } break; case TC_N: { result = mux_pv; } break; case TC_S: { result = mux_pv; } break; default: break; } } break; //热电阻 case SIG_RTD: { switch (type) { case RTD_DC: { result = mux_pv; } break; default: break; } } break; default: break; } return result; } //数据转换,real_value -> mux_signal.sv float32 real2mux(float32 real_value) { float32 result = 0; SIG_FUNCTIONS mode; SIG_FUNCTIONS_TYPE type; switch (m5data.io_mode) { case IO_INPUT: { mode = m5data.input_mode; type = m5data.input_mode_type; } break; case IO_OUTPUT: { mode = m5data.output_mode; type = m5data.output_mode_type; } break; default: break; } switch (mode) { //电压 case SIG_VOLTAGE: { switch (type) { //[-2500mV, 2500mV] -> [-2.5V, 2.5V] case VOLTAGE_MV: { result = real_value / (float32)1000; } break; //1:1 case VOLTAGE_V: { result = real_value; } break; default: break; } } break; //电流 case SIG_CURRENT: { switch (type) { //1:1 case CURRENT_MA: { result = real_value; } break; default: break; } } break; //电阻 case SIG_RESISTANT: { switch (type) { case RESISTANT_OHM: { result = real_value; } break; default: break; } } break; //频率 case SIG_FREQUENCE: { switch (type) { case FREQUENCE_KHZ: { //KHz -> Hz result = real_value * 1000; } break; default: break; } } break; //热电偶 case SIG_TC: { switch (type) { case TC_K: { result = real_value; } break; case TC_N: { result = real_value; } break; case TC_S: { result = real_value; } break; default: break; } } break; //热电阻 case SIG_RTD: { switch (type) { case RTD_DC: { result = real_value; } break; default: break; } } break; default: break; } return result; } //计算a的b次方 float32 my_power(int a, int b) { if(a == 0) { return 0; } if(b == 0) { return 1; } float32 result = 1; if( b > 0 ) { for(uint8_t i = 0; i < b; i++) { result *= a; } } else { for(uint8_t i = 0; i < (-b); i++) { result /= (float32)a; } } return result; }