Ok,
Voor degene die begint met een LED Matrix van 8 * 8, voorzien van MAX7219 driver en aangestuurd vanuit PICBASIC met de PIC16F628A als microcontroller, hierbij een voorbeeldprogramma.
Het programma toont wat testresultaten. Het is op zich redelijk beperkt, maar kan een hulp zijn om te beginnen.
pic basic code:
;************************************
;* Naam : Test LED Matrix 8*8 *
;* Auteur : Bavelt *
;* Datum : 27-09-2019 *
;************************************
DEVICE 16F628A ;PIC 16F628A Microcontroller
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL True ;Alle ingangen digitaal
DECLARE XTAL 4
SYMBOL ClockPin = PORTB.1 ;Poort B.1 is de Clock
SYMBOL latch = PORTB.2 ;Poort B.2 is de latch
SYMBOL DataPin = PORTB.3 ;Poort B.3 is de Datapin
; 76543210
PORTA = %00000000
PORTB = %00000000
TRISA = %11111111
TRISB = %11110001
DIM Kolom AS BYTE ;Hiermee wordt de kolom (digit) van de matrix geselecteerd
DIM Inhoud AS BYTE ;De inhoud van de kolom, ieder '1' laat een ledje branden op de betreffende positie
CLEAR ;Wis alle RAM geheugen
DIM Kar_Tabel[8] AS BYTE
Kar_Tabel [0] = $00 ;Dit zijn de kolomwaarden voor het karaker "A"
Kar_Tabel [1] = $7F ;Bijvoorbeeld $7F = %01111111, alle LEDS aan behalve de eerste
Kar_Tabel [2] = $88 ;De complete tabel van de karakterset zou in een EEPROM kunnen worden opgeslagen
Kar_Tabel [3] = $88
Kar_Tabel [4] = $88
Kar_Tabel [5] = $7F
Kar_Tabel [6] = $00
Kar_Tabel [7] = $00
START:
GOSUB Max7219_Init
GOSUB Display_Testen
GOSUB Uitzetten_Leds
GOSUB Binair_Tellen
GOSUB Binair_Terugtellen
GOSUB Karakter_Tonen
GOTO Einde
;******************************
;Hieronder staan de subroutines
Display_Testen: ;Testen van het display; alle LEDS aan
Kolom = $0F
Inhoud = $01
GOSUB Max_Write
DELAYMS 1000
Kolom = $0F
Inhoud = $00
GOSUB Max_Write
DELAYMS 200
RETURN
Uitzetten_Leds: ;Weer uitzetten van de LEDS
DIM i1 AS BYTE
i1 = 0
FOR i1 = 1 TO 8
Kolom = i1
Inhoud = %00000000
GOSUB Max_Write
NEXT
RETURN
Binair_Tellen: ;Binair tellen, wordt getoond in de kolommen
FOR Kolom = 1 TO 8
FOR Inhoud = 1 TO 255
GOSUB Max_Write
DELAYMS 30
NEXT
NEXT
RETURN
Binair_Terugtellen: ;Binair terugtellen
FOR Kolom = 8 TO 1 STEP -1
FOR Inhoud = 255 TO 0 STEP -1
GOSUB Max_Write
DELAYMS 30
NEXT
NEXT
RETURN
Karakter_Tonen: ;Toon het karakter A
DIM Ind AS BYTE ;Later uitbreiden
FOR Kolom = 1 TO 8
latch = 0
SHOUT DataPin, ClockPin, MSBFIRST, [Kolom \ 8, Kar_Tabel [Kolom - 1]]
latch = 1
NEXT
RETURN
Max_Write:
latch = 0
SHOUT DataPin, ClockPin, MSBFIRST, [Kolom \ 8, Inhoud \ 8]
latch = 1
RETURN
Max7219_Init: ;Hier worden de registers geïnitialiseerd
Kolom = $09 ;Decode Mode Register:
Inhoud = $00 ;Code B for digits
GOSUB Max_Write
Kolom = $0B ;Scan-Limit Register:
Inhoud = $07 ;Digit 0,1,2,3,4,5,6,7 ($00-$07)
GOSUB Max_Write
Kolom = $0C ;Shutdown Register:
Inhoud = $01
GOSUB Max_Write
Kolom = $0A ;Intensity Register
Inhoud = $00
GOSUB Max_Write
RETURN
Einde: ;Einde Programma
END