Code:
'Name:.............Bordcomputer
'Version:..........1.0a
'Datum:............11.01.2009
'Autor:............Thomas Edlinger
'---------------------------------
'Beschreibung: Bordcomputer
' Ausgabemasken: 0 | Grundbild
' 1 | Hauptmenü
' 2 | Einstellungen 1
' 3 | Einstellungen 2
' 4 | Status
' 5 | Störungstexte
$regfile = "m8def.dat"
$crystal = 1000000
'KONFIGURATION EINGÄNGE
Config Pind.2 = Input
Config Pind.3 = Input
Config Pinb.6 = Input
Config Pinb.7 = Input
Config Pind.5 = Input
Config Pinb.0 = Input
Config Pinc.0 = Input
'KONFIGURATION AUSGÄNGE
Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.4 = Output
Config Portc.5 = Output
Config Portc.4 = Output
Config Portc.3 = Output
Config Portc.2 = Output
Config Portc.1 = Output
Config Portb.2 = Output
Config Portb.1 = Output
'PULLUPS EINSCHALTEN
Portd.2 = 1
Portd.3 = 1
Portb.6 = 1
Portb.7 = 1
Portd.5 = 1
Portb.0 = 1
'VERGABE ALIAS-ADRESSEN
T_auf Alias Pind.3
T_ab Alias Pinb.6
T_links Alias Pinb.7
T_rechts Alias Pind.5
T_enter Alias Pinb.0
D1_betrieb Alias Portd.0
D2_busy Alias Portd.1
D3_stoerung Alias Portd.4
'VARIABLEN
Dim Adc_wert As Word
Dim Spg As Single
Dim Stat_timer0 As Bit
Dim Time_umdrehung_n As Long
Dim Time_umdrehung_ms As Long
Dim Time_umdrehung_s As Single
Dim Radumfang As Single
Dim V_meter_sekunde As Single
Dim V_kmh As Single
Dim Kmges As Single
Dim Kmtag As Single
Dim Spg_ausgabe As String * 5
Dim V_meter_sekunde_ausgabe As String * 4
Dim V_kmh_ausgabe As String * 4
Dim Kmges_ausgabe As String * 7
Dim Kmtag_ausgabe As String * 7
Dim Radumfang_ausgabe As String * 7
Dim Ausgabemaske As Byte
Dim Status As Bit
Dim Status_nr As Byte
Dim Auswahl As Byte
Dim Sparmodus As Bit
Radumfang = 0.628
'KONSTANTEN
Const Adc_faktor = 0.017578
Const V_faktor = 3.6
'KONFIGURATION INT0
Config Int0 = Falling
On Int0 Int0_isr
'KONFIGURATION ADC
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
'KONFIGURATION TIMER0
Config Timer0 = Timer , Prescale = 8
Timer0 = 131
On Timer0 Timer0_isr
Enable Timer0
Stop Timer0
'KONFIGURATION LCD
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portb.2 , Rs = Portc.5 , E = Portc.4
Config Lcd = 16 * 4
Config Lcdbus = 4
Waitms 100
Initlcd
Waitms 100
'EEPROM LESEN
Readeeprom Kmges , 16
Readeeprom Kmtag , 32
'STARTBILD
Rem noch nicht ganz fertiggestellt
Cls
Locate 1 , 1
Wait 2
Lcd "Willkommen!"
Wait 2
Locate 2 , 1
Lcd "Bordcomputer"
Wait 2
Locate 3 , 1
Lcd "V1.0"
Wait 2
Locate 4 , 1
Lcd "(c) TE"
Wait 2
Cls
'### HAUPTSCHLEIFE ###
Do
'ADC auslesen
Adc_wert = Getadc(0)
'ADC-Wert in Spannung umwandeln
Spg = Adc_wert * Adc_faktor
'Sub aufrufen, wenn Versorgungsspannung abfällt
If Spg < 9 Then Gosub Power_fail
'Berechnung Geschwindigkeit
Time_umdrehung_s = Time_umdrehung_ms * 1000
V_meter_sekunde = Radumfang / Time_umdrehung_s
V_kmh = V_meter_sekunde * V_faktor
'Umwandlung Werte für LCD
Spg_ausgabe = Fusing(spg , "##.##")
V_meter_sekunde_ausgabe = Fusing(v_meter_sekunde , "##.#")
V_kmh_ausgabe = Fusing(v_kmh , "##.#")
Kmges_ausgabe = Fusing(kmges , "####.##")
Kmtag_ausgabe = Fusing(kmtag , "####.##")
Radumfang_ausgabe = Fusing(radumfang , "#.####")
'Ausgabe Lcd
Select Case Ausgabemaske
Case 0 : Gosub Maske0
Case 1 : Gosub Maske1
Case 2 : Gosub Maske2
Case 3 : Gosub Maske3
Case 4 : Gosub Maske4
Case 5 : Gosub Maske5
End Select
'Abfragen Störungen usw.
'Abfrage Versorgungsspannung
If Spg < 10 Then
Status = 1
Status_nr = 1
End If
Loop
'### SUBS ###
Int0_isr:
Time_umdrehung_n = Time_umdrehung_ms
Time_umdrehung_n = 0
Toggle Stat_timer0
If Stat_timer0 = 1 Then Start Timer0 Else Stop Timer0
Kmges = Kmges + Radumfang
Kmtag = Kmtag + Radumfang
Return
Timer0_isr:
Timer0 = 131
Incr Time_umdrehung_n
Return
Power_fail:
Writeeeprom Kmges , 16
Writeeeprom Kmtag , 32
Powerdown
Return
'MASKEN
Maske0:
'Ausgabe Geschwindigkeit
Locate 1 , 1
Lcd V_kmh_ausgabe ; "km/h"
Locate 1 , 10
Lcd V_meter_sekunde_ausgabe ; "m/s"
'Ausgabe Tageskilometerstand
Locate 2 , 1
Lcd Kmtag_ausgabe ; "km"
'Ausgabe Gesamtkilometerstand
Locate 3 , 1
Lcd Kmges_ausgabe ; "km"
'Ausgabe Spg
Locate 4 , 1
Lcd Spg_ausgabe ; "V"
'Ausgabe Status
Locate 4 , 9
If Status = 0 Then Lcd "OK" Else Lcd "Stoerung"
'Tasterabfrage
If T_enter = 0 Then
Ausgabemaske = 1
Cls
End If
'----------
Locate 4 , 12
Lcd Stat_timer0
'----------
Return
Maske1:
'Ausgabe Hauptmenü
Locate 1 , 3
Lcd "Grundbild"
Locate 2 , 3
Lcd "Einst. 1"
Locate 3 , 3
Lcd "Einst. 2"
Locate 4 , 3
Lcd "Status"
'Abfrage Taster
If T_auf = 0 Then
Decr Auswahl
Cls
End If
If T_ab = 0 Then
Incr Auswahl
Cls
End If
If Auswahl = 4 Then Auswahl = 0
If Auswahl = 0 Then
Locate 1 , 1
Lcd "+"
If T_enter = 0 Then
Ausgabemaske = 0
Cls
End If
Elseif Auswahl = 1 Then
Locate 2 , 1
Lcd "+"
If T_enter = 0 Then
Ausgabemaske = 2
Cls
End If
Elseif Auswahl = 2 Then
Locate 3 , 1
Lcd "+"
If T_enter = 0 Then
Ausgabemaske = 3
Cls
End If
Elseif Auswahl = 3 Then
Locate 4 , 1
Lcd "+"
If T_enter = 0 Then
Ausgabemaske = 4
Cls
End If
End If
Return
Maske2:
'Ausgabe Einstellungen1
Locate 1 , 3
Lcd "Reset Km-Tag"
Locate 2 , 3
Lcd "Sparmodus:"
Locate 2 , 12
Lcd Sparmodus
Locate 3 , 3
Lcd "Km. speichern"
Locate 4 , 3
Lcd "Zurück"
'Abfrage Taster
If T_auf = 0 Then
Decr Auswahl
Cls
End If
If T_ab = 0 Then
Incr Auswahl
Cls
End If
If Auswahl = 4 Then Auswahl = 0
If Auswahl = 0 Then
Locate 1 , 1
Lcd "+"
If T_enter = 0 Then
Kmtag = 0
Cls
End If
Elseif Auswahl = 1 Then
Locate 2 , 1
Lcd "+"
If T_enter = 0 Then
If Sparmodus = 0 Then Sparmodus = 1 Else Sparmodus = 0
Cls
End If
Elseif Auswahl = 2 Then
Locate 3 , 1
Lcd "+"
If T_enter = 0 Then
Gosub Power_fail
Cls
End If
Elseif Auswahl = 3 Then
Locate 4 , 1
Lcd "+"
If T_enter = 0 Then
Ausgabemaske = 1
Cls
End If
End If
Return
Maske3:
'Ausgabe Einstellungen2
Locate 1 , 3
Lcd "u="
Locate 1 , 5
Lcd Radumfang_ausgabe ; "m"
Locate 2 , 3
Lcd "Reserviert"
Locate 2 , 12
Lcd Sparmodus
Locate 3 , 3
Lcd "Reserviert"
Locate 4 , 3
Lcd "Zurück"
'Abfrage Taster
If T_auf = 0 Then
Decr Auswahl
Cls
End If
If T_ab = 0 Then
Incr Auswahl
Cls
End If
If Auswahl = 4 Then Auswahl = 0
If Auswahl = 0 Then
Locate 1 , 1
Lcd "+"
If T_links = 0 Then Radumfang = Radumfang - 0.001
If T_rechts = 0 Then Radumfang = Radumfang + 0.001
Elseif Auswahl = 1 Then
Locate 2 , 1
Lcd "+"
If T_enter = 0 Then Lcd "RESERVIERT"
Elseif Auswahl = 2 Then
Locate 3 , 1
Lcd "+"
If T_enter = 0 Then Lcd "RESERVIERT"
Elseif Auswahl = 3 Then
Locate 4 , 1
Lcd "+"
If T_enter = 0 Then
Ausgabemaske = 1
Cls
End If
End If
Return
Maske4:
'Ausgabe Status
Locate 1 , 1
If Status = 0 Then Lcd "System OK" Else Lcd "Störung"
Locate 2 , 1
Lcd Status_nr
Locate 3 , 3
Lcd "Störung quit"
Locate 4 , 3
Lcd "Zurück"
'Abfrage Taster
If T_auf = 0 Then
Decr Auswahl
Cls
End If
If T_ab = 0 Then
Incr Auswahl
Cls
End If
If Auswahl = 3 Then Auswahl = 0
If Auswahl = 0 Then
Locate 3 , 1
Lcd "+"
If T_enter = 0 Then
Ausgabemaske = 5
Cls
End If
Elseif Auswahl = 1 Then
Locate 4 , 1
Lcd "+"
If T_enter = 0 Then
Ausgabemaske = 1
Cls
End If
End If
Return
Maske5:
'Ausgabe Störungstexte
Locate 1 , 1
Lcd "Störungstexte"
Locate 2 , 1
Lcd "werden nicht"
Locate 3 , 1
Lcd "unterstützt!"
Locate 4 , 1
Lcd "Warte auf v1.1"
'Tasterabfrage
If T_enter = 0 Then
Waitms 20
If T_enter = 0 Then
Ausgabemaske = 4
Status = 0
Status_nr = 0
Cls
End If
End If
Return
End
In der Interruptroutine "
Lesezeichen