📄 xdxhfsq.asm
字号:
MOV R4, #00H ;初始化清0,主菜单中光标在ECG
MOV PSW, #10H ;程序状态字的RS1、RS0=10B,即用2区
MOV R1, #1EH ;初始化是30
MOV PSW, #18H ;程序状态字的RS1、RS0=18B,即用3区
MOV R5, #04H ;初始化是4
MOV PSW, #00H ;程序状态字的RS1、RS0=00B,即用0区
MOV 2DH, #00H ;中断次数计数器清0
MOV 59H, #0FFH ;键盘口读值初始化为FFH(键没按)
MOV 5AH, #00H ;键值为0
MOV A, #38H ;
LCALL L0704H ;调L0704H子程序。执行38#指令:8位数据线,两行,5*7点阵
MOV A, #0CH ;
LCALL L0704H ;调L0704H子程序。执行0C#指令:显示开,光标不显示,光标不闪烁
MOV A, #06H ;
LCALL L0704H ;调L0704H子程序。执行06#指令:光标右移1位,显示不移
MOV A, #01H ;
LCALL L0704H ;调L0704H子程序。执行01#指令:清屏
MOV A, #40H ;
LCALL L0704H ;调L0704H子程序。执行40#指令:CGRAM地址从00H开始
MOV R7, #38H ;7个特殊字符的点阵字库拷贝到液晶显示器的点阵库中,共计56字节
MOV R1, #00H ;
L00CCH: ;
MOV DPTR, #0785H ;
MOV A, R1 ;
MOVC A, @A+DPTR ;查表0785H中偏移(R1)开始的1个字节送到A中
LCALL L06FCH ;调L06FCH子程序:将数据写入液晶数据寄存器中
INC R1 ;R1的内容加1
DJNZ R7, L00CCH ;若R7的内容减1不为0则跳转至L00CCH
MOV A, #80H ;80#指令:首行显示,首行DDRAM地址从00H开始
MOV R0, #30H ;
MOV R7, #10H ;将从30H开始的16个字符写入到数据寄存器中。16个字符为:-ECG-ARRHY-WAVE-
LCALL L0718H ;调L0718H子程序。查询液晶状态BF,若为0则写入指令代码,再写入数据到数据寄存器中
MOV A, #0C0H ;C0#指令:次行显示,次行DDRAM地址从40H开始
MOV R0, #40H ;
MOV R7, #10H ;将从40H开始的16个字符写入到数据寄存器中。16个字符为:-Please-select--
LCALL L0718H ;调L0718H子程序。查询液晶状态BF,若为0则写入指令代码,再写入数据到数据寄存器中
MOV A, #81H ;81#指令:光标在首行DDRAM地址从01H位
LCALL L0704H ;调L0704H子程序
MOV A, #0EH ;0E#指令:显示开,光标显示,闪烁关
LCALL L0704H ;调L0704H子程序
SETB TR0 ;允许T0记数
SETB TR1 ;允许T1记数
MOV IE, #82H ;IE=10000010B,即EA=1,ET0=1,允许T0的5mS定时到中断
L00FAH: ;
MOV A, 2DH ;判断中断了没有
JZ L00FAH ;没,继续等待
;===============================;
;键处理及显示模块 ;
;===============================;
MOV A, 5AH ;中断发生过,将键值送A
JZ L010EH ;没有可用的键,跳过键处理,转闪烁显示处理
MOV PSW, #08H ;开始键处理,一般键处理使用1区
MOV 5AH, #00H ;清楚键值
MOV DPTR, #JUMPTAB ;JUMPTAB ;送表首地址0010H
ADD A, ACC ;键值乘2
JMP @A+DPTR ;散转指令,可跳转至0040H+A*2处进行相应的按键处理
L010EH: ;
AJMP L0330H ;短跳转至闪烁显示处理
;-------------------------------;
;TYPE键处理程序 ;
;-------------------------------;
L0110H: ;TYPE键处理程序
JB 13H, L014EH ;若已经处于主菜单状态,没按TYPE键的要求
JNB 02H, L012DH ;不在主菜单状态,又非TYPE设置状态,则跳转进入TYPE波形类型选择状态,退出波形类型设置
CLR 02H ;已经在TYPE波形类型选择状态,再按TYPE键则取消该状态
MOV A, #80H ;80#指令:首行显示,首行DDRAM地址从00H开始
MOV R0,#30H ;波形类型应该显示
MOV R7, #0FH ;将从30H开始的15个字符写入到数据寄存器中
LCALL L0718H ;调L0718H子程序。查询液晶状态BF,若为0则写入指令代码,再写入数据到数据寄存器中
MOV A, R1 ;波形类型码寄存器R1的内容送A
CJNE A, 2CH, L0127H ;若A不等于原来波形类型,则跳转至L0127H
AJMP L014EH ;与原来波形类型相同,转闪烁显示处理
L0127H: ;
SETB 04H ;波形类型改变了,设置还有因波形类型修改后要处理的内容的标志
MOV 2CH, R1 ;将现在的波形类型码送为新的原始波形类型码
AJMP L014EH ;短跳转至L014EH
L012DH: ;TYPE设置状态
MOV PSW, #10H ;进入TYPE设置类型时,使用2区
MOV R2, #14H ;12H=#20
MOV PSW, #08H ;回到1区
SETB 02H ;设置TYPE波形类型选择状态
JNB 03H, L014EH ;非GAIN设置状态,转闪烁显示处理
CLR 03H ;若在GAIN设置状态,要被TYPE打断,故要做如下处理,则清除该标志
MOV R0, #5BH ;5BH准备接收增益码寄存器代码(0~19)对应的增益码
MOV R7, #01H ;1个字节
MOV R6, #03H ;偏移3个字节
LCALL L0642H ;调L0642H子程序:拷贝0988H中偏移(增益代码R2)*4+(R6)开始的(R7)个字节到@R0中
MOV A, #0C1H ;C1#指令:次行显示,次行DDRAM地址从41H开始
MOV R0, #41H ;
MOV R7, #03H ;将从41H开始的3个字符(增益具体提示符X*.*)写入到数据寄存器中
LCALL L0718H ;调L0718H子程序。查询液晶状态BF,若为0则写入指令代码,再写入数据到数据寄存器中
L014EH: ;
AJMP L0330H ;短跳转至闪烁显示处理
;-------------------------------;
;GAIN键处理 ;
;-------------------------------;
L0150H: ;GAIN键处理
JB 13H, L0193H ;主菜单下,没按GAIN键的需求,则跳转闪烁显示处理
JNB 14H, L0193H ;若非正弦定标,则跳转至L0193H
JNB 03H, L016FH ;没处于GAIN选择状态,则跳转至L016FH
CLR 03H ;已经处于增益选择状态的话,清楚该标志
MOV R0, #5BH ;由增益码寄存器查表获得增益系数,如X1.0的代码是9,增益量是128
MOV R7, #01H ;
MOV R6, #03H ;
LCALL L0642H ;调L0642H子程序:拷贝0988H中偏移(R2)*4+(R6)开始的(R7)个字节到@R0中
MOV A, #0C1H ;C1#指令:两行显示,次行DDRAM地址从41H开始
MOV R0, #41H ;把显示缓冲区的中(X*.*)送液晶显示器
MOV R7, #03H ;将从41H开始的3个字符写入到数据寄存器中
LCALL L0718H ;调L0718H子程序。查询液晶状态BF,若为0则写入指令代码,再写入数据到数据寄存器中
AJMP L0193H ;短跳转至闪烁显示处理
L016FH: ;
MOV PSW, #10H ;选择2区
MOV R2, #14H ;R2=20
MOV PSW, #08H ;回到1区
SETB 03H ;设置增益选择状态标志
JNB 02H, L0193H ;如果没处于波形类型选择状态的话,转闪烁显示处理
CLR 02H ;处于波形类型选择状态,就清楚该标志
MOV A, #80H ;80#指令:两行显示,首行DDRAM地址从00H开始
MOV R0, #30H ;将波形类型送液晶显示器显示
MOV R7, #0FH ;将从30H开始的15个字符写入到数据寄存器中
LCALL L0718H ;调L0718H子程序。查询液晶状态BF,若为0则写入指令代码,再写入数据到数据寄存器中
MOV A, R1 ;将目前设置的波形类型码送R1
CJNE A, 2CH, L018DH ;若当前波形类型代码不等于原始的代码,则跳转至L018DH
AJMP L0193H ;等于原始的代码,转闪烁显示处理
L018DH: ;
SETB 04H ;还有因波形类型修改后要处理的内容
MOV 2CH, R1 ;当前设置的波形类型代码作为新的原始代码
AJMP L0193H ;转闪烁显示处理
L0193H: ;
AJMP L0330H ;转闪烁显示处理
;-------------------------------;
;↑键处理 ;
;-------------------------------;
L0195H: ;↑键处理
JB 13H, L01EAH ;若在主菜单状态,则转主菜单的↑键处理
JB 02H, L01D0H ;若在波形类型选择状态,则转波形类型选择状态↑处理
JB 03H, L01BFH ;若在增益选择状态,则增益选择的↑键处理
INC R3 ;定标信号加在哪个电极代码加1(应该在0~7范围内)
CJNE R3, #08H, L01A4H ;不等于8,则跳转至L01A4H
MOV R3, #00H ;循环加1,故8就是0
L01A4H: ;
MOV R0, #46H ;显示缓冲区的二行No.6到No.9要更新定标信号所作用电极
MOV R7, #04H ;4位显示
MOV R6, #00H ;从第0字符开始
CJNE R4, #02H, L01AFH ;若果主菜单中选择的是R4!=2,则不在WAVE子菜单,则转L01AFH
MOV R6, #08H ;改从第8字符开始,即为正弦波的定标信号
L01AFH: ;
LCALL L0652H ;调L0652H子程序:拷贝08E8H中偏移(R3)*12+(R6)开始的(R7)个字节到@R0中
MOV A, #0C6H ;C6#指令:两行显示,次行DDRAM地址从46H开始
MOV R0, #46H ;把定标信号或正弦信号加在哪里的提示送显示
MOV R7, #04H ;将从46H开始的4个字符写入到数据寄存器中
LCALL L0718H ;调L0718H子程序。查询液晶状态BF,若为0则写入指令代码,再写入数据到数据寄存器中
SETB 10H ;置定标电极更换了标志
AJMP L0200H ;短跳转至L0200H
L01BFH: ;增益选择的↑处理
INC R2 ;增益码寄存器的内容加1
CJNE R2, #14H, L01C5H ;若R2的内容不等于20H,则跳转至L01C5H
MOV R2, #00H ;循环加1,加到20就是0(20种增益值)
L01C5H: ;
MOV R0, #41H ;显示缓冲区第2行的第1至第3字符要更新为新的增益表达式X*.*
MOV R7, #03H ;例如1.0
MOV R6, #00H ;
LCALL L0642H ;调L0642H子程序:拷贝0988H中偏移(R2)*4+(R6)开始的(R7)个字节到@R0中
AJMP L0200H ;短跳转至L0200H
L01D0H: ;波形类型选择的↑处理
MOV A, R1 ;将波形类型R1的内容送A
CJNE A, 2FH, L01D8H ;如果当前波形类型不等于当前上限,则跳转波形类型加1
MOV R1, 2EH ;如果当前波形类型码已经是上限,再加1就应该循环到下限
AJMP L01D9H ;短跳转至L01D9H
L01D8H: ;
INC R1 ;波形类型码R1的内容加1
L01D9H: ;
LCALL L0613H ;调L0613H子程序:取出表0D5DH+(R1)*16处的字符,发现与R1的值基本相同。
CPL A ;A按位取反
JZ L01D0H ;按照正常情况,不可能为0,若A为0,则跳转至L01D0H
MOV R0, #30H ;波形类型显示信息重新调入液晶显示缓冲区中
MOV R7, #0FH ;
MOV R6, #01H ;
LCALL L0628H ;调L0628H子程序:拷贝0D5DH+(R1)*16中偏移(R6)开始的(R7)个字节到@R0中
AJMP L0200H ;短跳转至L0200H
L01EAH: ;主菜单下的↑键处理
MOV A, #0CH ;执行0C#指令:显示开,光标不显示,光标不闪烁
LCALL L0704H ;调L0704H子程序
INC R4 ;主菜单下光标位置计数器加1
CJNE R4, #03H, L01F5H ;如果光标位置未加到3,合理,转
MOV R4, #00H ;=3不合理,因此要循环加1=0
L01F5H: ;
LCALL L069FH ;调L069FH子程序:取表08E5H偏移(R4)的光标位置信息给A
LCALL L0704H ;调L0704H子程序把液晶显示器的光标加上
MOV A, #0EH ;执行0E#指令:显示开,光标显示,光标不闪烁
LCALL L0704H ;调L0704H子程序
L0200H: ;
AJMP L0330H ;转闪烁显示处理
;-------------------------------;
;↓键处理 ;
;-------------------------------;
L0202H: ;↓键处理
JB 13H, L0257H ;若是主菜单状态,则跳转至L0257H
JB 02H, L023DH ;若是波形类型选择状态,则跳转至L023DH
JB 03H, L022CH ;若已经处于增益选择状态,则跳转至L022CH
DEC R3 ;一定是定标信号电极设置,D/A通路号减1
CJNE R3, #0FFH, L0211H;若D/A通道号不是FFH,合理,则跳转至L0211H
MOV R3,#07H ;=FFH,不合理,用循环减1的7
L0211H: ;
MOV R0, #46H ;显示缓冲区第2行6~9字符更新
MOV R7, #04H ;4个字符
MOV R6, #00H ;不偏移
CJNE R4, #02H, L021CH ;光标位置不在WAVE,则跳转至L021CH
MOV R6, #08H ;是在WAVE位置,应该改调正弦波
L021CH: ;
LCALL L0652H ;调L0652H子程序:拷贝08E8H中偏移(R3)*12+(R6)开始的(R7)个字节到@R0中
MOV A, #0C6H ;C6#指令:两行显示,次行DDRAM地址从46H开始
MOV R0, #46H ;把显示缓冲区更新的定标显示信息写入液晶显示器中
MOV R7, #04H ;将从46H开始的4个字符写入到数据寄存器中
LCALL L0718H ;调L0718H子程序。查询液晶状态BF,若为0则写入指令代码,再写入数据到数据寄存器中
SETB 10H ;置定标电极更换了标志
AJMP L026DH ;短跳转闪烁显示处理
L022CH: ;GAIN状态下的↓键处理
DEC R2 ;增益选择代码减1
CJNE R2, #0FFH, L0232H;若该代码不等于FFH,合理,则跳转至L0232H
MOV R2, #19 ;不合理,循环减1是19
L0232H: ;
MOV R0, #41H ;把增益代码对应的表达式字符串*.*调入显示缓冲区
MOV R7, #03H ;例如1.0共3字节
MOV R6, #00H ;0偏移
LCALL L0642H ;调L0642H子程序:拷贝0988H中偏移(R2)*4+(R6)开始的(R7)个字节到@R0中
AJMP L026DH ;短跳转闪烁显示处理
L023DH: ;TYPE状态下↓键处理
MOV A, R1 ;选择的波形类型的内容送A
CJNE A, 2EH, L0245H ;若波形类型不等于下限,够减1,则跳转至L0245H
MOV R1, 2FH ;波形类型已经在下限,循环减1的上限
AJMP L0246H ;短跳转至L0246H
L0245H: ;
DEC R1 ;当前波形类型代码减1
L0246H: ;
LCALL L0613H ;根据当前波形类型,调L0613H子程序:取出表0D5DH+(R1)*16处的首字符
CPL A ;A按位取反
JZ L023DH ;正常不可能为0,若A为0,则跳转至L023DH
MOV R0, #30H ;把波形类型显示信息调入显示缓冲区
MOV R7, #0FH ;15字符
MOV R6, #01H ;1偏移
LCALL L0628H ;调L0628H子程序:拷贝0D5DH+(R1)*16中偏移(R6)开始的(R7)个字节到@R0中
AJMP L026DH ;短跳转闪烁显示处理
L0257H: ;主菜单状态的↓键处理
MOV A, #0CH ;执行0C#指令:显示开,光标不显示,光标不闪烁
LCALL L0704H ;调L0704H子程序
DEC R4 ;光标位置减1
CJNE R4, #0FFH, L0262H;若光标位置不等于FFH,合理,则跳转至L0262H
MOV R4, #02H ;=FFH,不合理,用循环减1的值2
L0262H: ;
LCALL L069FH ;调L069FH子程序:取表08E5H偏移(R4)的光标控制字符
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -