这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【STM32H7S78-DK评测】TouchGFX制作数字密码锁

共1条 1/1 1 跳转至

【STM32H7S78-DK评测】TouchGFX制作数字密码锁

助工
2024-11-09 22:47:11   被打赏 50 分(兑奖)     打赏

一、

    数字密码锁是一项很经典的安全应用设计,时至今日它还在智能手机、平板电脑、家居门禁控制等领域发挥着重要作用,以下来讨论如何使用STM32H7S78-DK评估板复刻这一密码锁。默认界面为输入密码界面,若密码输入正确则更改文本显示,密码输入错误则将更改文本控件显示"密码输入错误!",为了快速完成这一复刻设计,我们可以使用TouchGFX工具来实现。

    TouchGFX是STM32出品的一个专为嵌入式设备使用的GUI图形框架,TouchGFX可以帮助开发者快速完成图形界面原型设计,在最节省系统资源的同时发挥出最佳的图形处理性能,助力开发者高效开发GUI应用

    以下是TouchGFX的简介:

TouchGFX框架包含易于使用的拖放式图形构建PC工具TouchGFX Designer (TouchGFXDesigner)以及强大的优化图形处理内核TouchGFX引擎。结合WYSIWYG仿真器和自动代码生成功能,TouchGFX大大简化了GUI开发。通过对完成的原型进行快速迭代,它涵盖了从早期设计草图到生成独家最终产品的所有步骤。

结构:轻松创建多屏幕内容和相关转换小部件:广泛的可定制小部件,如滑动容器和周期进度,便于轻松创建GUI。皮肤:一组即用型图形化皮肤,可实现一致的原型设计,而无需图形化设计工具。不限制使用自定义图形。交互:动态交互,便于创建用户友好型应用。自定义容器:创建用户可重用的应用控件。具有统一观感的轻松平台开发。文本处理:在单一位置指定和管理的字体和排版。完整的翻译服务,完全支持多种字母和脚本,如拉丁语、西里尔语、阿拉伯语、汉语和日语

  • 代码生成:

    • TouchGFXDesigner可生成和维护高性能C++代码

    • 工具生成的代码与用户代码完全分离

    • 各种代码扩展可实现独特的动画与系统互联

    • 支持多种集成式开发环境,如IAR Embedded Workbench、Arm Keil和基于GCC的IDE

二、TouchGFX应用界面设计

TouchGFX版本号:4.24.0,新建空白TouchGFX工程如下

46]FAU$Y4P`((8PIWO8_{K7.png

现在来为屏幕添加相应的图形元素,根据应用需求我放置了1个模拟时钟控件用于显示当前时间,两个文本框用于显示当前日期信息、气温数据

一个文本框用于提示输入密码,最后是9个带文本标签的数字按钮用于密码输入

DZANRR_$91O~UAX(%Y$FNY0.png

界面设计好后可以编译并在电脑上使用仿真器运行查看效果

8FLL$7JN300G0TS@)H0U`55.png

可以看到仿真器的图形显示与设计内容一致,如果对图形元素的布局感到合适,此时可以将程序固件烧录至评估板

47f7ebaab41eabf0052d7f6982bc0cfc.jpg

三、程序设计

图形界面设计完成后,开始考虑数字密码锁的处理逻辑。密码通常为6位数字,并且密码输入错误次数超过3次,会进入短暂的暂停密码输入阶段

这里只实现数字按钮输入检测以及密码验证,密码输入次数检验暂时不处理

示例程序:

声明密码检验函数,密码存储数组

class Screen1View : public Screen1ViewBase
{
public:
Screen1View();
virtual ~Screen1View() {}
virtual void setupScreen();
virtual void tearDownScreen();
void check();
virtual void pwdCheck(const touchgfx::AbstractButton& src);//重写父类函数
//    virtual void pwdCheck(const touchgfx::AbstractButton& src);
protected:
uint8_t cnt,pwd[6];
uint8_t pwd_set[6]={1,4,7,8,5,2};
};

#endif // SCREEN1VIEW_HPP

数字按键按下后存储对应数字

void Screen1View::pwdCheck(const touchgfx::AbstractButton& src)
{
//		printf("Test.\n");
	if (&src == &buttonWithLabel1)
	{
	   	pwd[cnt++]=1;
	   	if(cnt>5)check();
	}
	else if (&src == &buttonWithLabel2)
	{
	   	pwd[cnt++]=2;
	   	if(cnt>5)check();
	}
	else if (&src == &buttonWithLabel3)
	{
	   	pwd[cnt++]=3;
	   	if(cnt>5)check();
	}

	else if (&src == &buttonWithLabel4)
	{
	   	pwd[cnt++]=4;
	   	if(cnt>5)check();
	}
	else if (&src == &buttonWithLabel5)
	{
	   	pwd[cnt++]=5;
	   	if(cnt>5)check();
	}
	else if (&src == &buttonWithLabel6)
	{
	   	pwd[cnt++]=6;
	   	if(cnt>5)check();
	}

	else if (&src == &buttonWithLabel7)
	{
	   	pwd[cnt++]=7;
	   	if(cnt>5)check();
	}
	else if (&src == &buttonWithLabel8)
	{
	   	pwd[cnt++]=8;
	   	if(cnt>5)check();
	}
	else if (&src == &buttonWithLabel9)
	{
	   	pwd[cnt++]=9;
	   	if(cnt>5)check();
	}
}

四、实验结果

screenshots.gif








关键词: TouchGFX     九宫格密码锁    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]