Uiteindelijk is het gelukt!
Het is al met al nog best wel een simpel programma geworden.
Voor de geïnteresseerden hieronder het programma.
Processor: PIC16f1847
Taal: MikroBasic
Frequentie: 8 Mhz intern
Het programma maakt gebruik van 2 LED Matrixen, 8*8 Leds, aangestuurd door MAX7219 chips.
pic basic code:
Program LichtKrant_2Display
'Display Matrix Led 8 * 8, type 1088AS
Dim ClockPin as sbit at LATB.4 'pin 10
Latch as sbit at LATB.3 'pin 9
Datapin as sbit at LATB.2 'pin 8
Light as Byte 'Intensity
Col as Byte
x1 as Byte
y1 as Integer
Str as String[95]
LenStr as Byte
CharX as Char
Index as Byte
Buffer as Byte[16]
Const Font As Byte[760] = ( 'Character table
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 'space'
0x00, 0x00, 0x30, 0x7d, 0x7d, 0x30, 0x00, 0x00, '!
0x00, 0x36, 0x36, 0x14, 0x00, 0x00, 0x00, 0x00, '"
0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, '#
0x00, 0x24, 0x2a, 0x6b, 0x2a, 0x12, 0x00, 0x00, '$
0x00, 0x23, 0x33, 0x18, 0x0c, 0x66, 0x62, 0x00, '%
0x05, 0x23, 0x77, 0x59, 0x51, 0x7f, 0x26, 0x00, '&
0x00, 0x00, 0x00, 0x70, 0x78, 0x08, 0x00, 0x00, ''
0x00, 0x41, 0x63, 0x3e, 0x1c, 0x00, 0x00, 0x00, '(
0x00, 0x00, 0x00, 0x1c, 0x3e, 0x63, 0x41, 0x00, ')
0x08, 0x2a, 0x3e, 0x1c, 0x3e, 0x2a, 0x08, 0x00, '*
0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x00, 0x00, '+
0x00, 0x00, 0x00, 0x00, 0x0e, 0x0f, 0x01, 0x00, ',
0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, '-
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, '.
0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, '/
0x00, 0x7c, 0xfe, 0x82, 0x82, 0x82, 0xfe, 0x7c, '0
0x00, 0x00, 0x02, 0x02, 0xfe, 0xfe, 0x42, 0x02, '1
0x00, 0x00, 0x66, 0xf6, 0x92, 0x9a, 0xce, 0x46, '2
0x00, 0x00, 0x6c, 0xfe, 0x92, 0x92, 0xc6, 0x44, '3
0x00, 0x0a, 0xfe, 0xfe, 0xca, 0x68, 0x38, 0x18, '4
0x00, 0x00, 0x9c, 0xbe, 0xa2, 0xa2, 0xe6, 0xe4, '5
0x00, 0x0c, 0x9e, 0x92, 0xd2, 0x7e, 0x3c, 0x00, '6
0x00, 0x00, 0xe0, 0xf0, 0x9e, 0x8e, 0xc0, 0xc0, '7
0x00, 0x00, 0x6c, 0xfe, 0x92, 0x92, 0xfe, 0x6c, '8
0x00, 0x00, 0x78, 0xfc, 0x96, 0x92, 0xf2, 0x60, '9
0x00, 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, ':
0x00, 0x00, 0x00, 0x36, 0x37, 0x01, 0x00, 0x00, ';
0x00, 0x41, 0x63, 0x36, 0x1c, 0x08, 0x00, 0x00, '<
0x00, 0x00, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00, '=
0x00, 0x00, 0x08, 0x1c, 0x36, 0x63, 0x41, 0x00, '>
0x00, 0x30, 0x78, 0x4d, 0x4d, 0x60, 0x20, 0x00, '?
0x00, 0x04, 0x32, 0x5a, 0x5a, 0x42, 0x3c, 0x00, '@
0x00, 0x3f, 0x7f, 0x48, 0x48, 0x7f, 0x3f, 0x00, 'A
0x00, 0x36, 0x7f, 0x49, 0x49, 0x7f, 0x7f, 0x00, 'B
0x00, 0x22, 0x63, 0x41, 0x41, 0x7f, 0x3e, 0x00, 'C
0x00, 0x3e, 0x7f, 0x41, 0x41, 0x7f, 0x7f, 0x00, 'D
0x00, 0x41, 0x49, 0x49, 0x49, 0x7f, 0x7f, 0x00, 'E
0x00, 0x40, 0x48, 0x48, 0x48, 0x7f, 0x7f, 0x00, 'F
0x00, 0x26, 0x67, 0x45, 0x41, 0x7f, 0x3e, 0x00, 'G
0x00, 0x7f, 0x7f, 0x08, 0x08, 0x7f, 0x7f, 0x00, 'H
0x00, 0x00, 0x41, 0x7f, 0x7f, 0x41, 0x00, 0x00, 'I
0x00, 0x40, 0x7e, 0x7f, 0x41, 0x07, 0x06, 0x00, 'J
0x00, 0x41, 0x63, 0x36, 0x1c, 0x7f, 0x7f, 0x00, 'K
0x00, 0x01, 0x01, 0x01, 0x01, 0x7f, 0x7f, 0x00, 'L
0x7f, 0x7f, 0x30, 0x18, 0x30, 0x7f, 0x7f, 0x00, 'M
0x7f, 0x7f, 0x0c, 0x18, 0x30, 0x7f, 0x7f, 0x00, 'N
0x00, 0x3e, 0x7f, 0x41, 0x41, 0x7f, 0x3e, 0x00, 'O
0x00, 0x38, 0x7c, 0x44, 0x44, 0x7f, 0x7f, 0x00, 'P
0x00, 0x3d, 0x7f, 0x46, 0x42, 0x7e, 0x3c, 0x00, 'Q
0x00, 0x31, 0x7b, 0x4e, 0x4c, 0x7f, 0x7f, 0x00, 'R
0x00, 0x26, 0x6f, 0x49, 0x49, 0x7b, 0x32, 0x00, 'S
0x00, 0x60, 0x40, 0x7f, 0x7f, 0x40, 0x60, 0x00, 'T
0x00, 0x7f, 0x7f, 0x01, 0x01, 0x7f, 0x7e, 0x00, 'U
0x00, 0x7c, 0x7e, 0x03, 0x03, 0x7e, 0x7c, 0x00, 'V
0x7f, 0x7f, 0x06, 0x0c, 0x06, 0x7f, 0x7f, 0x00, 'W
0x63, 0x77, 0x1c, 0x08, 0x1c, 0x77, 0x63, 0x00, 'X
0x00, 0x70, 0x78, 0x0f, 0x0f, 0x78, 0x70, 0x00, 'Y
0x00, 0x61, 0x71, 0x59, 0x4d, 0x47, 0x43, 0x00, 'Z
0x00, 0x41, 0x41, 0x7f, 0x7f, 0x00, 0x00, 0x00, '[
0x00, 0x04, 0x0c, 0x18, 0x30, 0x60, 0x40, 0x00, '\
0x00, 0x00, 0x00, 0x7f, 0x7f, 0x41, 0x41, 0x00, ']
0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08, 0x00, '^
0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, '_
0x00, 0x00, 0x00, 0x0c, 0x18, 0x18, 0x18, 0x00, ''
0x00, 0x0f, 0x1f, 0x15, 0x15, 0x17, 0x02, 0x00, 'a
0x00, 0x06, 0x0f, 0x09, 0x09, 0x7f, 0x7f, 0x00, 'b
0x00, 0x0a, 0x1b, 0x11, 0x11, 0x1f, 0x0e, 0x00, 'c
0x00, 0x7f, 0x7f, 0x09, 0x09, 0x0f, 0x06, 0x00, 'd
0x00, 0x0c, 0x1d, 0x15, 0x15, 0x1f, 0x0e, 0x00, 'e
0x00, 0x20, 0x64, 0x44, 0x7f, 0x3f, 0x04, 0x00, 'f
0x00, 0x3e, 0x3f, 0x25, 0x25, 0x3d, 0x18, 0x00, 'g
0x00, 0x07, 0x0f, 0x08, 0x08, 0x7f, 0x7f, 0x00, 'h
0x00, 0x00, 0x01, 0x2f, 0x2f, 0x01, 0x00, 0x00, 'i
0x00, 0x00, 0x5e, 0x5f, 0x01, 0x07, 0x06, 0x00, 'j
0x00, 0x11, 0x1b, 0x0e, 0x04, 0x7f, 0x7f, 0x00, 'k
0x00, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0x00, 'l
0x1f, 0x1f, 0x0c, 0x07, 0x0c, 0x1f, 0x1f, 0x00, 'm
0x00, 0x0f, 0x1f, 0x18, 0x18, 0x1f, 0x1f, 0x00, 'n
0x00, 0x0e, 0x1f, 0x11, 0x11, 0x1f, 0x0e, 0x00, 'o
0x00, 0x18, 0x3c, 0x24, 0x24, 0x3f, 0x3f, 0x00, 'p
0x03, 0x01, 0x3f, 0x3f, 0x24, 0x3c, 0x18, 0x00, 'q
0x00, 0x0c, 0x1c, 0x10, 0x10, 0x1f, 0x1f, 0x00, 'r
0x00, 0x12, 0x15, 0x15, 0x15, 0x15, 0x09, 0x00, 's
0x00, 0x08, 0x08, 0x3f, 0x3f, 0x08, 0x08, 0x00, 't
0x00, 0x1f, 0x1f, 0x01, 0x01, 0x1f, 0x1e, 0x00, 'u
0x00, 0x0c, 0x0e, 0x03, 0x03, 0x0e, 0x0c, 0x00, 'v
0x1e, 0x1f, 0x01, 0x0f, 0x01, 0x1f, 0x1e, 0x00, 'w
0x00, 0x11, 0x1b, 0x0e, 0x0e, 0x1b, 0x11, 0x00, 'x
0x00, 0x1e, 0x1f, 0x05, 0x05, 0x1d, 0x18, 0x00, 'y
0x00, 0x00, 0x19, 0x1d, 0x17, 0x13, 0x00, 0x00, 'z
0x00, 0x41, 0x41, 0x77, 0x3e, 0x08, 0x00, 0x00, '{
0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x20, 0x00, '\
0x00, 0x00, 0x08, 0x3e, 0x77, 0x41, 0x41, 0x00, '}
0x00, 0x10, 0x08, 0x18, 0x10, 0x18, 0x08, 0x00 '~
)
'===============================================================================
Sub Procedure Max_Write(Dim pCol, pDig0, pDig1 as Byte)
'===============================================================================
Latch = 0
SPI1_Write(pCol)
SPI1_Write(pDig0)
SPI1_Write(pCol)
SPI1_Write(pDig1)
Latch = 1
Delay_ms(2)
End sub
'===============================================================================
Sub Procedure Max7219_Init()
'===============================================================================
Max_Write(0x09, 0x00, 0x00)
Max_Write(0x0B, 0x07, 0x07)
Max_Write(0x0C, 0x01, 0x01)
Max_Write(0x0A, 0x01, 0x01)
End sub
'===============================================================================
Sub Procedure Test_Display() 'Turn on all LEDS'
'===============================================================================
Max_Write(0x0F, 0x01, 0x01)
Max_Write(0x0F, 0x00, 0x00)
End sub
'===============================================================================
Sub Procedure Clear_Leds() 'Turn off all Leds
'===============================================================================
For Col = 1 TO 8
Max_Write(Col, 0x00, 0x00)
Delay_ms(2)
Next Col
End sub
'===============================================================================
Sub Function Read_Str() As Byte
'===============================================================================
Result = Str[index]
Inc(Index)
If Index > Length(str) - 1 Then Index = 0 End if
End Sub
'===============================================================================
Sub Procedure Write_Display()
'===============================================================================
'Send data from Buffer to Displays
For Col = 1 to 8
Max_Write(Col, Buffer[0 + (Col - 1)], Buffer[8 + (Col - 1)])
Next Col
End Sub
'===============================================================================
Main:
'===============================================================================
OSCCON = %01110000 '8Mhz internal
ANSELB = %00000000 'Port B digital
TRISB = %00000000
SPI1_Init()
Max7219_Init()
Clear_Leds()
Buffer = " " 'Clear Buffer
Index = 0 'Index to 0
Str = " ! #$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_'abcdefghijklmnopqrstuvwxyz{|}~"
'Loop ------------------------------------------------------------------------
While True
CharX = Read_Str() 'Read Character 'Into buffer
For y1 = 7 to 0 step -1 'Into buffer
Buffer[0] = Font[((CharX - 0x20) <<3) + y1]
For x1 = 15 to 1 step -1 'Sroll 1 pos left
Buffer[x1] = Buffer[x1 - 1]
Next x1
Buffer[0] = 0x00 'Clean first byte
Write_Display()
Delay_ms(50)
Next y1
Wend
End.