?? lcd.a51
字號(hào):
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:
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -