OpenEdv-开源电子网

 找回密码
 立即注册
查看: 7090|回复: 18

F103/F767 LVGL外部按键编码器移植工程分享

[复制链接]

11

主题

314

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1039
金钱
1039
注册时间
2020-7-21
在线时间
258 小时
发表于 2021-1-7 11:00:13 | 显示全部楼层 |阅读模式
本帖最后由 DFY 于 2021-1-7 11:33 编辑

demo是官方例程lv_demo_keypad_encoder,代码仅做了底层的硬件移植,使用外部按键模拟编码器
KEY0---下                        LV_KEY_RIGHT/LV_KEY_NEXT
KEY1---确定/短按/长按      LV_KEY_ENTER
KEY2---上                        LV_KEY_LEFT/LV_KEY_PREV

编码器支持两种模式,导航和编辑模式。
导航是在对象之间进行切换,就像TAB键一样,可以轻松的在上下对象切换。
编辑模式是对对象进行编辑,例如改变数值,选择选项等。

编码器如何跟对象关联控制?

       LVGL有一个组的概念,简单的来说,就是把这些对象和输入设备通过组来关联起来。
例如将编码器输入设备、控件对象添加入一个组,那么编码器的动作都会被这个组接收,从而实现组的对象之间导航和编辑。
在每个组中,只有一个焦点的对象可以接收按下的键或编码器的动作。例如,如果将文本区域作为焦点,然后在键盘
上按一些字母,则将发送键并将其插入文本区域。同样,如果滑块处于聚焦状态,然后按向左或向右箭头,则滑块的
值将被更改。


编码器

使用编码器,您可以做4件事:

  • 按下按钮

  • 长按其按钮

  • 转左

  • 右转


简而言之,编码器输入设备的工作方式如下:

  • 通过旋转编码器,您可以专注于下一个/上一个对象。

  • 在简单对象(如按钮)上按下编码器时,将单击它。

  • 如果将编码器按在复杂的对象(如列表,消息框等)上,则该对象将进入编辑模式,从而可以旋转编码器以在对象内部导航。

  • 要退出编辑模式,请长按按钮。



编辑和浏览模式

由于键盘有很多键,因此很容易在对象之间导航并使用键盘进行编辑。但是,编码器的“键”数量有限,因此很难使用默认选项进行导航。创建导航编辑是为了避免编码器出现此问题。

导航模式下,编码器LV_KEY_LEFT/RIGHT转换为LV_KEY_NEXT/PREV。因此,将通过旋转编码器选择下一个或上一个对象。按LV_KEY_ENTER将更改为编辑模式。

在“编辑”模式下,LV_KEY_NEXT/PREV通常用于编辑对象。根据对象的类型,短按或长按可将其LV_KEY_ENTER更改回导航模式。通常,无法按下的对象(例如Slider)会在短按时离开“编辑”模式。但是对于具有单击意义的对象(例如Button),则需要长按。


源码文件看key.c和lv_demo_keypad_encoder.c
F767-LVGL7.8.1 - 编码器.zip (14.6 MB, 下载次数: 796)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

12

帖子

0

精华

高级会员

Rank: 4

积分
682
金钱
682
注册时间
2016-7-13
在线时间
121 小时
发表于 2021-1-7 11:37:50 | 显示全部楼层
哇,终于有移植按键编码器的分享了,之前只移植了简单的显示,可以学习一波了
回复 支持 反对

使用道具 举报

11

主题

314

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1039
金钱
1039
注册时间
2020-7-21
在线时间
258 小时
 楼主| 发表于 2021-1-8 09:32:07 | 显示全部楼层
踩姑娘的小蘑菇 发表于 2021-1-7 11:37
哇,终于有移植按键编码器的分享了,之前只移植了简单的显示,可以学习一波了

      
回复 支持 反对

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2012-12-3
在线时间
11 小时
发表于 2021-1-8 11:32:36 | 显示全部楼层
刚好有个项目没有触摸屏,只有一个编码器,还在想一个状态一个状态的去切换,赞!
只是我用的是littleVGL 6.0,  7.8得重新移植了
stm32
回复 支持 反对

使用道具 举报

11

主题

314

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1039
金钱
1039
注册时间
2020-7-21
在线时间
258 小时
 楼主| 发表于 2021-1-8 12:17:49 | 显示全部楼层
yxz1212_bao 发表于 2021-1-8 11:32
刚好有个项目没有触摸屏,只有一个编码器,还在想一个状态一个状态的去切换,赞!
只是我用的是little ...

底层是一样的,6.0同样适用
回复 支持 反对

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2012-12-3
在线时间
11 小时
发表于 2021-1-8 13:31:16 | 显示全部楼层
DFY 发表于 2021-1-8 12:17
底层是一样的,6.0同样适用

大佬,有没有可以搭配codeblock20.03和LVGL 7.8.1的lv_sim_codeblocks_win-master,github上下载的在20.03上运行会有问题,能不能出个教程解决下这些问题。还是已经出了,是我错过了
stm32
回复 支持 反对

使用道具 举报

11

主题

314

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1039
金钱
1039
注册时间
2020-7-21
在线时间
258 小时
 楼主| 发表于 2021-1-8 15:09:50 | 显示全部楼层
yxz1212_bao 发表于 2021-1-8 13:31
大佬,有没有可以搭配codeblock20.03和LVGL 7.8.1的lv_sim_codeblocks_win-master,github上下载的在20.0 ...

没有弄过7.8.1的codeblock20.03,我是用VS仿真的,你发个帖子问问呢
回复 支持 反对

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
发表于 2021-2-24 10:24:39 | 显示全部楼层
捕捉大佬 TIM图片20191026212944.jpg
天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

7

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2020-9-22
在线时间
17 小时
发表于 2021-3-21 09:33:51 | 显示全部楼层
大佬,我用F103的精英版发脉冲,外部按键可以控制频率和脉冲个数,但是用LVG上的按钮怎么控制不了呢,对这方面了解的少,请问大佬知道咋回事吗
回复 支持 反对

使用道具 举报

11

主题

314

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1039
金钱
1039
注册时间
2020-7-21
在线时间
258 小时
 楼主| 发表于 2021-3-21 23:32:39 | 显示全部楼层
1904780112 发表于 2021-3-21 09:33
大佬,我用F103的精英版发脉冲,外部按键可以控制频率和脉冲个数,但是用LVG上的按钮怎么控制不了呢,对这 ...

将您的控制脉冲代码封装成一个函数,在lvgl的按键回调函数中控制就可以了。首先您要保证的是您的LVGL按键可以用。
回复 支持 反对

使用道具 举报

7

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2020-9-22
在线时间
17 小时
发表于 2021-3-23 19:49:17 | 显示全部楼层
DFY 发表于 2021-3-21 23:32
将您的控制脉冲代码封装成一个函数,在lvgl的按键回调函数中控制就可以了。首先您要保证的是您的LVGL按键 ...

LVGL按键可以用,我也把控制脉冲用一句代码在回调函数中实现,但是发出来的脉冲不连续,比如步进电机,走了两个步进角就不走了
回复 支持 反对

使用道具 举报

11

主题

314

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1039
金钱
1039
注册时间
2020-7-21
在线时间
258 小时
 楼主| 发表于 2021-3-24 18:42:27 | 显示全部楼层
1904780112 发表于 2021-3-23 19:49
LVGL按键可以用,我也把控制脉冲用一句代码在回调函数中实现,但是发出来的脉冲不连续,比如步进电机,走 ...

首先裸机测试是否步进电机的代码是否有问题。步进电机是通过定时器的个数脉冲控制的,按理来说,配置定时器的输出脉冲个数是不会影响CPU的资源。他是一个独立的外设,会独立运行。你的步进电机的控制原理是怎么样的,是否是模拟阻塞产生脉冲调用的,还是通过定时器输出脉冲驱动。
回复 支持 反对

使用道具 举报

7

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2020-9-22
在线时间
17 小时
发表于 2021-3-25 14:24:48 | 显示全部楼层
谢谢指导啊,已经解决了
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2020-8-21
在线时间
4 小时
发表于 2021-5-26 20:13:14 | 显示全部楼层
大佬怎么你分享的工程里没有编码器接口部分的代码
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2020-7-20
在线时间
14 小时
发表于 2021-10-29 09:17:50 | 显示全部楼层

移植编码器还好,参考这篇文章,做出了不难。
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2020-7-20
在线时间
14 小时
发表于 2021-10-29 09:19:28 | 显示全部楼层
yxz1212_bao 发表于 2021-1-8 11:32
刚好有个项目没有触摸屏,只有一个编码器,还在想一个状态一个状态的去切换,赞!
只是我用的是little ...

如果既做编码器,又需要像button方式应该怎么实现呢。
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2020-7-20
在线时间
14 小时
发表于 2021-10-29 09:24:31 | 显示全部楼层
丹丹 发表于 2021-10-29 09:19
如果既做编码器,又需要像button方式应该怎么实现呢。

有没有好的实现思路,有时候需要按钮跟指定功能对应。编码器这时候就不是很好用了。
如:
      1.界面图标我可以使用分组:上一个、下一个、确认完成。
      2.如果某一界面需要指定按键,第一个按钮一个动作、第二按钮也是一个动作、第三个按键返回键。
   

回复 支持 反对

使用道具 举报

19

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
302
金钱
302
注册时间
2015-9-2
在线时间
83 小时
发表于 2021-10-30 19:45:50 | 显示全部楼层
我一共有四个按键,分别模拟上一个、下一个、确认、取消,使用编码器该怎么实现?
回复 支持 反对

使用道具 举报

0

主题

286

帖子

0

精华

高级会员

Rank: 4

积分
949
金钱
949
注册时间
2018-4-21
在线时间
264 小时
发表于 2023-3-3 09:00:52 来自手机 | 显示全部楼层
感谢分享,参考一下
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 16:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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