【开源】迪文K600+和T5L屏与STM32F1xx实现翻页密码和时间锁
由于很多原因,我们需要在设备使用一段时间后,不再授权设备的使用,所以需要触摸屏和控制器在一定的时间后,停止使用,本文使用STM32与触摸屏配合实现此功能:
1.硬件需求:
(1)迪文触摸屏型号:DMG80480L070/ DMT80480C070,T5L屏使用DGUS2模式;
(2)单片机型号:STM32F103RCT6;
(3)硬件连接方式:采用RS232连接,使用T5L屏时请将TTL/RS232短接端子,处于OFF模式;
(4)通讯协议:迪文DGUS/DGUS2触摸屏通讯协议;
(5)STM32硬件原理图参考文件夹中“原理图.PDF”。
由于屏幕的控制指令有差异,为实现程序兼容两种屏幕型号,使用KEY0/KEY1外部端子来控制触摸屏型号,当KEY0/KEY1都接上短接冒时,屏幕支持K600+模式,其他为T5L模式。
2.迪文屏幕配置:
由于T5L在控件配置上基本兼容K600+,所以这里只讲述T5L的配置,T5L与K600+在本工程中使用的地址完全一致,K600+的屏幕配置请参考T5L,时间锁页面密码地址如下:
配置项目 | 显示地址 | 写入地址 | 时间锁页面密码 | 1200 | 无 | 时间配置使能 | 1300 | 1310 | 第一期时间 | 1301 | 1311 | 第一期密码 | 1302 | 1312 | 第二期时间 | 1303 | 1313 | 第二期密码 | 1304 | 1314 | 第三期时间 | 1305 | 1316 | 第三期密码 | 1306 | 1316 |
3.STM32软件配置: 由于本工程为项目更改而来,有许多删减,在使用过程中可能会有不可避免的BUG,如发现请指出,时间锁功能经过项目验证,定时时间后锁定屏幕,可以参考使用! (1)STM32软件使用STM32CubeMX生成的MDK5工程,具体配置请参考附件“STM32与DWIN屏_DMT80480C070-DMG80480L070设备时间锁”中的“DWIN_DMG80480L070_S3_DF_WIFI”,此文件需要电脑安装“STM32CubeMX”版本4.16以上; (2)STM32使用到的硬件包括: - 串口3,与触摸屏通讯;
- Flash读写操作,用于存储时间和密码等数据,写入次数10W次;
- 定时器2配置为5ms;
- PB12配置为输出,运行指示灯,500ms间隔闪烁。
(3)原理: - 通过T2定时器计时,每2小时计数器增加1并写入到Flash,每个Flash地址写入1000次,超过1000,则写入相邻的下个地址,当计时时间大于用户触摸屏设定的时间,弹出锁定界面并给出相关提示,
- 本工程一共给出三期时间设定,第3期权限最高,以此排序;
- 用户通过触摸屏写入的数据保存在STM32的Flash中,掉电后不会丢失。
4.详细信息请参考附件文件 5.操作方法: (1)连接好单片机与触摸屏; (2)上电后如下图所示:首页,按键地址0x1000,键值0X0019。如下图,轻触进入密码输入页:
(3)轻触屏幕弹出输入密码界面:密码输入页,密码输入框地址0x1200:
(4)输入密码10237120,进入时间设定界面:
输入每一期使用的时间和密码,并将“时间配置使能”设定为1后,时间锁开始生效。软件的详细注释清参考MDK工程;
【开源】迪文K600+通过编写OS实现翻页密码和时间锁
之前发布的贴子中,使用迪文触摸屏借助单片机的定时器实现了翻页密码和设备定时锁,这种与单片机的配合使用存在一定的缺点,不仅占用单片机的资源,还浪费了触摸屏的性能;
这次通过迪文屏的OS程序编写实现设备定时锁定,本文只是对实现的思路作一定的解释,对部分源码加以注释和解释,具体内容请参考压缩包中的触摸屏工程及OS程序,由于本人能力有限,在OS及程序中有什么问题,请指出,谢谢!
1.本程序是以K600+触摸屏为基础编写,触摸屏必须自带RTC;
2.翻页密码部分参照了迪文官方提供的K600+翻页密码程序,在此致谢!
3.由于本工程为本人为单位书写,所以本人对触摸屏中的工程图片进行了屏蔽,按键位置可能在显示界面不显示,但是不影响使用,如若有工程师使用,请务必不要使用触摸屏工程文件中的图片,再次致谢!
功能:设备不再授权使用,一般会在设备下位机或人机互交界面等增加定时时间,在用户使用时间范围内,设备可以正常运转,超出使用时间后,设备被锁死,不再授权使用;
思路:因为我所使用的K600+触摸屏自带RTC,所以实现该功能是通过读取RTC的时间与用户的设定时间比较,若使用时间没有达到用户设定的时间,则触摸屏正常运行,若使用时间等于或超出用户设定的使用时间,则判断当前密码与用户输入后保存的密码是否一致,一致则不弹出锁定界面,不一致则弹出锁定界面并提示用户输入密码,用户输入密码正确,解锁,输入密码不正确,提示用户并持续锁定;
本工程一共编写了三期 时间锁定,每期的指令基本一致,只是调用不同的子程序,由于本程序为本人很久前编写,在程序结构上可能不够理想,如有更好的意见请指出,致谢!
下面对部分OS程序解释:
clear: LDWR R0,0X4100
MOVXR R10,1,1
IJNE R11,5AH,Go_End
LDWR R0,0X4101
MOVXR R10,1,1
LDWR R4,0210H ;0X0100 0000
LDWR R6,0000H
LDWR R0,0X4101 ;
MOVXL 3,2 ;新密码写入数据库
LDWR R0,0x4100 ;
LDBR R10,0,1
MOVXR R10,0,1
LDWR R0,0x4101 ;
LDBR R10,1,1
MOVXR R10,1,1
LDWR R0,0X4101
MOVXR R10,1,1
LDWR R4,0111H ;0X0100 0000
LDWR R6,0000H
LDWR R0,0X4101 ;
MOVXL 3,2 ;新密码写入数据库
LDWR R0,0x4100 ;
LDBR R10,0,1
MOVXR R10,0,1
LDWR R0,0x4101 ;
LDBR R10,1,1
MOVXR R10,1,1
LDWR R0,0X4101
MOVXR R10,1,1
LDWR R4,0112H ;0X0100 0000
LDWR R6,0000H
LDWR R0,0X4101 ;
MOVXL 3,2 ;新密码写入数据库
LDWR R0,0x4100 ;
LDBR R10,0,1
MOVXR R10,0,1
LDWR R0,0x4101 ;
LDBR R10,1,1
MOVXR R10,1,1
GOTO Go_End4
READTIMmima:
LDWR R4,0210H ;0X0018 0000
LDWR R6,0000H ;读取保存的时间1
LDWR R0,0X4500
MOVXL 2,6
;LDWR R0,0X4501 ;
MOVXR R10,1,3
LDWR R4,0200H ;0X0018 0000
LDWR R6,0000H ;读取保存的时间1
LDWR R0,0X4512
MOVXL 2,3
;LDWR R0,0X4513 ;
MOVXR R20,1,3
CJNE R10,R24,READTIME
CJNE R11,R25,READTIME
LDWR R0,0x4400 ; R0:R1 指定DGUS 变量地址0x0010
LDWR R160,0
MOVXR R160, 0, 1
GOTO Go_End2
SHURUMIMA:
LDWR R0,0X3051 ;读密码框,触摸屏手动输入的值
MOVXR R10,1,2 ;将变量地址0x3051、0x3052、0x3053、0x3054分别写传送给R10、R11、R12、R13
LDBR R14,0,1 ;0写入R14
OR R14,R10,1
OR R14,R11,1
OR R14,R12,1
OR R14,R13,1
IJNE R14,0,MIMANE0 ;密码框不为0
GOTO READTIMmima
MIMANE0:
LDWR R0,0X3051
MOVXR R10,1,1
LDWR R4,0210H ;0X0110 0000
LDWR R6,0000H
LDWR R0,0X3051 ;
MOVXL 3,2 ;新密码写入数据库
LDWR R0,0x3051 ;
LDBR R10,0,10
MOVXR R10,0,10
GOTO Go_End2
WriteSet:
LDWR R0,0X4007 ;
MOVXR R10,1,1 ;
IJNE R11,5AH,Go_End2 ;重建密码确认键是否按下
LDWR R0,0X4000
MOVXR R10,1,6
LDWR R4,0200H ;0X0100 0000
LDWR R6,0000H
LDWR R0,0X4000 ;
MOVXL 3,10 ;新密码写入数据库
LDWR R0,0x4000 ;
LDBR R10,0,20
MOVXR R10,0,10
GOTO Go_End2
READSET:
LDWR R4,0200H ;0X0018 0000
LDWR R6,0000H ;读取保存的时间1
LDWR R0,0X4020
MOVXL 2,5
GOTO Go_End2
;===========================================================
READTIME:
LDWR R0,0x4400 ; R0:R1 指定DGUS 变量地址0x0010
LDWR R200,0x005A
MOVXR R200, 0, 1
MOVDR 20H,R130,7
LDWR R0,0x6000
MOVXR R130, 0, 7 ;读取当前时间
;===========================================================
ZHUANHUAN:
MOV R130,R40,1
BCDHEX R40,R41,0X11 ;00010001
MOV R41,R150,1 ; 各1字节
MOV R131,R40,1
BCDHEX R40,R41,0X11
MOV R41,R152,1
TESTyear:
LDWR R0,0X4020 ;
MOVXR R137,1,2
JS R137,R149,TIM1JIAMI
CJNE R138,R150,Go_End2
JS R139,R151,TIM1JIAMI
GOTO Go_End2
TIM1JIAMI:
LDBR R30,0,16
LDWR R0,0X4022
MOVXR R36,1,1
LDWR R44,10
DIV R30,R38,0 ;判断密码个位数
LDWR R11,1 ;判断密码各位是否为1,为1跳转到GEWEI1
CJNE R45,R12,budeng1
GOTO GEWEI1
budeng1DWR R11,3;判断密码各位是否为3,为1跳转到GEWEI2
CJNE R45,R12,budeng2
GOTO GEWEI2
budeng2DWR R11,2 ;判断密码各位是否为4,为1跳转到GEWEI4
CJNE R45,R12,budeng124
GOTO GEWEI4
budeng124: LDWR R10,106 ;不判个位
MOVRD R10,3,2
GOTO Go_End2
GEWEI1:
LDWR R0,0x2500 ; R0:R1 指定DGUS 变量
LDWR R10,0x0004
MOVXR R10, 0, 1 ;设置2500=3;
LDWR R0,0x2602 ; R0:R1 指定DGUS 变量
LDWR R10,0x0001
MOVXR R10, 0, 1 ;设置2500=3;
IJNE R100,30,BUTIAO
GOTO TIAO
BUTIAO:
LDWR R10,107 ;切换到第106页,密码个位为1,在22文件里面设置道夫该页发送道夫=3;
MOVRD R10,3,2
INC R100, 0, 1
IJNE R100,30,Go_End2
TIAO:
LDWR R10,106 ;切换到第106页,密码个位为1,在22文件里面设置道夫该页发送道夫=3;
MOVRD R10,3,2
GOTO Go_End2
GEWEI2:
LDWR R0,0x2500 ; R0:R1 指定DGUS 变量
LDWR R10,0x0004
MOVXR R10, 0, 1 ;设置2500=3;
LDWR R0,0x2612 ; R0:R1 指定DGUS 变量
LDWR R10,0x0003
MOVXR R10, 0, 1 ;设置2500=3;
IJNE R102,30,BUTIAO1
GOTO TIAO1
BUTIAO1:
LDWR R10,107 ;切换到第106页,密码个位为1,在22文件里面设置道夫该页发送道夫=3;
MOVRD R10,3,2
INC R102, 0, 1
IJNE R102,30,Go_End2
TIAO1:
LDWR R10,113;切换到第106页,密码个位为1,在22文件里面设置道夫该页发送道夫=3;
MOVRD R10,3,2
GOTO Go_End2
GEWEI4:
LDWR R0,0x2500 ; R0:R1 指定DGUS 变量
LDWR R10,0x0004
MOVXR R10, 0, 1 ;设置2500=3;
LDWR R0,0x2622 ; R0:R1 指定DGUS 变量
LDWR R10,0x0002
MOVXR R10, 0, 1 ;设置2500=3;
IJNE R104,30,BUTIAO2
GOTO TIAO2
BUTIAO2:
LDWR R10,107 ;切换到第106页,锁定界面 ;
MOVRD R10,3,2
INC R104, 0, 1
IJNE R104,30,Go_End2
TIAO2:
LDWR R10,114 ;切换到第106页,锁定界面;
MOVRD R10,3,2
Go_End2:
RET
工程会在后续上传,谢谢!
备注说明:如需源码,请在评论区回复邮箱获取,谢谢!
|