smileguitar
New Member
Lcd Check
Hello everyone. I'm doing a project that using infrared to open the door.Transmitter is keypad for keying passwords and send to receiver (what I'm doing) to display the passwards in '*' and compare the passwards are correct or incorrect with telling the user by LCD. Above is the coding I created. For my concept is when the keypad is being press (like enter), I'll get the signal and compare the original passwards. Before that, "Enter Code" is promted.
I have download this coding into PIC 16F877 (PIC I'm using), and test it. I found a problem before I press a button, which the promted "Enter Code" is displaying unstopable like "Enter Code Enter Code Enter Code.....". Besides that, when I press the button, LCD display "Enter Code Enter Code Enter Code..Wrong Code Enter Code...." What is the problem? How could I stop it? Is my coding correct?
Someone can give me a hand solving my problem? I'm appreciating it. Thanks in advanced.
Code:
LIST P=16F877
#INCLUDE <P16F877.INC>
errorlevel -302
errorlevel -207
__CONFIG _CP_OFF & _PWRTE_ON & _XT_OSC & _WDT_OFF
;==========VARIABLE===============
CBLOCK 0X20
NUM1 ;FOR NUMBER
NUM2 ;FOR NUMBER
NUM3 ;FOR NUMBER
NUM4 ;FOR NUMBER
D1
D2
D3
D4
ENDC
ORG 0X00
GOTO START
TEXT CALL LCD_INIT
BSF PORTB,2 ;R/S SET TO '1'
MOVLW H'45'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'6E'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'74'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'65'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'72'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'20'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'43'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'6F'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'64'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'65'
MOVWF PORTD
CALL CLOCK_E
RETLW 0X00
WRONG CALL LCD_INIT
CALL LCD_LINE2
BSF PORTB,2 ;R/S SET TO '1'
MOVLW H'57'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'72'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'6F'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'6E'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'67'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'20'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'43'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'6F'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'64'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'65'
MOVWF PORTD
CALL CLOCK_E
RETLW 0X00
CORRECT CALL LCD_INIT
CALL LCD_LINE2
BSF PORTB,2 ;R/S SET TO '1'
MOVLW H'43'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'6F'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'72'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'72'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'65'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'63'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'74'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'20'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'43'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'6F'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'64'
MOVWF PORTD
CALL CLOCK_E
MOVLW H'65'
MOVWF PORTD
CALL CLOCK_E
RETLW 0X00
START BSF STATUS,RP0
MOVLW B'00000001'
MOVWF TRISB
MOVLW B'00000000'
MOVWF TRISD
BCF STATUS,RP0
CLRF PORTB
CLRF PORTD
GOTO BEGIN
BEGIN CALL TEXT
BTFSC PORTB,0 ;SKIP IF ENTER=1
GOTO BEGIN ;IF ENTER=0 GO TO START
ONE MOVLW D'1'
MOVWF NUM1 ;SET NUM1=1
SUBLW B'00000001' ;NUM1-1
BTFSS STATUS,Z ;NUM1-1=0?
GOTO TWO ;YES, GO TO NEXT NUMBER
GOTO WRONG
TWO MOVLW D'2'
MOVWF NUM2 ;SET NUM1=2
SUBLW B'00000010' ;NUM2-2
BTFSS STATUS,Z ;NUM2-2=0?
GOTO THREE ;YES, GO TO NEXT NUMBER
GOTO WRONG
THREE MOVLW D'3'
MOVWF NUM3 ;SET NUM1=3
SUBLW B'00000011' ;NUM3-3
BTFSS STATUS,Z ;NUM3-3=0?
GOTO FOUR ;YES, GO TO NEXT NUMBER
GOTO WRONG
FOUR MOVLW D'4'
MOVWF NUM4 ;SET NUM1=4
SUBLW B'00000100' ;NUM4-4
BTFSS STATUS,Z ;NUM4-4=0?
GOTO WRONG ;NO, RETURN TO START
GOTO CORRECT
BSF PORTB,5
LCD_INIT BCF PORTB,2
MOVLW B'00110000'
MOVWF PORTD ;FUNCTION SET: 8 BIT INTERFACE
CALL CLOCK_E
MOVLW B'00001100'
MOVWF PORTD ;DISPALY & CURSOR: SET TO DISPLAY ON; CURSOR UNDERLINE OFF; CURSOR BLINK OFF
CALL CLOCK_E
MOVLW B'00111000'
MOVWF PORTD ;FUNCTION SET: 8 BIT; 2 LINE MODE; 5X10 DOT FORMAT
CALL CLOCK_E
MOVWF B'00000001'
MOVWF PORTD ;CLEAR DISPLAY
CALL CLOCK_E
MOVLW B'00000110'
MOVWF PORTD ;CHARACTER ENTRY MODE: INCREMENT; DISPLAY SHIFT ON
CALL CLOCK_E
RETLW 0X00
LCD_LINE2 BCF PORTB,2 ; R/S SET TO '0'
MOVLW B'11000000'
MOVWF PORTD ; JUMP TO 2ND LINE
CALL CLOCK_E
RETLW 0X00
CLOCK_E BSF PORTB,1
CALL DELAY2
BCF PORTB,1
RETLW 0X00
DELAY1 MOVLW D'130'
MOVWF D2
MOVLW D'221'
MOVWF D1
LOOP1 DECFSZ D1,1
GOTO LOOP1
DECFSZ D2,1
GOTO LOOP1
RETLW 0X00
DELAY2 MOVLW D'13' ;DELAY 10ms
MOVWF D4
MOVLW D'251'
MOVWF D3
LOOP2 DECFSZ D3,1
GOTO LOOP2
DECFSZ D4,1
GOTO LOOP2
RETLW 0X00
END
Hello everyone. I'm doing a project that using infrared to open the door.Transmitter is keypad for keying passwords and send to receiver (what I'm doing) to display the passwards in '*' and compare the passwards are correct or incorrect with telling the user by LCD. Above is the coding I created. For my concept is when the keypad is being press (like enter), I'll get the signal and compare the original passwards. Before that, "Enter Code" is promted.
I have download this coding into PIC 16F877 (PIC I'm using), and test it. I found a problem before I press a button, which the promted "Enter Code" is displaying unstopable like "Enter Code Enter Code Enter Code.....". Besides that, when I press the button, LCD display "Enter Code Enter Code Enter Code..Wrong Code Enter Code...." What is the problem? How could I stop it? Is my coding correct?
Someone can give me a hand solving my problem? I'm appreciating it. Thanks in advanced.
Attachments
Last edited: