diff --git a/source/app/app_config.h b/source/app/app_config.h index ddbeccd..6ac01d6 100644 --- a/source/app/app_config.h +++ b/source/app/app_config.h @@ -26,6 +26,9 @@ #define KG 0 //0 KG; 1 磅 #define lb 1 +#define Chinese 0 //0 Chinese 1 English +#define English 1 + #define beep_on 1 //1 开启,0 关闭 #define beep_off 0 @@ -211,6 +214,9 @@ typedef struct global_register //单位 U8 danwei; + //单位 + U8 Language; + //蜂鸣器 U8 beep; diff --git a/source/app/task_screen.c b/source/app/task_screen.c index 810034d..3989e02 100644 --- a/source/app/task_screen.c +++ b/source/app/task_screen.c @@ -8,7 +8,7 @@ S_TASK_SCREEN _s_task_screen; -// 实时重量 +// 实时重量 A5 5A 07 82 02 A1 00 C8 0D D2 SCRSetValPkg scrSetValPkg = { 0xA5, 0x5A, //帧头 @@ -79,6 +79,82 @@ SCRControlPkg scrBeepOnPkg = { 0x70, 0xDE, // CRC }; +// A5 5A 08 82 07 A0 01 00 00 D8 39 清除图标0 +SCReturnPkg scrPkgIcon0ClearPkg = { + 0xA5, 0x5A, + 0x08, //指令字节长度(不含帧头) + 0x82, //指令 + 0x07, 0xA0, //变量存储地址 + 0x01, //数据字长度 + 0x00,0x00, // 数据内容 + 0xD8,0x39, // CRC +}; + +// A5 5A 08 82 07 A1 01 00 00 D9 C5 清除图标1 +SCReturnPkg scrPkgIcon1ClearPkg = { + 0xA5, 0x5A, + 0x08, //指令字节长度(不含帧头) + 0x82, //指令 + 0x07, 0xA1, //变量存储地址 + 0x01, //数据字长度 + 0x00,0x00, // 数据内容 + 0xD9,0xC5, // CRC +}; + +// A5 5A 08 82 07 A2 01 00 00 D9 81 清除图标2 +SCReturnPkg scrPkgIcon2ClearPkg = { + 0xA5, 0x5A, + 0x08, //指令字节长度(不含帧头) + 0x82, //指令 + 0x07, 0xA2, //变量存储地址 + 0x01, //数据字长度 + 0x00,0x00, // 数据内容 + 0xD9,0x81, // CRC +}; + +// A5 5A 08 82 06 D9 01 00 00 FC A5 清除图标确定 +SCReturnPkg scrPkgIconYClearPkg = { + 0xA5, 0x5A, + 0x08, //指令字节长度(不含帧头) + 0x82, //指令 + 0x06, 0xD9, //变量存储地址 + 0x01, //数据字长度 + 0x00,0x00, // 数据内容 + 0xFC,0xA5, // CRC +}; + +// A5 5A 08 82 06 D3 01 00 00 FF 7D 清除报警图标 +SCReturnPkg scrPkgAlarmClearPkg = { + 0xA5, 0x5A, + 0x08, //指令字节长度(不含帧头) + 0x82, //指令 + 0x06, 0xD3, //变量存储地址 + 0x01, //数据字长度 + 0x00,0x00, // 数据内容 + 0xFF,0x7D, // CRC +}; + +// A5 5A 08 82 06 D7 01 00 00 FE 4D 切换单位 +SCReturnPkg scrPkgUnitSwitchPkg = { + 0xA5, 0x5A, + 0x08, //指令字节长度(不含帧头) + 0x82, //指令 + 0x06, 0xD7, //变量存储地址 + 0x01, //数据字长度 + 0x00,0x00, // 数据内容 + 0xFE,0x4D, // CRC +}; + +// A5 5A 08 82 06 D6 01 00 00 FF B1 切换中英文 +SCReturnPkg scrPkgLanguageSwitchPkg = { + 0xA5, 0x5A, + 0x08, //指令字节长度(不含帧头) + 0x82, //指令 + 0x06, 0xD6, //变量存储地址 + 0x01, //数据字长度 + 0x00,0x00, // 数据内容 + 0xFF,0xB1, // CRC +}; //============================================= void L3_task_screen_init(void) { @@ -159,8 +235,10 @@ void constructor_scr_pkg() scrSetValPkg.weight_kgx100[0] = (R.weight.kgx10_out * 22) >> 8 & 0xFF; scrSetValPkg.weight_kgx100[1] = (R.weight.kgx10_out * 22) >> 0 & 0xFF; } - // L0_uart1_str("scrSetValPkg.buf.dl: "); - // L0_uart1_us(R.dl); + + // L0_uart1_str("scrSetValPkg.weight_kgx100= "); + // L0_uart1_uchex(scrSetValPkg.weight_kgx100[0]); + // L0_uart1_uchex(scrSetValPkg.weight_kgx100[1]); // L0_uart1_0d0a(); // scrSetValPkg.buf.dl[0] = R.dl >> 8 & 0xFF; @@ -200,12 +278,21 @@ void constructor_weightsave_pkg() scrSaveValPkg.crc[0] = CRC >> 8; } -// 屏幕回传协议解析 A55A 07 83 0001 0222 0000 +// 屏幕回传协议解析 A55A 07 83 0000 01 0222 0000 +// A55A 08 83 06D2 01 0001 3E90 void parse_screen_pkg() { SCReturnPkg *p = (SCReturnPkg *) ts_Urec[D_UART1].sp; // p->ocr = p->buf[p->num[0] << 8 | p->num[1]]; - L1_uart1_Array((U8 *)&p, sizeof(p)); + L0_uart1_str("ts_Urec[D_UART1].sp = "); + L1_uart1_Array(p, sizeof(*p)); + L0_uart1_0d0a(); + // L0_uart1_str("sizeof(*p) = "); + // L0_uart1_ushex(sizeof(*p)); + // L0_uart1_0d0a(); + // L0_uart1_str("sizeof(&p) = "); + // L0_uart1_ushex(sizeof(&p)); + if(p->head[0] == 0xA5 && p->head[1] == 0x5A/*count_ocr()*/) { if(p->cmd == 0x83) @@ -221,34 +308,61 @@ void parse_screen_pkg() case 0xD0://菜单 break; case 0xD1://Home + if(p->Data[1] == 1) + { + //返回键值为1时,代表从校准界面返回,清除图标 + L1_uart1_Array((U8 *)&scrPkgIcon0ClearPkg, sizeof(scrPkgIcon0ClearPkg)); + L1_uart1_Array((U8 *)&scrPkgIcon1ClearPkg, sizeof(scrPkgIcon1ClearPkg)); + L1_uart1_Array((U8 *)&scrPkgIcon2ClearPkg, sizeof(scrPkgIcon2ClearPkg)); + L1_uart1_Array((U8 *)&scrPkgIconYClearPkg, sizeof(scrPkgIconYClearPkg)); + } break; case 0xD2://清零 - tst_weight.kgx10_zero = tst_weight.kgx10; + if(p->Data[1] == 1) + { + tst_weight.kgx10_zero = tst_weight.kgx10; + } break; - case 0xD3://离床报警 + case 0xD3://离床报警 if(R.LeaveForbid_flag != LeaveForbid_OPEN) { - R.LeaveForbid_flag = LeaveForbid_OPEN;//按键按下时,就置标志位R.LeaveForbid_flag == LeaveForbid_OPEN和获取参考点位的重量。 - R.Weight_Ref = tst_weight.kgx10; // 参考重量 weight_ref = 当前重量 + R.LeaveForbid_flag = LeaveForbid_OPEN; //按键按下时,就置标志位R.LeaveForbid_flag == LeaveForbid_OPEN和获取参考点位的重量。 + R.Weight_Ref = tst_weight.kgx10; //参考重量 weight_ref = 当前重量 L0_uart1_str("LeaveForbid_OPEN!!!"); L0_uart1_0d0a(); } else if (R.LeaveForbid_flag == LeaveForbid_OPEN) { - R.LeaveForbid_flag = LeaveForbid_OFF; + R.LeaveForbid_flag = LeaveForbid_OFF; + //A5 5A 08 83 06 D3 01 00 00 FE AC手动解除报警时,清除图标 + L1_uart1_Array((U8 *)&scrPkgAlarmClearPkg, sizeof(scrPkgAlarmClearPkg)); } break; case 0xD4://保存 - screen_save_push(tst_weight.kgx10);// register1 = tst_weight.kgx10; + if(p->Data[1] == 1) + { + // screen_save_push(tst_weight.kgx10); + screen_save_push(tst_weight.kgx10_out); + } break; case 0xD5://校准菜单按钮 // scrSetValPkg.buf.ui[1] = p->Data[1]; break; case 0xD6://语言切换 - // scrSetValPkg.buf.language[1] = p->Data[1]; + R.Language = (R.Language == Chinese)? English : Chinese; + if( R.Language == Chinese ) + { + // 切换回Chinese图标 + L1_uart1_Array((U8 *)&scrPkgLanguageSwitchPkg, sizeof(scrPkgLanguageSwitchPkg)); + } break; case 0xD7://重量单位切换 R.danwei = (R.danwei == KG)? lb : KG; + if( R.danwei == KG ) + { + // 切换回KG单位图标 + L1_uart1_Array((U8 *)&scrPkgUnitSwitchPkg, sizeof(scrPkgUnitSwitchPkg)); + } break; case 0xD8://查看历史数据 // 1.从eeprom中读出数组 @@ -272,7 +386,7 @@ void parse_screen_pkg() L4_WPoint_out(); // 写入IAP L3_R_2_S(); - L0_Iap_Program_array(D_EEP_BASE,D_struct2U8(S),D_S_LEN); + L0_Iap_Program_array(D_EEP_BASE,D_struct2U8(S),D_S_LEN); break; default: break; @@ -285,27 +399,27 @@ void parse_screen_pkg() { case 0xA0://校准点 R.calib_index = 0; - // L0_uart1_str("R.calib_index ="); - // L0_uart1_uchex(R.calib_index); - // L0_uart1_0d0a(); + L0_uart1_str("R.calib_index ="); + L0_uart1_uchex(R.calib_index); + L0_uart1_0d0a(); break; case 0xA1://校准点 R.calib_index = 1; - // L0_uart1_str("R.calib_index ="); - // L0_uart1_uchex(R.calib_index); - // L0_uart1_0d0a(); + L0_uart1_str("R.calib_index ="); + L0_uart1_uchex(R.calib_index); + L0_uart1_0d0a(); break; case 0xA2://校准点 R.calib_index = 2; - // L0_uart1_str("R.calib_index ="); - // L0_uart1_uchex(R.calib_index); - // L0_uart1_0d0a(); + L0_uart1_str("R.calib_index ="); + L0_uart1_uchex(R.calib_index); + L0_uart1_0d0a(); break; case 0xA3://校准体重 R.calib_kg_x100 = (U16)p->Data[0] << 8 | p->Data[1]; - // L0_uart1_str("R.calib_kg_x100 = "); - // L0_uart1_ushex(R.calib_kg_x100); - // L0_uart1_0d0a(); + L0_uart1_str("R.calib_kg_x100 = "); + L0_uart1_ushex(R.calib_kg_x100); + L0_uart1_0d0a(); break; default: break; @@ -344,7 +458,7 @@ U16 CRC_16(U8 *pMsg, U16 Len) void ScreenPingOff_judge() { U32 Nowtime = D_sys_now; - if( Nowtime - R.ScrTouch_time > D_COUNT_JIFFIES(30000)) //180000 180秒 30000 30秒 + if( Nowtime - R.ScrTouch_time > D_COUNT_JIFFIES(60000)) //180000 180秒 30000 30秒 60000 60秒 { R.ScrTouch_flag = 0; R.power_mode = POWER_LOW;