迪文屏OS汇编代码开发-参数修改 保存 翻页(七)

news/2024/11/14 14:06:04/

; DWIN OS

;程序功能:上翻页,下翻页,参数修改,保存

;软件环境: DWIN OS ASM Builder V1.5

;硬件环境:DW K600+平台

;变量

;用户数据区地址从0x0600 0000开始分配,目前定义的参数区为40个 = 最大处方数。

;参数从0x0600 0000开始存储,参数区大小为16word

;参区1:0x0600 0000-0x0120 000F

;参区2:0x0600 0010-0x0120 001F

;参区3:0x0600 0020-0x0120 002F

;参区4:0x0600 0030-0x0120 003F

;参区5:0x0600 0040-0x0120 004F

;参区6:0x0600 0050-0x0120 005F

;...

;以下为程序占用的寄存器变量

;R214-R215 开机下发中英文标志

;R216-R217 处方应用后,发送温度修改指令

;R218-R219 处方页保存图标更新计数

;R220-R221 当前页序号+9存储地址

;R230-R233 当前显示页首地址

;R234-R237 当前显示页尾地址

;R238-R239 当前显示首页对应的序号

;R240-R244 删除页地址

;R249-R252 当前页面,记录首地址

;R253-R254 用于保存选择删除记录的图标位置,开机初始化0x4004

;0x2ffA 中英文图标

;0x2ffB 中英文按键

;0x2ffc 处方页保存图标地址

;0x2ffd 箭头左地址

;0x2ffe 箭头右地址

;临时使用变量 0x1001

;翻页后,更新选择标志为第一条处方,读取更新时间温度值。

;增加保存后显示保存成功图标

;开机1分钟后,发送保存的治疗时间和温度

;点击启动治疗后,保存治疗温度时间。

;中英文图标单独分配变量

;开机后发送中英文标志

;宏定义区域

保存键 EQU 0X1000

英文处方保存提示 EQU 0X2FF9

中英文图标 EQU 0X2FFA

中英文键 EQU 0X2FFB

中文处方保存提示 EQU 0X2FFC

显示键 EQU 0X3000

全部删除键 EQU 0X4000

应用按键 EQU 0X4000

删除键 EQU 0X4001

上页键 EQU 0X4002

下页键 EQU 0X4003

选择记录图标1 EQU 0X4004

选择记录键 EQU 0X400E

时间地址 EQU 0X4010

温度地址 EQU 0X4011

记录序号 EQU 0X4012

处方键 EQU 0x3000

每页记录数 EQU 10

最大处方数 EQU 40

中英文标志HA EQU 0X0600

中英文标志LA EQU 0X0500

处方标志HA EQU 0X0600

处方标志LA EQU 0X0510

BUF0HA EQU 0X0600

BUF0LA EQU 0X0000

中文开机界面 EQU 0X0001

英文开机界面 EQU 72

bit16 EQU 1

bit8 EQU 0

XR EQU 1

RX EQU 0

CALL 开机提醒

CALL 更新中英文标志

CALL 保存键处理函数

CALL 选择处方函数

CALL 处方按键按下处理函数

CALL 下翻页函数

CALL 上翻页按键处理函数

CALL 应用按键按下处理函数

CALL 周期判断执行函数

END

;------------------------------------程序模块======更新中英文标志------------------------------

;实时读取变量值,如果更改,保存用户数据

更新中英文标志:

LDWR R0,中英文键 ;将中英文键地址赋值给R0 R1

;读取中英文键地址的数据到R10 R11

MOVXR R10,1,1 ;2字节变量数据到寄存器R10 R11

IJNE R11,1,继续判断英文;判断读取的按键值是否为1;1是中文,2是英文

;保存中文标志

LDWR R10,0X0001;

LDWR R4,中英文标志HA ;读取保存中英文标志数据

LDWR R6,中英文标志LA

CALL 写1W用户数据

;更新中文图标显示

LDWR R0,中英文图标

LDWR R10,0X0001

MOVXR R10,RX,1

;COMTXI 0,R10,2;

;clear button value

LDWR R0,中英文键

LDWR R10,0X0000

MOVXR R10,RX,1

RET

继续判断英文:

IJNE R11,2,结束判断;判断读取的按键值是否为2

;保存英文标志

LDWR R10,0X0002;

LDWR R4,中英文标志HA ;读取保存中英文标志数据

LDWR R6,中英文标志LA

CALL 写1W用户数据

;更新显示英文图标显示

LDWR R0,中英文图标

LDWR R10,0X0002

MOVXR R10,RX,1

;COMTXI 0,R10,2;

;clear button value

LDWR R0,中英文键

LDWR R10,0X0000

MOVXR R10,RX,1

RET

结束判断:

RET

;--------------------------------------END----------------------------------------

;------------------------------------程序模块======读取中英文标志-------------------------

读取中英文标志:;切换开机界面

LDWR R4,中英文标志HA ;读取保存的中英文标志数据

LDWR R6,中英文标志LA

CALL 读1W用户数据

MOVXR R50,XR,1; 1个字

LDWR R52,0XAA01;调试串口

COMTXI 0,R50,4;发送中英文

IJNE R50,0,英文标志 ;1是中文,else是英文

IJNE R51,1,英文标志

;确定为中文标志

LDWR R10,中文开机界面 ;跳转中文界面

MOVRD R10,3,2

;更新中文图标

LDWR R0,中英文图标

LDWR R10,0X0001

MOVXR R10,RX,1

RET

英文标志:

LDWR R10,英文开机界面 ;跳转英文界面

MOVRD R10,3,2

;更新英文图标

LDWR R0,中英文图标

LDWR R10,0X0002

MOVXR R10,RX,1

;结束读取中英文:

RET

;--------------------------------------END----------------------------------------

;------------------------------------程序模块======清除保存图标------------------------------

周期判断执行函数:

LDWR R10,0x0001;

JS R218,R10,不需要清保存图标; R218R219 >=1,需要清图标

;需要清图标

INC R218,bit16,1;i++

;COMTXI 0,R219,1;发送显示的序号

LDWR R10,0x000A;

JS R218,R10,不需要清保存图标; R218R219 >=10,需要清图标

;清除保存图标

LDWR R0,中文处方保存提示;1个16为立即数到寄存器

LDWR R10,0;

MOVXR R10,RX,1;寄存器值赋值给dgus寄存器

LDWR R0,英文处方保存提示;1个16为立即数到寄存器

LDWR R10,0;

MOVXR R10,RX,1;寄存器值赋值给dgus寄存器

LDWR R218,0x0000;清除保存图标显示标志位

不需要清保存图标:

;--------------------------------------END----------------------------------------

;------------------------------程序模块======延时200ms下发温度数据--------------------------

LDWR R10,0x0001;

JS R216,R10,不用下发温度数据; R216R217 >=1,需要发温度数据

;需要发温度数据

INC R216,bit16,1;i++

LDWR R10,0x0003;

JS R216,R10,不用下发温度数据; R216R217 >=5,需要发温度数据

;发温度数据

LDWR R40,0XAA55 ;

LDWR R42,0X0683 ;

LDWR R44,0X0001 ;

LDWR R46,0X0100 ;

LDWR R48,0X0600;R48写入数据4010

LDWR R0,温度地址;1个16为立即数到寄存器

MOVXR R47,XR,1;变量到寄存器

COMTXI 0,R40,9; 发送给单片机,

LDWR R216,0x0000;清除下发温度数据标志

不用下发温度数据:

;--------------------------------------END----------------------------------------

;------------------------------程序模块======开机下发中英文标志--------------------------

LDWR R10,0x0001;

JS R214,R10,不用下发中英文; R214R215 >=1,需要发中英文状态

;需要发中英文状态

INC R214,bit16,1;i++

;发中英文数据

LDWR R40,0XAA55 ;

LDWR R42,0X0683 ;

LDWR R44,中英文键 ;模拟中英文按键

LDWR R46,0X0100 ;

LDWR R48,0X0000;R48写入数据

LDWR R0,中英文图标;1个16为立即数到寄存器

MOVXR R47,XR,1;变量到寄存器

COMTXI 0,R40,9; 发送给单片机,

LDWR R10,0x0010;

JS R214,R10,不用下发中英文; R214R215 >=10,清除标志

LDWR R214,0x0000;清除下发中英文标志

不用下发中英文:

;--------------------------------------END----------------------------------------

RET

;------------------------------应用按键按下处理函数-------------------------

应用按键按下处理函数:

;将保存按键地址赋值给R0 R1

LDWR R0,应用按键;

