迪文科技论坛

 找回密码
 立即注册
搜索
查看: 323|回复: 14

【提问】屏幕刷新问题

[复制链接]

0

主题

12

回帖

77

积分

注册会员

Rank: 2

积分
77
发表于 2024-9-25 11:48:14 | 显示全部楼层 |阅读模式
我在主函数里面数据更新之后就切换图片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 */

  1. <blockquote>
复制代码
回复

使用道具 举报

0

主题

525

回帖

7844

积分

论坛元老

Rank: 8Rank: 8

积分
7844
发表于 2024-9-25 13:07:53 | 显示全部楼层
您是用的C1的屏么?用0X14指令显示字符后用25,26指令再复制剪切覆盖后再发显示数据的指令试下。
回复

使用道具 举报

0

主题

12

回帖

77

积分

注册会员

Rank: 2

积分
77
 楼主| 发表于 2024-9-25 13:38:41 | 显示全部楼层
jufang@dwin.com 发表于 2024-9-25 13:07
您是用的C1的屏么?用0X14指令显示字符后用25,26指令再复制剪切覆盖后再发显示数据的指令试下。 ...

DMT48270C043_04WNZ0 屏幕型号是这个
回复

使用道具 举报

0

主题

525

回帖

7844

积分

论坛元老

Rank: 8Rank: 8

积分
7844
发表于 2024-9-25 13:50:28 | 显示全部楼层
IYang 发表于 2024-9-25 13:38
DMT48270C043_04WNZ0 屏幕型号是这个

嗯嗯,按上述说的指令操作试下。
回复

使用道具 举报

0

主题

12

回帖

77

积分

注册会员

Rank: 2

积分
77
 楼主| 发表于 2024-9-25 14:49:13 | 显示全部楼层
jufang@dwin.com 发表于 2024-9-25 13:50
嗯嗯,按上述说的指令操作试下。

void DWINLCD_JPEG_Display1(uint16_t JPEG_ID) // 显示图片 0x25
{

        DwinSend_Buff_Size = 8;
        Data_init(); // 重新更新数组

        DWINSend_Buff[DwinSend_Buff_Size - 7] = 0x25; // 显示图片指令

        DWINSend_Buff[DwinSend_Buff_Size - 6] = 0x01; //
        DWINSend_Buff[DwinSend_Buff_Size - 5] = JPEG_ID & 0xFF;

        Send_Data(DWINSend_Buff); // 发送数据
        HAL_Delay(300);                          // 等待屏幕处理时间
}

void DWINLCD_26(uint16_t Xs, uint16_t Ys, uint16_t Xe, uint16_t Ye, uint16_t X, uint16_t Y)
{

        DwinSend_Buff_Size = 18; //
        Data_init();                         // 重新更新数组

        DWINSend_Buff[DwinSend_Buff_Size - 17] = 0x26;

        DWINSend_Buff[DwinSend_Buff_Size - 16] = Xs >> 8;
        DWINSend_Buff[DwinSend_Buff_Size - 15] = Xs & 0xFF;
        DWINSend_Buff[DwinSend_Buff_Size - 14] = Ys >> 8;
        DWINSend_Buff[DwinSend_Buff_Size - 13] = Ys & 0xFF;

        DWINSend_Buff[DwinSend_Buff_Size - 12] = Xe >> 8;
        DWINSend_Buff[DwinSend_Buff_Size - 11] = Xe & 0xFF;
        DWINSend_Buff[DwinSend_Buff_Size - 10] = Ye >> 8;
        DWINSend_Buff[DwinSend_Buff_Size - 9] = Ye & 0xFF;

        DWINSend_Buff[DwinSend_Buff_Size - 8] = X >> 8;
        DWINSend_Buff[DwinSend_Buff_Size - 7] = X & 0xFF;
        DWINSend_Buff[DwinSend_Buff_Size - 6] = Y >> 8;
        DWINSend_Buff[DwinSend_Buff_Size - 5] = Y & 0xFF;

        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, cp_ad_voltage);
        DWINLCD_JPEG_Display1(0);
        DWINLCD_26(240, 110, 480, 220, 240, 110);
}
可以但是还是会有跳动的情况 颤抖

回复

使用道具 举报

0

主题

525

回帖

7844

积分

论坛元老

Rank: 8Rank: 8

积分
7844
发表于 2024-9-25 17:17:00 | 显示全部楼层
IYang 发表于 2024-9-25 14:49
void DWINLCD_JPEG_Display1(uint16_t JPEG_ID) // 显示图片 0x25
{

能拍个视频看下么
回复

使用道具 举报

0

主题

12

回帖

77

积分

注册会员

Rank: 2

积分
77
 楼主| 发表于 2024-9-25 20:16:55 | 显示全部楼层

就是这样的我用gif 不知道能看清不

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

525

回帖

7844

积分

论坛元老

Rank: 8Rank: 8

积分
7844
发表于 2024-9-25 21:56:08 | 显示全部楼层
IYang 发表于 2024-9-25 20:16
就是这样的我用gif 不知道能看清不

您连接电脑用串口直接发指令看下是否有这种现象?
回复

使用道具 举报

0

主题

12

回帖

77

积分

注册会员

Rank: 2

积分
77
 楼主| 发表于 2024-9-26 09:29:38 | 显示全部楼层
jufang@dwin.com 发表于 2024-9-25 21:56
您连接电脑用串口直接发指令看下是否有这种现象?


这是用串口发的 每条时间间隔是100ms 也是一样的会闪

AA 14 62 07 E0 FF FF 05 02 00 D2 00 0A 00 00 00 03 CC 33 C3 3C AA 14 62 07 E0 FF FF 05 03 00 D2 00 1E 00 00 00 00 CC 33 C3 3CAA 14 62 07 E0 FF FF 05 03 00 D2 00 32 00 00 00 00 CC 33 C3 3C AA 14 62 07 E0 FF FF 05 03 00 D2 00 46 00 00 00 00 CC 33 C3 3CAA 14 62 07 E0 FF FF 02 03 00 F0 00 6E 00 00 07 8C CC 33 C3 3C



AA 25 01 00 CC 33 C3 3C

AA 26 00 D2 00 0A 01 36 00 82 00 D2 00 0A CC 33 C3 3C


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

525

回帖

7844

积分

论坛元老

Rank: 8Rank: 8

积分
7844
发表于 2024-9-26 13:14:13 | 显示全部楼层
IYang 发表于 2024-9-26 09:29
这是用串口发的 每条时间间隔是100ms 也是一样的会闪

AA 14 62 07 E0 FF FF 05 02 00 D2 00 0A 00 00 0 ...

拿屏测试了一下您指令,延时改小一点闪动没那么明显,您试下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-11-23 06:31 , Processed in 0.061172 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表