'===================================================== 'Filenév: USB_LCD_v25.bas 'Szerző: Cseh Róbert 'Elérhetőség: csehrobert@tavi.hu ' avr.tavir.hu ' 'Készült: 2005.09.01 'Fordító: Bascom, 1.11.7.4 'Honlap: http://avr.tavir.hu/modules.php?name=Content&pa=showpage&pid=37 'Használati szabályok az olvassel.txt állományban találhatóak. ' 'Figyelmeztetés, kérés: '---------------------- 'A forrás bármilyen módosítása GPL licensz általános szabályai alá esnek. 'A modosításokat jól láthatóan, jelölten kell elkövetni. 'Egy másolatot/értesítést az e-mail címemre kérek belőle, tájékoztatásul. '===================================================== 'Fontos figyelmeztetés! 'Ha a debug=1 érték be van állítva, akkor a keletkezett kód 'meghaladja a szabad méretet és a bootblock területet felülírja! 'Ezután a chip szoftveres frissítése nem megoldható, 'a továbbiakban csak hardveres módszerrel lehet frissíteni. ' '----------------------------------------------------- ' www.tavir.hu ' Crystalfontz Charactercomp 'CFA-634(20*4) és CFA-632(16*2) ' ' A Crystalfontz 0,0-t veszi fel! ' Pozicionalas ' version:0.62 '====================================================== 'alapadatok $regfile = "m16def.dat" $crystal = 14745600 'Sorosport 19200 bps (és 255 byte buffer) '$baud = 115200 $baud = 19200 Config Serialin = Buffered , Size = 255 'LCD vezerlo 'LCD hagyományos módon 'Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.1 , Rs = Portb.3 'Pinb.2 R / W Láb Fixen Földre Kötve! 'Config Pinb.2 = Output 'Portb.2 = 0 $lib "lcd4busy.lib" Const _lcdport = Portb Const _lcdddr = Ddrb Const _lcdin = Pinb Const _lcd_e = 1 Const _lcd_rw = 2 Const _lcd_rs = 3 Config Lcd = 20 * 2 'Maximális LCD mérete (X*Y) 'Initlcd 'Waitms 20 'Cls 'Waitms 20 'I2C busz 'Config Sda = Portb.7 'PORTB.7 is the SDA line 'Config Scl = Portb.5 'PORTB.5 is the SCL line 'Config I2cdelay = 10 '100 kHz busz 'Watchdog a hez Config Watchdog = 2048 '2 mp Stop Watchdog Const Debug = 0 Const Ellenorzes = 1 'Const Kijelzo = 1 '1 - 2*24 Dim Tempstring1 As String * 1 'Átmeneti tárhelyek (chr) Dim Tempstring2 As String * 1 Dim Tempstring3 As String * 40 'Kiirataskor 40 karakter helye Dim Tempbyte0 As Byte Dim Tempbyte1 As Byte 'Átmenetei Bytek Dim Tempbyte2 As Byte Dim Tempbyte3 As Byte Dim Tempbyte4 As Byte Dim Tempbyte5 As Byte Dim Tempbyte6 As Byte Dim Tempbyte7 As Byte Dim Tempbyte8 As Byte ' 8 db I/O vonal 'Config Porta = Output 'Config Porta = &B01111111 '0-input 1-output Config Pina.6 = Output 'hangszóró 'Config Pina.7 = Input 'ébresztő nyomógomb 'Porta.7 = 1 Config Pinc.0 = Input Set Portc.0 'Kontraszt (pwm) Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1 'Ez a kontraszt Config Pind.5 = Output 'kontraszt kimenetként kell lennie PD5(OC1) 'Pwm1a = 0 '0 esetén max. a kontraszt (~0V) '255 esetén min. (~5V) 'Portd.5 = 0 'Háttérvilágítás 'alapjelek (hardveres PWM háttérvil - Timer 2-ra) Config Timer2 = Pwm , Prescale = 256 , Compare Pwm = Clear Down , Compare B Pwm = Clear Down Config Timer0 = Timer , Prescale = 1024 On Timer0 Idoleptimer0 '14745600 Hz '1024*256=262144 'Ez meg 56,25 Hz '60Hz eseten: '61440(1024*60) = 1 mp alatt 15360 tick kell (14745600/61440) (0...240tick kell, azaz Timer0=16-ról indul. 'EEPROM felepites ' 1 - Xmeret (ennyi kijelzomeret, amin dolgozom!), azaz ennyi amin kiírok ' 2 - Xbal meret (Ha Xmerettel nem egyezik meg, annyit kell balrol_es_ jobbrol is betoldani, hogy jo legyen) ' teljes szelesseg: 2*Xbal+Xmeret ' 3 - Ymeret (kijelzo magassaga karakterekben szamolva) ' 4 - Kontraszt (pwm = 0....100) ' 5 - Hattervilagitas (hattervil = 0....250) ' 6 - Idokontraszt (0.....250) ' 7 - Idohattervilagitas (0.....250) ' 8 - Idohalasztas (mp) ' 9 - ' 10 - Srorr és wrap ' 11 - Ébresztés (óra) ' 12 - Ébresztés (perc) ' 13 - óraadat (ébresztés ill csipogó/csengetés) ' 14 - órapontos kód (sebesség, finomállítás) ' 15 - Ébresztés adatok (háttérvillogtatás,) ' 16 - adatsebesség állítása ' 1- 2400 ' 2- 4800 ' 3- 9600 ' 4- 19200 ' 5- 38400 ' 6- 57600 ' 17 - LCDtype ' 1 - hagyományos ' 2 - O/PLED $eeprom ' 0 1 2 3 4 5 6 7 8 9 10 ' ures, x , xbal, y , pwm ,hvil,ipwm,ihvil,ihalszt, semmi,scrwp Data 255 , 020 , 000 , 002 , 78 , 0 , 78 , 0 , 001 , 001 , &B00001111 ' 11 12 13 14 15 16 17 18 19 20 ' oraebr,ebrmin,oraadat,Orapontos,ebresztescd Data 00 , 01 , &B00010000 , 16 , &B00000000 , 4 , 1 , 0 , 0 , 0 '-30 1 2 3 4 5 6 7 8 9 0 Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 '-31 1 Data 0 '32-47 Data "TavIR LCD" , 128 , 128 , 128 , 128 , 128 , 128 '48-63 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 '64-79 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 Data 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 '80-95 Data "TavIR LCD" , 128 , 128 , 128 , 128 , 128 , 128 '96-111 'Data "1avIR LCD" , 128 , 128 , 128 , 128 , 128 , 128 Data "TavIR LCD" , 128 , 128 , 128 , 128 , 128 , 128 '112-127 Data "Robee2005" , 128 , 128 , 128 , 128 , 128 , 128 Data 255 , 020 , 000 , 002 , 78 , 0 , 78 , 0 , 001 , 001 , &B00001111 Data 00 , 01 , &B00000000 , 16 , &B00000000 , 4 , Data 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 $data '----------------------------------------------------------------------------------------------------------- ' 'Változók 'illetve az ismerteknek a feltöltése EEPROM-ból '----------------------------------------------------------------------------------------------------------- 'LCD kijelzők Dim Type As Byte '0: LCD, 1: OLED Readeeprom Type , 17 Dim Xmeret As Byte 'LCD Xmerete Readeeprom Xmeret , 1 Dim Xbalansz As Byte 'Hány oszlop marad ki az elején (kompatibilitás a CF modulokkal) Readeeprom Xbalansz , 2 Dim Ymeret As Byte 'LCD Ymerete Readeeprom Ymeret , 3 Dim X As Byte 'Kurzorpozíció X Dim Y As Byte 'Kurzorpozíció Y Dim Lcdtext As String * 160 'Teljes LCD szoveg Dim Position As Byte 'pozicio a Lcdtexten belul (balfelso az 1,1 = 1 'jobbalso: Y*X (pl. 4*20=80) Lcdtext = String(160 , 32) Declare Sub Lcdcode(byval Code As Byte) Declare Sub Setpwm(pwm As Byte , Byval Multi As Byte) Declare Sub Readbyte(b As Byte) 'Éles üzemben Dim Pwm As Byte 'LCD kontraszt (0-100) Readeeprom Pwm , 4 Call Setpwm(pwm , 1) Pwm1a = Pwm Dim Hattervil As Byte 'LCD háttérvilágítás (0-100) között lehet Dim Hatvil As Byte Readeeprom Hattervil , 5 Ocr2 = Hattervil Hatvil = Hattervil Hattervil = Hattervil 'Óramegjelenítés üzemben Dim Idopwm As Byte 'idomegjeleniteskor a kontraszt Readeeprom Idopwm , 6 Call Setpwm(idopwm , 0) Dim Idohattervil As Byte 'idomegjeleniteskor a hattervilagitas Readeeprom Idohattervil , 7 Dim Idohalaszt As Byte 'Mennyi holtidő kell amíg az óra aktivizálódik (percben tarolodik az EEPROMban, Readeeprom Idohalaszt , 8 'Timer2 overtick db/mp * 60 Ha ennel nagyobb akkor jar az ora. 'Egyenlore csak beolvasva, es percben megadva 'Idohalaszt = Idohalaszt * 60 'Idohalaszt = Idohalaszt * 20 'Most 20 mp 'Dim Ido As Byte Dim Idohalasztlong As Long Idohalasztlong = 20 * Idohalaszt 'Mukodesi parameterek Dim Lcdmarquee As String * 40 'A tologatott szöveg Dim Scrollwrap As Byte '0. bit = Scroll '1. bit = Wrap ' 1 - ON ' 0 - OFF '2.-3. bit: cursor beallitas '0,0: Off , Noblink '1,0: On , Noblink '0,1: On , Blink '1,1: On , Blink Readeeprom Scrollwrap , 10 Readeeprom Tempbyte1 , 16 ' 16 - adatsebesség állítása Baud = 19200 'Adatsebesség állítása. Alapértelmezett a 19200. Select Case Tempbyte1 Case 1 : Baud = 2400 Case 2 : Baud = 4800 Case 3 : Baud = 9600 ' Case 4 : Baud = 19200 Case 5 : Baud = 38400 Case 6 : Baud = 57600 End Select 'Az ora adatai a timer2 körül forognak 'Ido Adatai Dim Masodperc As Long 'ejfel ota eltelt masodpercek Masodperc = 0 Dim Tick As Byte '1 mpen belul leszamolas (0...59) Tick = 0 '1/60-ankent ugrik Dim Ebresztesora As Byte 'ebresztes oraja Readeeprom Ebresztesora , 11 Dim Ebresztesperc As Byte 'ebresztes perce Readeeprom Ebresztesperc , 12 Dim Ebresztesmasodperc As Long '0...86399 Ebresztesmasodperc = Ebresztesora * 60 Ebresztesmasodperc = Ebresztesmasodperc + Ebresztesperc 'ora*60+perc Ebresztesmasodperc = Ebresztesmasodperc * 60 'a nap hanyadik mp-ben kell ebreszteni? Dim Oraadat As Byte 'ora jellemzok Readeeprom Oraadat , 13 '0 - Ebresztes bekapcsolva (beallitott ora alapjan) '1 - Masodpercugras tortent '2 - Ebreszteni kell (biteallitas a futas soran!) '3 - Ebresztes csipogoval vagy zenevel '4 - 0: normál , 1:széthúzott órakijelzés Dim Orakiir As Long Dim Perckiir As Long Dim Oratemp1 As Byte Dim Oratemp2 As Byte Dim Oratemp3 As Byte Dim Oratemp4 As Byte Dim Oratemp5 As Byte Dim Oratemp6 As Byte Dim Orax As Byte Dim Oray As Byte Dim Elteltido As Long 'Esemény nélkül eltelt idő (másodperc) Dim Templong As Long Dim Templong1 As Long Dim Orapontos As Byte Readeeprom Orapontos , 14 Timer0 = Orapontos #if Debug = 1 Print "LCDUSB v0.62p (2*24)" #endif 'Dim A As String * 1 'Ide jön a beolvasott karakter (eredetileg: A) Dim Last As Byte 'Innenntől él a proci Enable Interrupts Enable Timer0 Enable Timer1 Enable Timer2 Start Timer0 Start Timer1 Start Timer2 Declare Sub Adatkiiras() Declare Sub Kiiras() Declare Sub Infoscreen() Declare Sub Contrast() Declare Sub Soreleje() Declare Sub Backlight() 'Declare Sub Bootscreen2() Declare Sub Cursor1() Declare Sub Cursor2() Declare Sub Cursor3() Declare Sub Cursor4() Declare Sub Backspace() Declare Sub Bootscreen() Declare Sub Reboot() Declare Sub Linefeed() Declare Sub Formfeed() Declare Sub Del() Declare Sub Cursorposition() Declare Sub Horizontalbar() Declare Sub Scrollingcharacter() Declare Sub Scrollingmarque() Declare Sub Declarecharacter() Declare Sub Adatspeckiir() Declare Sub Escapeseq() Declare Sub Largeblock() Declare Sub Sajatprg() Declare Sub Directlcd() Declare Sub Ebresztes() '--------------------------------------------------------------- 'Főprogram. Initlcd Call Lcdcode(2) X = 1 : Y = 1 'Call Bootscreen2() Call Infoscreen() 'ellenorzes (~170 byte) #if Ellenorzes = 1 Readeeprom Tempbyte1 , 98 If Tempbyte1 <> Asc( "v") Then Lcdtext = "Illegal Copy(www.tavir.hu) " ' Lcd Tempbyte1 ; "@" ; Asc( "T") Lcd Lcdtext ; Lcdtext ; Lcdtext ; Lcdtext ; Lcdtext 'Print Lcdtext Do Wait 1 Loop End If #endif 'Programmag Do Last = Inkey() '0: Ha nincs fogadott adat If Oraadat.2 = 1 Then Gosub Orakiiras 'ha ébresztés van, akkor előbb az óra If Last = 0 Then ' el kell e menni orat kiirni If Elteltido > Idohalasztlong Then Gosub Orakiiras End If Select Case Last Case 0 : Nop 'Waitus 1 - nincs Case 1 To 31 : Gosub Parancs 'Ha parancs jön akkor elugrik, ha nem azt a karaktert kiírja Case 128 To 136 : Call Adatspeckiir() Case Else Call Adatkiiras() 'a bejovo karaktert kirakja a LCD-re End Select Loop '--------------------------------------------------------------- Parancs: If Last <> 29 Then Elteltido = 0 Select Case Last Case 01 : Gosub Homepos '*Home Case 02 : Display Off '*Blank display (?) Case 03 : Display On '*Unblank display Case 04 : Call Cursor1() '*Cursor is not shown; nothing else is changed. Case 05 : Call Cursor2() '*Shows a non-blinking underline cursor at the printing location. Case 06 : Call Cursor3() '*Shows a blinking block cursor at the printing location. Case 07 : Call Cursor4() '*Mas: az egyel feletti, villogo kockakursor <-(Invering block cursor) Case 08 : Call Backspace() '*Backspace (\008 ; Control H) Case 09 : Call Bootscreen() '*NI (1-et benyel, és 5mpre beghívja a bootképernyőt) Case 10 : Call Linefeed() '*LineFeed Case 11 : Call Del() '*Del. Case 12 : Call Formfeed() '*cls Case 13 : Call Soreleje() '*soreleje Case 14 : Call Backlight() '* hattervilagitas Case 15 : Call Contrast() '*kontraszt (pwm kódolt) ' Case 16 : Nop '*nem deklarált Case 17 : Call Cursorposition() '*CursorPos Case 18 : Call Horizontalbar() '*NI (6-t benyel) Horizontal bar Case 19 : Scrollwrap.0 = 1 '*scroll on Case 20 : Scrollwrap.0 = 0 '*scroll off Case 21 : Call Scrollingcharacter() '*NI (2-t benyel) Set Scrolling Marquee Characters Case 22 : Call Scrollingmarque() '*NI (3-t benyel) Enable Scrolling Marquee Case 23 : Scrollwrap.1 = 1 '*Wrap on Case 24 : Scrollwrap.1 = 0 '*wrap off Case 25 : Call Declarecharacter() '*defchar Case 26 : Call Reboot 'Call Bootscreen() 'reboot Case 27 : Call Escapeseq() '*Escapekód Case 28 : Call Largeblock() '*NI (3-at benyel) LargeBlock Case 29 : Call Sajatprg() '*Saját prg() Case 30 : Call Directlcd() '*NI (2-t benyel) Directcontroll 2 chr Case 31 : Call Infoscreen() End Select Return '--------------------------------------------------------------- Homepos: X = 1 Y = 1 Call Kiiras() Return '--------------------------------------------------------------- Sub Cursor1() ' Cursor Off , Noblink Scrollwrap.2 = 0 Scrollwrap.3 = 0 Call Kiiras() End Sub Cursor1() '--------------------------------------------------------------- Sub Cursor2() 'Cursor On , Noblink Scrollwrap.2 = 1 Scrollwrap.3 = 0 Call Kiiras() End Sub Cursor2() '--------------------------------------------------------------- Sub Cursor3() 'Cursor On , Blink Scrollwrap.2 = 0 Scrollwrap.3 = 1 Call Kiiras() End Sub Cursor3() '--------------------------------------------------------------- Sub Cursor4() 'Cursor On , Blink Scrollwrap.2 = 1 Scrollwrap.3 = 1 Call Kiiras() End Sub Cursor4() '--------------------------------------------------------------- Sub Backspace() 'X=2, Y=1 '=>1.1-re lépne és itt törölne ezért kellett a 0 bele! 'Balfelso csucsok:X=1,Y=1 'A kiirando bovitese Position = Y - 1 'Utolso karakterhelyre beirom. Position = Position * Xmeret Position = Position + X Position = Position - 1 If Position = 0 Then 'Ez a balfelso csucsokbol valo visszalepes Y = Ymeret X = Xmeret Position = Y - 1 'Utolso karakterhelyre beirom. Position = Position * Xmeret Position = Position + X Mid(lcdtext , Position , 1) = " " Else If X = 1 Then 'Sor elejen vagyok, elozore kell ugrani X = Xmeret Y = Y - 1 Position = Y - 1 'Utolso karakterhelyre beirom. Position = Position * Xmeret Position = Position + X Mid(lcdtext , Position , 1) = " " Else X = X - 1 Position = Y - 1 'Utolso karakterhelyre beirom. Position = Position * Xmeret Position = Position + X Mid(lcdtext , Position , 1) = " " End If End If Call Kiiras() End Sub '--------------------------------------------------------------- Sub Bootscreen() Gosub Beolvasas 'A kozbenso parametert lenyeli 'Call Bootscreen2() Call Infoscreen() End Sub Bootscreen() '--------------------------------------------------------------- Sub Linefeed() Y = Y + 1 Tempbyte4 = 0 If Y > Ymeret Then 'Ha alul kicsúszok a képből If Scrollwrap.0 = 1 Then Y = Y - 1 'Ha a scroll aktív akkor csak az adott sor eleje Tempbyte4 = 1 'Volt e sorvaltas? Else Y = 1 'Ha a scroll nem aktív akkor a kepernyo teteje End If End If Tempbyte1 = X + Xbalansz Locate Y , Tempbyte1 If Y = Ymeret Then If Scrollwrap.0 = 1 Then 'scroll If Tempbyte4 = 1 Then For Tempbyte3 = 1 To Y '1 sor felcroll Tempbyte4 = Tempbyte3 * Xmeret Incr Tempbyte4 Tempstring3 = Mid(lcdtext , Tempbyte4 , Xmeret) Tempbyte4 = Tempbyte3 * Xmeret Tempbyte4 = Tempbyte4 - Xmeret Incr Tempbyte4 Mid(lcdtext , Tempbyte4 , Xmeret) = Tempstring3 Next Tempbyte3 Tempbyte4 = Y - 1 Tempbyte4 = Tempbyte4 * Xmeret Incr Tempbyte4 Mid(lcdtext , Tempbyte4 , Xmeret) = String(xmeret , 32) End If End If End If Call Kiiras() End Sub Linefeed() '--------------------------------------------------------------- Sub Formfeed() 'Kb. CLS X = 1 Y = 1 Lcdtext = String(160 , 32) Call Kiiras() End Sub Formfeed() '--------------------------------------------------------------- Sub Del() 'A kiirando bovitese Position = Y - 1 'Utolso karakterhelyre beirom. Position = Position * Xmeret Position = Position + X Mid(lcdtext , Position , 1) = " " Call Kiiras() End Sub Del() '--------------------------------------------------------------- Sub Soreleje() X = 1 Call Kiiras() End Sub Homepos '--------------------------------------------------------------- Sub Backlight() 'Háttrévilágítás(0..100) Gosub Beolvasas If Tempbyte1 > 100 Then Tempbyte1 = 100 Writeeeprom Tempbyte1 , 5 If Type = 0 Then Tempbyte1 = 100 - Tempbyte1 Tempbyte1 = Tempbyte1 * 2.5 'PWM 200....2 If Tempbyte1 = 250 Then Tempbyte1 = 255 Ocr2 = Tempbyte1 Hatvil = Tempbyte1 Hattervil = Tempbyte1 #if Debug = 1 Print "ocr2:" ; Hattervil #endif End Sub Backlight() '--------------------------------------------------------------- Sub Contrast() 'Kontraszt (0....100) #if Ellenorzes = 1 Readeeprom Tempbyte1 , 114 If Tempbyte1 <> Asc( "b") Then Lcdtext = "Illegal Copy(www.tavir.hu) " ' Lcd Tempbyte1 ; "@" ; Asc( "R") Lcd Lcdtext ; Lcdtext ; Lcdtext ; Lcdtext ; Lcdtext ' Print Lcdtext Do Wait 1 Loop End If #endif Call Readbyte(pwm) If Pwm > 100 Then Pwm = 100 Writeeeprom Pwm , 4 Call Setpwm(pwm , 1) Pwm1a = Pwm End Sub Contrast() '--------------------------------------------------------------- Sub Setpwm(pwm As Byte , Byval Multi As Byte) If Multi = 1 Then Pwm = Pwm * 2.5 'PWM 200....2 If Pwm = 250 Then Pwm = 255 'sötét...világos End If If Type = 0 Then Pwm = 255 - Pwm End Sub Setpwm() '--------------------------------------------------------------- Sub Cursorposition() Gosub Beolvasas If Tempbyte1 < Xmeret Then X = Tempbyte1 + 1 End If Gosub Beolvasas If Tempbyte1 < Ymeret Then Y = Tempbyte1 + 1 End If Call Kiiras() End Sub Cursorposition() '--------------------------------------------------------------- Sub Horizontalbar() Elteltido = 0 'hogy ez is aktivitásnak számítson Gosub Beolvasas : Tempbyte5 = Tempbyte1 'graph_index (0-3) 0: 0,1 karaktert írjuk át 3:7,8 Gosub Beolvasas : Tempbyte4 = Tempbyte1 'Style(0-255) a csík mintája függőlegesen Gosub Beolvasas : Tempbyte6 = Tempbyte1 'Start_column(0-19) Gosub Beolvasas : Tempbyte7 = Tempbyte1 - Tempbyte6 'end_column(0-19) de csak a különbséget tárolom Gosub Beolvasas : Tempbyte8 = Tempbyte1 'length(pixel) hánypixelnyi csíkot akarunk, nincs ell.! Gosub Beolvasas : Tempbyte0 = Tempbyte1 'row (0-3) Tempbyte5 = Tempbyte5 And 3 'csak a 0-3-at enged Shift Tempbyte5 , Left , 4 'megszorozza 2x8-cal, hogy megkapja a CG címet Tempbyte5.6 = 1 'set cgram address parancs bitje Call Lcdcode(tempbyte5) 'végrehajtja a parancsot Tempbyte5.6 = 0 'vissza csinálja Shift Tempbyte5 , Right , 3 'hogy tudjuk, melyik karaktereket tegyük ki Tempbyte1 = 31 'a fullos karakterhez 31 a minta 00011111 Gosub Chardata 'a style mintájának megfelelően átírjuk a karaktert Oratemp3 = Tempbyte8 Mod 5 'az 5-ös maradék: mekkora lesz az utolsó kar a csíkban Oratemp2 = 0 'ha nincs maradék, akkor üres karaktert fogunk gyártani... If Oratemp3 > 0 Then 'ha van maradék Decr Oratemp3 'előállítjuk a megfelelő bitsorozatot Oratemp2 = &HF0 Shift Oratemp2 , Right , Oratemp3 End If Tempbyte1 = Oratemp2 'a záró karakterhez ez lesz a minta Gosub Chardata 'a style mintájának megfelelően átírjuk a karaktert 'innentől nem kell a tempbyte1,2,3,4 újra lehet használni Tempbyte2 = Tempbyte8 / 5 'már nem kell a tempyte8 Tempbyte8 = Tempbyte0 * Xmeret Tempbyte8 = Tempbyte8 + Tempbyte6 Incr Tempbyte8 For Tempbyte1 = 0 To Tempbyte7 Tempbyte3 = 32 'egyébként szóköz írunk ki If Tempbyte1 < Tempbyte2 Then Tempbyte3 = Tempbyte5 'length/5-ig teli karakterek jönnek If Tempbyte1 = Tempbyte2 Then Tempbyte3 = Tempbyte5 + 1 'utána egy lezáró If Tempbyte3 = 0 Then Tempbyte3 = 8 'a chr(0) miatt cselezni kell Mid(lcdtext , Tempbyte8 , 1) = Chr(tempbyte3) 'beillesztés Incr Tempbyte8 Next Call Kiiras() End Sub Horizontalbar() '--------------------------------------------------------------- Chardata: 'vagy 0-val vagy a tempbyte1-ben lévő adattal tölti fel For Tempbyte3 = 7 To 0 Step -1 'a karaktert a tempbyte4 bitjeinek megfelelően Tempbyte2 = 0 If Tempbyte4.tempbyte3 = 1 Then Tempbyte2 = Tempbyte1 Lcd Chr(tempbyte2) Next Return '--------------------------------------------------------------- Sub Scrollingcharacter() Gosub Beolvasas Gosub Beolvasas End Sub Scrollingcharacter() '--------------------------------------------------------------- Sub Scrollingmarque() Gosub Beolvasas Gosub Beolvasas Gosub Beolvasas End Sub Scrollingmarque() '--------------------------------------------------------------- Sub Declarecharacter() Gosub Beolvasas Tempbyte1 = Tempbyte1 And 7 'karakter 0..7 Shift Tempbyte1 , Left , 3 Tempbyte1.6 = 1 Call Lcdcode(tempbyte1) Gosub Beolvkiir Gosub Beolvkiir Gosub Beolvkiir Gosub Beolvkiir Gosub Beolvkiir Gosub Beolvkiir Gosub Beolvkiir Gosub Beolvkiir End Sub Declarecharacter() '--------------------------------------------------------------- Beolvkiir: Tempbyte1 = Waitkey() Lcd Chr(tempbyte1) Return '--------------------------------------------------------------- Sub Adatkiiras() 'Itt a kiiradó szöveg kerül letárolásra az LCDTextben Elteltido = 0 'A kiirando bovitese Tempbyte2 = 0 Tempbyte4 = 0 If Scrollwrap.1 = 0 Then 'Ha a tempbyte2 erteke <>0 akkor kell kiiratni! If X = Xmeret Then 'mintha kiuszna a kepbol ->figyelmen kivul kell hagyni Tempbyte2 = &H01 'tovabblepne ki a kijelzobol, nem kell semmit csinalni Position = Y - 1 'Utolso karakterhelyre beirom. Position = Position * Xmeret Position = Position + X Mid(lcdtext , Position , 1) = Chr(last) Else Tempbyte2 = &H00 'na most kell kiiratni nem ertem el a kijelzo szelet End If End If 'Print "scrollwrap.1" ; Hexval(scrollwrap.1) 'Print "tempbyte2" ; Hexval(tempbyte2) Tempbyte4 = 0 If Tempbyte2 = 0 Then Position = Y - 1 Position = Position * Xmeret Position = Position + X 'Itt állok jelenleg Mid(lcdtext , Position , 1) = Chr(last) 'be is írom a karaktert X = X + 1 'Kovetkezo karakterre leptetes a sorban (wrapot előtte már kizártam) If X > Xmeret Then 'Ha kilépek e képernyőről...-> X = 1 'Biztosan soreleje. Y = Y + 1 'És ha soreleje akkor 1 sorral ugye lejjebb is megyek (Ez a sor a scroll miatt fontos lehet!) If Y > Ymeret Then 'Ha alul kicsúszok a képből If Scrollwrap.0 = 1 Then Y = Y - 1 'Ha a scroll aktív akkor csak az adott sor eleje Tempbyte4 = 1 'Volt e sorvaltas? Else Y = 1 'Ha a scroll nem aktív akkor a kepernyo teteje End If End If End If Tempbyte1 = X + Xbalansz Locate Y , Tempbyte1 End If If Y = Ymeret Then If Tempbyte2 = 0 Then If X = 1 Then 'jobb also csucsok X=Xmeret volt If Scrollwrap.0 = 1 Then 'scroll If Tempbyte4 = 1 Then For Tempbyte3 = 1 To Y '1 sor felcroll Tempbyte4 = Tempbyte3 * Xmeret Incr Tempbyte4 Tempstring3 = Mid(lcdtext , Tempbyte4 , Xmeret) Tempbyte4 = Tempbyte3 * Xmeret Tempbyte4 = Tempbyte4 - Xmeret Incr Tempbyte4 Mid(lcdtext , Tempbyte4 , Xmeret) = Tempstring3 Next Tempbyte3 Tempbyte4 = Y - 1 Tempbyte4 = Tempbyte4 * Xmeret Incr Tempbyte4 Mid(lcdtext , Tempbyte4 , Xmeret) = String(xmeret , 32) End If End If End If End If End If Last = 0 Call Kiiras() End Sub Adatkiiras() '------------------------------------------------- Sub Kiiras() For Tempbyte1 = 1 To Ymeret 'teljes kijelzot irja ki Tempbyte2 = Xbalansz + 1 Locate Tempbyte1 , Tempbyte2 Tempbyte2 = Tempbyte1 - 1 Tempbyte2 = Tempbyte2 * Xmeret Tempbyte2 = Tempbyte2 + 1 Tempstring3 = Mid(lcdtext , Tempbyte2 , Xmeret) Lcd Tempstring3 Next 'cursor beallitas '0,0: Off , Noblink '1,0: On , Noblink '0,1: On , Blink '1,1: On , Blink If Scrollwrap.2 = 0 Then Cursor Noblink If Scrollwrap.3 = 0 Then Cursor Off If Scrollwrap.3 = 1 Then Cursor On End If If Scrollwrap.2 = 1 Then Cursor Blink If Scrollwrap.3 = 0 Then Cursor Off If Scrollwrap.3 = 1 Then Cursor On End If Tempbyte1 = X + Xbalansz Locate Y , Tempbyte1 End Sub Kiiras() '----------------------------------------------------------------- 'Sub Bootscreen2() 'Cls 'Tempbyte1 = 2 * Xbalansz 'Tempbyte1 = Tempbyte1 + Xmeret 'Tempbyte1 = Tempbyte1 - 10 'Kijelzo szelessege-kiiras szovege '/24-/12-2// per 2 = 7 a hetedikben kell lennie. A sima szoveghossz azt adna, ami _utani_ kell. ' 'Tempbyte1 = Tempbyte1 / 2 'Ennek a fele (bal/jobboldalrol->center 'Locate 1 , Tempbyte1 'Xmeret-12 helyett Xmeret-10, mert 1-l jobbra kell tolni 'Lcd "TavIRLCD USB" ' TavIRLCD USB '123456789012345678901234 'Locate 2 , Tempbyte1 'Locate 2 , 1 'Lcd "123456789012345678901234" 'Lcd "www.tavir.hu" 'Wait 60 'Wait 5 'Call Kiiras() 'End Sub Bootscreen2() '----------------------------------------------------------------- Sub Reboot() ' Gosub Beolvasas If Tempbyte1 = 26 Then Incr Xbalansz Cls Locate 1 , Xbalansz Lcd "Reset EEPROM" 'Vissza kell állítani az eepromot is! For Tempbyte2 = 129 To 144 Readeeprom Tempbyte1 , Tempbyte2 Tempbyte3 = Tempbyte2 - 128 Writeeeprom Tempbyte1 , Tempbyte3 Next Tempbyte2 ' Tempbyte1 = 255 ' Writeeeprom Tempbyte1 , 0 ' Tempbyte1 = 016 ' Writeeeprom Tempbyte1 , 1 ' Tempbyte1 = 004 ' Writeeeprom Tempbyte1 , 2 ' Tempbyte1 = 002 ' Writeeeprom Tempbyte1 , 3 ' Tempbyte1 = 099 ' Writeeeprom Tempbyte1 , 4 ' Writeeeprom Tempbyte1 , 5 ' Writeeeprom Tempbyte1 , 6 ' Tempbyte1 = 050 ' Writeeeprom Tempbyte1 , 7 ' Tempbyte1 = 001 ' Writeeeprom Tempbyte1 , 8 ' Writeeeprom Tempbyte1 , 9 ' Tempbyte1 = &B11111111 ' Writeeeprom Tempbyte1 , 10 ' Tempbyte1 = 10 ' Writeeeprom Tempbyte1 , 11 ' Tempbyte1 = 01 ' Writeeeprom Tempbyte1 , 12 ' Tempbyte1 = &B00000000 ' Writeeeprom Tempbyte1 , 13 ' Tempbyte1 = 32 ' Writeeeprom Tempbyte1 , 14 'orapontos ' Tempbyte2 = 0 ' For Tempbyte1 = 15 To 31 ' Writeeeprom Tempbyte2 , Tempbyte1 ' Next Tempbyte1 ' Ha OK, akkor..... Locate 2 , Xbalansz Lcd "Rebooting..." Start Watchdog Wait 10 End If End Sub Reboot() '----------------------------------------------------------------- Sub Infoscreen() #if Debug = 1 Print "Infoscreen" #endif '1. kép: név, Firmware,Speed 'Ez A Resz 76 Byte 'Tempbyte1 = Pwm * 2.5 'Tempbyte1 = 255 - Tempbyte1 'Pwm1a = Tempbyte1 Pwm1a = Pwm 'Tempbyte1 = Hattervil * 2.5 'Tempbyte1 = 255 - Tempbyte1 'Ocr2 = Tempbyte1 Ocr2 = Hattervil Cls Tempbyte1 = Xmeret - 10 'Kijelzo szelessege-kiiras szovege Tempbyte1 = Tempbyte1 / 2 'Ennek a fele (bal/jobboldalrol->center Tempbyte1 = Tempbyte1 + Xbalansz Locate 1 , Tempbyte1 'Xmeret-12 helyett Xmeret-10, mert 1-l jobbra kell tolni Lcd "TavIRLCD USB" Locate 2 , Tempbyte1 Lcd "www.tavir.hu" Cursor Off , Noblink If Ymeret > 2 Then Tempbyte2 = 2 Else Tempbyte2 = 1 Wait 5 End If 'Elso kepen: ' Firmware, COM Speed ' Xmeret,Ymeret,XBalansz Tempbyte1 = Xmeret - 13 'szelesseg-kiiras Tempbyte1 = Tempbyte1 / 2 'ennek a fele->center Tempbyte1 = Tempbyte1 + Xbalansz Locate Tempbyte2 , Tempbyte1 Lcd "Fw:0.62 COM:" Readeeprom Tempbyte4 , 16 Select Case Tempbyte4 Case 1 : Lcd "2k4" Case 2 : Lcd "4k8" Case 3 : Lcd "9k6" Case 4 : Lcd "19k2" Case 5 : Lcd "38k4" Case 6 : Lcd "57k6" End Select Tempbyte1 = Tempbyte1 + 1 Tempbyte2 = Tempbyte2 + 1 Locate Tempbyte2 , Tempbyte1 Tempstring3 = Str(xmeret) Tempstring3 = Format(tempstring3 , "00") Lcd "X:" ; Tempstring3 ; " Y:" ; 'X:00 Y:00 b:00 Tempstring3 = Str(ymeret) Tempstring3 = Format(tempstring3 , "00") Lcd Tempstring3 ; " b:" Tempstring3 = Str(xbalansz) Tempstring3 = Format(tempstring3 , "00") Lcd Tempstring3 Cursor Off , Noblink Wait 5 Cls Call Kiiras() End Sub Infoscreen() '------------------------------------------------------------------------------- 'Idoleptet: 'A szoftveres PWM es az idohoz 'If Hattervil > 6 Then ' Portd.6 = 1 'End If 'If Hattervil < 7 Then ' If Hattervil > 2 Then ' Toggle Portd.6 ' End If 'End If 'If Hattervil < 3 Then ' Portd.6 = 0 'end If 'Return '------------------------------------------------------------------------------------------- Orakiiras: Pwm1a = Idopwm Ocr2 = Idohattervil Deflcdchar 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ' replace ? with number (0-7) Deflcdchar 2 , 31 , 1 , 1 , 1 , 1 , 1 , 1 , 31 ' replace ? with number (0-7) Deflcdchar 3 , 31 , 16 , 16 , 16 , 16 , 16 , 16 , 31 ' replace ? with number (0-7) Deflcdchar 4 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 31 ' replace ? with number (0-7) Deflcdchar 5 , 31 , 17 , 17 , 17 , 17 , 17 , 17 , 31 ' replace ? with number (0-7) Deflcdchar 6 , 31 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ' replace ? with number (0-7) Deflcdchar 7 , 31 , 17 , 17 , 17 , 17 , 17 , 17 , 17 ' replace ? with number (0-7) Deflcdchar 0 , 32 , 32 , 4 , 14 , 14 , 14 , 10 , 17 ' replace ? with number (0-7) Cls Cursor Off , Noblink Do If Oraadat.1 = 1 Then Oratemp2 = Xmeret - 4 If Oraadat.4 = 1 Then Oratemp2 = Oratemp2 - 4 '2 3 : 5 9 . vagy 23:59. Oratemp2 = Oratemp2 / 2 Oratemp2 = Oratemp2 + Xbalansz Orakiir = Masodperc / 3600 'ora Perckiir = Masodperc Mod 3600 'perc Perckiir = Perckiir / 60 Oratemp1 = Orakiir / 10 Oratemp3 = 0 Gosub Szamjegy 'óra tízes Oratemp1 = Orakiir Mod 10 Gosub Helynov Gosub Szamjegy 'óra egyes Oratemp1 = 11 If Tick = 0 Then Oratemp1 = 10 Gosub Helynov Gosub Szamjegy 'kettőspont Oratemp1 = Perckiir / 10 Gosub Helynov Gosub Szamjegy 'perc tízes Oratemp1 = Perckiir Mod 10 Gosub Helynov Gosub Szamjegy 'perc egyes Oratemp1 = 11 If Oraadat.0 = 1 Then Oratemp1 = 12 Gosub Helynov Gosub Szamjegy 'ébresztő ikon Oraadat.1 = 0 End If If Oraadat.2 = 1 Then Call Ebresztes() Loop Until Ischarwaiting() = 1 Pwm1a = Pwm Hattervil = Hatvil Ocr2 = Hattervil Call Kiiras() Return '------------------------------------------------------------------------------ Helynov: Incr Oratemp3 : If Oraadat.4 = 1 Then Incr Oratemp3 Return '------------------------------------------------------------------------------ Szamjegy: Oray = 1 'y If Ymeret = 4 Then Oray = 2 'ekkor a kozepso sorba kerul. 'A kijelzo 2 vagy 4 soros lehet Orax = Oratemp3 + Oratemp2 Locate Oray , Orax If Oratemp1 = 1 Then '1-es szamjegy Oratemp5 = 1 Oratemp6 = 1 End If If Oratemp1 = 2 Then '2-es szamjegy Oratemp5 = 2 Oratemp6 = 3 End If If Oratemp1 = 3 Then '3-es szamjegy Oratemp5 = 2 Oratemp6 = 2 End If If Oratemp1 = 4 Then '4-es szamjegy Oratemp5 = 4 Oratemp6 = 1 End If If Oratemp1 = 5 Then '5-es szamjegy Oratemp5 = 3 Oratemp6 = 2 End If If Oratemp1 = 6 Then '6-es szamjegy Oratemp5 = 3 Oratemp6 = 5 End If If Oratemp1 = 7 Then '7-es szamjegy Oratemp5 = 6 Oratemp6 = 1 End If If Oratemp1 = 8 Then '8-es szamjegy Oratemp5 = 5 Oratemp6 = 5 End If If Oratemp1 = 9 Then '9-es szamjegy Oratemp5 = 5 Oratemp6 = 2 End If If Oratemp1 = 0 Then '0-es szamjegy Oratemp5 = 7 Oratemp6 = 4 End If If Oratemp1 = 10 Then '10 - kettospont Oratemp5 = 161 Oratemp6 = 223 End If If Oratemp1 = 11 Then '11 - üres (space) Oratemp5 = 32 Oratemp6 = 32 End If If Oratemp1 = 12 Then '12 - ébresztés jel Oratemp5 = 32 Oratemp6 = 0 End If Lcd Chr(oratemp5) Incr Oray Locate Oray , Orax Lcd Chr(oratemp6) Return '-------------------------------------------------------------- Sub Ebresztes() Config Adc = Single , Prescaler = Auto , Reference = Internal Start Adc #if Debug = 1 Print "Ebr:" ; Bin(oraadat) #endif 'If Oraadat.3 = 0 Then 'csipogo Locate Oray , Orax 'ez az ebresztoikon Cursor Off , Blink For Oratemp4 = 1 To 200 Oratemp1 = Oratemp4 Mod 8 If Oratemp1 = 0 Then For Oratemp3 = 1 To 4 Sound Porta.6 , 100 , 100 Sound Porta.6 , 100 , 300 Waitms 10 Sound Porta.6 , 100 , 200 Sound Porta.6 , 100 , 600 Waitms 40 If Getadc(7) < 20 Then Exit For Next Oratemp3 Else Waitms 50 End If If Getadc(7) < 20 Then Exit For 'ha nyomogomb megnyomva, akkor leáll az ébresztés! Next 'End If Cursor Off , Noblink 'Oraadat.0 = 0 Oraadat.2 = 0 Stop Adc End Sub Ebresztes() '------------------------------------------------------------------------------------------- Idoleptimer0: '1 mpes lepkedes Stop Timer0 Timer0 = Orapontos 'eredetileg 16 Incr Tick If Tick = 60 Then ' Oraadat.1 = 1 'Masodperc ugrik egyet Incr Masodperc Incr Elteltido If Masodperc = 86400 Then Masodperc = 0 'ejfel elmult If Masodperc = Ebresztesmasodperc Then 'ha az ebresztes be van kapcsolva es egyezik az ido->ebresztesbit bekapcsolva If Oraadat.0 = 1 Then Oraadat.2 = 1 'ebresztesjelzo bit End If Tick = 0 End If If Tick = 30 Then Oraadat.1 = 1 Start Timer0 Return '------------------------------------------------------------------------------------------- Sub Adatspeckiir() Elteltido = 0 Last = Last - 128 If Last = 0 Then Last = 8 Call Adatkiiras() End Sub Adatspeckiir() '------------------------------------------------------------------------------------------- Sub Escapeseq() Gosub Beolvasas Tempstring1 = Waitkey() If Tempstring1 = "A" Then Y = Y - 1 If Tempstring1 = "B" Then Y = Y + 1 If Tempstring1 = "C" Then X = X + 1 If Tempstring1 = "D" Then X = X - 1 If X = 0 Then Y = Y - 1 X = Xmeret End If If X > Xmeret Then X = 1 Y = Y + 1 End If If Y = 0 Then Y = Ymeret If Y > Ymeret Then Y = 1 Call Adatkiiras() End Sub Escapeseq() '------------------------------------------------------------------------------------------- Sub Largeblock() Gosub Beolvasas Gosub Beolvasas Gosub Beolvasas End Sub Largeblock() '------------------------------------------------------------------------------------------- Sub Directlcd() Gosub Beolvasas 'vezérlés 0: control reg, 1: data mem 2: ??? If Tempbyte1 = 1 Then Gosub Beolvkiir Else Gosub Beolvasas Call Lcdcode(tempbyte1) End If End Sub Directlcd() '------------------------------------------------------------------------------------------- Sub Lcdcode(byval Code As Byte) 'Parancs küldése az LCD-nek Portb = Code And &HF0 Portb._lcd_rs = 0 : Portb._lcd_rw = 0 : Gosub Pulse Rotate Code , Left , 4 Portb = Code And &HF0 Portb._lcd_rs = 0 : Portb._lcd_rw = 0 : Gosub Pulse Waitms 1 'LCD executing End Sub '------------------------------------------------------------------------------------------- Pulse: Portb._lcd_e = 1 Portb._lcd_e = 0 Return '------------------------------------------------------------------------------------------- Sub Sajatprg() #if Debug = 1 Print "\029" #endif 'Gosub Beolvasas 'Tempbyte0 = Tempbyte1 Call Readbyte(tempbyte0) 'Mit allitok be? '*001 - Óra/Perc/Másodperc '002 - Év/Hónap/nap '*003 - Ébresztő Óra/Perc/Másodperc '004 - Ébresztő Év/Hónap/nap vagy Ébresztő II: Óra/Perc/Másodperc '*005 - Órakijelzéshez idokontraszt/idohattervilagitas/idokesleltetes(perc) '006 - oraadat ébresztes1/csengetésjelleg/ ' sok van meg itt '012 - orakiiras, ebresztes idopontja, ebresztes aktiv-e If Tempbyte0 = 1 Then 'Orabeallitas #if Debug = 1 Print "\001" #endif Gosub Beolvasas Templong = Tempbyte1 * 60 'Ora (percben) Gosub Beolvasas Templong = Templong + Tempbyte1 'Osszperc:Orabol(percben)+percek Templong = Templong * 60 'masodperc:perc*60 Gosub Beolvasas Masodperc = Templong + Tempbyte1 #if Debug = 1 Print "O:p.mp " ; Tempbyte1 ; ":" ; Tempbyte2 ; "." ; Masodperc #endif End If If Tempbyte0 = 3 Then 'Ebresztes Gosub Beolvasas Writeeeprom Tempbyte1 , 11 Templong = Tempbyte1 * 60 'Ebresztesora Gosub Beolvasas Writeeeprom Tempbyte1 , 12 Templong = Tempbyte1 + Templong 'Ebresztesperc Ebresztesmasodperc = Templong * 60 End If If Tempbyte0 = 5 Then 'Idokontraszt (0..255) Call Readbyte(idopwm) Writeeeprom Idopwm , 6 Call Setpwm(idopwm , 0) Call Readbyte(idohattervil) 'Idohatter(0.255) Writeeeprom Idohattervil , 7 Call Readbyte(idohalaszt) 'Idohalaszt If Idohalaszt = 0 Then Incr Idohalaszt Writeeeprom Idohalaszt , 8 Idohalasztlong = 20 * Idohalaszt '20 mp alapon End If If Tempbyte0 = 6 Then 'Oraadatok beallitasa Call Readbyte(oraadat) Writeeeprom Oraadat , 13 End If If Tempbyte0 = 7 Then 'Kijelzőméret Gosub Beolvasas Writeeeprom Tempbyte1 , 1 'Xmeret ' Xmeret = Tempbyte1 Gosub Beolvasas Writeeeprom Tempbyte1 , 2 'Xbalansz ' Xbalansz = Tempbyte1 Gosub Beolvasas Writeeeprom Tempbyte1 , 3 'Ymeret ' Ymeret = Tempbyte1 Start Watchdog Wait 10 End If If Tempbyte0 = 10 Then 'Kijelző restart #if Debug = 1 Print "\010 Up.Fw" #endif Cls Cursor Off For Tempbyte1 = 10 To 1 Step -1 Locate 1 , 1 Lcd Tempbyte1 Waitms 1000 Next Locate 1 , 1 Lcd "Restart..." Start Watchdog Wait 10 End If If Tempbyte0 = 11 Then 'Orapontos beallitas #if Debug = 1 Print "\011 Orapontos" ; Orapontos ; "->"; #endif Gosub Beolvasas If Tempbyte1 > 200 Then Tempbyte1 = 200 Orapontos = Tempbyte1 Writeeeprom Tempbyte1 , 14 #if Debug = 1 Print Orapontos #endif End If If Tempbyte0 = 12 Then 'Ebresztes idopont+pontos ido+ebresztes be van-e kapcsolva Templong = 0 Templong = Masodperc Orakiir = Templong \ 3600 'ora Templong1 = Orakiir * 3600 Templong1 = Templong - Templong1 Perckiir = Templong1 \ 60 'perc Deflcdchar 1 , 27 , 14 , 21 , 23 , 17 , 14 , 17 , 32 ' orajel (1) Deflcdchar 0 , 32 , 32 , 4 , 14 , 14 , 14 , 10 , 17 ' ebresztoikon (0) Cls Cursor Off , Noblink Tempbyte1 = Xmeret - 3 'Kijelzo szelessege(amire kiirhatok)-kiiras szovege (12:04) Tempbyte1 = Tempbyte1 / 2 'Ennek a fele (bal/jobboldalrol->center Tempbyte1 = Tempbyte1 + Xbalansz Locate 1 , Tempbyte1 'Xmeret-12 helyett Xmeret-10, mert 1-l jobbra kell tolni Lcd Chr(1) If Orakiir < 10 Then Lcd "0" Lcd Orakiir ; ":" If Perckiir < 10 Then Lcd "0" Lcd Perckiir Locate 2 , Tempbyte1 'Xmeret-12 helyett Xmeret-10, mert 1-l jobbra kell tolni Templong = 0 Readeeprom Tempbyte1 , 11 'Kódban jobb beolvasni, mint kiszámolni. ~100-150 byte Readeeprom Tempbyte2 , 12 #if Debug = 1 Print "Ebrora: " ; Tempbyte1 ; ":" ; Tempbyte2 #endif If Oraadat.0 = 1 Then Lcd Chr(0) 'Lcd Chr(0) Else Shiftcursor Right End If If Tempbyte1 < 10 Then Lcd "0" Lcd Tempbyte1 ; ":" If Tempbyte2 < 10 Then Lcd "0" Lcd Tempbyte2 Wait 5 Call Adatkiiras() End If If Tempbyte0 = 17 Then 'Típus beallitas (1-OLED, 0 -hagyomanyos LCD) Call Readbyte(type) If Type <> 1 Then Type = 0 Writeeeprom Type , 17 End If If Tempbyte0 = 18 Then 'EEPROM 1...32, majd firmware visszaköhögése, majd másodperc For Tempbyte1 = 1 To 32 'eeprom Readeeprom Tempbyte2 , Tempbyte1 Print Chr(tempbyte2); Next Tempbyte1 Printbin Masodperc; Print Chr(0) ; Chr(62); End If If Tempbyte0 = 19 Then 'bps sebességbeállítás #if Debug = 1 Print "\019 Baud" #endif Gosub Beolvasas If Tempbyte1 = 0 Then Tempbyte1 = 4 If Tempbyte1 > 6 Then Tempbyte1 = 4 Writeeeprom Tempbyte1 , 16 Baud = 19200 Select Case Tempbyte1 Case 1 : Baud = 2400 Case 2 : Baud = 4800 Case 3 : Baud = 9600 Case 5 : Baud = 38400 Case 6 : Baud = 57600 End Select Call Infoscreen() End If End Sub Sajatprg() '-------------------------------------------------------------------------- Beolvasas: Tempbyte1 = Waitkey() Return '-------------------------------------------------------------------------- Sub Readbyte(b As Byte) B = Waitkey() End Sub Readbyte(b As Byte)