找回密码
 立即注册
查看: 184|回复: 1

15系列单片机与迪文DGUS屏应用之(七):登录密码设计

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:42
  • 最近打卡:2025-06-17 07:50:27

29

主题

14

回帖

415

积分

中级会员

积分
415
发表于 2025-5-5 21:14:21 | 显示全部楼层 |阅读模式

大家好,我是『芯知识学堂』的SingleYork,前面给大家介绍了迪文DGUS屏的基本操作,相信大家看了文章后对迪文DGUS屏的基本应用应该有了一定的了解,那么,今天笔者将要给大家介绍DGUS屏的另外一个比较实用的功能,那就是DGUS屏的密码设计。

在工业自动化领域,用户产品经常会有密码登录的需求,通过单片机编程实现设置及修改密码程序。一说到密码,我们首先可能想到的是,先在单片机里面存储一个初始密码,然后在触摸屏输入一个密码数字,通过串口下发给单片机,单片机判断这个数字是否跟初始密码一致,来判断密码的正确的,然后可以进行一些修改或其他的操作。当然,这种原始的方法也不是不可行,但是,随着触摸屏组态软件的强大,很多操作都不需要单片机来直接参与,就能实现密码登录、密码修改等。市面上很多人机界面都有这个功能,迪文DGUS屏自然也不例外。

迪文DGUS屏通过自身二次开发平台(DWIN_OS)便可以轻松实现密码功能,省去了单片机编程,为我们的开发带来了极大的方便。本文在迪文官方提供的例程上做了一些修改,详细介绍了通过组态软件和OS程序来设置修改密码的方法,关于OS指令的详细说明请参考官方提供的资料《基于DWIN_OS指令的理解与应用(os详细文档指导资料)》。

首先,我们把需要用到的界面图片准备好,大致如下所示:

00.png

然后,建立一个新的工程,由于建立工程的步骤,前面的例程已经详细介绍过了,在此就不再赘述,不清楚如何建立工程的读者,请仔细阅读前面的章节。如有需要源码,可以站内私信笔者。

这里需要特别提醒一下读者,因为本例中需要用到OS,所以在工程配置的时候,需要勾选“启用OS”选项;

01.png

本例中,主要演示了如下功能:

  1. 在“自动模式”界面,按下“手动模式”按键,会出现密码输入框,只有密码输入正确,才能跳转到“手动模式”;
  2. 在“自动模式”或“手动模式”界面,按“密码管理”按键,密码输入正确后可进入到“密码管理”界面,在此界面,用户可以修改密码;
  3. 在官方给的“密码登陆与改写”例程基础上,增加了按键判断,即:通过判断触摸屏上的“手动模式”按键和“密码管理”按键的返回值,来确定在密码输入正确后,是跳转“手动模式”界面,还是“密码管理”界面。这个功能,在某些场合下是非常有用的。
  4. 本例中的密码有两种,一种是“普通密码”,用户可以任意修改;另外一种则是“超级密码”,用户不能更改。“超级密码”的作用就是为了防止用户忘记了自己设置的密码,而作为一把万能钥匙来重置密码。

为了照顾新手,笔者在这里,还是给大家简单分享一下每个界面的变量的配置,读者可以参考该设置,配置自己的工程。

首先,是“自动模式”界面的两个“按键返回”控件的配置:

02.png

03.png

接下来就是“手动模式”界面的两个“按键返回”变量的配置:

04.png

05.png

然后,就是“密码管理”界面的变量的配置,这里需要注意的就是,在“新建密码”输入框和“再次输入密码”输入框中,均有两个变量,一个是“数据变量显示”控件,另一个则是“数据变量输入”控件,尤其是需要注意这两个变量的地址要一致,并且,由于写变量是用的四个字节,需要用到两个地址控件来存储,所以,在设置下一个变量的地址的时候,需要加“2”,即,“新建密码”的变量地址只0x0052,那么“再次输入”的变量地址就应该为0x0054,其他的,大家参考笔者的配置即可。

06.png

07.png

08.png

09.png

接下来,就是密码输入框的配置了,这个地方之前在将数字键盘设计的时候也有讲过,参考之前的设计即可,不过这里需要记住这个密码输入框的地址是0x0050,因为在OS程序中需要用到。

