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

📄 lcdsub.asm

📁 一个功能完善的大型制冷设备控制程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;#############################################################
; FILE NAME LCDSUB.ASM
; SUBROUTE: LCD_INIT - INITIALIZE LCD AS DOT DISPLAY AND CLEAR SCREEN 
; CALL FUNCTION: LCD_CLR
; USING PARMENTERS:  A - THE NUMBER OF GROUP THAT WILL BE USE
;                        FOR SET THE LCD SYSTEM(0 - 7)
; COMMON DATA USED: 
; CHANGE REGISTER: C, A, B
;                  R2 - FOR BYTE COUNTER, R3 - SAVE THE OFFSET 
; RETURN: NONE
;------------------------------------------------------------
            PROC  LCD_INIT
LCD_INIT:   MOV   R5, #40H
   ReInit:  DJNZ  R5, DoInit 
            CALL  LCD_CLR          ; CLEAR THE SCREEN
            CLR   B_LCDCTL        ; RESET LCD RIGHT CONTROL 
            NOP
            SETB  B_LCDADJ
            NOP
            NOP
            SETB  B_LCDCTL
            SETB  B_LCDADJ        ; ...\\ 
            MOV   DPTR, #xLCDRIGHT
            MOVX  A, @DPTR
  NtPluse:  JNZ   PlusOut
            RET
  PlusOut:  SETB  B_LCDCTL
            CLR   B_LCDADJ        ; ...\\ 
            NOP
            NOP
            SETB  B_LCDADJ
            DEC   A
            JMP   NtPluse
   DoInit:  MOV   dEXTPART, #0    ; INITIALIZE PORT 2
	    MOV   pPORT2, #0
	    MOV   R0,   #xLCD_TYPE  ; GET LCD TYPE
	    MOVX  A,    @R0
            MOV   dLCD_PTN_LINE, A
            INC   R0
	    MOVX  A,    @R0
            SWAP  A
            ANL   A,    #0FH 
            MOV   dLCD_CSR_LINES, A
	    MOVX  A,    @R0 
            ANL   A,    #0FH 
            MOV   B,    #12H     ; 18 BYTES IN ONE GROUP SYSTEM SET DATA
            MUL   AB
            MOV   R3,   A        ; SAVE THE OFFSET
            MOV   DPTR, #Addr_LCD_CMD
            MOV   A,    #cLCD_SYSSET_CMD
            MOVX  @DPTR, A
            CLR   A
            MOV   R2,    A 
NextSysSet: MOV   DPTR, #SYS_SET_TAB
            MOV   A,    R2
            ADD   A,    R3
            MOVC  A,    @A + DPTR  
            MOV   DPTR, #Addr_LCD_DAT ; SET #ADDR_LCD_DAT
            MOVX  @DPTR, A
            INC   R2
            CJNE  R2, #04, ForLine
            MOV   dLCD_ACT_BYTES, A   ; GET THE MAX LINES ON SCREEN
  ForLine:  CJNE  R2, #06, ForByte
            MOV   dLCD_MAX_LINE, A    ; GET THE MAX LINES ON SCREEN
  ForByte:  CJNE  R2, #07, ForNextSet
            MOV   dLCD_BYTES_ROW, A   ; GET THE BYTES IN ONE ROW
ForNextSet: CJNE  R2, #08, NextSysSet
            INC   DPH                 ; SET #ADDR_LCD_CMD
            MOV   A,  #cLCD_SCROLL_CMD
            MOVX  @DPTR, A
NextScroll: MOV   DPTR, #SYS_SET_TAB
            MOV   A,    R2
            ADD   A,    R3
            MOVC  A,    @A + DPTR  
            MOV   DPTR, #Addr_LCD_DAT ; SET #ADDR_LCD_DAT
            MOVX  @DPTR, A
            INC   R2
            MOV   A, R2  
            CJNE  A, #12H, NextScroll
            INC   DPH
            MOV   A,    #cLCD_SRL_HDOT_CMD  ;SCROLL SCREEN DOT NUMBER            
            MOVX  @DPTR, A
            DEC   DPH
            CLR   A
            MOVX  @DPTR, A
            INC   DPH
            MOV   A,    #cLCD_OVLAY_CMD
            MOVX  @DPTR, A
            DEC   DPH
            MOV   A,  #cLCD_DOT13_INI_DAT    ; SET TO DOT DISPLAY TYPE
            MOVX  @DPTR, A
            INC   DPH
            MOV   A,    #cLCD_ON_CMD
            MOVX  @DPTR, A
            MOV   A,    #cLCD_CSR_OFF_DAT       ; DISPLAY ON & CURSOR OFF
            DEC   DPH
            MOVX  @DPTR, A
            INC   DPH
            MOV   A,    #cLCD_SET_FORM_CSR_CMD  ; SET CURSOR TYPE
            MOVX  @DPTR, A
            DEC   DPH
            MOV   A,    #7
            MOVX  @DPTR, A
            MOV   A,    dLCD_CSR_LINES
            ORL   A,    #87H       ; %%%%
            MOVX  @DPTR, A
            INC   DPH
            MOV   A,    #cLCD_SET_RIGHT_CSR_CMD
            MOVX  @DPTR, A
            MOV   A,    #cLCD_SET_CSRADDR_CMD   ; SET LCD RAM DPTR TO 0X0000
            MOVX  @DPTR, A
            DEC   DPH                    ; SET #ADDR_LCD_DAT
            CLR   A
            MOVX  @DPTR, A               ; SET THE HIGH ADDRESS OF CURSOR POINTER 
            CLR   A
            MOVX  @DPTR, A               ; SET THE LOW ADDRESS OF CURSOR POINTER 
            INC   DPH                    ; SET #ADDR_LCD_CMD
            MOV   A,     #cLCD_WRITE_RAM_CMD
            MOVX  @DPTR, A
            DEC   DPH                    ; SET #ADDR_LCD_DAT
            MOV   A, #55H                ; *** WRITE TEST DATA
            MOVX  @DPTR, A
            INC   DPH
            MOV   A,    #cLCD_SET_CSRADDR_CMD  ; SET LCD RAM DPTR TO 0X0000
            MOVX  @DPTR, A
            DEC   DPH                    ; SET #ADDR_LCD_DAT
            CLR   A
            MOVX  @DPTR, A               ; SET THE HIGH ADDRESS OF CURSOR POINTER 
            CLR   A
            MOVX  @DPTR, A               ; SET THE LOW ADDRESS OF CURSOR POINTER 
            INC   DPH                    ; SET #ADDR_LCD_CMD
            MOV   A,     #cLCD_READ_RAM_CMD
            MOVX  @DPTR, A
            DEC   DPH                    ; SET #ADDR_LCD_DAT
            MOVX  A, @DPTR
            CJNE  A, #55H, ForInit
            MOV   A, #5
            SUBB  A, R5
            JNC   ForInit  
            MOV   R5, #5
  ForInit:  JMP   ReInit
            RET
SYS_SET_TAB:  ; 1. FOR DMF-682A 
           DB 38H, 87H, 07H, 1FH, 7CH, 7FH, 20H, 00H            ; P1-P8 
           DB 00H, 00H, 40H, 00H, 40H, 40H, 00H, 01H, 00H, 48H  ; P1-P10  
              ; 2. FOR DMF-50081/50174 
           DB 30H, 87H, 07H, 27H, 42H,0F0H, 30H, 00H            ; P1-P8 
           DB 00H, 00H,0F0H, 00H, 40H,0F0H, 00H, 80H, 00H, 00H  ; P1-P10
              ; 3. FOR DMF-50036  
           DB 30H, 87H, 07H, 4FH, 54H,0C8H, 50H, 00H            ; P1-P8 
           DB 00H, 00H,0C8H, 00H, 40H,0C8H, 00H, 00H, 00H, 00H  ; P1-P10  
              ; 4. FOR CCSTN12864  
           DB 30H, 87H, 07H, 21H, 2CH, 40H, 20H, 00H            ; P1-P8 
           DB 00H, 00H, 40H, 00H, 40H, 40H, 00H, 00H, 00H, 00H  ; P1-P10
              ; 5. FOR CCSTN128128  
           DB 30H, 87H, 07H, 21H, 2CH, 80H, 20H, 00H            ; P1-P8 
           DB 00H, 00H, 80H, 00H, 40H, 80H, 00H, 00H, 00H, 00H  ; P1-P10 
              ; 6. FOR CCSTN24064 
           DB 30H, 87H, 07H, 3CH, 4CH, 40H, 40H, 00H            ; P1-P8 
           DB 00H, 00H, 40H, 00H, 40H, 40H, 00H, 00H, 00H, 00H  ; P1-P10
              ; 7. FOR CCSTN240128  
           DB 30H, 87H, 07H, 3CH, 4CH, 80H, 40H, 00H            ; P1-P8 
           DB 00H, 00H, 80H, 00H, 40H, 80H, 00H, 00H, 00H, 00H  ; P1-P10  
           END
