salut

Voila j'ai un problème je voudrais décoder mon clavier. Quand le bouton est enfonce je l’affiche sur lcd. je n'arrive pas à faire fonctionner mon code.

Code:
ENTRER
	
		CALL    LCDCLEAR
		MOVLW	' '		; ASCII '0'
		MOVWF	COUNT
		MOVLW	LCD_LINE2
		CALL	LCDSDDA		; Position cursor leftmost on first line
		CALL	TABLE6	; Display message
		MOVLW	LCD_LINE2 + 0x013
		CALL	LCDSDDA		; Position cursor
		MOVF	COUNT, W
		CALL	LCDPUTCHAR	; Display line number
	
		MOVLW	LCD_LINE2 + 0x00F
KEY					
		CALL	LCDSDDA		; Position cursor
		CALL	KEYBOARD
		MOVF	COUNT, W
		CALL	LCDPUTCHAR	; Display line number
		GOTO	KEY
	    RETURN	


KEYBOARD
	MOVLW	0xF0
	MOVWF	PORTD

	BSF	STATUS,RP0
	MOVWF	TRISD		; PortD[7..4] en Entrée, PortD[3..0] en Sortie
	BCF	STATUS,RP0

	CLRF	KBD_TEMP	; initialisation des variables
	CLRF	KBD_COL
	MOVLW	0x08
	MOVWF	KBD_INDEX	; B3 représente la colonne de droite
KBD_LOOP
	MOVFW	KBD_INDEX
	CALL 	SCAN_KBD	; scan de la rangée pointée par KBD_INDEX
	SKPNZ			; a-t'on frappé une touche ?
	GOTO 	NEXT_KBD	; non, alors on passe à la suivante

	BTFSC	KBD_TEMP,0	; analyse des rangées
	MOVLW	0x00
	BTFSC	KBD_TEMP,1
	MOVLW	0x04
	BTFSC	KBD_TEMP,2
	MOVLW	0x08
	BTFSC	KBD_TEMP,3
	MOVLW	0x0C
	ADDWF	KBD_COL,W	; on ajoute la valeur de la colonne (KBD_COL)
	ANDLW	0x0F
	
	MOVWF	KBD_TEMP	; recherche du code de la touche
	SKPNZ
	MOVLW	'F'
	DECF	KBD_TEMP,F
	SKPNZ
	MOVLW	'E'
	DECF	KBD_TEMP,F
	SKPNZ
	MOVLW	'D'
	DECF	KBD_TEMP,F
	SKPNZ
	MOVLW	'C'
	DECF	KBD_TEMP,F
	SKPNZ
	MOVLW	'3'
	DECF	KBD_TEMP,F
	SKPNZ
	MOVLW	'6'
	DECF	KBD_TEMP,F
	SKPNZ
	MOVLW	'9'
	DECF	KBD_TEMP,F
	SKPNZ
	MOVLW	'B'	
	DECF	KBD_TEMP,F
	SKPNZ
	MOVLW	'2'
	DECF	KBD_TEMP,F
	SKPNZ
	MOVLW	'5'
	DECF	KBD_TEMP,F
	SKPNZ
	MOVLW	'8'
	DECF	KBD_TEMP,F
	SKPNZ
	MOVLW	'0'
	DECF	KBD_TEMP,F
	SKPNZ
	MOVLW	'1'
	DECF	KBD_TEMP,F
	SKPNZ
	MOVLW	'4'
	DECF	KBD_TEMP,F
	SKPNZ
	MOVLW	'7'
	DECF	KBD_TEMP,F
	SKPNZ
	MOVLW	'A'

	GOTO	FIN_KBD		; on sort du sous-programme

NEXT_KBD
	INCF	KBD_COL,F	; passage à la colonne suivante
	RRF	KBD_INDEX,F	; KBD_INDEX = 0x08, 0x84, 0x42, 0x21, 0x11
	BTFSS	KBD_INDEX,4	; a t'on fini ?
	GOTO	KBD_LOOP	; NON, alors on reprend sur la prochaine colonne
	
FIN_KBD
	BANKSEL	TRISD
	CLRF	TRISD		; tous les bits en sortie
	BANKSEL	PORTD

	CLRF	PORTD
	ANDLW	0xFF		; pour positionner STATUS (Z)
	RETURN
;=============================================================================
; Scrutation du clavier
;=============================================================================
SCAN_KBD

	XORLW	0xFF		; inversion bit à bit
	MOVWF	PORTD

	MOVLW	H'FF'		; on temporise
	MOVWF	KBD_TEMP	 
K_LOOP
	DECFSZ	KBD_TEMP, F	
	GOTO	K_LOOP		

	MOVF	PORTD,W		; lecture du port B
	XORLW	0xFF		; inversion des bits
	MOVWF	KBD_TEMP
	SWAPF	KBD_TEMP,W	; on ramène les poids forts en bas (LSB)
	ANDLW	0x0F		; masquage des MSB
	MOVWF	KBD_TEMP	; stockage du code
	RETURN