硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2337|回复: 10
收起左侧

[LUA教程] H7-TOOL的LUA小程序教程第3期:使用LUA控制H7-TOOL的LCD简易界面设计

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2021-12-18 10:06:50 | 显示全部楼层 |阅读模式
LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用,支持在线调试运行,支持离线运行。

TOOL的LUA教程争取做到大家可以无痛调用各种功能函数,不需要学习成本。


Lua GUI API 函数列表

【函数】RGB565(r, g, b)   --将RGB888颜色转换为RGB565
  -- bg = RGB565(0xFF, 0, 0) --红色
  -- lcd_clr(RGB565(0xFF, 0xFF, 0xFF)) --清屏,白色

【函数】lcd_refresh()  --刷新界面

【函数】lcd_clr(color)  --清屏,color是RG565颜色格式
  1、lcd_clr(RGB565(0xFF, 0xFF, 0xFF))
  2、lcd_clr(0x1234)

【函数】lcd_disp_str(x, y, str, fontsize, front_color, back_color, width, align)
  -- 显示字符串
  -- x, y :显示坐标, 像素单位, 0-239
  -- str :字符串, 支持GBK编码中文
  -- fontsize :字体大小. 12=12点阵,16=16点阵,24=24点阵,32表示32点阵
  -- front_color :字体颜色, 可以用 RGB(0,0,0)
  -- back_color :背景颜色
  -- width :宽度
  -- align :对齐. 0=左对齐, 1=居中, 2=右对齐

【函数】lcd_fill_rect(x, y, h, w, color)
  -- 填充矩形窗口
  -- x, y :矩形左上角, 像素单位, 0-239
  -- h, w :矩形高度和宽度, 像素单位, 1-240
  -- color :填充颜色

【函数】lcd_draw_rect(x, y, h, w, color)
  -- 绘制矩形边框
  -- x, y :矩形左上角坐标, 像素单位, 0-239
  -- h, w :矩形高度和宽度, 像素单位, 1-240
  -- color :边框颜色

【函数】lcd_draw_circle(x, y, r, color)
  -- 绘制圆圈
  -- x, y :圆心坐标, 像素单位, 0-239
  -- r :圆半径, 像素单位
  -- color :边框颜色

【函数】lcd_draw_line(x1, y1, x2, y2, color)
  -- 绘制直线
  -- x1, y1 :第1个点坐标, 像素单位, 0-239
  -- x2, y2 :第2个点坐标, 像素单位, 0-239
  -- color :直线颜色

【函数】lcd_disp_label(x, y, h, w, color, str, fontzize, front_color, back_color)
  --绘制标签(左右上下居中)
  -- x, y :矩形左上角, 像素单位, 0-239
  -- h, w :矩形高度和宽度, 像素单位, 1-240
  -- color :填充颜色
  -- str :字符串
  -- fontzize :字体大小 12 16 24 32
  -- front_color :字体颜色
  -- back_color :字体背景颜色


使用注意事项
(1)测试的时候,将TOOL运行在静态的界面,没有内容刷新的,防止原APP程序定时更新影响了LUA界面API的执行。
(2)如果大家的LUA小程序里面有delayms或者死循环之类的操作,下次更新LUA,需要长按TOOL的C键退出当前LUA的执行,因为LUA是阻塞式的执行方式。
使用举例
local bg
beep()
bg = RGB565(0,0,0xFF)
lcd_clr(bg)
lcd_disp_str(0, 0, "安富莱电子Aa", 12, 0xFFFF, bg, 240, 1)
lcd_disp_str(0, 15, "安富莱电子Aa", 16, 0xFFFF, bg, 240, 1)
lcd_disp_str(0, 35, "安富莱电子Aa", 24, 0xFFFF, bg, 240, 1)
lcd_fill_rect(10, 70, 100, 100, 0xF000)
lcd_draw_circle(180, 120, 50, 0xF000)

lcd_refresh();

