Program Lichtkrant_6D
Dim ClockPin as sbit at LATB.4
Latch as sbit at LATB.3
Datapin as sbit at LATB.2
Row as Byte
i1 as byte
j1 as byte
y1 as byte
Str as String[105]
CharX as Char
Index as Byte
Const Font As Byte[760] = (
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x18, 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x00,
0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, 0x6c, 0x00,
0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00,
0x10, 0x3c, 0x40, 0x38, 0x04, 0x78, 0x10, 0x00,
0x60, 0x66, 0x0c, 0x18, 0x30, 0x66, 0x06, 0x00,
0xfc, 0x66, 0xa6, 0x14, 0x3c, 0x66, 0x3c, 0x00,
0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x30, 0x00,
0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60, 0x00,
0x06, 0x0c, 0x18, 0x18, 0x18, 0x0c, 0x06, 0x00,
0x00, 0x6c, 0x38, 0xfe, 0x38, 0x6c, 0x00, 0x00,
0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x00, 0x00,
0x06, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00,
0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
0x7e, 0x18, 0x18, 0x18, 0x1c, 0x18, 0x18, 0x00,
0x7e, 0x06, 0x0c, 0x30, 0x60, 0x66, 0x3c, 0x00,
0x3c, 0x66, 0x60, 0x38, 0x60, 0x66, 0x3c, 0x00,
0x30, 0x30, 0x7e, 0x32, 0x34, 0x38, 0x30, 0x00,
0x3c, 0x66, 0x60, 0x60, 0x3e, 0x06, 0x7e, 0x00,
0x3c, 0x66, 0x66, 0x3e, 0x06, 0x66, 0x3c, 0x00,
0x18, 0x18, 0x18, 0x30, 0x30, 0x66, 0x7e, 0x00,
0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00,
0x3c, 0x66, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00,
0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00,
0x0c, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00,
0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00,
0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x00, 0x00,
0x06, 0x0c, 0x18, 0x30, 0x18, 0x0c, 0x06, 0x00,
0x18, 0x00, 0x18, 0x38, 0x60, 0x66, 0x3c, 0x00,
0x00, 0x3c, 0x42, 0x1a, 0x3a, 0x22, 0x1c, 0x00,
0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x3c, 0x00,
0x3e, 0x66, 0x66, 0x3e, 0x66, 0x66, 0x3e, 0x00,
0x3c, 0x66, 0x06, 0x06, 0x06, 0x66, 0x3c, 0x00,
0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00,
0x7e, 0x06, 0x06, 0x3e, 0x06, 0x06, 0x7e, 0x00,
0x06, 0x06, 0x06, 0x3e, 0x06, 0x06, 0x7e, 0x00,
0x3c, 0x66, 0x76, 0x06, 0x06, 0x66, 0x3c, 0x00,
0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00,
0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00,
0x1c, 0x36, 0x36, 0x30, 0x30, 0x30, 0x78, 0x00,
0x66, 0x36, 0x1e, 0x0e, 0x1e, 0x36, 0x66, 0x00,
0x7e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00,
0xc6, 0xc6, 0xc6, 0xd6, 0xfe, 0xee, 0xc6, 0x00,
0xc6, 0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0x00,
0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
0x06, 0x06, 0x3e, 0x66, 0x66, 0x66, 0x3e, 0x00,
0x60, 0x3c, 0x76, 0x66, 0x66, 0x66, 0x3c, 0x00,
0x66, 0x36, 0x1e, 0x3e, 0x66, 0x66, 0x3e, 0x00,
0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00,
0x18, 0x18, 0x18, 0x18, 0x18, 0x5a, 0x7e, 0x00,
0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00,
0x18, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00,
0x63, 0x77, 0x7f, 0x6b, 0x63, 0x63, 0x63, 0x00,
0xc6, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0xc6, 0x00,
0x18, 0x18, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x00,
0x7e, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00,
0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00,
0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00,
0x1e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1e, 0x00,
0x00, 0x00, 0x00, 0x82, 0x44, 0x28, 0x10, 0x00,
0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0c, 0x18, 0x18, 0x18, 0x00,
0x7c, 0x66, 0x7c, 0x60, 0x3c, 0x00, 0x00, 0x00,
0x3e, 0x66, 0x66, 0x3e, 0x06, 0x06, 0x06, 0x00,
0x3c, 0x66, 0x06, 0x66, 0x3c, 0x00, 0x00, 0x00,
0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00,
0x3c, 0x06, 0x7e, 0x66, 0x3c, 0x00, 0x00, 0x00,
0x0c, 0x0c, 0x3e, 0x0c, 0x0c, 0x6c, 0x38, 0x00,
0x3c, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x00, 0x00,
0x66, 0x66, 0x66, 0x3e, 0x06, 0x06, 0x06, 0x00,
0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x00, 0x00,
0x1c, 0x36, 0x36, 0x30, 0x30, 0x00, 0x30, 0x00,
0x66, 0x36, 0x1e, 0x36, 0x66, 0x06, 0x06, 0x00,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
0xd6, 0xd6, 0xfe, 0xee, 0xc6, 0x00, 0x00, 0x00,
0x66, 0x66, 0x66, 0x7e, 0x3e, 0x00, 0x00, 0x00,
0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00,
0x06, 0x06, 0x3e, 0x66, 0x66, 0x3e, 0x00, 0x00,
0xf0, 0xb0, 0x3c, 0x36, 0x36, 0x3c, 0x00, 0x00,
0x06, 0x06, 0x66, 0x66, 0x3e, 0x00, 0x00, 0x00,
0x3e, 0x40, 0x3c, 0x02, 0x7c, 0x00, 0x00, 0x00,
0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00,
0x7c, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00,
0x18, 0x3c, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
0x7c, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00,
0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00, 0x00, 0x00,
0x3c, 0x60, 0x7c, 0x66, 0x66, 0x00, 0x00, 0x00,
0x3c, 0x0c, 0x18, 0x30, 0x3c, 0x00, 0x00, 0x00,
0x70, 0x18, 0x18, 0x0c, 0x18, 0x18, 0x70, 0x00,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
0x0e, 0x18, 0x18, 0x30, 0x18, 0x18, 0x0e, 0x00,
0x00, 0x00, 0x00, 0x36, 0x5c, 0x00, 0x00, 0x00
)
Dim BufferIn as Byte[6][8]
Dim Buffer as Byte[6]
Sub Procedure Max_Write(Dim pRow, pDig0, pDig1, pDig2, pDig3, pDig4, pDig5 as Byte)
Latch = 0
SPI1_Write(pRow)
SPI1_Write(pDig0)
SPI1_Write(pRow)
SPI1_Write(pDig1)
SPI1_Write(pRow)
SPI1_Write(pDig2)
SPI1_Write(pRow)
SPI1_Write(pDig3)
SPI1_Write(pRow)
SPI1_Write((pDig4))
SPI1_Write(pRow)
SPI1_Write(pDig5)
Latch = 1
delay_ms(2)
End sub
Sub Procedure Max7219_Init()
Max_Write(0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)
Max_Write(0x0B, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07)
Max_Write(0x0C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01)
Max_Write(0x0A, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01)
End sub
Sub Procedure test_Display()
Max_Write(0x0F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01)
DELAY_MS(50)
Max_Write(0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)
DELAY_MS(5)
End sub
Sub Procedure Clear_Leds()
FOR Row = 1 TO 8
Max_Write(Row, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)
delay_ms(2)
NEXT Row
End sub
Sub Procedure Write_Display()
For Row = 1 to 8
Buffer[0] = BufferIn[0] [Row - 1]
Buffer[1] = BufferIn[1] [Row - 1]
Buffer[2] = BufferIn[2] [Row - 1]
Buffer[3] = BufferIn[3] [Row - 1]
Buffer[4] = BufferIn[4] [Row - 1]
Buffer[5] = BufferIn[5] [Row - 1]
Max_Write(Row, Buffer[0], Buffer[1], Buffer[2], Buffer[3], Buffer[4], Buffer[5])
Delay_ms(1)
Next Row
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 Shift()
For i1 = 5 to 0 step -1
For j1 = 0 to 7
BufferIn[i1][j1].0 = BufferIn[i1][j1].1
BufferIn[i1][j1].1 = BufferIn[i1][j1].2
BufferIn[i1][j1].2 = BufferIn[i1][j1].3
BufferIn[i1][j1].3 = BufferIn[i1][j1].4
BufferIn[i1][j1].4 = BufferIn[i1][j1].5
BufferIn[i1][j1].5 = BufferIn[i1][j1].6
BufferIn[i1][j1].6 = BufferIn[i1][j1].7
if i1 > 0 then BufferIn[i1][j1].7 = BufferIn[i1-1][j1].0 else BufferIn[0][j1].7 = 0 end if
Next j1
Write_Display()
Next i1
End Sub
Main:
OSCCON = %01111000
ANSELB = %00000000
TRISB = %00000000
SPI1_Init()
Max7219_Init()
Clear_Leds()
Str = " ! #$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_'abcdefghijklmnopqrstuvwxyz{|}~"
Index = 0
While true
Write_Display()
For y1 = 0 to 7
Shift()
Next y1
CharX = Read_Str()
For y1 = 0 to 7
BufferIn[0][y1] = Font[((CharX - 0x20) <<3) + y1]
Next y1
Wend
End.