Using bit arrays will make adding of information simpler - it can be visualized during entering the graphical data. Say I want to draw a circle, in BIT, it will look like
001100
010010
010010
001100
Here is the working code, but it has two problems:
1. It is dead huge - 3.3k, so had to use 16F876A
2. If I decrease refresh time, for display to less flicker, some non-needed pixels also come on, but at lower brightness. I suspect, this is because MCU isn't giving "true" gnd connection?
Code:
L1 var PORTB.0
L2 VAR PORTB.1
L3 VAR PORTB.2
L4 VAR PORTB.3
L5 VAR PORTB.4
L6 VAR PORTB.5
L7 VAR PORTC.1
C1 VAR PORTC.5
C2 VAR PORTC.4
C3 VAR PORTC.6
C4 VAR PORTC.2
C5 VAR PORTC.3
DEFINE OSC 4
DRO VAR BYTE 'char redraw timing
SVLA VAR BYTE 'char scroll value
SVLA=0
TRIALI VAR BYTE 'char holdon timing
'define arrays
line1 var bit[12]
line2 var bit[12]
line3 var bit[12]
line4 var bit[12]
line5 var bit[12]
line6 var bit[12]
line7 var bit[12]
'write data to array
'line 1
line1[0]=0
line1[1]=1
line1[2]=1
line1[3]=1
line1[4]=0
line1[5]=0
line1[6]=0
line1[7]=1
line1[8]=1
line1[9]=1
line1[10]=0
line1[11]=0
'line 2
line2[0]=1
line2[1]=0
line2[2]=0
line2[3]=0
line2[4]=1
line2[5]=0
line2[6]=1
line2[7]=0
line2[8]=0
line2[9]=0
line2[10]=1
line2[11]=0
'line 3
line3[0]=0
line3[1]=0
line3[2]=0
line3[3]=0
line3[4]=1
line3[5]=0
line3[6]=0
line3[7]=0
line3[8]=0
line3[9]=0
line3[10]=1
line3[11]=0
'line 4
line4[0]=0
line4[1]=1
line4[2]=1
line4[3]=1
line4[4]=1
line4[5]=0
line4[6]=0
line4[7]=0
line4[8]=0
line4[9]=0
line4[10]=1
line4[11]=0
'line 5
line5[0]=1
line5[1]=0
line5[2]=0
line5[3]=0
line5[4]=1
line5[5]=0
line5[6]=1
line5[7]=0
line5[8]=0
line5[9]=0
line5[10]=1
line5[11]=0
'line 6
line6[0]=1
line6[1]=0
line6[2]=0
line6[3]=0
line6[4]=1
line6[5]=0
line6[6]=1
line6[7]=0
line6[8]=0
line6[9]=0
line6[10]=1
line6[11]=0
'line 7
line7[0]=0
line7[1]=1
line7[2]=1
line7[3]=1
line7[4]=0
line7[5]=0
line7[6]=0
line7[7]=1
line7[8]=1
line7[9]=1
line7[10]=0
line7[11]=0
DRO=2 'time refresh set
'turn off display
HIGH L1
HIGH L2
HIGH L3
HIGH L4
HIGH L5
HIGH L6
HIGH L7
LOW C1
LOW C2
LOW C3
LOW C4
LOW C5
cikleri:
FOR SVLA=0 TO 6 'scroll through the array
FOR TRIALI=1 TO 30 'time to show individual char
low L1 'ENABLE LINE 1
IF LINE1[0+SVLA]=1 THEN
HIGH C1
ELSE
LOW C1
ENDIF
IF LINE1[1+SVLA]=1 THEN
HIGH C2
ELSE
LOW C2
ENDIF
IF LINE1[2+SVLA]=1 THEN
HIGH C3
ELSE
LOW C3
ENDIF
IF LINE1[3+SVLA]=1 THEN
HIGH C4
ELSE
LOW C4
ENDIF
IF LINE1[4+SVLA]=1 THEN
HIGH C5
ELSE
LOW C5
ENDIF
PAUSE DRO
HIGH L1
low L2 'ENABLE LINE 2
IF LINE2[0+SVLA]=1 THEN
HIGH C1
ELSE
LOW C1
ENDIF
IF LINE2[1+SVLA]=1 THEN
HIGH C2
ELSE
LOW C2
ENDIF
IF LINE2[2+SVLA]=1 THEN
HIGH C3
ELSE
LOW C3
ENDIF
IF LINE2[3+SVLA]=1 THEN
HIGH C4
ELSE
LOW C4
ENDIF
IF LINE2[4+SVLA]=1 THEN
HIGH C5
ELSE
LOW C5
ENDIF
PAUSE DRO
HIGH L2
low L3 'ENABLE LINE 3
IF LINE3[0+SVLA]=1 THEN
HIGH C1
ELSE
LOW C1
ENDIF
IF LINE3[1+SVLA]=1 THEN
HIGH C2
ELSE
LOW C2
ENDIF
IF LINE3[2+SVLA]=1 THEN
HIGH C3
ELSE
LOW C3
ENDIF
IF LINE3[3+SVLA]=1 THEN
HIGH C4
ELSE
LOW C4
ENDIF
IF LINE3[4+SVLA]=1 THEN
HIGH C5
ELSE
LOW C5
ENDIF
PAUSE DRO
HIGH L3
low L4 'ENABLE LINE 4
IF LINE4[0+SVLA]=1 THEN
HIGH C1
ELSE
LOW C1
ENDIF
IF LINE4[1+SVLA]=1 THEN
HIGH C2
ELSE
LOW C2
ENDIF
IF LINE4[2+SVLA]=1 THEN
HIGH C3
ELSE
LOW C3
ENDIF
IF LINE4[3+SVLA]=1 THEN
HIGH C4
ELSE
LOW C4
ENDIF
IF LINE4[4+SVLA]=1 THEN
HIGH C5
ELSE
LOW C5
ENDIF
PAUSE DRO
HIGH L4
low L5 'ENABLE LINE 5
IF LINE5[0+SVLA]=1 THEN
HIGH C1
ELSE
LOW C1
ENDIF
IF LINE5[1+SVLA]=1 THEN
HIGH C2
ELSE
LOW C2
ENDIF
IF LINE5[2+SVLA]=1 THEN
HIGH C3
ELSE
LOW C3
ENDIF
IF LINE5[3+SVLA]=1 THEN
HIGH C4
ELSE
LOW C4
ENDIF
IF LINE5[4+SVLA]=1 THEN
HIGH C5
ELSE
LOW C5
ENDIF
PAUSE DRO
HIGH L5
low L6 'ENABLE LINE 6
IF LINE6[0+SVLA]=1 THEN
HIGH C1
ELSE
LOW C1
ENDIF
IF LINE6[1+SVLA]=1 THEN
HIGH C2
ELSE
LOW C2
ENDIF
IF LINE6[2+SVLA]=1 THEN
HIGH C3
ELSE
LOW C3
ENDIF
IF LINE6[3+SVLA]=1 THEN
HIGH C4
ELSE
LOW C4
ENDIF
IF LINE6[4+SVLA]=1 THEN
HIGH C5
ELSE
LOW C5
ENDIF
PAUSE DRO
HIGH L6
low L7 'ENABLE LINE 7
IF LINE7[0+SVLA]=1 THEN
HIGH C1
ELSE
LOW C1
ENDIF
IF LINE7[1+SVLA]=1 THEN
HIGH C2
ELSE
LOW C2
ENDIF
IF LINE7[2+SVLA]=1 THEN
HIGH C3
ELSE
LOW C3
ENDIF
IF LINE7[3+SVLA]=1 THEN
HIGH C4
ELSE
LOW C4
ENDIF
IF LINE7[4+SVLA]=1 THEN
HIGH C5
ELSE
LOW C5
ENDIF
PAUSE DRO
HIGH L7
NEXT
PAUSE 5
NEXT
'ROTATE BACK
FOR SVLA=6 TO 0 STEP -1
FOR TRIALI=1 TO 30
low L1 'ENABLE LINE 1
IF LINE1[0+SVLA]=1 THEN
HIGH C1
ELSE
LOW C1
ENDIF
IF LINE1[1+SVLA]=1 THEN
HIGH C2
ELSE
LOW C2
ENDIF
IF LINE1[2+SVLA]=1 THEN
HIGH C3
ELSE
LOW C3
ENDIF
IF LINE1[3+SVLA]=1 THEN
HIGH C4
ELSE
LOW C4
ENDIF
IF LINE1[4+SVLA]=1 THEN
HIGH C5
ELSE
LOW C5
ENDIF
PAUSE DRO
HIGH L1
low L2 'ENABLE LINE 2
IF LINE2[0+SVLA]=1 THEN
HIGH C1
ELSE
LOW C1
ENDIF
IF LINE2[1+SVLA]=1 THEN
HIGH C2
ELSE
LOW C2
ENDIF
IF LINE2[2+SVLA]=1 THEN
HIGH C3
ELSE
LOW C3
ENDIF
IF LINE2[3+SVLA]=1 THEN
HIGH C4
ELSE
LOW C4
ENDIF
IF LINE2[4+SVLA]=1 THEN
HIGH C5
ELSE
LOW C5
ENDIF
PAUSE DRO
HIGH L2
low L3 'ENABLE LINE 3
IF LINE3[0+SVLA]=1 THEN
HIGH C1
ELSE
LOW C1
ENDIF
IF LINE3[1+SVLA]=1 THEN
HIGH C2
ELSE
LOW C2
ENDIF
IF LINE3[2+SVLA]=1 THEN
HIGH C3
ELSE
LOW C3
ENDIF
IF LINE3[3+SVLA]=1 THEN
HIGH C4
ELSE
LOW C4
ENDIF
IF LINE3[4+SVLA]=1 THEN
HIGH C5
ELSE
LOW C5
ENDIF
PAUSE DRO
HIGH L3
low L4 'ENABLE LINE 4
IF LINE4[0+SVLA]=1 THEN
HIGH C1
ELSE
LOW C1
ENDIF
IF LINE4[1+SVLA]=1 THEN
HIGH C2
ELSE
LOW C2
ENDIF
IF LINE4[2+SVLA]=1 THEN
HIGH C3
ELSE
LOW C3
ENDIF
IF LINE4[3+SVLA]=1 THEN
HIGH C4
ELSE
LOW C4
ENDIF
IF LINE4[4+SVLA]=1 THEN
HIGH C5
ELSE
LOW C5
ENDIF
PAUSE DRO
HIGH L4
low L5 'ENABLE LINE 5
IF LINE5[0+SVLA]=1 THEN
HIGH C1
ELSE
LOW C1
ENDIF
IF LINE5[1+SVLA]=1 THEN
HIGH C2
ELSE
LOW C2
ENDIF
IF LINE5[2+SVLA]=1 THEN
HIGH C3
ELSE
LOW C3
ENDIF
IF LINE5[3+SVLA]=1 THEN
HIGH C4
ELSE
LOW C4
ENDIF
IF LINE5[4+SVLA]=1 THEN
HIGH C5
ELSE
LOW C5
ENDIF
PAUSE DRO
HIGH L5
low L6 'ENABLE LINE 6
IF LINE6[0+SVLA]=1 THEN
HIGH C1
ELSE
LOW C1
ENDIF
IF LINE6[1+SVLA]=1 THEN
HIGH C2
ELSE
LOW C2
ENDIF
IF LINE6[2+SVLA]=1 THEN
HIGH C3
ELSE
LOW C3
ENDIF
IF LINE6[3+SVLA]=1 THEN
HIGH C4
ELSE
LOW C4
ENDIF
IF LINE6[4+SVLA]=1 THEN
HIGH C5
ELSE
LOW C5
ENDIF
PAUSE DRO
HIGH L6
low L7 'ENABLE LINE 7
IF LINE7[0+SVLA]=1 THEN
HIGH C1
ELSE
LOW C1
ENDIF
IF LINE7[1+SVLA]=1 THEN
HIGH C2
ELSE
LOW C2
ENDIF
IF LINE7[2+SVLA]=1 THEN
HIGH C3
ELSE
LOW C3
ENDIF
IF LINE7[3+SVLA]=1 THEN
HIGH C4
ELSE
LOW C4
ENDIF
IF LINE7[4+SVLA]=1 THEN
HIGH C5
ELSE
LOW C5
ENDIF
PAUSE DRO
HIGH L7
NEXT
PAUSE 5
NEXT
GOTO CIKLERI
Bookmarks