I am trying to catch a number from the keypad and display it on my lcd after i press on the button, i am using PIC18F4520 but things are not going well. U can see the circuit in the pic below
Moderator edit: added code to post.
Code:
#INCLUDE <P18F4520.INC>
CONFIG WDT = OFF
CONFIG PBADEN = OFF
WHAT_BUTTON EQU 0x00
TIME EQU 0X00
LCD_DATA EQU LATD
LCD_CTRL EQU LATE
RS EQU RE0
RW EQU RE1
EN EQU RE2
ORG 0x00
BRA INIT
ORG 0x08
CLRF WHAT_BUTTON
CALL LCDCLEAR
CALL PERMANENT_MSG1
CALL DELAY
BTFSS PORTA,3
BRA $-2
MOVLW '1'
;CALL CHECK_KEYPAD
CALL LCDPUTCHAR
CALL DELAY
BCF INTCON,INT0IF
RETFIE
PERMANENT_MSG1
CALL LCDLIN1
CALL DELAY
MOVLW 'I'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'N'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'S'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'E'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'R'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'T'
CALL LCDPUTCHAR
CALL DELAY
MOVLW ' '
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'I'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'D'
CALL LCDPUTCHAR
CALL DELAY
MOVLW ':'
CALL LCDPUTCHAR
CALL DELAY
MOVLW ' '
CALL LCDPUTCHAR
CALL DELAY
RETURN
TEMPORARY
CALL DELAY
MOVLW 'T'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'E'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'M'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'P'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'O'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'R'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'A'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'R'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'Y'
CALL LCDPUTCHAR
CALL DELAY
MOVLW ':'
CALL LCDPUTCHAR
CALL DELAY
MOVLW ' '
CALL LCDPUTCHAR
CALL DELAY
RETURN
WELCOME
CALL LCDCLEAR
CALL LCDLIN1
CALL DELAY
MOVLW 'W'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'E'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'L'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'C'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'O'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'M'
CALL LCDPUTCHAR
CALL DELAY
MOVLW 'E'
CALL LCDPUTCHAR
CALL DELAY
RETURN
;CHECK_KEYPAD
;
; BSF LATA,0 ;SEND 1 TO COLUMN 1
; BSF LATA,1 ;SEND 1 TO COLUMN 2
; BSF LATA,2 ;SEND 1 TO COLUMN 3
;
; BTFSC PORTA,3 ;CHECK IF #1 PRESSED
; MOVLW '1' ;IF YES PUT #1 IN W REGISTER
; BTFSC PORTA,4 ;CHECK IF #4PRESSED
; MOVLW '4' ;IF YES PUT #4 IN W REGISTER
; BTFSC PORTA,5 ;CHECK IF #7 PRESSED
; MOVLW '7' ;IF YES PUT #7 IN W REGISTER
;
; BTFSC PORTA,3 ;CHECK IF #2 PRESSED
; MOVLW '2' ;IF YES PUT #2 IN W REGISTER
; BTFSC PORTA,4 ;CHECK IF #5 RESSED
; MOVLW '5' ;IF YES PUT #5 IN W REGISTER
; BTFSC PORTA,5 ;CHECK IF #8 PRESSED
; MOVLW '8' ;IF YES PUT #8 IN W REGISTER
;
;
; BTFSC PORTA,3 ;CHECK IF #3 PRESSED
; MOVLW '3' ;IF YES PUT #3 IN W REGISTER
; BTFSC PORTA,4 ;CHECK IF #6 PRESSED
; MOVLW '6' ;IF YES PUT #6 IN W REGISTER
; BTFSC PORTA,5 ;CHECK IF #9 PRESSED
; MOVLW '9' ;IF YES PUT #9 IN W REGISTER
; RETURN
LCDPUTCHAR
MOVWF LCD_DATA
BSF LCD_CTRL,RS
BCF LCD_CTRL,RW
BSF LCD_CTRL,EN
NOP
BCF LCD_CTRL,EN
RETURN
LCDCLEAR
MOVLW B'00000001'
CALL LCDPUTCMD
RETURN
LCDLIN1
MOVLW 0x80
CALL LCDPUTCMD
RETURN
LCDLIN2
MOVLW 0xC0
CALL LCDPUTCMD
RETURN
LCDPUTCMD
MOVWF LCD_DATA
BCF LCD_CTRL,RS
BCF LCD_CTRL,RW
BSF LCD_CTRL,EN
NOP
BCF LCD_CTRL,EN
RETURN
DELAY
MOVLW 0xFF
MOVWF TIME
LOOP1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DECF TIME
MOVLW 0X00
CPFSEQ TIME
BRA LOOP1
RETURN
LCD_INIT
BCF LCD_CTRL,EN
CALL DELAY
MOVLW 0X38 ;INIT LCD 2 LIGNE,5X7 MATRIX
CALL LCDPUTCMD
CALL DELAY
MOVLW 0X0F ;DISPLAY ON CURSOR ON
CALL LCDPUTCMD
CALL DELAY
MOVLW 0X06 ;SHIFT CURSOR RIGHT
CALL LCDPUTCMD
CALL DELAY
MOVLW 0X01 ;CLEAR DISPLAY
CALL LCDPUTCMD
CALL DELAY
CALL LCDLIN1
CALL DELAY
MOVLW A'W'
CALL LCDPUTCHAR
CALL DELAY
MOVLW A'E'
CALL LCDPUTCHAR
CALL DELAY
MOVLW A'L'
CALL LCDPUTCHAR
CALL DELAY
MOVLW A'C'
CALL LCDPUTCHAR
CALL DELAY
MOVLW A'O'
CALL LCDPUTCHAR
CALL DELAY
MOVLW A'M'
CALL LCDPUTCHAR
CALL DELAY
MOVLW A'E'
CALL LCDPUTCHAR
CALL DELAY
RETURN
INIT
MOVLW B'11111000'
MOVWF TRISA
BSF LATA,0
BSF LATA,1
BSF LATA,2
CLRF TRISD
CLRF TRISE
CALL LCD_INIT
BCF INTCON2,RBPU
BCF INTCON,INT0IF
BCF INTCON2,INTEDG0
BSF INTCON,INT0IE
BSF INTCON,GIE
BCL
BRA BCL
END
Moderator edit: added code to post.
Attachments
-
5.3 KB Views: 16
Last edited by a moderator: