1602液晶屏驱动源程序8.txt

来自「液晶显示器1602显示编程范例」· 文本 代码 · 共 168 行

TXT
168
字号
1602液晶屏驱动源程序8 
     
      RS BIT P3.0
      R_W BIT P3.1
      ENABLE BIT P3.2 
      LCDDATA DATA P1


      ;******************************************

      ORG 0000H
      AJMP MAIN
      ;ORG 000BH
      ;AJMP INSERS

      ORG 0050H
      MAIN:
      ;MOV TMOD,#00H
      ;MOV TL0,#00H
      ;MOV TH0,#00H
      ;SETB EA
      ;SETB ET0
      ;SETB TR0
      ;MOV R5,#50
      ;SETB P3.2
      ;SETB P3.1
      MOV SP,#60H
      LCALL INITIAL
      LCALL CLS
      LCALL SAVE_FONT
      MOV A,#10000111B
      LCALL WRITE_INSTRUCTION
      MOV R1,#00H

      OUT_DDRAM1:
      MOV A,R1
      LCALL WRITELCDDATA
      INC R1
      CJNE R1,#3,OUT_DDRAM1

      MOV A,#11000110B
      LCALL WRITE_INSTRUCTION
      MOV R1,#3

      OUT_DDRAM2:
      MOV A,R1
      LCALL WRITELCDDATA
      INC R1
      CJNE R1,#8,OUT_DDRAM2

      AJMP $

      ;INSERS:
      ;MOV TL0,#00H
      ;MOV TH0,#00H
      ;DJNZ R5,L0
      ;MOV R5,#50
      ;CPL P3.2
      ;CPL P3.1
      ;L0:
      ;RETI

      INITIAL:
      MOV A,#00111000B
      LCALL WRITE_INSTRUCTION
      MOV A,#00001100B
      LCALL WRITE_INSTRUCTION
      MOV A,#00000110B
      LCALL WRITE_INSTRUCTION
      RET

      CHECKBUSY:
      PUSH ACC
      CHECKBUSYLOOP:
      CLR ENABLE
      SETB R_W
      CLR RS
      SETB ENABLE
      MOV A,LCDDATA
      CLR ENABLE
      JB ACC.7,CHECKBUSYLOOP
      POP ACC
      LCALL DELAY
      RET

      WRITE_INSTRUCTION:
      LCALL CHECKBUSY
      CLR ENABLE
      CLR R_W
      CLR RS 
      SETB ENABLE
      MOV LCDDATA,A
      CLR ENABLE
      LCALL DELAY
      RET

      WRITELCDDATA:
      LCALL CHECKBUSY
      CLR ENABLE
      CLR R_W
      SETB RS
      SETB ENABLE
      MOV LCDDATA,A
      CLR ENABLE
      RET

      CLS:
      MOV A,#01H
      LCALL WRITE_INSTRUCTION
      RET

      SAVE_FONT:
      MOV A,#01000000B
      LCALL WRITE_INSTRUCTION
      MOV R4,#64
      MOV DPTR,#USER_PATTERN

      PUT_LOOP:
      CLR A
      MOVC A,@A+DPTR
      LCALL WRITELCDDATA
      INC DPTR
      DJNZ R4,PUT_LOOP
      MOV A,#10000000B
      LCALL WRITE_INSTRUCTION
      RET

      USER_PATTERN:
      DB 00H,00H,00H,00H,01H,03H,03H,00H
      DB 04H,04H,0EH,1FH,1FH,1FH,0AH,00H
      DB 00H,00H,00H,00H,10H,18H,18H,00H
      DB 00H,00H,00H,17H,10H,17H,17H,00H
      DB 07H,0AH,15H,03H,1CH,1FH,1FH,00H
      DB 1FH,1FH,0EH,1FH,0EH,1FH,1FH,00H
      DB 1CH,0AH,15H,1FH,07H,1FH,1FH,00H
      DB 00H,00H,00H,1DH,01H,1DH,1DH,00H

      ;PR_STRING:
      PUSH ACC
      PR_LOOP:
      CLR A
      MOVC A,@A+DPTR
      JZ END_PR
      LCALL WRITELCDDATA
      INC DPTR
      AJMP PR_LOOP

      END_PR:
      POP ACC
      RET

      DELAY:
      MOV R5,#05H
      L1:
      MOV R6,#0F8H
      L2:
      DJNZ R6,L2
      DJNZ R5,L1
      RET

      END






⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?