'**************************************************************** '* Name : 3_11.BAS * '* Author : Lucas Volwater * '* Notice : Copyright (c) 2010 L.J.P. Volwater * '* : All Rights Reserved * '* Date : 27-12-2010 * '* Version : 1.0 * '* Notes : Velleman Kit 124 Hacked. Kan nu tot 128 tekens * '* : weergeven, onthouden in EEPROM, en instelbaar * '**************************************************************** 'settings voor devboard: 'Device 16F887 ; we gebruiken de 16F628A / 468 in uiteindelijke versie... 'Config1 debug_off, lvp_off, fcmen_on, ieso_on, bor_on, cp_off, cpd_off, MCLRE_on, pwrte_on, wdt_off, XT_osc 'Config2 WRT_off, BOR40V 'en voor definitief: (comment de juiste uit en compile voor test) Device 16F628A Config BOREN_ON, CP_OFF, DATA_CP_OFF, PWRTE_ON, WDT_OFF, LVP_OFF, MCLRE_On, RC_OSC_NOCLKOUT All_Digital = TRUE ; alle pinnen digital in/out PortB_Pullups Off ; 76543210 hulpregeltje TRISA = %00110000 ;datarichting. TRISB = %00000000 Symbol kolom1=PORTB.7 ; verwijzingen Symbol kolom2=PORTA.2 Symbol kolom3=PORTA.3 Symbol kolom4=PORTA.0 Symbol kolom5=PORTA.1 Symbol kolom6=PORTB.6 Symbol kolom7=PORTB.1 Symbol rij1=PORTB.3 Symbol rij2=PORTB.5 Symbol rij3=PORTB.4 Symbol rij4=PORTB.2 Symbol rij5=PORTB.0 Symbol stby=PORTB.3 Symbol run=PORTB.4 Symbol sed=PORTB.5 Symbol muxtijd = 10 ' afh. van kloksnelheid. Richtwaarden: voor 4mhz:11. Voor 8Mhz: 22, etc. ' het nadeel van het devboard: precies de pinnen overnemen, of 2 rijen defines om en om uitcommenten 'het voordeel: makkelijk herprogrammeren. Dim DispRam[7] As Byte ' display ram buffer, 7 bytes, 0 tm 6. 'jaja, 7 hele bytes videogeheugen... Dim RijReg As Byte 'omdat het niet direct kan... Dim MuxTel As Byte Dim Kolom As Byte 'houdt bij welke kolom we aan het muxen zijn. Dim LetterDeel As Byte ; dit is het volgende stukje letter dat in de display ram gezet wordt Dim LetterPointer As Byte 'wijst letterdeel aan in flashromtabel (letterpointer=karakterindex+letterindex) Dim KarakterIndex As Byte 'wijst karakter aan Dim LetterIndex As Byte 'wijst deel van karakter aan Dim LetterTeller As Byte 'geeft aan hoeveelste letter van de tekst we nu weer moeten gaan geven. Dim editindex As Byte 'geeft aan hoeveelste letter we aan het editten zijn. Dim e_letter_nu As Byte 'geeft de huidige te wijzigen letter Dim e_letter_vorig As Byte 'vorige te wijzigen letter Dim WriteToE As Byte 'letterpointer die naar EEPROM geschreven wordt scrolltekst: Clear ; alle vars starten op 0. TRISB = 0 GoSub allesuit LetterIndex = 3 ; beginnen met een lege kolom en daarna de juiste letter. ;(anders eerste letter altijd a) LetterTeller = 0 Repeat If LetterIndex < 3 Then ; LetterPointer = (KarakterIndex + LetterIndex) ' karakterindex geeft in stappen van 3 weer welke letter, letterindex geeft aan waar we zijn ; binnen de letter (loopt van 0 tot 2) ; letter uit flash rom halen: GoSub getchar Inc LetterIndex ElseIf LetterIndex = 3 Then LetterDeel = 0 LetterIndex = 0 'volgende letter KarakterIndex = ERead LetterTeller If KarakterIndex < 135 Then ; zolang we nog niet aan het einde zijn (EOT = 135) Inc LetterTeller Else ; als we dat wel zijn ; opnieuw beginnen LetterTeller = 0 ;bij letter 0 LetterIndex = 3 ; en niet stiekum nog een stukje a. End If EndIf DispRam[0] = DispRam[1] DispRam[1] = DispRam[2] DispRam[2] = DispRam[3] DispRam[3] = DispRam[4] DispRam[4] = DispRam[5] DispRam[5] = DispRam[6] DispRam[6] = LetterDeel 'nieuwe letterdeel. (repeat until nieuwe letterdeel = 255) 'nieuwe letterdeel komt uit LUT met alfabet. Positie aangewezen door pointer uit eeprom 'naar eerste stuk van de leter (letter heeft 3 stukken, daarna komt een lege rij = 0, dan volgende letter. GoSub screenrefresh 'schakelaars testen. TRISB = %00111000'stby,sed,en run als input If sed = 1 Then GoTo sedt ; die dingen zijn actief hoog !?! If stby = 1 Then GoTo stdby TRISB = 0 Until 1=0 stdby: ; als stby is ingedrukt GoSub allesuit kolom4 = 0 Repeat rij5 = 1 DelayMS 100 rij5 = 0 DelayMS 900 Until run = 1 ; run wordt geen 1... Maffe switches zijn niet alleen actief hoog, ; maar ook nog eens alleen actief als porta.0 (kolom 4) laag is... anders doen ze niks... ; Welke gedachte zit daar in vredesnaam achter? GoTo scrolltekst ; GOTO! AAAAAAAAAAAAARG. Maar werkt wel het beste hier. sedt: Repeat ; wachten tot 'ie is losgelaten DelayMS 100 Until sed = 0 editindex = 0 WriteToE = 0 DispRam[3] = 0 e_letter_vorig = 132 ; beginnen met spatie als vorige letter. Repeat e_letter_nu = ERead editindex Repeat LetterPointer = e_letter_nu GoSub getchar DispRam[4]=LetterDeel Inc LetterPointer GoSub getchar DispRam[5]=LetterDeel Inc LetterPointer GoSub getchar DispRam[6]=LetterDeel LetterPointer = e_letter_vorig GoSub getchar DispRam[0]=LetterDeel Inc LetterPointer GoSub getchar DispRam[1]=LetterDeel Inc LetterPointer GoSub getchar DispRam[2]=LetterDeel If stby = 1 Then ; letter "up" ' repeat ; niet wachten, is al traag zat ' delayms 20 ' until stby = 0 e_letter_nu = e_letter_nu + 3 End If If run = 1 Then ; letter "down" ' Repeat ' DelayMS 20 ' Until run = 0 e_letter_nu = e_letter_nu - 3 End If ; voorkomen dat we buiten tabel komen If e_letter_nu > 140 Then e_letter_nu = 135 ; (Eigenlijk: indien < 0) If e_letter_nu > 135 Then e_letter_nu = 0 ; hier staat wel wat er staat If editindex > 126 Then e_letter_nu = 135 ; bij laatste eepromadres verplicht EOT TRISB = 0 ; alles even output GoSub screenrefresh TRISB = %00111000'stby,sed,en run als input Until sed = 1 Repeat DelayMS 100 Until sed = 0 WriteToE = e_letter_vorig e_letter_vorig = e_letter_nu Inc editindex EWrite (editindex-1), [WriteToE] If e_letter_nu = 135 Then 'als dit de laatste letter is WriteToE = 135 'hoeven we geen volgende letter te editen EWrite editindex, [WriteToE] 'schrijven we de EOT (end of text) naar eeprom EndIf 'en springen uit de lus. Until WriteToE = 135 GoTo scrolltekst getchar:; ; letter uit flash rom halen: ; A B C D LetterDeel = LookUp LetterPointer, [$1e,$05,$1e, $1f,$15,$0A, $0e,$11,$11, $1f,$11,$0e,_ ; E F G H I J K $1f,$15,$15, $1f,$05,$05, $1f,$11,$1d, $1f,$04,$1f, $00,$1d,$00, $08,$10,$0f, $1f,$0c,$12,_ ; L M N O P q R $1f,$10,$18, $1f,$02,$1f, $1f,$02,$1c, $0e,$11,$0e, $1f,$05,$07, $07,$05,$1f, $1f,$05,$1a,_ ;S T U V W X y $12,$15,$09, $01,$1f,$01, $1f,$10,$1f, $0f,$10,$0f, $1f,$08,$1f, $1b,$04,$1b, $13,$0c,$03,_ ;Z 0 1 2 3 4 5 $19,$15,$13, $1f,$11,$1f, $00,$02,$1f, $1d,$15,$17, $15,$15,$1f, $07,$04,$1f, $17,$15,$1D,_ ; 6 7 8 9 ! ? . $1f,$15,$1d, $01,$05,$1f, $1f,$15,$1f, $17,$15,$1f, $00,$17,$17, $01,$1d,$02, $00,$18,$18,_ ; , - _ ~ / END OF TEXT $00,$14,$0c, $04,$04,$04, $10,$10,$10, $0c,$04,$06, $10,$0e,$01, 0,%00000000,0, $04,$0A,$11] ' een spatie is geen verspild geheugen, het is het vaakst gebruikte karakter... '(het anders oplossen had trouwens meer geheugen gekost) Return screenrefresh: For MuxTel = 0 To muxtijd For Kolom = 0 To 6 kolom7 = 1 ; kolom uit voor je de rijen veranderd, anders ghosting. kolom1 = 1 kolom2 = 1 kolom3 = 1 kolom4 = 1 kolom5 = 1 kolom6 = 1 ' als 'ie rij1 = dispram[kolom].x niet slikt dan met andmask doen: 'moet zelfs via tussenwaarde... RijReg = DispRam[Kolom] rij1 = RijReg.0 rij2 = RijReg.1 rij3 = RijReg.2 rij4 = RijReg.3 rij5 = RijReg.4 If Kolom = 0 Then kolom1 = 0 ElseIf Kolom = 1 Then kolom2 = 0 ElseIf Kolom = 2 Then kolom3 = 0 ElseIf Kolom = 3 Then kolom4 = 0 ElseIf Kolom = 4 Then kolom5 = 0 ElseIf Kolom = 5 Then kolom6 = 0 ElseIf Kolom = 6 Then kolom7 = 0 EndIf DelayMS 3 Next Next Return allesuit: rij1 = 0 rij2 = 0 rij3 = 0 rij4 = 0 rij5 = 0 kolom1 = 1 kolom2 = 1 kolom3 = 1 kolom4 = 1 kolom5 = 1 kolom6 = 1 kolom7 = 1 Return ;EData 57,21,12,132,48,60,24,6,30,132,3,51,42,66,39,132,_ ; 15,42,69,132,27,60,36,45,54,132,42,63,12,51,132,0,132,33,0,75,72,132,9,42,18,135 ; ;THE QUICK BROWN FOX JUMPS OVER A LAZY DOG. Symbol t_A = 0 Symbol t_B = 3 Symbol t_C = 6 Symbol t_D = 9 Symbol t_E = 12 Symbol t_F = 15 Symbol t_G = 18 Symbol t_H = 21 Symbol t_I = 24 Symbol t_J = 27 Symbol t_K = 30 Symbol t_L = 33 Symbol t_M = 36 Symbol t_N = 39 Symbol t_O = 42 Symbol t_P = 45 Symbol t_Q = 48 Symbol t_R = 51 Symbol t_S = 54 Symbol t_T = 57 Symbol t_U = 60 Symbol t_V = 63 Symbol t_W = 66 Symbol t_X = 69 Symbol t_Y = 72 Symbol t_Z = 75 Symbol T_0 = 78 Symbol T_1 = 81 Symbol T_2 = 84 Symbol T_3 = 87 Symbol T_4 = 90 Symbol T_5 = 93 Symbol T_6 = 96 Symbol T_7 = 99 Symbol T_8 = 102 Symbol T_9 = 105 Symbol T_Ex = 108 ; uitroepteken ! Symbol T_qu = 111 ; vraagteken ? Symbol T_pnt = 114; punt Symbol T_comma = 117 Symbol T_hs = 120 ; - hoog streepje Symbol T__ = 123 Symbol T_til = 126 ; tilde ~ Symbol T_slash = 129 ; / Symbol T_sp = 132 ; spatie Symbol t_EOT = 135 ; end of text EData t_V,t_M,t_K,T_1,T_2,T_4,T_sp,t_H,t_A,t_C,t_K,T_sp,T_hs,T_sp,t_T,t_O,t_T,T_sp,T_1,T_2,_ T_8,T_sp,t_T,t_E,t_K,t_E,t_N,t_S,T_sp,t_I,t_N,T_sp,t_P,t_L,t_A,t_A,t_T,t_S,T_sp,t_V,t_A,t_N,T_1,_ T_6,T_Ex,T_sp,t_K,t_I,t_J,t_K,T_sp,t_O,t_P,T_sp,t_H,t_O,t_M,t_E,T_pnt,t_D,t_E,t_D,t_S,T_pnt,_ t_N,t_L,T_slash,T_til,t_E,t_L,t_E,t_K,t_T,t_R,t_O,t_N,t_I,t_C,t_A,T_sp,T_sp,t_EOT ;vmk124 hack - tot 128 tekens in plaats van 16! kijk op home.deds.nl/~elektronica