'------------------------------------------------------------------------------ $regfile = "m88def.dat" $crystal = 8000000 $baud = 4800 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , _ E = Portc.1 , Rs = Portc.0 Cls Cursor Off $hwstack = 64 $swstack = 64 $framesize = 64 Dim Av As String * 2 Dim Lat As String * 10 Dim Ns As String * 2 Dim Lon As String * 10 Dim Ew As String * 2 Dim Spd As String * 6 Dim Crs As String * 6 Dim Leng As Byte Dim Mrk As String * 2 Dim X1 As Bit Dim Utc As String * 10 Dim Utc1 As String * 2 Dim Utc2 As String * 2 Dim Utc3 As String * 6 Declare Sub Wait_for_string(byval S As String) Declare Function Read_string() As String Cls Cursor Off Wait 1 Lcd "QTH-Locator" Lowerline Lcd "LCD_ARP" Wait 5 Mrk = "-" Open "COM1:" For Random As #5 Config Serialin = Buffered , Size = 100 Enable Interrupts ' $GPRMC,hhmmss.ss,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,ddmmyy,x.x,a*hh Do Call Wait_for_string( "$GPRMC,") ' Wait for $GPRMC Cls Utc = Read_string() Av = Read_string() Lat = Read_string() Leng = Len(lat) - 1 Lat = Left(lat , Leng) Ns = Read_string() Leng = Len(ns) - 1 Ns = Left(ns , Leng) Lon = Read_string() Leng = Len(lon) - 1 Lon = Left(lon , Leng) Ew = Read_string() Leng = Len(ew) - 1 Ew = Left(ew , Leng) Spd = Read_string() Leng = Len(spd) - 1 Spd = Left(spd , Leng) Crs = Read_string() Leng = Len(crs) - 1 Crs = Left(crs , Leng) Utc1 = Left(utc , 2) Utc2 = Mid(utc , 3 , 2) Utc3 = Utc1 + ":" + Utc2 Lat = Left(lat , 7) Lon = Left(lon , 8) Dim Td1 As String * 10 Dim Tl1 As String * 10 Dim Gd1 As String * 10 Dim Gl1 As String * 10 Dim Td As Single Dim Tl As Single Dim Gd As Single Dim Gl As Single Td1 = Mid(lat , 1 , 2) Tl1 = Mid(lat , 3 , 5) Gd1 = Mid(lon , 1 , 3) Gl1 = Mid(lon , 4 , 5) Td = Val(td1) Tl = Val(tl1) Gd = Val(gd1) Gl = Val(gl1) Dim Yy As Single Dim Xx As Single Tl = Tl / 60 Yy = Td + Tl Gl = Gl / 60 Xx = Gd + Gl If Ns = "S" Then Td = -td If Ew = "W" Then Gd = -gd 'Maidenheadberechnung Dim A2x As String * 30 Dim Z2n As String * 25 Dim Dx As Integer Dim Dy As Integer Dim Xxx As Integer Dim Yyy As Integer Dim Dxx As Integer Dim Dyy As Integer Dim Str1 As String * 1 Dim Str2 As String * 1 Dim Str3 As String * 1 Dim Str4 As String * 1 Dim Str5 As String * 1 Dim Str6 As String * 1 Dim Str7 As String * 1 Dim Str8 As String * 1 Dim Xxxx As Single Dim Yyyy As Single A2x = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" Z2n = "01234567890123456789" If Xx < -179.99 Or Xx > 179.99 Then End If Yy < -89.99 Or Yy > 89.99 Then End Xx = Xx + 180 Yy = Yy + 90 Xxx = Xx Yyy = Yy Dx = Xxx / 20 Dy = Yyy / 10 Dxx = Dx + 1 Dyy = Dy + 1 Str1 = Mid(a2x , Dxx , 1) Str2 = Mid(a2x , Dyy , 1) Xxx = Dx * 20 Yyy = Dy * 10 Xx = Xx - Xxx Yy = Yy - Yyy Xxxx = Xx * 100 Yyyy = Yy * 100 Dx = Xxxx / 200 Dy = Yyyy / 100 Dxx = Dx + 1 Dyy = Dy + 1 Str3 = Mid(z2n , Dxx , 1) Str4 = Mid(z2n , Dyy , 1) Dxx = Dx * 2 Dyy = Dy * 1 Xx = Xx - Dxx Yy = Yy - Dyy Xxxx = Xx * 1000 Yyyy = Yy * 1000 Xxx = Xxxx Yyy = Yyyy Xxxx = Xxx / 83.333333 Yyyy = Yyy / 41.666666 Dx = Xxxx Dy = Yyyy Dxx = Dx + 1 Dyy = Dy + 1 Str5 = Mid(a2x , Dxx , 1) Str6 = Mid(a2x , Dyy , 1) Xxxx = Dx * 0.08333333 Yyyy = Dy * 0.04166666 Xx = Xx - Xxxx Yy = Yy - Yyyy Xxxx = Xx * 10000 Yyyy = Yy * 10000 Dx = Xxxx / 83.33333 Dy = Yyyy / 41.66666 Dxx = Dx + 1 Dyy = Dy + 1 Str7 = Mid(z2n , Dxx , 1) Str8 = Mid(z2n , Dyy , 1) Anz1: Upperline Lcd Lat ; Ns Lowerline Lcd Utc3 Lowerline Lcd Lon ; Ew Lcd Str1 ; Str2 ; Str3 ; Str4 ; Str5 ; Str6 If Av = "V," Then Av = "*" If Av = "A," Then Av = " " Lcd Av If X1 = 1 Then Mrk = "-" If X1 = 0 Then Mrk = "+" Toggle X1 Lcd Mrk Wait 5 Anz2: Dim Spd2 As Single Spd2 = Val(spd) Spd2 = Spd2 * 1.852 Upperline Lcd "Speed km " Lcd Spd2 Lowerline Lcd "Koers " Lcd Crs If Av = "V," Then Av = "*" If Av = "A," Then Av = " " Lcd Av Lcd " " If X1 = 1 Then Mrk = "-" If X1 = 0 Then Mrk = "+" Toggle X1 Lcd Mrk Wait 5 Anz3: Loop End '------------------------------------------------------ '"$GPRMC," Sub Wait_for_string(byval S As String) As String Local Ii As Byte Local Cc As Byte Local Hulp As Byte Ii = 1 M1: Cc = Waitkey(#5) If Cc <> Mid(s , Ii , 1) Then Goto M1 Else Incr Ii If Ii > Len(s) Then Goto M2 Goto M1 End If M2: End Sub '------------------------------------------------------ Function Read_string() As String Local Cc As Byte Local Ss As String * 10 Ss = "" Do Cc = Waitkey(#5) Ss = Ss + Chr(cc) Loop Until Cc = "," Read_string = Left(ss , 10) End Function End