项目日志:Day16 --- 2020.8.10

任务:

1. 屏幕界面屏保;
2. 批量烧录软件;


上午

前两天都在学VSQt,项目上没什么进展;
主要内容都记在学习笔记上了;

查资料找到了一个关于迪文屏OS开发和C51开发的解释,贴过来记录一下:

在这里插入图片描述
关于屏保和密码:
找到的资料是DWIN_OS操作,也就是说要用DWIN自定义的汇编代码来编写;
好在论坛上直接给了例程,只需要读懂代码再修改即可;
这么一看迪文的体系确实做的很完善;

贴上原例程汇编代码:

  ; DWIN OS    
	;0001H,0002H 密码录入
	;0003H,0004H 新建密码
	;0005H,0006H 再次录入
	;0007H 		 重建密码
	;0008H,0009H os交换占用DGUS地址
  	;初始密码没有写入flash部分,可以先启用超级密码,然后更改所需要的密码,而超级密码可以做一个保险密码,防止用户忘记密码后有补救. 
  	;超级密码:142536,记忆办法16交叉记忆 
 	;先明白数据库读写文档上面,800*480 的屏为例,设置要保存的变量地址 00000001这两个地址的数据, 假设历程有 50 张图片,计算数据库最小首地址:
	;{(50*3)-128}*64*1024=1572864,这里得到的地址是10进制地址
	;即最小首地址只要大于 1572864=0X0018 0000都可。密码存放在次位置
	;上面是用到存放图片的flash位置,我们把他那个部分当成数据库部分,注意不要用字库读写这个功能,未来的内核可能会去掉该功能  
	
	;如果能弄懂上面的密码程序,第三个屏保的程序也不难理解,注意一种情况键盘录入的时候长时间不动的时候,进入动画后也应该需要关闭键盘录才人性化一些。
	
	;Francesco,20151016	
  
  CALL	Password
  CALL	Change_password	
  CALL	Screensaver
  END

;=====================================	
Password: 								
		LDWR    R0,0X0001      ;读密码框
        MOVXR   R10,1,2
        LDBR    R14,0,1 
        OR      R14,R10,1
        OR      R14,R11,1
        OR      R14,R12,1
        OR      R14,R13,1
        IJNE    R14,0,DATA>0   ;密码框不为0
        GOTO    GEND	
DATA>0:     
        LDWR     R4,0018H		;0X0018 0000
        LDWR     R6,0000H
        LDWR     R0,0X0008      ;读数据库密码到缓冲区0X0008 0X0009
        MOVXL    2,2
        MOVXR    R16,1,2        ;读数据库密码到R16-R19
        TESTS    R10,R16,4      ;密码比较
        IJNE     R0,0,MA_ERR       
 MA_OK:
 		LDWR     R10,7         ;密码ok切换到07界面
        MOVRD    R10,3,2 
        LDWR     R0,0X0001      ;清空密码输入框
        LDBR     R10,0,4        ; 
        MOVXR    R10,0,2
        GOTO     GEND      
 MA_ERR:  
 		LDWR	 R20,0002H		;密码和原始密码不对,先比较是否为 超级密码142536
 		LDWR	 R22,2CC8H
 		TESTS    R10,R20,4      ;是超级密码就进入密码OK界面
        IJNE     R0,0,MA_ERR1   
        GOTO	 MA_OK 
 MA_ERR1:
        LDBR     R10,0,4        ;密码err    
        LDWR     R0,0X0001      ;清空密码输入框 
        MOVXR    R10,0,2
        LDWR     R10,2         ;密码错误切换到02界面
        MOVRD    R10,3,2                 
GEND:	RET	
;===========================================================
Change_password:
		LDWR	R0,0X0007       ;
		MOVXR	R10,1,1			;
		IJNE	R11,5AH,Go_End	;重建密码码确认键是否按下	
					
		LDWR    R0,0X0003      ;读新建密码框
        MOVXR   R10,1,2
        LDBR    R14,0,1 
        OR      R14,R10,1
        OR      R14,R11,1
        OR      R14,R12,1
        OR      R14,R13,1
        IJNE    R14,0,DATA1>0   ;密码框不为0		
		
		LDWR    R0,0X0005      ;读再次输入密码框
        MOVXR   R10,1,2
        LDBR    R14,0,1 
        OR      R14,R10,1
        OR      R14,R11,1
        OR      R14,R12,1
        OR      R14,R13,1
        IJNE    R14,0,DATA1>0   ;密码框不为0
		
		LDWR	R0,0x0003		;
		LDBR	R240,0,10
		MOVXR	R240,0,5		;清空密码输入框 按键
		GOTO    Go_End	
		
