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

📄 lcd.a51

📁 1. Auto Control of three phase Induction motor (AT89S52)
💻 A51
📖 第 1 页 / 共 2 页
字号:
	DB 1H,81H,'## AUTO OFF ##',0C2H,'@@@  ON  @@@',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AUTO_OFF_OFF:
	MOV DPTR,#MSAG10
	CALL LCD_MSG
	RET
MSAG10:
	DB 1H,81H,'## AUTO OFF ##',0C2H,'@@@  OFF  @@@',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AUTO_ON_ON:
	MOV DPTR,#MSAG11
	CALL LCD_MSG
	RET
MSAG11:
	DB 1H,81H,'## AUTO ON ##',0C2H,'@@@  ON  @@@',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AUTO_ON_OFF:
	MOV DPTR,#MSAG12
	CALL LCD_MSG
	RET
MSAG12:
	DB 1H,81H,'## AUTO ON ##',0C2H,'@@@  OFF  @@@',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TIMER1:
	MOV DPTR,#MSAG13
	CALL LCD_MSG
	RET
MSAG13:
	DB 1H,80H,'OFF Timer: 30Min',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TIMER2:
	MOV DPTR,#MSAG14
	CALL LCD_MSG
	RET
MSAG14:
	DB 1H,80H,'OFF Timer: 1Hr',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TIMER3:
	MOV DPTR,#MSAG15
	CALL LCD_MSG
	RET
MSAG15:
	DB 1H,80H,'OFF Timer: 1:30',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TIMER4:
	MOV DPTR,#MSAG16
	CALL LCD_MSG
	RET
MSAG16:
	DB 1H,80H,'OFF Timer : 2:00',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TIMER5:
	MOV DPTR,#MSAG17
	CALL LCD_MSG
	RET
MSAG17:
	DB 0C2H,'Time : ',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;**********************************************************
; INITIALIZE THE LCD 4-BIT MODE                                                                                   
;**********************************************************
INITLCD4:
         CLR         LCD_RS     ; LCD REGISTER SELECT LINE
         CLR         LCD_E      ; ENABLE LINE
         MOV         R4, #CONFIG; FUNCTION SET - DATA BITS,
                                ; LINES, FONTS
         CALL       WRLCDCOM4
         MOV         R4, #ONDSP ; DISPLAY ON
         CALL       WRLCDCOM4
         MOV         R4, #ENTRYMODE ; SET ENTRY MODE
         CALL       WRLCDCOM4  ; INCREMENT CURSOR RIGHT, NO SHIFT
         MOV         R4, #CLRDSP; CLEAR DISPLAY, HOME CURSOR
         CALL       WRLCDCOM4
         RET


; **********************************************************
; SOFTWARE VERSION OF THE POWER ON RESET
; **********************************************************
RESETLCD4:
         CLR         LCD_RS     ; LCD REGISTER SELECT LINE
         CLR         LCD_E      ; ENABLE LINE
         CLR         LCD_DB7    ; SET BIT PATTERN FOR...
         CLR         LCD_DB6    ; ... POWER-ON-RESET
         SETB        LCD_DB5
         SETB        LCD_DB4
         SETB        LCD_E      ; START ENABLE PULSE
         CLR         LCD_E      ; END ENABLE PULSE
         MOV         A, #4      ; DELAY 4 MILLISECONDS
         CALL       MDELAY
         SETB        LCD_E      ; START ENABLE PULSE
         CLR         LCD_E      ; END ENABLE PULSE
         MOV         A, #1      ; DELAY 1 MILLISECOND
         CALL       MDELAY
         SETB        LCD_E      ; START ENABLE PULSE
         CLR         LCD_E      ; END ENABLE PULSE
         MOV         A, #1      ; DELAY 1 MILLISECOND
         CALL       MDELAY
         CLR         LCD_DB4    ; SPECIFY 4-BIT OPERATION
         SETB        LCD_E      ; START ENABLE PULSE
         CLR         LCD_E      ; END ENABLE PULSE
         MOV         A, #1      ; DELAY 1 MILLISECOND
         CALL       MDELAY
         MOV         R4, #CONFIG; FUNCTION SET
         CALL       WRLCDCOM4
         MOV         R4, #08H   ; DISPLAY OFF
         CALL       WRLCDCOM4
         MOV         R4, #1     ; CLEAR DISPLAY, HOME CURSOR
         CALL       WRLCDCOM4
         MOV         R4,#ENTRYMODE  ; SET ENTRY MODE
         ACALL       WRLCDCOM4
 	   JMP INITLCD4

