Jo kan du väll få, den är inte så vacker och flera namn på variablerna är inte de mest genomtänkta.. blev det som först poppade upp i huvudet efter en stund.
Om det är nått du inte fattar så kan jag försöka förklara det, om jag själv minns hur jag gjorde...
Här kommer hela koden som "ritar" ut bilden, sen efter slutet så är där ca 1400 rader teckentabell till som inte är så spännande att titta på.
Kod: Markera allt
DEFINE OSC 20
DEFINE DEBUG_REG PORTC
DEFINE DEBUG_BIT 3
DEFINE DEBUG_BAUD 115200
DEFINE DEBUG_MODE 1
out VAR BYTE[96]
out1 VAR BYTE[96]
tmp VAR BYTE
tmp1 VAR BYTE
moj VAR BYTE
scroll VAR BYTE
temp VAR BYTE
temp1 VAR BYTE
indata VAR BYTE[30]
num VAR BYTE
letters VAR BYTE
temp1 = 11
speed VAR BYTE
messnum VAR BYTE
mojn VAR BYTE[3]
tmp2 VAR BYTE
tmp3 VAR BYTE
delay VAR BYTE
delaylong VAR WORD
num = 0
TRISD = 0
TRISB = %00100000
intro:
IF PORTB.5 = 1 Then Inputt
GoSub memr
loop:
IF PORTB.5 = 1 Then Inputt
'print pic
For moj = 0 to speed
For tmp1 = 0 to 15
LookUp tmp1,[254,253,251,247,239,223,191,127,254,253,251,247,239,223,191,127],tmp3
IF tmp1 < 8 Then
PORTD = 255
GoSub clock2
PORTD = tmp3
GoSub clock1
EndIF
IF tmp1 >7 Then
PORTD = 255
GoSub clock1
PORTD = tmp3
GoSub clock2
EndIF
IF (tmp1 + scroll) < 95 Then
PORTD = out(tmp1 + scroll)
Else
PORTD = out1(tmp1 + scroll - 96)
EndIF
Pause 1
PORTD = 0
Next tmp1
Next moj
scroll = scroll + 1
IF scroll > temp1 Then
scroll = 0
GoSub memr
EndIF
GoTo loop
clock1:
PORTB.0 = 1
PORTB.0 = 0
Return
clock2:
PORTB.1 = 1
PORTB.1 = 0
Return
memr:
Read 92,speed
Read 93,delay
delaylong = delay * 1000
Pause delaylong
IF num = 0 Then
mojn(0)=29
mojn(1)=0
mojn(2) = 28
EndIF
IF num = 1 Then
mojn(0)=60
mojn(1)=30
mojn(2) = 59
EndIF
IF num = 2 Then
mojn(0)=91
mojn(1)=61
mojn(2) = 90
EndIF
tmp2 = 0
Read mojn(0),letters
For tmp = mojn(1) to mojn(2)
Read tmp,indata(tmp2)
tmp2 = tmp2 + 1
Next tmp
num = num + 1
IF num >2 Then
num = 0
EndIF
temp1 = 11
GoSub emtybuffert
GoSub inibuffert
Return
Inputt:
PORTD = 55
SerIn2 PORTB.4,16780,[wait("H"),STR indata\29,num,speed,delay]
letters = 0
For tmp = 0 to 28
IF indata(tmp) = 10 Then
letters = letters - 1
GoTo after
EndIF
IF indata(tmp) < 123 Then
letters = letters + 1
indata(tmp) = indata(tmp) - 32
EndIF
IF indata(tmp) <155 AND indata(tmp) > 131 Then
letters = letters + 1
EndIF
Next tmp
after:
IF num = 0 Then
mojn(0)=29
mojn(1)=0
mojn(2) = 28
EndIF
IF num = 1 Then
mojn(0)=60
mojn(1)=30
mojn(2) = 59
EndIF
IF num = 2 Then
mojn(0)=91
mojn(1)=61
mojn(2) = 90
EndIF
Write 92,speed
Write 93,delay
Write mojn(0),letters
tmp2 = 0
For tmp = mojn(1) to mojn(2)
Write tmp,indata(tmp2)
tmp2 = tmp2 + 1
Next tmp
num = 0
Return
inibuffert:
For tmp = 0 to letters
IF indata(tmp) = 134 Then
GoSub aring
EndIF
IF indata(tmp) = 132 Then
GoSub auml
EndIF
IF indata(tmp) = 148 Then
GoSub ouml
EndIF
IF indata(tmp) = 143 Then
GoSub austor
EndIF
IF indata(tmp) = 142 Then
GoSub aeistor
EndIF
IF indata(tmp) = 153 Then
GoSub aoustor
EndIF
BranchL indata(tmp),[space,utrops,citta,kohage,cash,proc,och,apostrof,parantesstart,parantesend,_
star,plus,comma,minus,punkt,division,zero,one,two,three,four,five,six,seven,eight,nine,kolon,semikol,_
arrowleft,equal,arrowright,questionmark,at,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,_ vv,ww,xx,yy,zz,klammerleft,slach,klammerright,tak,underline,acsang,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,_
u,v,w,x,y,z]
afterbranch:
GoSub fit
temp = 0
GoSub fit
Next tmp
scroll = 0
GoTo loop
fit:
IF temp1 < 95 Then
out(temp1) = temp
Else
out1(temp1 - 96) = temp
EndIF
temp1 = temp1 + 1
Return
emtybuffert:
For tmp= 0 to 95
out(tmp) = 0
out1(tmp) = 0
Next tmp
temp1 = 15
Return
a:
temp = %00000010
GoSub fit
temp = %00010101
GoSub fit
'temp = %00010101
GoSub fit
'temp = %00010101
GoSub fit
temp = %00001111
GoTo afterbranch