⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xdxhfsq.asm

📁 为了让广大的工科大学生理解单片机应用系统的开发方法
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	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 + -