DATA1>0:		
		LDWR	R0,0003H             
		MOVXR	R20,1,2         ;将第一次输入的新密码读到R20,R21,R22,R23     
		LDWR	R0,0005H
		MOVXR	R30,1,2         ;将第二次输入的新密码读到R30,R31,R32,R33 
		CJNE	R20,R30,M_O_ERR	;
		CJNE	R21,R31,M_O_ERR ;
		CJNE	R22,R32,M_O_ERR	;
		CJNE	R23,R33,M_O_ERR ;判断两次密码是否相同,相同则继续执行,不同则跳转
		GOTO	SAVE_M 
M_O_ERR:      
		LDWR	R10,5			;切换到第5页两次密码不一致。
		MOVRD	R10,3,2			;
		LDWR	R0,0x0003		;
		LDBR	R240,0,10
		MOVXR	R240,0,5		;清空密码输入框 清空确认键
		GOTO	Go_End
              
SAVE_M:	LDWR    R4,0018H		;0X0018 0000
        LDWR    R6,0000H
		LDWR	R0,0X0003       ;             
		MOVXL	3,2             ;新密码写入数据库
		LDWR	R0,0x0003		;
		LDBR	R240,0,10
		MOVXR	R240,0,5		;清空密码输入框 清空确认键
		LDWR	R10,6			;切换到第06页两次密码一样新密码成功,牢记密码。
		MOVRD	R10,3,2					
Go_End:	
		RET
		
		
;===========================================================
Screensaver:		   
		IJNE	R100,0,Saver_Page
		LDBR	R100,1,1					;先定时,
 Set_Time:
		LDBR	R110,13H,1					;定时20秒左右,1338H=5000,5000*4=20000MS
		LDBR	R111,38H,1
		MOVRD	R110,4AH,2 			
		GOTO	Screensaver_End
Saver_Page:
		MOVDR	03H,R112,2					;记录当前页R40,R41=当前页
		LDWR	R114,8,						
		JS		R112,R114,Page_main			;判断是否在动画页面, 动画页面是从第8页开始的,页面>=8往下执行
TX_Only_once:		
		IJNE	R171,0,TX_Once_End
		LDBR	R171,1,1
LDWR R10,0  ;强制关闭当前输入法 不进行任何页面切换
EXIT R10,R10;这指令的用法不会自己翻下文档
		
TX_Once_End:		
		MOVDR	05H,R126,1					;如果DGUS寄存器05=5A触摸屏坐标有更新
		IJNE	R126,5AH,Screensaver_End	;判断在动画页面是否有触摸动作
		LDWR	R70,0						;
		MOVRD	R70,05H,2					;清零记录触摸动作的寄存器
		MOVRD	R150,03H,2					;返回之前进入动画的那个页面
		LDWR	R150,0						;清空记录的页面数
		LDBR	R100,0,1
  Page_main: 
  		LDBR	R171,0,1		;一次标志位写0 这里是说强制关闭当前输入法只有一次 避免重复运行
		MOVDR	05H,R250,1					;记录在正常显示页面触摸屏是否有按下
		IJNE	R250,5AH,Screensaver_Page
		LDWR	R70,0          
		MOVRD	R70,05H,2					;清空记录触摸动作的寄存器
		LDBR	R100,0,1
		GOTO	Screensaver_End
  Screensaver_Page:
		MOVDR	4AH,R160,2					; 判断计时器中的数据是否为零,否,计时
		IJNE	R160,0,Screensaver_End
		IJNE	R161,0,Screensaver_End
		MOVDR	03H,R150,2					;记录进入动画前的页面
		LDWR   R30,8						;切换到动画界面
		MOVRD  R30,03H,2					
		LDWR   R20,0          
		MOVRD  R20,05H,2					;清空记录触摸动作的寄存器			
Screensaver_End:	 			
		RET
;==================================================