10.png

接下来,就是“密码错误”界面的两个按键的配置,当我们密码输错的时候,我们一般会选择重新输入密码或者不想要输密码进行后续操作了,直接返回到主页。这个功能很容易实现,我们只需要添加两个“基本触控”变量即可。

11.png

12.png

然后,就是我们的密码修改过程中可能遇到的情况了,我们一般修改新密码的时候,需要输入两次新密码,以确保用户输入的准确性,反正用户误操作,改了一个自己都不知道的新密码。那么,检查这两次输入的密码是否一致,就显得很有必要了。当密码输入正确后,我们跳转到一个“密码修改成功”的界面:

13.png

然而,并不是每次用户都能讲两次密码输入成一致,有时候不小心多点了个数,或者中间某个数输入错了,这时候,我们就可以跳转到另外一个界面来提示用户,让用户选择是继续重置密码呢还是直接退出。

14.png

至此,DGUS界面部分设计就大功告成了,接下来的重头戏,就是OS程序部分了。首先,我们为了方便,先把DGUS屏中用到的一些变量的信息,直接以注释的形式添加到OS程序中,这样就可以不用去DGUS工程中去一一查看每个变量的含义了。接下来,就是两个CALL指令,即:调用子程序指令。调用完成后,以END结束,在下一个DGUS屏的周期到来,再开始调用子程序。

15.png

在每次一次调用子程序后,都会执行一个RET—子程序调用返回指令。

16.png

接下来,我们看下密码校验部分,在我们输入完密码,按下“OK”键后,OS程序就会自动来判断密码的正确性,前面说到了,在本例中,有两种密码,一种是普通密码,另外一种就是超级密码了。在新的工程时,本身是没有设置普通密码的,所以在第一次使用的时候,需要用超级密码权限在“密码管理”界面,设置一个8位数以下(含8位数)的非0密码。OS程序在判断密码的时候,会首先识别是不是普通密码,如果是普通密码,则直接跳转到“MA_OK” 执行相关动作;若用户输入的密码不是普通密码,则再来判断是不是超级密码,如果是超级密码,同样跳转到“MA_OK” 执行相关动作。若两者都不是,则跳转到“MA_ERR”,执行相关动作。这一部分的完整代码如下图所示:

18.png

在密码输入正确后,我们再来识别此时是应该跳转到“手动模式”界面,还是“密码管理”界面呢?这里主要是通过按键返回值来识别:

19.png

 当变量地址0x1000的返回值是0x0001的时候,跳转到“手动模式”界面;

 当变量地址0x1000的返回值是0x0003的时候,跳转到“密码管理”界面;

当然,其中本来还有一个返回0x0002的值,跳转到“参数设置”界面,笔者故意在本例中删去了,留给读者来做验证。

20.png

接下来就是“修改密码”的子程序了,这个子程序会判断“修改完成”按键是否按下,然后再来判断两次密码输入框里面的数据是否一致,如果一致的话,则可以成功修改并保存密码,若不一致,则跳到错误界面。

21.png

好了,关于迪文DGUS屏密码的设计就简单介绍到这了,有关OS指令部分如有不明白之处请联系作者,也可以参考《基于DWIN_OS指令的理解与应用(os详细文档指导资料)》,里面有每条指令的详细说明。


项目源码下载:

upload 附件:单片机与迪文DGUS屏通信例程项目源码.zip

本帖被以下淘专辑推荐:

回复

使用道具 举报 送花

3

主题

711

回帖

133

积分

等待验证会员

积分
133
发表于 2025-5-5 21:23:03 | 显示全部楼层
迪文DGUS屏密码功能设计与实现深度解析  
作者:芯知识学堂 SingleYork  

引言  
在工业控制领域,人机交互界面(HMI)的密码功能是保障设备操作安全性的核心需求之一。迪文DGUS屏通过其二次开发平台DWINOS,能够高效实现密码登录、权限管理等功能,显著降低主控芯片的代码复杂度。本文基于官方例程优化,从系统架构、OS程序逻辑及安全设计三方面,深入剖析密码功能的实现原理与工程实践。