;读取按键地址的数据到R10 R11

MOVXR R10,1,1 ;2字节变量数据到寄存器R10 R11

IJNE R11,1,应用按键未按下;判断读取的按键值是否为1

;应用按键按下,发送温度,时间数据

;时间:AA 55 06 83 00 00 01 00 20

;温度:AA 55 06 83 00 01 01 00 06

;时间地址:4010-0000

;温度地址:4011-0001

LDWR R40,0XAA55 ;

LDWR R42,0X0683 ;

LDWR R44,0X0000 ;

LDWR R46,0X0100 ;

LDWR R48,0X2000;R48写入数据4010

;更新时间数据,发送单片机

LDWR R0,时间地址;1个16为立即数到寄存器

MOVXR R47,XR,1;变量到寄存器

COMTXI 0,R40,9; 发送给单片机,

;时间温度数据写入显示屏

LDWR R0,时间地址;源数据地址

LDWR R2,0X0000

MOVXX 2;时间、温度数据送显示

LDWR R0,应用按键;1个16为立即数到寄存器

LDWR R10,0X0000;

MOVXR R10,0,1;寄存器值赋值给dgus寄存器

LDBR R216,0,1;216 = 0

LDBR R217,1,1;217 = 1;延时发送温度修改串口数据标志位

应用按键未按下:

RET

;--------------------------------------END----------------------------------------

;------------------------------处方按键按下处理函数-------------------------

处方按键按下处理函数:

LDWR R0,处方键;

;读取按键地址的数据到R10 R11

MOVXR R10,1,1 ;2字节变量数据到寄存器R10 R11

IJNE R11,1,处方键未按下;判断读取的按键值是否为1

; 显示处方数据,初始化

;清零记录序号

LDWR R0,记录序号;数据地址写入R0R1指针

LDWR R10,0;LDWR R10,0X0000;

MOVXR R10,RX,1;寄存器值赋值

CALL 显示处方数据函数

;更新显示前10条的处方名字

;清除按下的按键

LDWR R0,处方键;1个16为立即数到寄存器

LDWR R10,0X0000;

MOVXR R10,0,1;寄存器值赋值给dgus寄存器

处方键未按下:

RET

;--------------------------------------END----------------------------------------

;=========================================子程序单元==========================================

;显示处方数据,根据处方序号,刷新显示整页10条处方数据

;记录序号存储在0x4012中

;=========================================子程序单元==========================================

显示处方数据函数:

LDWR R10,1

LDWR R0,选择记录键;

MOVXR R10,RX,1;

LDBR R30,0,1; i=0

LDBR R31,10,1; 每页显示10调数据

;序号值N*16 = 偏移地址

LDBR R40,0,16;寄存器清零

LDWR R0,记录序号;

MOVXR R42,XR,1;读出当前序号值N

LDWR R46,0x10;16

;COMTXI 0,R40,16;

MAC R40,R44,R48;N*16 R52-R55为偏移地址

;COMTXI 0,R40,16;发送显示的序号

;基地址 + 偏移地址 = 数据地址

MOV R52,R40,4;偏移地址写入40

LDWR R44,BUF0HA ;0x06000000 基础地址

LDWR R46,BUF0LA ;

ADD R40,R44,R48; R52-R55为数据地址

;COMTXI 0,R40,16;发送显示的序号

MOV R52,R4,4;增加后的结果重新写入R4,得到当前页第一条记录地址

;COMTXI 0,R4,4;发送显示的序号

LDWR R2,0x2000;数据显示地址1

;COMTXI 0,R0,4;

继续读处方FLASH数据:

;COMTXI 0,R4,4;用户地址

CALL 读3W用户数据; 读出到0x1001-0x1003, 时间温度序号

;COMTXI 0,R2,2;

MOVXX 3;时间温度序号暂存到2000地址,处方1显示位置

;如果是2000地址,更新时间温度数据

LDWR R40,0X20000

CJNE R2,R40,继续读处方数据

CJNE R3,R41,继续读处方数据

MOV R2,R40,2;暂存R2R3寄存器内容

LDWR R0,0X2000;源数据地址

LDWR R2,时间地址

MOVXX 2;读出的用户数据写入时间地址、温度地址

MOV R40,R2,2;独处暂存器内容

继续读处方数据:

;i++

INC R30,0,1

;r4r5r6r7 +16;

;flash基础地址+16

LDBR R40,0,16;寄存器清零

MOV R4,R40,4

LDWR R46,0x10;加16

ADD R40,R44,R48;R52 R53 R54 R55

MOV R52,R4,4;增加后的结果重新写入R4

;r2地址+16

LDBR R40,0,16;寄存器清零

MOV R2,R42,2

LDWR R46,0x10;加16

ADD R40,R44,R48;R52 R53 R54 R55

MOV R54,R2,2;增加后的结果重新写入R2

CJNE R30,R31,继续读处方FLASH数据

RET

;--------------------------------------END----------------------------------------

;=========================================子程序单元==========================================

;功能:保存当前的时间、温度数据。

;逻辑:根据记录序号--当前数据flash地址--时间地址+温度地址数据保存到flash

;=========================================子程序单元==========================================

保存键处理函数:

LDWR R0,保存键; ;将保存按键地址赋值给R0 R1

;读取按键地址的数据到R10 R11

MOVXR R10,1,1 ;2字节变量数据到寄存器R10 R11

IJNE R11,1,保存未按下;判断读取的按键值是否为1

;保存当前选中的处方数据。

;显示图标对应的时间温度数据,N*16 = 偏移地址

;选择序号+首处方序号 = 新的N

LDBR R40,0,16;寄存器清零

MOV R253,R42,2;当前选中的处方号0-9

LDWR R0,记录序号;

MOVXR R46,XR,1;读出当前序号值

ADD R40,R44,R48;R52 R53 R54 R55 新的N

;COMTXI 0,R40,16;发送显示的序号

MOV R52,R40,4;新的N

LDBR R44,0,12;寄存器清零

LDWR R46,0x10;16

MAC R40,R44,R48;新的N*16 R52-R55为偏移地址

;COMTXI 0,R40,16;发送显示的序号;COMTXI 0,R52,4;发送显示的序号

;基地址 + 偏移地址 = 数据地址

MOV R52,R40,4;偏移地址写入40

LDWR R44,BUF0HA ;

LDWR R46,BUF0LA ;

ADD R40,R44,R48; R52-R55为数据地址

MOV R52,R4,4;当前选中处方的flash地址

; COMTXI 0,R4,4;发送显示的序号

;保存显示的温度和时间到flash

;R4-R7 地址

LDWR R0,时间地址;r0 r1制定变量地址

MOVXL 3,2

LDWR R0,保存键;1个16为立即数到寄存器

LDWR R10,0X0000;

MOVXR R10,0,1;寄存器值赋值给dgus寄存器

;显示保存成功图标

LDWR R0,中文处方保存提示;1个16为立即数到寄存器

LDWR R10,1;

MOVXR R10,RX,1;寄存器值赋值给dgus寄存器

LDWR R0,英文处方保存提示;1个16为立即数到寄存器

LDWR R10,2;

MOVXR R10,RX,1;寄存器值赋值给dgus寄存器

LDBR R218,0,1;218 = 0

LDBR R219,1,1;219 = 1;选择一个标志位,用于更新显示保存图标的状态

保存未按下:

RET

;--------------------------------------END----------------------------------------

;=========================================子程序单元==========================================

开机提醒:

IJNE R255,0,BEEPEND; 变量立即数比较

LDBR R10,100,1;立即数到寄存器

MOVRD R10,2,1;寄存器R10到DGUS屏幕寄存器2,D2寄存器为蜂鸣器寄存器

LDBR R255,1,1 ;立即数到寄存器,标志位

;读取flash数据,如果不等于1,初始化处方数据;如果等于1,不再初始化处方。

CALL 读取中英文标志 ;

CALL OS_MODIFY_TOUCH_SENSITIVITY ;OS修改触摸灵敏度 子进程,上电执行一次

LDWR R214,0X0001;使能开机发送中英文标志

LDWR R4,处方标志HA;

LDWR R6,处方标志LA;

CALL 读1W用户数据;读取记录数

MOVXR R22,XR,1

LDWR R52,0XAA02

COMTXI 0,R52,2;

COMTXI 0,R22,2;

IJNE R22,0x0f,初始化处方;不相等就跳转,初始化处方

LDWR R52,0XAA03

COMTXI 0,R52,2;

GOTO BEEPEND

初始化处方:

;保存处方 标志

LDWR R10,0X0f0f;

LDWR R4,处方标志HA;

LDWR R6,处方标志LA;

CALL 写1W用户数据

;================开机初始化数据,所有处方数据都是1,2

LDBR R30,0,1; i=0

LDBR R31,最大处方数,1; 40

LDWR R10,0x0a; 初始写入的数据,时间

LDWR R12,0x0c;初始写入的数据,温度

LDWR R14,0x01;处方序号

LDWR R4,BUF0HA;处方首地址0x01200000

LDWR R6,BUF0LA

LDBR R40,0,16;寄存器清零

继续初始化处方:

; COMTXI 0,R4,4;

CALL 写3W用户数据;R10R11R12R13R14R15写入flash0x01200000

INC R11,0,1;改变时间

INC R15,0,1;处方序号++

INC R30,0,1;i++

COMTXI 0,R14,2;

;r4r5r6r7 +16;

MOV R4,R40,4

LDWR R46,0x10;加16

ADD R40,R44,R48;R52 R53 R54 R55

MOV R52,R4,4;增加后的结果重新写入R4

CJNE R30,R31,继续初始化处方

BEEPEND:

RET

;--------------------------------------END----------------------------------------

;=========================================子程序单元==========================================

读1W用户数据: ;读出到1001

LDWR R0,0x1001;

MOVXL 2,1;读出序号内容到0x1001

RET

;=========================================子程序单元==========================================

读2W用户数据: ;读出到1001

LDWR R0,0x1001;

MOVXL 2,2;读出序号内容到0x1001

RET

;=========================================子程序单元==========================================

读3W用户数据: ;读出到1001

LDWR R0,0x1001;

MOVXL 2,3;读出序号内容到0x1001-0x1003

RET

;=========================================子程序单元==========================================

写1W用户数据: ;R10为要写入的变量值,

LDWR R0,0X1001; 初始化R0

MOVXR R10,0,1; 1个字长度数据写入0x1001;

MOVXL 3,1;变量数据到用户数据库

RET

;=========================================子程序单元==========================================

写2W用户数据: ;R10 R11= H16,R12 R13= L16 ,R4-R7 地址

LDWR R0,0X1001;r0 r1制定变量地址

MOVXR R10,0,2

MOVXL 3,2

RET

;=========================================子程序单元==========================================

;涉及寄存器R10-R15,涉及变量地址0X1001-0X1003

写3W用户数据: ;R10 R11= H16,R12 R13= L16 ,R14R15,R4-R7 地址

LDWR R0,0X1001;r0 r1制定变量地址

MOVXR R10,RX,3

MOVXL 3,3

RET

;=========================================子程序单元==========================================

发送R0数据:

MOVXR R100,1,1;读出数据到寄存器

;COMTXI 0,R100,2;串口发送数据

RET

;=========================================子程序单元==========================================

发送R0R1数据:

MOVXR R100,XR,2;

;COMTXI 0,R100,4;

RET

;=========================================子程序单元==========================================

;根据给定的地址,对地址进行偏移操作后,读出地址内容数

;参数:地址:R4-R6,偏移量:R56-R59,读出数据:R4-R6

读偏移2W数据:

LDBR R40,0,16

MOV R4,R40,4

MOV R56,R44,4

ADD R40,R44,R48;R52 R53 R54 R55

MOV R52,R4,4

CALL 读2W用户数据

MOVXR R4,XR,2

;=========================================子程序单元==========================================

READ_ADD_WRITE_DATA:

;功能:根据给定的地址--读出给定地址内容--对内容加操作--以新内容为地址写入数据

;参数:设置地址:R4-R6,内容增量:R36-R39,写入数据:R56-R59

LDWR R0,0x1001;

MOVXL 2,2;读出内容

;加操作

LDBR R40,0,16

MOV R36,R44,4

MOVXR R40,XR,2

;COMTXI 0,R40,8

ADD R40,R44,R48;R52 R53 R54 R55

;COMTXI 0,R52,8;地址 01300002

;写入

MOV R52,R4,4

LDWR R0,0X1001;

MOVXR R56,RX,2

MOVXL 3,2 ;写

RET

;=========================================子程序单元==========================================

READ_DATA_WRITE_ADD:

;功能:根据给定的地址--读出给定地址内容--对内容加操作--以新内容为地址读出其中的数据,写入R70-R73