常用汇编命令解释:

  1. LDWR
    在这里插入图片描述
    注意寄存器为8bit,也就是说是转载的是一个寄存器组,而且是立即数;

  2. LDBR
    在这里插入图片描述
    注意:若num大于1,则存储在连续的寄存器里;以及清零操作 LDBR R0, 0, 0;且都是将数据写入;

  3. MOVRD
    在这里插入图片描述

  4. MOVDR
    在这里插入图片描述
    从指令名可以区分,RD即是从寄存器到接口寄存器,而DR是从接口寄存器到寄存器;
    接口寄存器的值可能是控件值,也就是记录DGUS Tool操作的值;

  5. MOVXR
    在这里插入图片描述

  6. JS
    在这里插入图片描述
    这个比较指令和汇编的指令很像了,其余的两个也一起贴;

  7. JU / IJNE
    在这里插入图片描述

  8. RET
    在这里插入图片描述

  9. TESTS
    在这里插入图片描述
    在这里插入图片描述
    注意:最后对比值是返回给R0的;


下午

指令中的各个寄存器应该是有特定功能的,应该先弄清楚;查资料得:

基于 T5L 的 DWIN OS 一共有 2048 个寄存器,分成 8 页来访问,每页 256 个寄存器,对应 R0-R255;
基于 T5L 的 DWIN OS 有一个接口寄存器页,DR开头,一共有 256 个接口寄存器,用于对硬件资源的快速访问接口;
指令中 R#表示 DWIN OS 当前寄存器页内,任意 256 个寄存器之任意一个或一组,R0-R255;而页面的控制由接口寄存器 DR0 来控制;

看汇编代码有点乱呀,寄存器的值并不是所需要的值呀;
MOVXR交换的变量到底是哪个变量;
仔细看了一下指令说明:

数据变量指针由 R0:R1R0:R1 寄存器定义。R0R0、R1R1 可以看做是特殊可以看做是特殊专门用于变量地址存放的 os 寄存器,只要是涉及到要调用变量地址的处理的,先要把变量地址值给到 R0、R1,再使用指令MOVXR 或 MOVXX

也就是说当前操作变量默认存放在寄存器R0, R1中;
这样一来密码部分的代码就好懂了;

但是这屏保着实没看懂,寄存器的使用也太随便了;
将屏保改成亮度休眠了,只需修改CFG参数即可;

在这里插入图片描述
将休眠时亮度调成了1,相当于黑屏;
这样应该可以延长屏幕使用的寿命;
但有帖子说有发热现象,明天测试一下;
今日工作结束;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
优化下面代码.bg { width: 100%; height: 100vh; background-image: url('../../assets/img/info-bg.png'); background-size: 100% 100%; background-repeat: no-repeat; position: relative; font-family: AlibabaPuHuiTiR; .goBack { position: absolute; top: 34px; right: 65px; cursor: pointer; color: #ffffff; width: 181px; padding: 15px 10px; background: rgba(24, 31, 30, 0.52); border: 1px solid #4a524e; border-radius: 5px; font-size: 18px; font-family: AlibabaPuHuiTiR; z-index: 111; display: flex; flex-direction: row; justify-content: space-between; align-items: center; } .home-left { position: absolute; top: 18%; left: 40px; width: 41%; height: 76%; font-size: 24px; color: #ffffff; } .unit { font-size: 24px; color: #636363; } .home-left-title { font-size: 24px; color: #ffffff; line-height: 36px; } .home-right { position: absolute; top: 18%; right: 88px; width: 46%; height: 78%; } .model { display: flex; justify-content: center; align-items: center; height: 90%; } #threeContained { width: 100%; height: 100%; } .model-qk-img { width: 82%; height: 90%; background-image: url('../../assets/img/howo.png'); background-size: 100% 100%; background-repeat: no-repeat; } .model-zk-img { width: 56%; height: 90%; background-image: url('../../assets/img/heavyT.png'); background-size: 100% 100%; background-repeat: no-repeat; } .model-gj-img { width: 82%; height: 90%; background-image: url('../../assets/img/transit.png'); background-size: 100% 100%; background-repeat: no-repeat; } .car-online { margin-bottom: 50px; } } .day-data { display: flex; flex-direction: row; justify-content: space-between; align-items: center; height: 29%; margin-left: 30px; } .day-val { width: 40%; } .prefix { display: inline-block; width: 6px; height: 14px; background: #ffffff; margin-right: 20px; } .zh-title { margin-left: 30px; padding-top: 30px; font-size: 30px; font-weight: 700; text-align: left; color: #ffffff; line-height: 32px; letter-spacing: 0.3px; font-family: AlibabaPuHuiTiB; } .en-title { margin-left: 30px; font-size: 14px; font-weight: 400; text-align: left; color: #ffffff; line-height: 32px; letter-spacing: -0.91px; font-family: AlibabaPuHuiTiR; }
05-31

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值