;##################################################################
; FILE NAME LCDSUB.ASM
; SUBROUTE: LCD_LCR - 清显示RAM    (CLEAR 64K DISPLAY RAM)
; CALL FUNCTION: None
; USING PARMENTERS: None
; COMMON DATA USED: 
; CHANGE REGISTER: DPTR, C, A, R6, R7
; RETURN: NONE
; Change Record:
; 1999/9/19 - write this subroute
;--------------------------------------------------------------- 
LCD_CLR: MOV   DPTR, #Addr_LCD_CMD
         MOV   A,    #cLCD_SET_RIGHT_CSR_CMD
         MOVX  @DPTR, A
         MOV   A,    #cLCD_SET_CSRADDR_CMD
         MOVX  @DPTR, A
         DEC   DPH                    ; SET #ADDR_LCD_DAT
         CLR   A
         MOVX  @DPTR, A               ; SET THE HIGH ADDRESS OF CURSOR POINTER 
         CLR   A
         MOVX  @DPTR, A               ; SET THE LOW ADDRESS OF CURSOR POINTER 
         INC   DPH                    ; SET #ADDR_LCD_CMD
         MOV   A,     #cLCD_WRITE_RAM_CMD
         MOVX  @DPTR, A
         MOV   R6,   #80H             ; LOOP FROM 0000H - 8000H
         MOV   R7,   #00 
         DEC   DPH                    ; SET #ADDR_LCD_DAT
         CLR   A
ClrLCDRAM:
         MOVX  @DPTR, A
         DJNZ  R7, ClrLCDRAM
         DJNZ  R6, ClrLCDRAM
         RET
;#############################################################
; FILE NAME LCDSUB.ASM
; SUBROUTE: LCD_DRAW_FRAME - DRAW A FRAME FOR ONE PAGE
; CALL FUNCTION: 
; USING PARMENTERS: R5 - THE BYTE OFFSET IN FIELD
;              dFLD_R4 - THE ROW OF FIELD
;              dFLD_R3 - THE COL OF FIELD
;                   
; COMMON DATA USED: 
; CHANGE REGISTER: C, A, R3, R4, R5
; RETURN: NONE
;------------------------------------------------------------
LCD_DRAW_FRAME:
         MOV   DPTR, #Addr_LCD_CMD
         MOV   A,    #cLCD_SET_RIGHT_CSR_CMD   ;--------DRAW TOP ---------
         MOVX  @DPTR, A
         MOV   A,    #cLCD_SET_CSRADDR_CMD
         MOVX  @DPTR, A
         DEC   DPH                    ; SET #ADDR_LCD_DAT
         CLR   A
         MOVX  @DPTR, A               ; SET THE HIGH ADDRESS OF CURSOR POINTER 
         CLR   A
         MOVX  @DPTR, A               ; SET THE LOW ADDRESS OF CURSOR POINTER 
         INC   DPH                    ; SET #ADDR_LCD_CMD
         MOV   A,     #cLCD_WRITE_RAM_CMD
         MOVX  @DPTR, A
         MOV   R6, #5
         MOV   R7, dLCD_BYTES_ROW
         MOV   B,  R7                 ; RESTORE FOR DRAW BUTTON 
         DEC   DPH                    ; SET #ADDR_LCD_DAT
         CLR   A
         CPL   A
DrawTop: MOVX  @DPTR, A
         DJNZ  R7, DrawTop
         MOV   R7, B
         DJNZ  R6, DrawTop
         INC   DPH                    ; --------- DRAW BUTTON -----------
         MOV   A,    #cLCD_SET_RIGHT_CSR_CMD  
         MOVX  @DPTR, A
         MOV   A,    #cLCD_SET_CSRADDR_CMD
         MOVX  @DPTR, A
         DEC   DPH                    ; SET #ADDR_LCD_DAT
         MOV   A, dLCD_MAX_LINE
         CLR   C
         SUBB  A, #5
         MUL   AB
         MOVX  @DPTR, A
         MOV   A,  B
         MOVX  @DPTR, A               ; SET THE LOW ADDRESS OF CURSOR POINTER 
         INC   DPH                    ; SET #ADDR_LCD_CMD
         MOV   A,     #cLCD_WRITE_RAM_CMD
         MOVX  @DPTR, A
         MOV   R6, #5
         MOV   R7, dLCD_BYTES_ROW
         DEC   DPH                    ; SET #ADDR_LCD_DAT
         CLR   A
         CPL   A
DrawBut: MOVX  @DPTR, A
         DJNZ  R7, DrawBut
         MOV   R7, dLCD_BYTES_ROW
         DJNZ  R6, DrawBut
         INC   DPH                    ;----------- DRAW LEFT -----------
         MOV   A,    #cLCD_SET_DOWN_CSR_CMD
         MOVX  @DPTR, A
         MOV   A,    #cLCD_SET_CSRADDR_CMD
         MOVX  @DPTR, A
         DEC   DPH                    ; SET #ADDR_LCD_DAT
         MOV   A,  #5
         MOV   B,  dLCD_BYTES_ROW
         MUL   AB
         MOVX  @DPTR, A               ; SET THE HIGH ADDRESS OF CURSOR POINTER 
         MOV   A,  B
         ADDC  A, #0
         MOVX  @DPTR, A               ; SET THE LOW ADDRESS OF CURSOR POINTER 
         INC   DPH                    ; SET #ADDR_LCD_CMD
         MOV   A,     #cLCD_WRITE_RAM_CMD
         MOVX  @DPTR, A
         MOV   A,  dLCD_MAX_LINE
         CLR   B
         CLR   C
         SUBB  A,  #10
         MOV   R7,  A
         XCH   A,   B                      ; HIGH BYTE - 'B'
         SUBB  A,  #0 
         INC   A
         MOV   R6, A
         DEC   DPH                    ; SET #ADDR_LCD_DAT
         MOV   A,  #0F8H
DrawLft: MOVX  @DPTR, A
         DJNZ  R7, DrawLft
         MOV   R7, B
         DJNZ  R6, DrawLft
         INC   DPH                   ;----------- DRAW RIGHT -----------
         MOV   A,    #cLCD_SET_CSRADDR_CMD
         MOVX  @DPTR, A
         DEC   DPH                    ; SET #ADDR_LCD_DAT
         MOV   A,  #5
         MOV   B,  dLCD_BYTES_ROW
         MUL   AB
         ADD   A, dLCD_ACT_BYTES  
         MOVX  @DPTR, A               ; SET THE HIGH ADDRESS OF CURSOR POINTER 
         MOV   A,  B
         ADDC  A, #0
         MOVX  @DPTR, A               ; SET THE LOW ADDRESS OF CURSOR POINTER 
         INC   DPH                    ; SET #ADDR_LCD_CMD
         MOV   A,     #cLCD_WRITE_RAM_CMD
         MOVX  @DPTR, A
         MOV   A,  dLCD_MAX_LINE
         CLR   B
         CLR   C
         SUBB  A,  #10
         MOV   R7, A
         XCH   A,  B                  ; HIGH BYTE - 'B'
         SUBB  A,  #0
         INC   A
         MOV   R6, A
         DEC   DPH                    ; SET #ADDR_LCD_DAT
         MOV   A,  #01FH
DrawRht: MOVX  @DPTR, A
         DJNZ  R7, DrawRht
         MOV   R7, B
         DJNZ  R6, DrawRht
         RET

;#############################################################
; FILE NAME LCDSUB.ASM
; SUBROUTE: LCD_SET_CURSOR - MOVE THE CURSOR TO THE GAVEN POSITION
; CALL FUNCTION: 
; USING PARMENTERS: R5 - THE BYTE OFFSET IN FIELD
;              dFLD_R4 - THE ROW OF FIELD
;              dFLD_R3 - THE COL OF FIELD
;                   
; COMMON DATA USED: 
; CHANGE REGISTER: C, A, R3, R4, R5
; RETURN: NONE
;------------------------------------------------------------
LCD_SET_CURSOR:
           MOV     A,  dFLD_R4
           JNB     bLCD_DOTOUT, ColPoint
           INC     A
           INC     A
           MOV     B,  dLCD_PTN_LINE
	   MUL     AB
           SUBB    A,  dLCD_CSR_LINES
ColPoint:  MOV     B,  dLCD_BYTES_ROW
	   MUL     AB
           MOV     R4, A
	   MOV     A,  dFLD_R3          ; THE FRIST ADD NO CARRY SET
	   ADD     A,  R5 
           ADD     A,  R4
	   MOV     R3, A
	   CLR     A                    ; FOR CURSOR ACTIVE IN DISP 1
           ADDC    A,  B
           MOV     R4, A
           MOV     DPTR, #Addr_LCD_CMD   ; SET #ADDR_LCD_CMD
           MOV     A, #cLCD_ON_CMD
           MOVX    @DPTR, A
           DEC     DPH
           MOV     A, #cLCD_CSR_TWK_DAT
           MOVX    @DPTR, A
           INC     DPH
           MOV     A,    #cLCD_SET_CSRADDR_CMD
           MOVX    @DPTR, A
           DEC     DPH                    ; SET #ADDR_LCD_DAT
           MOV     A,    R3
           MOVX    @DPTR, A               ; SET THE LOW ADDRESS OF CURSOR POINTER 
           MOV     A,    R4
           MOVX    @DPTR, A               ; SET THE HIGH ADDRESS OF CURSOR POINTER 
	   RET
;#############################################################
; FILE NAME LCDSUB.ASM
; SUBROUTE: LCD_CURSOR_TURN - TURN THE LCD OR CURSOR ON/OFF

⌨️ 快捷键说明

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