显示效果:
12345.png


颜色值选取

为了方便选取颜色值,大家可以在这里选择:
QQ截图20211218104836.png





回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2021-12-18 10:49:36 | 显示全部楼层
更新完毕。
回复

使用道具 举报

1

主题

131

回帖

134

积分

初级会员

积分
134
发表于 2021-12-18 11:07:16 | 显示全部楼层
太赞了,辛苦啦。 今天再学这章
回复

使用道具 举报

23

主题

1403

回帖

1472

积分

至尊会员

积分
1472
发表于 2021-12-18 18:20:01 | 显示全部楼层
赞,等待更多更新
代码不规范,亲人两行泪!
回复

使用道具 举报

56

主题

904

回帖

1072

积分

至尊会员

积分
1072
发表于 2021-12-18 21:55:04 | 显示全部楼层
luna和实际编译的程序运行速度大约相差多少呢
回复

使用道具 举报

747

主题

1049

回帖

3295

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3295
发表于 2021-12-19 00:32:16 | 显示全部楼层
roguebear 发表于 2021-12-18 21:55
luna和实际编译的程序运行速度大约相差多少呢

速度慢好几倍吧。
不过用lua目的不是最求极致速度,是为了灵活应对各种应用场合。
代码编辑调试方便,
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2021-12-19 00:57:31 | 显示全部楼层
roguebear 发表于 2021-12-18 21:55
luna和实际编译的程序运行速度大约相差多少呢

纯LUA软件刷要慢一些,而刷LUA注册的硬件外设和编译器的基本没区别,因为配置后都是硬件在执行。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2021-12-19 09:56:17 | 显示全部楼层
QQ截图20211219095118.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2021-12-20 01:54:54 | 显示全部楼层
修正函数lcd_disp_label(x, y, h, w, color, str, fontzize, front_color, back_color)问题
QQ图片20211220015501.png
回复

使用道具 举报

36

主题

1445

回帖

1553

积分

至尊会员

积分
1553
发表于 2021-12-29 13:49:07 | 显示全部楼层
老大,函数lcd_disp_label(x, y, h, w, color, str, fontzize, front_color, back_color) 怎么绘制那个外框的呢?看着挺平滑的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2021-12-29 16:40:36 | 显示全部楼层
sanit 发表于 2021-12-29 13:49
老大,函数lcd_disp_label(x, y, h, w, color, str, fontzize, front_color, back_color) 怎么绘制那个外框 ...

这个是我们自己搞的一个函数,在开源的APP V1.X里面有源函数
  1. /*
  2. *********************************************************************************************************
  3. *    函 数 名: DispLabelRound
  4. *    功能说明: 显示圆角标签,用于DAP-LINK
  5. *    形    参: _usX : 坐标X
  6. *              _usY : 坐标Y
  7. *              _usHeight : 高度
  8. *              _usWidth : 宽度
  9. *              _usColor : 填充颜色
  10. *              _pStr : 显示内容
  11. *              _pFont : 字体
  12. *    返 回 值: 无
  13. *********************************************************************************************************
  14. */
  15. void DispLabelRound(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth,
  16.     uint16_t _usColor, char *_pStr, FONT_T *_tFont)
  17. {
  18.     uint16_t fh;
  19.     uint16_t offset;
  20.    
  21.     /* 绘制圆角矩形 */
  22.     DispBox(_usX, _usY, _usHeight, _usWidth, _usColor);

  23.     fh = LCD_GetFontHeight(_tFont);
  24.     if (_usHeight > fh)
  25.     {
  26.         offset = (_usHeight - fh) / 2;
  27.     }
  28.     else
  29.     {
  30.         offset = 0;
  31.     }
  32.     LCD_DispStrEx(_usX, _usY + offset, _pStr, _tFont, _usWidth, ALIGN_CENTER);
  33. }
复制代码


回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-28 18:12 , Processed in 0.298954 second(s), 32 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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