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
-----