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