; **********************************************************
; SUB WRITES A COMMAND WORD TO THE LCD
; COMMAND MUST BE PLACED IN R4 BY CALLING PROGRAM
; **********************************************************
WRLCDCOM4:
         CLR         LCD_E
         CLR         LCD_RS     ; SELECT SEND COMMAND
         PUSH        ACC        ; SAVE ACCUMULATOR
         MOV         A, R4      ; PUT DATA BYTE IN ACC
         MOV         C, ACC.4   ; LOAD HIGH NIBBLE ON DATA BUS
         MOV         LCD_DB4, C ; ONE BIT AT A TIME USING...
         MOV         C, ACC.5   ; BIT MOVE OPERATOINS
         MOV         LCD_DB5, C
         MOV         C, ACC.6
         MOV         LCD_DB6, C
         MOV         C, ACC.7
         MOV         LCD_DB7, C
         SETB        LCD_E      ; PULSE THE ENABLE LINE
         CLR         LCD_E
         MOV         C, ACC.0   ; SIMILARLY, LOAD LOW NIBBLE
         MOV         LCD_DB4, C
         MOV         C, ACC.1
         MOV         LCD_DB5, C
         MOV         C, ACC.2
         MOV         LCD_DB6, C
         MOV         C, ACC.3
         MOV         LCD_DB7, C
         CLR         LCD_E
         SETB        LCD_E      ; PULSE THE ENABLE LINE
         CLR         LCD_E
         CALL MADELAY
         POP         ACC
         RET
; **********************************************************
; SUB TO WRITE A DATA WORD TO THE LCD
; DATA MUST BE PLACED IN R4 BY CALLING PROGRAM
; **********************************************************
WRLCDDATA:
         CLR         LCD_E
         SETB        LCD_RS     ; SELECT SEND DATA
             PUSH        ACC        ; SAVE ACCUMULATOR
         MOV         A, R4      ; PUT DATA BYTE IN ACC
         MOV         C, ACC.4   ; LOAD HIGH NIBBLE ON DATA BUS
         MOV         LCD_DB4, C ; ONE BIT AT A TIME USING...
         MOV         C, ACC.5   ; BIT MOVE OPERATOINS
         MOV         LCD_DB5, C
         MOV         C, ACC.6
         MOV         LCD_DB6, C
         MOV         C, ACC.7
         MOV         LCD_DB7, C
         SETB        LCD_E      ; PULSE THE ENABLE LINE
         CLR         LCD_E
         MOV         C, ACC.0   ; SIMILARLY, LOAD LOW NIBBLE
         MOV         LCD_DB4, C
         MOV         C, ACC.1
         MOV         LCD_DB5, C
         MOV         C, ACC.2
         MOV         LCD_DB6, C
         MOV         C, ACC.3
         MOV         LCD_DB7, C
         CLR         LCD_E
         SETB        LCD_E      ; PULSE THE ENABLE LINE
         CLR         LCD_E
         NOP
         NOP
         POP         ACC
         RET

