Professional Documents
Culture Documents
Energy Meter T
Energy Meter T
;1/1/2009
;************************************************************************
; P2.0 = ENTER BUTTON
; P2.7 = METER SENSOR
;-----------------------------------------------------------------------------
;PROGRAM STARTS HERE:
;---------------------
ORG 0000H ;START
;--------------------------------------------------------------
UNITDISPLY:
MOV A,#01H ;CLEAR LCD DISPLAY
ACALL COMMAND
MOV A,#80H ; STARTING ADDRESS OF LINE 1 OF LCD RAM
ACALL COMMAND
MOV DPTR,#LINE737 ;DISPLAY DATA ON LINE1.
LCALL DISPLAYLINE
MOV A,52H
ACALL BCD2ASCII
MOV A,R3
ACALL DISPLAY
MOV A,R4
ACALL DISPLAY
MOV A,51H
ACALL BCD2ASCII
MOV A,R3
ACALL DISPLAY
MOV A,R4
ACALL DISPLAY
MOV A,#'.'
ACALL DISPLAY
MOV A,50H
ACALL BCD2ASCII
MOV A,R3
ACALL DISPLAY
MOV A,R4
ACALL DISPLAY
MOV A,#0C0H ; STARTING ADDRESS OF LINE 2 OF LCD RAM
ACALL COMMAND
MOV DPTR,#LINE724 ;DISPLAY DATA ON LINE1.
LCALL DISPLAYLINE
MOV A,61H
ACALL BCD2ASCII
MOV A,R3
ACALL DISPLAY
MOV A,R4
ACALL DISPLAY
MOV A,62H
ACALL BCD2ASCII
MOV A,R3
ACALL DISPLAY
MOV A,R4
ACALL DISPLAY
MOV A,#'.'
ACALL DISPLAY
MOV A,#'0'
ACALL DISPLAY
MOV A,#'0'
ACALL DISPLAY
RET
LINE737: DB 'UNIT = $'
LINE724: DB 'BILL =Rs.$'
;------------------------------------------------------------------------------
;BCD TO ASCII CONVERTER USED TO CONVERT 1 BCD NO IN 2 ASCII CODES:
;----------------------------------------------------------------
BCD2ASCII: MOV R4,A ;BCD TO ASCII CODE CONVERSION
ANL A,#0F0H ;MASK LSB
SWAP A ;SWAP NIBBLES
ORL A,#30H ;CONVERT IT TO ASCII
MOV R3,A ;SAVE THE MSB i.e. ASCII CHARACTER A
T R3
MOV A,R4 ;TAKE THE ORIGINAL DATA
ANL A,#0FH ;MASK UPPER NIBBLE
ORL A,#30H ;CONVERT IT TO ASCII
MOV R4,A ;SAVE THE LSB i.e. ASCII CHARACTER A
T R3
RET
;--------------------------------------------------------------
;--------------------------------------------------------------------------
;VERY IMP SUBROUTINE
DISPLAYLINE:
CLR A
MOVC A,@A+DPTR
INC DPTR
CJNE A,#'$',DISPLAY072
RET
DISPLAY072: ACALL DISPLAY ; CALL DATA REGISTER OF LCD FOR DISPLA
Y
AJMP DISPLAYLINE
;-----------------------------------------------------------------------------
;DELAY SUBROUTINE USED TO GENERATE DELAY OF 1 SECONDS:
;------------------------------------------------------
DELAY: MOV R7,#0FFH ;DELAY OF 1 SECOND
LOOP1: MOV R5,#0FFH
LOOP: DJNZ R5,LOOP
DJNZ R7,LOOP1
RET
DELAY1: MOV R7,#40H ;DELAY OF 1 SECOND
LOOP12: MOV R5,#0FFH
LOOP2: DJNZ R5,LOOP2
DJNZ R7,LOOP12
RET
;-----------------------------------------------------------------------------
;COMMAND SUBROUTINE USED TO INITILISE LCD DISPLAY:
;-------------------------------------------------
COMMAND: ACALL READY ;Write when display is not busy
MOV P1,A ;Command Character in Port P1
CLR P3.2 ;Command resister chosen
CLR P3.3 ; write enable
SETB P3.4 ; Strobe Character to display
CLR P3.4
RET ;Return
;-----------------------------------------------------------------------------
;DISPLAY SUBROUTINE USED TO DISPLAY DATA ON LCD DISPLAY:
DISPLAY: ACALL READY
MOV P1,A ;take data to be displayed
SETB P3.2 ;RS=P3.2= 1 to select data register
CLR P3.3 ;write enable
SETB P3.4 ;strobe character to be displayed
CLR P3.4
RET ; Return
;-----------------------------------------------------------------------------
;READY SUBROUTINE USED TO CHECK THE LCD STATUS i.e. BUSY OR NOT
;---------------------------------------------------------------
READY: CLR P3.4 ;strobe display
MOV P1,#0FFH ;configure P1 for input
CLR P3.2 ;Select command register
SETB P3.3 ;read enabled
WAIT: CLR P3.4 ;strobe display
SETB P3.4
JB P1.7,WAIT ;Read busy status (BF=0)
CLR P3.4 ;end display strobe.
RET ;Return
;-----------------------------------------------------------------------------