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

📄 lcd.a51

📁 1. Auto Control of three phase Induction motor (AT89S52)
💻 A51
📖 第 1 页 / 共 2 页
字号:
INCLUDE  REG_52.PDF

PH1	EQU	P3.0
PH2	EQU	P3.1
PH3	EQU	P3.2

LED1		EQU	P1.0			;AUTO ON
LED2		EQU	P1.1			;AUTO OFF
LED3		EQU	P1.2			;MOTOR

;ONRLY		EQU	P2.0
OFFRLY	EQU	P2.1

AUTOON	EQU	P2.6
AUTOOFF	EQU	P2.7

TIM1		EQU	P2.2
TIM2		EQU	P2.3
TIM3		EQU	P2.4
TIM4		EQU	P2.5

; ***LCD CONTROL***
LCD_RS    EQU    P0.0     ;LCD REGISTER SELECT LINE
LCD_E     EQU    P0.1     ;LCD ENABLE LINE
LCD_DB4   EQU    P0.3     ;PORT 1 IS USED FOR DATA
LCD_DB5   EQU    P0.4     ;USED FOR DATA
LCD_DB6   EQU    P0.5     ;FOR DATA
LCD_DB7   EQU    P0.6     ;FOR DATA

; ***CURSOR CONTROL INSTRUCTIONS***

OFFCUR    EQU    0CH
BLINKCUR  EQU    0DH

; ***DISPLAY CONTROL INSTRUCTIONS***

CLRDSP    EQU    01H
ONDSP     EQU    0CH

; ***SYSTEM INSTRUCTIONS***

CONFIG    EQU    28H      ; 4-BIT DATA,2 LINES,5X7 MATRIX LCD
ENTRYMODE EQU    6        ; INCREMENT CURSOR DON'T SHIFT DISPLAY 


;  ---------==========----------==========---------=========---------
DSEG            ; This is internal data memory
ORG     20H     ; Bit adressable memory

FLAGS:	DS	1
LD1  BIT    FLAGS.0
LD2  BIT    FLAGS.1
MOT  BIT    FLAGS.2

NEW:	DS		1
NEW1	BIT NEW.0
NEW2	BIT NEW.1
NEW3	BIT NEW.2
NEW4	BIT NEW.3
NEW5	BIT NEW.4
MOTT	BIT NEW.5


TIM:		DS	1	;scrolling display
SCRL:		DS	1	;count for scr disp
OFF_TIME:	DS	1
CSEG            ; Code begins here
         

;---------==========----------==========---------=========---------
;              PROCESSOR INTERRUPT AND RESET VECTORS
;---------==========----------==========---------=========---------
 
         ORG     00H    ; Reset
         JMP     MAIN
 
			ORG 001BH	;Timer Interrupt1
			JMP SCROLL
;  ---------==========----------==========---------=========---------
;  Main routine. Program execution starts here.
;  ---------==========----------==========---------=========---------		
MAIN:
 		MOV SP,#60H
 		MOV FLAGS,#00H
 		MOV NEW,#00H
 		MOV OFF_TIME,#00H
 		
 		CLR OFFRLY
 		SETB LED1
 		SETB LED2
 		SETB LED3
 		CALL RESETLCD4
		CALL INITLCD4
		CALL TITLES
		SETB NEW2
		
		MOV TMOD,#11H		; Scrolling Display
		MOV TL1,#08H
		MOV TH1,#01H
		SETB ET1
		MOV SCRL,#00H
		MOV TIM,#120
		SETB TR1
		SETB EA
 		
UP:	SETB PH1						;
 		SETB PH2
 		SETB PH3
 		SETB AUTOON
 		SETB AUTOOFF
 		
 							  			;Chk if motor is on
 		JNB AUTOON,HJ1           ;chk auto on
		JNB AUTOOFF,HJ2			;chk auto off
		CALL DISP
		JNB MOT,UP
 		JNB PH1,MOTOR_OFF
 		JB PH2,MOTOR_OFF
 		JB PH3,MOTOR_OFF
 		AJMP UP
 		

		 		
UP4:	JNB AUTOON,$			;DEBOUNCE FOR AUTO ON KEY
		CALL DELAY1
		JNB AUTOON,$
		SETB LED1
		AJMP UP 	
				 		
HJ1:	JB MOT,UP
						;AUTO ON
		JNB AUTOON,$
		CALL DELAY1
		JNB AUTOON,$
 		CLR LED1
 		
UP3:	JNB AUTOON,UP4 
		SETB NEW4	
		CALL DISP	
		JNB PH1,UP3
 		JB PH2,UP3
 		JB PH3,UP3

 		SETB OFFRLY
 		SETB MOT					;set motor bit
 		CLR LED3
 		CLR LD1
 		SETB MOTT
		AJMP UP
		
HJ2:							;AUTO OFF
		JNB AUTOOFF,$
		CALL DELAY1
		JNB AUTOOFF,$
		JNB MOT,UP1
		SETB NEW5
		CLR LED2 	
		CALL DELAY
		AJMP SET_TIMER
UP1:	AJMP UP

MOTOR_OFF:
		JB LD1,UP1			;chk motor status skip if motor is in off
		SETB LED1
		SETB LED2
		SETB LED3
		CLR MOT
		CLR TR0
		CLR TF0
		CLR OFFRLY
		SETB LD1
		CLR NEW5
		CLR NEW4
		CLR MOTT
		AJMP UP
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SET_TIMER:
		SETB TIM1
		SETB TIM2
		SETB TIM3
		SETB TIM4
				
		SETB PH1
 		SETB PH2
 		SETB PH3
 		SETB AUTOOFF
 		
		JB TIM1,VB1
		MOV OFF_TIME,#01H
		CALL HALF_HR_DELAY
		AJMP MOTOR_OFF
VB1:	JB TIM2,VB2
		MOV OFF_TIME,#02H
		CALL HALF_HR_DELAY
		CALL HALF_HR_DELAY
		AJMP MOTOR_OFF
VB2:	JB TIM3,VB3
		MOV OFF_TIME,#03H
		CALL HALF_HR_DELAY
		CALL HALF_HR_DELAY
		CALL HALF_HR_DELAY
		AJMP MOTOR_OFF
VB3:	JB TIM4,VB4
		MOV OFF_TIME,#04H
		CALL HALF_HR_DELAY
		CALL HALF_HR_DELAY
		CALL HALF_HR_DELAY
		CALL HALF_HR_DELAY
		AJMP MOTOR_OFF
VB4:	AJMP UP		
		
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HALF_HR_DELAY:
		MOV TMOD,#11H					;time delay for 1/2 hour
		MOV R5,#30  	            ;count for 1/2 hour (30 for 1/2 Hour)
TP1:	MOV R6,#60		 				;count for 1 min (60 FOR 1 MIN)
TP:	CPL LED2
		MOV R7,#20						;start timer for 1 SEC (20 for 1 Sec (50ms X 20=1 sec)
UP2:	MOV TL0,#0AAH
		MOV TH0,#3CH
		SETB TR0
		
FGD:	JNB AUTOOFF,DFS
 		JNB PH1,MOTOR_OFF1
 		JB PH2,MOTOR_OFF1
 		JB PH3,MOTOR_OFF1
		
		JNB TF0,FGD
		CLR TR0
		CLR TF0
		DJNZ R7,UP2
		DJNZ R6,TP
		DJNZ R5,TP1
		RET

UPP:	AJMP UP


MOTOR_OFF1:
		JB LD1,UPP			;chk motor status skip if motor is in off
		SETB LED3
		SETB MOT
		CLR OFFRLY
DFS:	CLR TR0
		CLR TF0
		CLR MOTT
		RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DELAY:
		MOV R1,#0FFH
RE1:	MOV R2,#0FFH
RE:	NOP
		DJNZ R2,RE
		DJNZ R1,RE1
		RET
;**********************************************************
DELAY1:
		MOV R1,#9FH
REA1:	MOV R2,#0FFH
REA:	NOP
		DJNZ R2,REA
		DJNZ R1,REA1
		RET
;**********************************************************
;##########################################################
;		DISPLAY ROUTINES
;##########################################################
TITLES:
	MOV DPTR,#MSAG
	CALL LCD_MSG
	RET
MSAG:
	DB 1H,81H,'3 Phase Motor',0C0H,'Protection @ LCD',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TITLE1:
	MOV DPTR,#MSAG1
	CALL LCD_MSG
	RET
MSAG1:
	DB 1H,81H,'## R Phase: ##',0C1H,'Voltage Normal',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TITLE2:
	MOV DPTR,#MSAG2
	CALL LCD_MSG
	RET
MSAG2:
	DB 1H,81H,'## Y Phase: ##',0C1H,'Voltage Normal',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TITLE3:
	MOV DPTR,#MSAG3
	CALL LCD_MSG
	RET
MSAG3:
	DB 1H,81H,'## B Phase: ##',0C1H,'Voltage Normal',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TITLE11:
	MOV DPTR,#MSAG4
	CALL LCD_MSG
	RET
MSAG4:
	DB 1H,81H,'## R Phase: ##',0C0H,'Voltage ABNormal',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TITLE21:
	MOV DPTR,#MSAG5
	CALL LCD_MSG
	RET
MSAG5:
	DB 1H,81H,'## Y Phase: ##',0C0H,'Voltage ABNormal',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TITLE31:
	MOV DPTR,#MSAG6
	CALL LCD_MSG
	RET
MSAG6:
	DB 1H,81H,'## B Phase: ##',0C0H,'Voltage ABNormal',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MOT_OFF:
	MOV DPTR,#MSAG7
	CALL LCD_MSG
	RET
MSAG7:
	DB 1H,80H,'## MOTOR OFF ##',0C0H,'@@@@@@@@@@@@@@@@',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MOT_ON:
	MOV DPTR,#MSAG8
	CALL LCD_MSG
	RET
MSAG8:
	DB 1H,80H,'$$$ MOTOR ON $$$',0C0H,'@@@@@@@@@@@@@@@@',00H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AUTO_OFF_ON:
	MOV DPTR,#MSAG9
	CALL LCD_MSG
	RET
MSAG9:

⌨️ 快捷键说明

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