| CSEG AT 0 LJMP Reset
 
 temp_2      SEGMENT  CODE
 RSEG  Temp_2
 USING 0
 Reset:
 LCALL LCD_INIT
 LCALL DELAY4
 MOV   DPTR,#TAB1B     ;显示汉字和字符                                    MOV   LCD_COM,#81H    ;第1行起始地址
 LCALL LCD_WRI
 LCALL DISP_STR_LOOP
 
 
 
 
 LCD_INIT:
 LCALL DELAY5
 MOV   LCD_COM,#30H  ;功能设置,基本指令集
 CALL  LCD_WRI    ;调用写指令子程序
 MOV   LCD_COM,#0cH  ;显示开,光标关,反白关
 CALL  LCD_WRI
 MOV   LCD_COM,#01H ;清屏并将DDRAM的地址计数器(AC)归零
 CALL  LCD_WRI
 MOV   LCD_COM,#06H  ;光标向右移动,AC+1
 CALL  LCD_WRI
 RET
 ;==========================================================;
 ;MCU写指令到LCD子程序 (RS=0、RW=0)
 ;==========================================================;
 LCD_WRI:
 MOV    A,#11111000B ;
 LCALL  LCD_SEND
 MOV    A,LCD_COM
 ANL    A,#0F0H  ;低4位清0传送高4位
 LCALL  LCD_SEND
 MOV    A,LCD_COM
 SWAP   A        ;高低半字节交换
 ANL    A,#0F0H  ;低4位清0传送低4位
 LCALL  LCD_SEND
 LCALL  DELAY1
 RET
 ;==========================================================;
 ;MCU写数据到LCD (RS=1 RW=0)
 ;==========================================================;
 LCD_WRD:
 MOV    A,#11111010B
 LCALL  LCD_SEND
 MOV    A,LCD_WDAT ;要发送的数据给A
 ANL    A,#0F0H    ;屏蔽低4位传送数据高4位
 LCALL  LCD_SEND
 MOV    A,LCD_WDAT
 SWAP   A
 ANL    A,#0F0H    ;传送数据低4位
 LCALL  LCD_SEND
 LCALL  DELAY1
 RET
 ;==========================================================;
 ;读LCD(BF)(AC)指令到MCU (RS=0 RW=1)
 ;数据在LCD_RDAT中.
 ;==========================================================;
 LCD_RRI:
 MOV  A,#11111100B  ;读取LCD忙碌标志
 CALL LCD_SEND
 CALL LCD_RECEIVE
 MOV  LCD_RIDAT,A   ;接收高4位数据
 CALL LCD_RECEIVE  ; 接收低4位数据
 ANL  A,#0F0H       ;屏蔽低4位
 SWAP A             ;取低4位
 ANL  LCD_RIDAT,#0F0H ;取高4位
 ORL  LCD_RIDAT,A    ;组合成完整的数据
 RET
 
 ;==========================================================;
 ;LCD发送8BIT的数据(1个字节)
 ;==========================================================;
 LCD_SEND:
 MOV  R2,#8   ;发送8位(BIT)数据
 LCD_SEND1:
 CLR  LCD_CLK  ;时钟端置1
 RLC  A  ;ACC.7给C
 MOV  LCD_SID,C  ;C给串行数据端
 SETB LCD_CLK  ;时钟端清0
 DJNZ  R2,LCD_SEND1 ;未完继续
 RET
 ;==========================================================;
 ;LCD接收8BIT数据(1个字节)
 ;==========================================================;
 LCD_RECEIVE:
 MOV  R2,#8
 LCD_RECEIVE1:
 CLR  LCD_CLK  ;时钟端置1
 NOP
 NOP
 SETB  LCD_CLK
 MOV   C,LCD_SID
 RLC   A
 DJNZ  R2,LCD_RECEIVE1
 RET
 
 
 
 
 
 DISP_STR_LOOP:CLR A;
 MOVC A,@A+DPTR;
 CJNE A,#0,CONT_STR_DISP;
 RET
 CONT_STR_DISP:MOV LCD_WDAT,A;
 LCALL LCD_WRD;
 INC DPTR;
 LCALL DELAY4;
 LJMP DISP_STR_LOOP;
 |