一、系统架构设计  
迪文DGUS屏的密码功能实现依赖于界面组态与DWINOS程序的协同工作,其核心架构如下:  
1. 界面层:  
密码输入界面:包含数字键盘、密码显示框(掩码处理)及确认/取消按钮。  
权限跳转逻辑:通过不同页面ID控制界面切换,例如“自动模式”与“手动模式”的权限隔离。  
2. 数据层:  
密码存储:利用DGUS屏的数据变量存储区(VP地址)保存预设密码及临时输入值,避免依赖外部存储器。  
状态标志位:通过VP地址定义密码验证状态(如0x1000为验证成功标志)。  
3. 逻辑层:  
OS程序响应:通过触控事件触发密码验证、界面跳转及错误处理逻辑,实现全流程自动化。  

二、DWINOS程序实现详解  
1. 密码输入与验证流程  
步骤1:触控事件绑定  
  在“手动模式”按键的触控属性中,绑定OS程序入口地址(如0x2000),触发密码输入界面弹出。  
  1. assembly
  2.   ; 触控事件响应示例
  3.   MOV R0, 0x1001       ; 页面跳转指令(跳转至密码输入界面)
  4.   MOV R1, 0x0001       ; 目标页面ID
  5.   CALL SYSWriteCMD    ; 发送指令
复制代码

步骤2:密码输入处理  
  通过数字键盘输入密码,实时更新VP地址(如0x2000-0x2003存储4位密码),并掩码显示为“”。  
步骤3:密码比对逻辑  
  用户点击“确认”后,OS程序从预设VP地址(如0x2010-0x2013)读取正确密码,与输入值逐位比对:  
  1. assembly
  2.   ; 密码比对代码片段
  3.   LDWR R0, 0x2000      ; 输入密码首地址
  4.   LDWR R1, 0x2010      ; 预设密码首地址
  5.   MOV R2, 4            ; 密码长度
  6.   LOOP:
  7.   MOV A, [R0++]
  8.   CMP A, [R1++]
  9.   JNZ ERROR            ; 任意一位不匹配则跳转至错误处理
  10.   DJNZ R2, LOOP
  11.   MOV R3, 0x01         ; 验证成功标志
  12.   JMP SUCCESS
复制代码

步骤4:权限跳转与错误处理  
  验证成功时,置位状态标志(如0x1000=1),并跳转至目标界面;失败则清空输入并提示错误信息。  

2. 密码修改功能扩展  
双密码校验:要求用户输入旧密码并通过二次确认新密码,防止误操作。  
数据持久化:通过EEPROMWrite指令将新密码写入非易失存储区,确保断电不丢失。  

三、安全增强与优化建议  
1. 密码加密存储  
避免明文存储密码,可采用异或(XOR)或简单哈希算法(如累加和取模)增强安全性。  
示例:将密码“1234”转换为(1+2+3+4) MOD 10 = 0作为校验值。  
2. 防暴力破解机制  
限制连续错误次数(如3次),锁定界面并记录事件日志。  
3. 权限分级管理  
通过多组VP地址实现不同等级密码(如操作员密码与管理员密码),区分功能权限。  

四、工程配置关键点  
1. 启用OS功能  
在DGUS工程配置中勾选“启用OS”选项,并指定OS程序文件(.bin)。  
2. 变量地址规划  
合理分配VP地址,避免与界面控件、数据存储区域冲突。建议使用0x1000以上地址段。  
3. 调试与测试  
通过DGUS屏的在线调试工具实时监控VP地址值,快速定位逻辑错误。  

五、总结  
迪文DGUS屏的密码功能设计充分体现了其“高内聚、低耦合”的开发理念,通过DWINOS程序将复杂逻辑从主控芯片剥离,显著提升系统稳定性。开发者需重点关注数据安全与异常处理,结合具体场景灵活扩展功能(如多级权限、操作日志)。对于更复杂的应用,可参考官方文档《DWINOS指令详解》进一步探索事件中断、定时器等高级功能。  

附录  
完整OS程序源码及工程文件可通过站内私信获取。  
官方资料下载地址:迪文科技开发者平台  

通过本文的实践与优化,读者可快速掌握迪文DGUS屏的密码功能设计方法,为工业设备的安全交互提供可靠解决方案。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-17 15:27 , Processed in 0.209703 second(s), 60 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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