🇩🇪
Zitat von: vloki in 28.02.2024, 10:01:18 CETdas war wohl der Hauptgrund, danke fürs mit denken. Ich habe scheinbar echt Pickit immer drin gelassen.Zitat von: ^Cobra in 27.02.2024, 06:42:42 CETIm Datenblatt habe ich nur gefunden das diese beiden Pinne auch PGD und PGC sind, also die Schnittstelle zum Programmieren...Ja, das Programmier/Debug-Tool musst du natürlich entfernen, damit die PGx Pins normal reagieren.
Zitat von: ^Cobra in 27.02.2024, 06:42:42 CETIm Datenblatt habe ich nur gefunden das diese beiden Pinne auch PGD und PGC sind, also die Schnittstelle zum Programmieren...Ja, das Programmier/Debug-Tool musst du natürlich entfernen, damit die PGx Pins normal reagieren.
#include GeneralConfigs.inc
;Baustein für eine LEDmatrix 4x4
;Polung Reihe-> Spalte
;2 Register enthalten den Sollzustand der LEDs
; LEDMatrixL => 1-8 || LEDMatrixH 9-16
;Über Timer0 werden die LEDs nacheinaner durchgeschaltet und
;der Zustand angezeigt
; Spalten1-4
;Reihe1 RB0 1--2--3--4
;Reihe2 RB1 5--6--7--8
;Reihe3 RB2 9--10-11-12
;Reihe4 RB3 13-14-15-16
; RB4 RB7
;LEDMatrixL 0 0 0 0|0 0 0 0
; | | | | | | | |
; LED14 + | | | | | | |
; LED10 + | | | | | |
; LED6 + | | | | |
; LED2 + | | | |
; LED13 + | | |
; LED9 + | |
; LED5 + |
; LED1 +
;LEDMatrixH 0 0 0 0|0 0 0 0
; | | | | | | | |
; LED16 + | | | | | | |
; LED12 + | | | | | |
; LED8 + | | | | |
; LED4 + | | | |
; LED15 + | | |
; LED11 + | |
; LED7 + |
; LED3 +
#Define LEDPort LATB
#Define LEDTris TRISB
#Define Reihe1 RB0
#Define Reihe2 RB1
#Define Reihe3 RB2
#Define Reihe4 RB3
#Define Spalte1 RB4
#Define Spalte2 RB5
#Define Spalte3 RB6
#Define Spalte4 RB7
;#Define LED1 LEDMatrixL,0
;#Define LED2 LEDMatrixL,4
;#Define LED3 LEDMatrixH,0
;#Define LED4 LEDMatrixH,4
;#Define LED5 LEDMatrixL,1
;#Define LED6 LEDMatrixL,5
;#Define LED7 LEDMatrixH,1
;#Define LED8 LEDMatrixH,5
;#Define LED9 LEDMatrixL,2
;#Define LED10 LEDMatrixL,6
;#Define LED11 LEDMatrixH,2
;#Define LED12 LEDMatrixH,6
;#Define LED13 LEDMatrixL,3
;#Define LED14 LEDMatrixL,7
;#Define LED15 LEDMatrixH,3
;#Define LED16 LEDMatrixH,7
EXTERN Temp0,Temp1,Temp2,Temp3
GLOBAL LEDMatrixL,LEDMatrixH,LEDMatrixAnzeigen
UDATA
LEDMatrixL Res 1
LEDMatrixH Res 1
ActSpalte Res 1 ;Welche Spalte als nächsten angezeigt wird
CODE ; let linker place main program
LEDMatrixAnzeigen
MOVLW B'11111111'
MOVWF LEDTris ; Alles Output
MOVWF LEDPort ; Alle Ausgänge 1
movlw D'3'
movwf PCLATH
MOVF ActSpalte,W
rlncf WREG, W
ADDWF PCL,F
Incf ActSpalte,f
BRA Spalte1Anzeigen
BRA Spalte2Anzeigen
BRA Spalte3Anzeigen
BRA Spalte4Anzeigen
CLRF ActSpalte
BSF LEDPort,Spalte4
Incf ActSpalte,f
Spalte1Anzeigen
MOVLW B'11110000'
IORWF LEDMatrixL,W ;Reihe Laden
MOVWF LEDPort ;
BCF LEDPort,Spalte1
Incf ActSpalte,f ;spalte1 (RB4) als erste aktiv
return
Spalte2Anzeigen
BSF LEDPort,Spalte1
SWAPF LEDMatrixL,W
IORLW B'11110000'
MOVWF LEDPort
BCF LEDPort,Spalte2
Incf ActSpalte,f ;spalte1 (RB4) als erste aktiv
return
Spalte3Anzeigen
BCF LEDPort,Spalte2
MOVLW B'11110000'
IORWF LEDMatrixH,W ;Reihe Laden
MOVWF LEDPort ;
BCF LEDPort,Spalte3
Incf ActSpalte,f ;spalte1 (RB4) als erste aktiv
return
Spalte4Anzeigen
BSF LEDPort,Spalte3
SWAPF LEDMatrixH,W
IORLW B'11110000'
MOVWF LEDPort
BCF LEDPort,Spalte4
Incf ActSpalte,f ;spalte1 (RB4) als erste aktiv
return
END
#include GeneralConfigs.inc
;Baustein für das Abfragen einer Tasterturmatrix 4x4
;Enthält auch eine LED Matix, Polung Reihe-> Spalte
;Pullups aktiv bei Spalten
;es
; Spalten1-4
;Reihe1 1--2--3--4
;Reihe2 5--6--7--8
;Reihe3 9--10-11-12
;Reihe4 13-14-15-16
#Define Reihe1 PORTB,RA0
#Define Reihe2 PORTB,RA1
#Define Reihe3 PORTB,RA2
#Define Reihe4 PORTB,RA3
#Define Spalte1 PORTB,RA4
#Define Spalte2 PORTB,RA5
#Define Spalte3 PORTB,RA6
#Define Spalte4 PORTB,RA7
EXTERN Temp0,Temp1
GLOBAL MatrixTastenInit,MatrixTastenAbfrage
CODE ; let linker place main program
;Inizalisieren
MatrixTastenInit
bcf INTCON2,RBPU ;Puppups einschalten
movlw B'11110000' ;alle einschalten die mit Spalte verbunden sind
movwf WPUB
movlw B'00001111' ;Spalten Eingang, Reihen Ausgang
movwf TRISB
movlw B'00001111' ;Ausgange alle setzen
movwf LATB
return
;Matrix Tasten abfragen ob Taste gedrückt wurde
;Es wird Reihenweise abgefragt ob eine Taste gedrückt wurde
MatrixTastenAbfrage
CLRF Temp0 ;Temp0 als Speicher für gedrückte Taste
movlw D'4' ;4x4 Matrix
movwf Temp1;
BCF LATB,0 ;Reihe 1 Abschalten
TasteSuchen
btfss Spalte1
goto TasteGefunden
incf Temp0,f
btfss Spalte2
goto TasteGefunden
incf Temp0,f
btfss Spalte3
goto TasteGefunden
incf Temp0,f
btfss Spalte4
goto TasteGefunden
incf Temp0,f
RLNCF LATB,f ; nächte Zeile
decfsz Temp1,f
goto TasteSuchen ; alle 4 Zeilen testen
TasteGefunden
movf Temp0,w
return ;Ergebnis steht in W
END