;参数:给定的地址存储在R56-R59,设置地址增量到R39,新地址 R70-R73

MOV R56,R4,4

LDWR R0,0x1001;

MOVXL 2,2;读出内容

;加操作

LDBR R40,0,16

MOV R39,R47,1

MOVXR R40,XR,2

ADD R40,R44,R48;R52 R53 R54 R55

;COMTXI 0,R52,4;新地址

MOV R52,R4,4

LDWR R0,0x1001;

MOVXL 2,2;读出内容

MOV R70,R4,4

MOVXL 3,2 ;写

RET

;=========================================子程序单元==========================================

READ_DATA_WRITE_DATA:;功能:根据给定的地址--读出给定地址内容--对内容进行减操作后写入原给定地址

;给定地址地址R4-R6,数据增量R39

LDWR R0,0x1001;

MOVXL 2,2;读出内容

;减操作

LDBR R40,0,16

MOV R39,R47,1

MOVXR R40,XR,2

SUB R40,R44,R48;R52 R53 R54 R55

;COMTXI 0,R40,16

;COMTXI 0,R52,8;地址 01300002

;写入

LDWR R0,0X1001;

MOVXR R52,RX,2

MOVXL 3,2 ;写

RET

;=========================================子程序单元==========================================

READ_PLUS_DATA_WRITE_BACK:;功能:根据给定的地址--读内容--对内容进行加操作后写入原给定地址

;给定地址地址R4-R6,数据增量R36-R39

LDWR R0,0x1001;

MOVXL 2,2;读出内容

;加操作

LDBR R40,0,16

MOV R36,R44,4

MOVXR R40,XR,2

ADD R40,R44,R48;R52 R53 R54 R55

;COMTXI 0,R52,8;地址 01300002

;写入

LDWR R0,0X1001;

MOVXR R52,RX,2

MOVXL 3,2 ;写

RET

;=========================================子程序单元==========================================

;=========================================子程序单元==========================================

;功能:获取要删除的记录地址

;参数: 当前页面记录首地址:R249-R252,选择的记录序号:R253-R254 结果地址:R240-R244

获取删除页地址:

LDBR R30,0,1; i=0

MOV R249,R4,4;当前页面,记录首地址

LDWR R36,0

LDWR R38,2;偏移地址

IJNE R254,0,继续检索

GOTO 找到删除页地址

继续检索:

INC R30,0,1;i++

ADD R4,R36,R48;R52 R53 R54 R55

MOV R52,R4,4

CALL 读2W用户数据;读出数据

MOVXR R4,XR,2;更新地址R4 R6

CJNE,R30,R254,继续检索

找到删除页地址:

MOV R4,R240,4

RET

;=========================================子程序单元==========================================

;=========================================子程序单元==========================================

;功能:获取当前页面选择的记录号,范围(1-10),存储在R253-R254

;图标地址存储在0X4004-0X400D

;按键地址存储在0X400E

选择处方函数:

LDWR R12,1

LDWR R0,选择记录键;

MOVXR R10,XR,1;保存当前选中的处方

JS R10,R12,未操作记录选择键;>=1执行,小于1跳转

;按下记录选择键,读取按键值R10-R11,清空图标内容,显示按下记录对应的图标

LDBR R40,0,20

LDWR R0,0X4004

MOVXR R40,RX,10;清空图标

;送显示图标

LDWR R0,选择记录图标1

;COMTXI 0,R10,2;发送显示的序号

MOV R10,R253,2;保存选择的序号

DEC R253,1,1

INC R10,0,0x40;选择图标序号+图标1的基础地址

INC R11,0,0x03;地址低位

MOV R10,R0,2;图标显示地址

LDWR R14,1;图标默认值

MOVXR R14,RX,1;写入图标值

;======================增加显示选中的时间温度数据

;COMTXI 0,R253,2;发送显示的序号

;显示图标对应的时间温度数据,N*16 = 偏移地址

;选择序号+首处方序号 = 新的N

LDBR R40,0,16;寄存器清零

MOV R253,R42,2;当前选中的处方号0-9

LDWR R0,记录序号;

MOVXR R46,XR,1;读出当前序号值

ADD R40,R44,R48;R52 R53 R54 R55 新的N

;COMTXI 0,R40,16;发送显示的序号

MOV R52,R40,4;新的N

LDBR R44,0,12;寄存器清零

LDWR R46,0x10;16

MAC R40,R44,R48;新的N*16 R52-R55为偏移地址

;COMTXI 0,R40,16;发送显示的序号;COMTXI 0,R52,4;发送显示的序号

;基地址 + 偏移地址 = 数据地址

MOV R52,R40,4;偏移地址写入40

LDWR R44,BUF0HA ;

LDWR R46,BUF0LA ;

ADD R40,R44,R48; R52-R55为数据地址

MOV R52,R4,4

;COMTXI 0,R4,4;发送显示的序号

CALL 读2W用户数据; 读出到1001,送时间温度/处方序号显示

LDWR R2,时间地址

;COMTXI 0,R0,4;

MOVXX 2;读出的用户数据写入时间地址、温度地址

LDWR R0,0X1001

MOVXR R180,1,2

;COMTXI 0,R180,4;

LDWR R0,0X4010

MOVXR R180,1,2

;COMTXI 0,R180,4;

;======================

LDWR R0,选择记录键 ;清除按键值

LDWR R10,0X0000

MOVXR R10,0,1

未操作记录选择键:

RET

;=========================================子程序单元==========================================

;上翻页函数

;=========================================子程序单元==========================================

上翻页按键处理函数:

LDWR R0,上页键;

MOVXR R10,XR,1 ;

IJNE R11,1,上页键未按下;判断读取的按键值是否为1

;比较当前处方序号

LDWR R0,记录序号;数据地址写入R0R1指针

MOVXR R10,1,1; 读出当前页第一条处方对应的处方序号

LDWR R20,10; 第一条记录号大于等于10,执行减翻页操作,else不翻页。

;COMTXI 0,R10,2;

;COMTXI 0,R20,2;39

JS R10,R20,清除上翻页按键值;A>=B执行下一条指令,A<B跳转。

;记录序号-10,读FLASH数

LDBR R40,0,16;寄存器清零

LDWR R46,每页记录数 ;每页10条记录

LDWR R0,记录序号;

MOVXR R42,XR,1;读出当前序号值

SUB R40,R44,R48;R52 R53 R54 R55

LDWR R0,记录序号;

MOVXR R54,RX,1;寄存器值赋值给dgus变量4012

CALL 显示处方数据函数

清除上翻页按键值:

LDWR R0,上页键;1个16为立即数到寄存器

LDWR R10,0X0000;

MOVXR R10,0,1;寄存器值赋值给dgus寄存器

上页键未按下:

RET

;=========================================子程序单元==========================================

;=========================================子程序单元==========================================

;下翻页

;=========================================子程序单元==========================================

下翻页函数:

LDWR R0,下页键;

MOVXR R10,XR,1 ;

IJNE R11,1,下页键未触发;判断读取的按键值是否为1

;下页键按下,不超过最大处方数,执行+10

;LDWR R20,0XCCDD

;COMTXI 0,R20,2;

;比较当前处方序号

LDWR R0,记录序号;数据地址写入R0R1指针

MOVXR R10,1,1; 读出当前页第一条处方对应的处方序号

LDWR R20,29;40条处方,最后一页第一个处方是30,最大处方数 - 11 ;LDWR R20,最大处方数- 11

;COMTXI 0,R10,2;

;COMTXI 0,R20,2;39

JS R10,R20,执行下翻页操作;A>=B执行下一条指令,A<B跳转。

GOTO 清除下翻页按键值;不进行翻页

执行下翻页操作:

;LDWR R20,0XEEFF

;COMTXI 0,R20,2;

;记录序号+10,读FLASH数

LDBR R40,0,16;寄存器清零

LDWR R42,每页记录数 ;每页10条记录

LDWR R0,记录序号;

MOVXR R46,XR,1;读出当前序号值

ADD R40,R44,R48;R52 R53 R54 R55

;MOV R52,R4,4;增加后的结果重新写入R4,得到当前页第一条记录地址

;更新处方序号数值

LDWR R0,记录序号;

MOVXR R54,RX,1;寄存器值赋值给dgus变量4012

;COMTXI 0,R54,2;10

CALL 显示处方数据函数

清除下翻页按键值:

LDWR R0,下页键;1个16为立即数到寄存器

LDWR R10,0X0000;

MOVXR R10,0,1;寄存器值赋值给dgus寄存器

下页键未触发:

RET

;=========================================子程序单元==========================================

;=========================================子程序单元==========================================

;OS修改触摸灵敏度 子进程

OS_MODIFY_TOUCH_SENSITIVITY:

LDBR R20,0,10

MOVDR 0xE0,R20,6;DGUS寄存器 0xE0-0xE5

LDBR R20,0x5A,1 ;0xE0 5A 表示执行一次 触摸配置

LDBR R21,0x5A,1 ;0xE1 5A表示掉电保存,其他值表示掉电不保存

LDBR R23,0x1E,1 ;0xE3 默认值 0x1E

LDBR R24,0x08,1 ;0xE4 默认值 0x08

LDBR R25,0x0A,1 ;0xE5 默认值 0x0A

;在此做灵敏度值的调整

LDBR R22,0x1E,1 ;范围 0x00-0x1F,值越大灵敏度越高

;

MOVRD R20,0xE0,6

RET

;=========================================子程序单元==========================================


http://www.ppmy.cn/news/139784.html

相关文章

安卓app+esp8266+51单片机+光敏电阻+lcd1602实现智能照明系统

本文是本人51单片机和物联网的期末课程设计&#xff0c;没学过打板焊接&#xff0c;只用面包板和公母线实现。 安卓和esp8266控灯主要参考Android Studio设计APP实现与51单片机通过WIFI模块&#xff08;ESP8266-01S&#xff09;通讯控制LED灯亮灭的设计源码【详解】_手机app通…

码农的自我修养 - ARM处理器天梯图

ARM芯片族 - 架构 - 内核 - 总线速度列表&#xff1a; ARM GROUP ARM architecture ARM core Bus Speed ARM1 ARMv1 ARM1 ARM2 ARMv2 ARM2 4 MIPS 8 MHz 0.33 DMIPS/MHz ARMv2a ARM250 7 MIPS 12 MHz ARM3 ARMv2a ARM3 12 MIPS 25 MHz 0…

ARM各内核系列整型运算能力对比---DMIPS / MHz

DMIPS&#xff1a;Dhrystone Million Instructions executed Per Second &#xff08;百万条整数运算指令/秒&#xff09;&#xff0c;用于衡量CPU整数计算能力。 超标量处理器&#xff1a; 是指在一颗处理器内核中实现了指令级并行的一类并行运算。在这里就是 DMIPS/MHz 大于…

RISC-V与ARM

RISC-V与ARM RISC-V 架构RISC-V架构特点ARM 架构RISC-V 与 ARM 指令集架构 (ISA) 基本上是汇编级程序员&#xff0c;或编译器编写者可见的机器部分。 ISA 是软件与硬件相遇的地方。 ISA 定义了机器及其微架构本身可以理解的命令/指令&#xff0c;它还定义了如何存储、访问和实施…

STM32 WAVWM8978简介

​ WAV即WAVE文件&#xff0c;是最常用的数字化声音文件格式之一&#xff0c;其扩展名为“.wav”。符合RIFF(Resource Interchange File Format)文件规范&#xff0c;用于保存Windows平台的音频信息资源&#xff0c;被Windows平台及其应用程序所广泛支持。 WAV格式还支持MS ADP…

ARM在汽车电子电器架构的应用

整理自ARM中国FAE高级经理及技术专家丁先生在集微网的演讲&#xff0c;侵删。 该演讲涵盖了汽车电子电器架构的多个方面&#xff0c;整体包含的知识面非常广。整个演讲非常精彩&#xff0c;也是非常佩服丁先生在汽车电子电器架构及ARM在其中的应用的精彩阐述。 本人也是从事汽…

WAVWM8978

一、WAV WAV即WAVE文件&#xff0c;是最常用的数字化声音文件格式之一&#xff0c;扩展名为‘.wav’,用于保存Windows平台的音频信息资源。WAV格式还支持MS ADPCM、CCITT A LAW 等多种压缩运算法&#xff0c;支持多种音频数字&#xff0c;取样频率和声道。标准格式化的WAV文件和…

PL51RC003

PL51RC003 是高度集成的非接触式&#xff08;13.56MHz&#xff09;读写器SOC。此发送模块利用调制和解调的原理&#xff0c;并将它们完全集成到各种非接触式通信方法和协议中&#xff08;13.56MHz&#xff09;。发送模块支持读写器模式&#xff0c;支持 ISO14443A/MIFARE。 PL5…