; **********************************************************
; SUB TAKES THE STRING IMMEDIATELY FOLLOWING THE CALL AND
; DISPLAYS ON THE LCD. STRING MUST BE TERMINATED WITH A
; NULL (0).
; **********************************************************
LCD_MSG:
	CLR A			; Clear Index 
	MOVC A,@A+DPTR		; Get byte pointed by Dptr 
	INC DPTR			; Point to the next byte 
	JZ LCD_Msg9		; Return if found the zero (end of stringz) 
        CJNE A,#001H,Lcd_Msg1	; Check if is a Clear Command 
	MOV R4,A
	CALL WRLCDCOM4       	;If yes, write it as command to LCD 
	JMP   LCD_MSG          	;Go get next byte from stringz 
                              
Lcd_Msg1: CJNE A,#0FFH,FLL	;Check for displaying full character
	MOV R4,A
	CALL WRLCDDATA
	JMP LCD_MSG
 FLL:	CJNE  A,#080h,$+3      	; Data or Address?  If => 80h then is address. 
	JC    Lcd_Msg_Data     	; Carry will be set if A < 80h (Data) 
	MOV R4,A
	CALL  WRLCDCOM4         ; Carry not set if A=>80, it is address 
	JMP Lcd_Msg          	; Go get next byte from stringz 
                             
Lcd_Msg_Data:                   ; 
	MOV R4,A
	CALL WRLCDDATA        	; It was data, write it to Lcd 
	JMP  Lcd_Msg          		; Go get next byte from stringz 
Lcd_Msg9: 
	
	RET                    	; Return to Caller 



; **********************************************************
; 1 MILLISECOND DELAY ROUTINE
; **********************************************************

MDELAY:
         PUSH        ACC
         MOV         A,#0A6H
MD_OLP:
         INC         A
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         JNZ         MD_OLP
         NOP
         POP         ACC
         RET
MADELAY:
         PUSH        ACC
         MOV         A,#036H
MAD_OLP:
         INC         A
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         JNZ         MAD_OLP
         NOP
         POP         ACC
         RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SCROLL:	
		DJNZ TIM,GAHJ1
		CLR TR1
		INC SCRL	
DCDF:	MOV A,SCRL
		CJNE A,#01H,DFV1
		JB NEW1,DFF1				;CHK R VOL
		CALL TITLE1
		AJMP GAG
GAHJ1 :AJMP GAHJ
DFF1:	CALL TITLE11
		AJMP GAG	
DFV1:	CJNE A,#02H,DFV2
		JB NEW2,DFF2				;CHK Y VOL
		CALL TITLE2
		AJMP GAG		
DFF2:	CALL TITLE21
		AJMP GAG
DFV2:	CJNE A,#03H,DFV3
		JB NEW3,DFF3				;CHK B VOL
		CALL TITLE3
		AJMP GAG			
DFF3:	CALL TITLE31
		AJMP GAG		

DFV3:	CJNE A,#04H,DFV4			;MOTOR NO/OFF
		JB MOTT,DFF4
		CALL MOT_OFF
		AJMP GAG
DFF4:	CALL MOT_ON
		AJMP GAG

DFV4:	CJNE A,#05H,DFV5			;AUTO ON
		JNB NEW4,DFF5
		CALL AUTO_ON_ON 
		AJMP GAG
DFF5:	CALL AUTO_ON_OFF 
		AJMP GAG

DFV5:	CJNE A,#06H,DFV6			;AUTO OFF
		JNB NEW5,DFF6
		CALL AUTO_OFF_ON
		AJMP GAG
DFF6:	CALL AUTO_OFF_OFF
		AJMP GAG			
		
DFV6:	MOV SCRL,#00H	
				
GAG:	MOV TIM,#75
GAHJ:	MOV TL1,#08H
		MOV TH1,#01H
		SETB TR1
		RETI



		
DISP:	SETB PH1
		SETB PH2
		SETB PH3
		
		JNB PH1,DRE1
		CLR NEW1
		AJMP DEE1
DRE1:	SETB NEW1

DEE1:	JB PH2,DRE2
		CLR NEW2
		AJMP DEE2
DRE2:	SETB NEW2

DEE2:	JB PH3,DRE3
		CLR NEW3
		RET
DRE3:	SETB NEW3		
		RET
END
 

⌨️ 快捷键说明

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