该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
PSR_LAX:
RET
//子程序名称:PUTCHAR(A).;
PUTCHAR: //;在(CXPOS,CYPOS)字符位置写字符子程序
CALL CHARLCDPOS //;设置(CXPOS,CYPOS)字符位置的DDRAM地址
CALL LCDWD // ;写字符
RET
//子程序名称:GETCHAR(A).
GETCHAR: //;在(CXPOS,CYPOS)字符位置读字符子程序
CALL CHARLCDPOS //;设置(CXPOS,CYPOS)字符位置的DDRAM地址
CALL LCDRD ;读字符
RET;
//子程序名称:CHARLCDPOS().;
CHARLCDPOS: // ;设置(CXPOS,CYPOS)字符位置的DDRAM地址
PUSH ACC
ANL CXPOS,#0FH // ;X位置范围(0到15)
ANL CYPOS,#03H // ;Y位置范围(0到3)
MOV A,CYPOS // ;(CXPOS,CYPOS)对应DDRAM地址
CJNE A,#00,LPS_LA1 // ;(第一行)X: 第0----15个字符
MOV A,CXPOS // ; DDRAM: 0----0FH
JMP LPS_LAX
LPS_LA1:CJNE A,#01,LPS_LA2
MOV A,CXPOS // ;(第二行)X: 第0----15个字符
ADD A,#40H // ; DDRAM: 40----4FH
JMP LPS_LAX
LPS_LA2:CJNE A,#02,LPS_LAY
MOV A,CXPOS // ;(第三行)X: 第0----15个字符
ADD A,#10H // DDRAM: 10----1FH
JMP LPS_LAX
LPS_LAY:MOV A,CXPOS //;(第四行)X: 第0----15个字符
ADD A,#50H //;DDRAM: 50----5FH
LPS_LAX:ORL A,#80H //;设置DDRAM地址
CALL LCDWC
POP ACC
RET;
//子程序名称:CHARCURSORNEXT().;
CHARCURSORNEXT: //;置字符位置为下一个有效位置子程序
INC CXPOS //;字符位置加1
ANL CXPOS,#0FH //;字符位置CXPOS的有效范围为(0到15)
MOV R0,CXPOS
CJNE R0,#0,CSN_LAX //;CXPOS为0表示要换行
INC CYPOS
ANL CYPOS,#03H //;字符位置CYPOS的有效范围为(0到3)
CSN_LAX:
RET;
//子程序名称:LCDRESET().;
LCDRESET: //;SMC1604系列液晶显示控制器初始化子程序
MOV A,#38H // ;1604的显示模式字为38H
CALL LCDWC //;显示模式设置第一次
CALL DELAY3MS //;延时3MS
CALL LCDWC // ;显示模式设置第二次
CALL DELAY3MS //;延时3MS
CALL LCDWC //;显示模式设置第三次
CALL DELAY3MS //;延时3MS
CALL LCDWC //;显示模式设置第四次
CALL DELAY3MS //;延时3MS
MOV A,#08H //;显示关闭
CALL LCDWC
MOV A,#01H //;清屏
CALL LCDWC
CALL DELAY3MS //;延时3MS
MOV A,#06H //;显示光标移动设置
CALL LCDWC
MOV A,#0CH //;显示开及光标设置
CALL LCDWC
RET
RET
DELAY3MS: //;延时3MS子程序
MOV R1,#15
DL3_PA: MOV R2,#100
DJNZ R2,$
DJNZ R1,DL3_PA
RET;
//LCDWC,LCDWD,LCDRD为HD44780兼容芯片的MCS51模拟口线方式的基本子程序
//LCDWAITIDLE为内部子程序.//子程序名称:LCDWC(A).
LCDWC: //;送控制字子程序
CALL LCDWAITIDLE //;HD44780液晶显示控制器忙检测
CLR RSPIN //;RS=0 RW=0 E=高脉冲
CLR RWPIN
MOV P1,A
SETB EPIN
NOP
CLR EPIN
RET;
//子程序名称:LCDWD(A).;
LCDWD: //;送数据子程序
CALL LCDWAITIDLE //;HD44780液晶显示控制器忙检测
SETB RSPIN // ;RS=1 RW=0 E=高脉冲
CLR RWPIN
MOV P1,A
SETB EPIN
NOP
CLR EPIN
RET;
//子程序名称:LCDRD().;
LCDRD: //;读数据子程序
CALL LCDWAITIDLE //;HD44780液晶显示控制器忙检测
MOV P1,#0FFH
SETB RSPIN //;RS=1 RW=0 E=高脉冲
SETB RWPIN
SETB EPIN
NOP
MOV A,P1
CLR EPIN
RET;
//子程序名称:LCDWAITIDLE().
LCDWAITIDLE: //;忙检测子程序
PUSH ACC //;正常读写操作之前必须检测LCD控制器状态
MOV P1,#0FFH //;状态字的D7位为0表示LCD控制器空闲,可以
//;进行读写操作
CLR RSPIN //;RS=0 RW=1 E=高电平
SETB RWPIN
SETB EPIN
MOV R0,#20
WTD_PA: NOP ;
JNB P1.7,WTD_LAX //;D7=0 表示LCD控制器空闲,则退出检测
DJNZ R0,WTD_PA //;D7=1 表示LCD控制器忙,则继续检测
//;若忙时间超过100uS,则表示LCD控制器硬件;出错,退出检测
NOP // ;用户可在此设置错误代码,或仿真时设置断点
WTD_LAX:
CLR EPIN
POP ACC
RET