|
我在主函数里面数据更新之后就切换图片id 来保证我的数字显示不会重叠但是我遇到一个大问题就是我的数据刷新后再切换图片id就会在屏幕上闪的十分厉害有什么办法可以解决么?下面是我的函数 部分 不知道有啥问题 有大佬能指点一二么
//____________________________显示多个数字________________________________// // BCD: 背景颜色显示开关 1=显示 0=不显示 // SymNum: 有无符号数 1=有符号数 0=无符号数 // Dis0: 1= 无效0显示 0= 无效0不显示。 // NDis: 1= 无效0显示为0 0= 无效0显示为空格。 // Size: 字符字号大小 12#/16#/20#/24#/28#/32#/40#/48#/56#/64# // Color: 字符显示颜色 // Bcolor: 字符背景显示颜色 // Num_I: 显示的整数位数, 1-20 // Num_F: 显示的小数位数, 0-20 //(x,y): 变量显示的左上角坐标 // Datas: 多位数据 最多 8 字节 /*******************Num_I+Num_F 之和不能超过 20****************************/ void DWINLCD_ShowXNum(uint8_t BCD, uint8_t SymNum, uint8_t Dis0, uint8_t NDis, uint8_t Size, uint16_t Color, uint16_t Bcolor, uint8_t Num_I, uint8_t Num_F, uint16_t Xs, uint16_t Ys, uint32_t XNum) // 显示多位数字 { uint8_t strlenth = 4; DwinSend_Buff_Size = 21; // 指令数据长度为17(帧头+指令+Mode+数据+帧尾) Data_init(); // 重新更新数组 DWINSend_Buff[DwinSend_Buff_Size - 16 - strlenth] = 0x14; // 显示数字指令 DWINSend_Buff[DwinSend_Buff_Size - 15 - strlenth] = BCD % 2 << 7 | SymNum % 2 << 6 | Dis0 % 2 << 5 | NDis % 2 << 4 | Size; // 显示数字模式指令 DWINSend_Buff[DwinSend_Buff_Size - 14 - strlenth] = Color >> 8; // 数字颜色高8位 DWINSend_Buff[DwinSend_Buff_Size - 13 - strlenth] = Color & 0xFF; // 数字颜色低8位 DWINSend_Buff[DwinSend_Buff_Size - 12 - strlenth] = Bcolor >> 8; // 填充字符背景颜色高8位 DWINSend_Buff[DwinSend_Buff_Size - 11 - strlenth] = Bcolor & 0xFF; // 填充字符背景颜色低8位 if ((Num_I <= 20) & (Num_F <= 20) & ((Num_I + Num_F) <= 20)) // Num_I+Num_F 之和不能超过 20 { DWINSend_Buff[DwinSend_Buff_Size - 10 - strlenth] = Num_I; // 显示的整数位数,0x01-0x14(1-20)。 DWINSend_Buff[DwinSend_Buff_Size - 9 - strlenth] = Num_F; // 显示的小数位数,0x00-0x14(1-20)。 } else { DWINSend_Buff[DwinSend_Buff_Size - 10 - strlenth] = 1; // 显示的整数位数超出规定默认显示1位 DWINSend_Buff[DwinSend_Buff_Size - 9 - strlenth] = 0; // 显示的小数位数超出规定默认不显示 } DWINSend_Buff[DwinSend_Buff_Size - 8 - strlenth] = Xs >> 8; // 数字Xs坐标高八位 DWINSend_Buff[DwinSend_Buff_Size - 7 - strlenth] = Xs & 0xFF; // 数字Xs坐标低八位 DWINSend_Buff[DwinSend_Buff_Size - 6 - strlenth] = Ys >> 8; // 数字Ys坐标高八位 DWINSend_Buff[DwinSend_Buff_Size - 5 - strlenth] = Ys & 0xFF; // 数字Ys坐标低八位 DWINSend_Buff[DwinSend_Buff_Size - strlenth - 4] = XNum >> 24; // 数字高 DWINSend_Buff[DwinSend_Buff_Size - strlenth - 3] = XNum >> 16 & 0xff; // 数字高 DWINSend_Buff[DwinSend_Buff_Size - strlenth - 2] = XNum >> 8 & 0xff; // 数字低 DWINSend_Buff[DwinSend_Buff_Size - strlenth - 1] = XNum & 0xFF; // 数字低 Send_Data(DWINSend_Buff); // 发送数据 } //____________________________显示一个字符/汉字________________________________// // 指令: 帧头+指令+模式+字符颜色+字符背景颜色+字符左上角坐标(Xs,Ys)+字符+帧尾 // CWA: 字符宽度调整(CWA)设置 1=调整 0=不调整。 // BCD: 背景颜色显示(BCD)设置 1=显示 0=不显示。 // Size: 字符字号大小 // Color: 字符显示颜色。 // Bcolor: 字符背景显示颜色。 //(Xs,Ys):文本显示位置左上角坐标 // Strings:要显示的字符。 /******************非 ASCII 字符按照 GB2312 编码格式汉字显示******************/ void DWINLCD_ShowXChar(uint8_t CWA, uint8_t BCD, uint8_t Size, uint16_t Color, uint16_t Bcolor, uint16_t Xs, uint16_t Ys, char *str) { uint16_t strlenth; int i; strlenth = strlen((const char *)str); DwinSend_Buff_Size = 15 + strlenth; // 指令数据长度为15+strlenth(帧头+指令+Mode+数据+帧尾) Data_init(); // 重新更新数组 DWINSend_Buff[DwinSend_Buff_Size - 14 - strlenth] = 0x11; // 显示字符指令 DWINSend_Buff[DwinSend_Buff_Size - 13 - strlenth] = CWA % 2 << 7 | BCD % 2 << 6 | Size; // 显示字符模式指令 DWINSend_Buff[DwinSend_Buff_Size - 12 - strlenth] = Color >> 8; // 字符颜色高8位 DWINSend_Buff[DwinSend_Buff_Size - 11 - strlenth] = Color & 0xFF; // 字符颜色低8位 DWINSend_Buff[DwinSend_Buff_Size - 10 - strlenth] = Bcolor >> 8; // 填充字符背景颜色高8位 DWINSend_Buff[DwinSend_Buff_Size - 9 - strlenth] = Bcolor & 0xFF; // 填充字符背景颜色低8位 DWINSend_Buff[DwinSend_Buff_Size - 8 - strlenth] = Xs >> 8; // 字符Xs坐标高八位 DWINSend_Buff[DwinSend_Buff_Size - 7 - strlenth] = Xs & 0xFF; // 字符Xs坐标低八位 DWINSend_Buff[DwinSend_Buff_Size - 6 - strlenth] = Ys >> 8; // 字符Ys坐标高八位 DWINSend_Buff[DwinSend_Buff_Size - 5 - strlenth] = Ys & 0xFF; // 字符Ys坐标低八位 for (i = strlenth; i > 0; i--) { DWINSend_Buff[DwinSend_Buff_Size - 4 - i] = *(str++); } // 字符Ys坐标低八位 Send_Data(DWINSend_Buff); // 发送数据 } /// @brief 显示数据 void DWINLCD_Displaydata() { DWINLCD_ShowXChar(1, 0, A20, Green, White, 30, 10, "Voltage_Value "); DWINLCD_ShowXNum(0, 1, 1, 0, A20, Green, White, 2, 3, 240, 110, voltage); DWINLCD_JPEG_Display(0); } 主函数 while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ DWINLCD_Displaydata(); sampling_voltage(); } /* USER CODE END 3 */
|
|