迪文科技论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: 万分号

【提问】怎么动态修改触控按钮切换的页面

[复制链接]

20

主题

76

回帖

322

积分

中级会员

Rank: 3Rank: 3

积分
322
 楼主| 发表于 2025-9-8 08:55:30 | 显示全部楼层
ZVIP7679 发表于 2025-9-4 13:55
【OS用户核应用】T5L屏串口2、3、4、5的82、83协议C语言
http://inforum.dwin.com.cn:20080/forum.php?mod= ...


0x85是什么指令呀  手册上没有这条

本帖子中包含更多资源

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

x
回复

使用道具 举报

0

主题

754

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

积分
11987
发表于 2025-9-8 08:58:18 | 显示全部楼层
万分号 发表于 2025-9-8 08:55
0x85是什么指令呀  手册上没有这条

0X0084和0X0085都是切页指令用到的地址,0X0085放页面ID。
回复

使用道具 举报

20

主题

76

回帖

322

积分

中级会员

Rank: 3Rank: 3

积分
322
 楼主| 发表于 2025-9-8 09:12:49 | 显示全部楼层
jufang@dwin.com 发表于 2025-9-8 08:58
0X0084和0X0085都是切页指令用到的地址,0X0085放页面ID。

有没有最新的手册呀 包含0x85这条指令的手册  我用的是DGUS V7.648   或者那个功能比较全的sys.c
回复

使用道具 举报

0

主题

754

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

积分
11987
发表于 2025-9-8 09:17:44 | 显示全部楼层
万分号 发表于 2025-9-8 09:12
有没有最新的手册呀 包含0x85这条指令的手册  我用的是DGUS V7.648   或者那个功能比较全的sys.c ...

没有0X85的指令哈,0X84指令就是占用2个字长的呢,后面的D3-D0分别对应,0X84,0X85的高低字节。

本帖子中包含更多资源

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

x
回复

使用道具 举报

0

主题

294

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

积分
11556
发表于 2025-9-8 09:18:04 | 显示全部楼层
指令中的0001示例,就是0085地址。

本帖子中包含更多资源

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

x
人生苦短,及时行乐
回复

使用道具 举报

20

主题

76

回帖

322

积分

中级会员

Rank: 3Rank: 3

积分
322
 楼主| 发表于 2025-9-8 15:30:46 | 显示全部楼层
还是直接切换页面简单点,判断按键值然后切换页面就行,修改按键控件参数有点难。。。不知道哪里错了
回复

使用道具 举报

0

主题

712

回帖

9668

积分

论坛元老

Rank: 8Rank: 8

积分
9668
发表于 2025-9-8 21:11:23 | 显示全部楼层
万分号 发表于 2025-9-8 15:30
还是直接切换页面简单点,判断按键值然后切换页面就行,修改按键控件参数有点难。。。不知道哪里错了 ...

可以把指令和工程发出来看看哪里有问题
沧海横流,方显英雄本色。
回复

使用道具 举报

20

主题

76

回帖

322

积分

中级会员

Rank: 3Rank: 3

积分
322
 楼主| 发表于 2025-9-9 08:41:05 | 显示全部楼层
Lreamy 发表于 2025-9-8 21:11
可以把指令和工程发出来看看哪里有问题
  1. typedef struct
  2. {
  3.     u16 pageID;  //按键所在页面的ID(DGUS软件控件视图顺序)
  4.     u16 Xs;  //触控区域左上角坐标
  5.     u16 Ys;
  6.     u16 Xe; //触控区域右上角坐标
  7.     u16 Ye;
  8.     u16 picNext;  //按键按下后切换的页面对应的ID,0xFF**表示不进行页面切换
  9.     u16 picOn;  //按扭按压效果图对应的页面ID,0xFF**表示没有按压效果
  10.     u16 TPCode; //0xFE05,固定值
  11.     u8 FixValue; //0xFE,固定值
  12.     u16 vp;  //控件的变量地址
  13.     u8 TPMode;  //按键返回值写入方式
  14.     u16 keyCode;  //按键返回值
  15.     u8 Hold_Time;  //单位0.1秒,按压时间超过此值才响应,0x00表示立即响应
  16.     u8 NoUse[10]; //0x00,固定值
  17. }STUT_ReturnKeyCode;  //按键返回控件参数
  18. /**
  19. * @brief 修改按键返回控件的页面切换参数
  20. * @param pageID 按键所在的页面ID
  21. * @param keyID 触控控件ID(DGUS软件控件视图顺序),注意需减去基础控件的数量
  22. * @param keyCode 触控按键返回的键值,0x00-0x7F
  23. * @param switchPageID 待设置的按键切换页面对应的ID
  24. * @remark 经测试,此函数无效,具体错误待检查
  25. */
  26. void GUI_Key_ModifyPage_ReturnKeyCode(u16 pageID,u8 keyID,u8 keyCode,u8 switchPageID)
  27. {
  28.     u8 keyCMD[72] = {0};
  29.     STUT_ReturnKeyCode key;
  30.     //写入读取按键控件的指令
  31.     keyCMD[0] = 0x5A;   //触控指令高字节
  32.     keyCMD[1] = 0xA5;   //触控指令低字节
  33.     keyCMD[2] = (pageID >> 8) & 0xFF;
  34.     keyCMD[3] = pageID & 0xFF;   
  35.     keyCMD[4] = keyID;
  36.     keyCMD[5] = keyCode;
  37.     keyCMD[6] = 0x00;   //读取模式
  38.     keyCMD[7] = 0x02;
  39.     sys_write_vp(DF_ADDR_KeyAccessCMD,keyCMD,36);
  40.     //等待CPU操作完成
  41.     while(1)
  42.         {
  43.                 sys_read_vp(DF_ADDR_KeyAccessCMD,keyCMD,1);
  44.                 if((0 == keyCMD[0]) && (0 == keyCMD[1]))
  45.                         break;
  46.                 sys_delay_about_ms(1);//这个延时必须加,可以防止莫名其妙的错误
  47.         }
  48.     //读取控件参数
  49.     sys_read_vp(DF_ADDR_KeyAccessCMD,(u8 *)&key,36);
  50.     //写入设置按键控件的指令
  51.     key.picNext = switchPageID;  //修改切换的页面
  52.     keyCMD[6] = 0x00;   //写入模式
  53.     keyCMD[7] = 0x03;
  54.     memcpy(&keyCMD[8],&key,sizeof(key));  //将参数赋值到指令中
  55.     sys_write_vp(DF_ADDR_KeyAccessCMD,keyCMD,36);
  56.     //等待CPU操作完成
  57.     while(1)
  58.         {
  59.                 sys_read_vp(DF_ADDR_KeyAccessCMD,keyCMD,1);
  60.                 if((0 == keyCMD[0]) && (0 == keyCMD[1]))
  61.                         break;
  62.                 sys_delay_about_ms(1);//这个延时必须加,可以防止莫名其妙的错误
  63.         }
  64. }
复制代码

回复

使用道具 举报

0

主题

371

回帖

2471

积分

金牌会员

Rank: 6Rank: 6

积分
2471
发表于 2025-9-9 16:57:15 | 显示全部楼层
写0xB0地址,只需要写到0002/0003,0003模式的时候要先把数据写到地址里,再写0003模式不能一次写 sys_write_vp(DF_ADDR_KeyAccessCMD,keyCMD,36);然后13文件不能超过32k。
其实判断按键值然后切换页面这种运行也会稳定很多。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-15 09:03 , Processed in 0.030842 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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