Schritt 4: Das Programm
Im folgenden wird das Programm eingefügt. Im Grunde können Sie mitverfolgen, wie es funktioniert, lesen Sie die Programm-Kommentare. Erfahrene Programmierer werden wahrscheinlich wissen, wie Sie einfacher und effizienter Code schreiben. Was kann ich sagen, dies ist mein erster Versuch, und es scheint zu funktionieren.
' *** TemperatureSensor.bas ***
"Dieses Programm läuft auf einem PICAXE - 20 X 2 mit 4MHz die liest die Temperatur von einem
"Temperatur-Sensor DS18B20 & sendet sie an ein HD44780 kompatible 16 x 2 LCD-Display.
'
"Von Simon Carter 10. März 2013 entwickelt.
' *** Konstanten ***
Symbol EnablePin = c. 7 "LCD-Enable-Pin verbunden, c. 7
Symbol RegSelPin = c. 4 "LCD registrieren Selelect-polig, angeschlossen an c. 4
Symbol TempPin = c. 1 "Temperatur-Sensor-Daten verbunden, c. 1
' *** Variablen ***
Char-Symbol = b0 ' Charakter zu LCD gesendet werden
Symbol-Index = b1 "verwendet als Zähler in For-Next-Schleifen
Symbol Degc = b2 "der Temperaturwert erhielt vom Sensor DS18B20
Symbol Intgval = b3 "verwendet, um vorübergehend halten jeden ganzzahligen Wert extrahiert von der Nummer erhalten vom Sensor
Symbol Degflag = b4 "eine Flagge verwendet, beim Umgang mit negativen Temperaturbereichen. 0 = Postive Range, 1 = negativen Bereich
Symbol Degf = b5 "halten Grad Farenheight Werte
' *** Richtlinien ***
#com 3' geben Sie Download Port
#picaxe 20 x 2' angeben, Prozessor
#no_data "speichern herunterladen
#terminal aus "terminal-Fenster deaktivieren
' *** Tabelle ***
Tabelle 0, ("Temperatur")
' *** Hauptprogramm ***
DirsB = % 11111111' Set alle PortB Pins als Ausgänge
DirsC = % 10111001' c. 6 und c. 2, c. 1 als Eingänge festlegen
Pullup % 00000010' Enable c. 6 internen Pullup Widerstand
' *** Das LCD initialisieren ***
Pause Pause 200' 200 mS für LCD Initialisierung nach HD44780-Spezifikationen
Char = 56' Setup für 8-Bit, 2 Linien & 5 X 8 Display
GOSUB CmdLCD ' LCD Anleitung schicken
Char = 12' Anzeige auf Cursor aus
GOSUB CmdLCD ' LCD Anleitung schicken
Char = 1' übersichtliches Display, nach Hause gehen in die Linie 1 der LCD-Anzeige
GOSUB CmdLCD ' LCD Anleitung schicken
warten Sie 1
' *** SMS - "Temperatur" in die Linie 1 der LCD ***
für Index = 0 bis 15
ReadTable Index, Char ' Textzeichen in der Tabelle lesen
GOSUB TxtLCD ' senden Sie Text in der Tabelle an LCD
nächsten index
' *** Hauptschleife - Sensor DS18B20 lesen ***
tun
Char = 194' Cursor bewegen an den Anfang der Zeile zwei
GOSUB CmdLCD ' senden die Anweisung auf LCD
TempPin, Degc Readtemp "lesen Sie der Temperaturwert vom Sensor DS18B20 auf Pin C1.0 erhielt
anhalten 800' anhalten > 750 mS für Sensor gemäß DS18B20 Spezifikationen
"Degc = 24 einfügen Test Temperaturwerte hier überprüfen Sie Code-Funktion
Degflag = 0' Reset-Flag auf 0 also positiven Temperaturbereich zu übernehmen
GOSUB BelowZeroC ' Minustemperaturen suchen
GOSUB IntgOnly ' Extrakt 10 und1 Ganzzahlen von DS18B20 Daten
GOSUB DegCsign ' deg C Zeichen zu generieren
GOSUB CheckFlag ' überprüfen, ob Umgang mit Temperaturen im Bereich von minus und Degc Wert anpassen
GOSUB BelowZeroF ' Minustemperaturen suchen
GOSUB DegFsign ' Minustemperaturen suchen
"deg F Zeichen zu generieren
Schleife
' *** Unterroutinen ***
CmdLCD:
niedrige RegSelPin ' LCD für ein Befehlsbyte eingerichtet
GOTO LoadLCD
TxtLCD: "richten Sie LCD für Text-Byte
hohe RegSelPin
LoadLCD:; führen Sie laden Byte in LCD
OutpinsB = Char ' Byte auf OutpinsB zu laden
Pulsout EnablePin, 1' laden Bytes auf LCD
Rückkehr
LoadIntgLCD: "Ausführen Laden Temperatur Text Byte, das in eine Ganzzahl konvertiert wurde
hohe RegSelPin ' LCD für Text Byte eingerichtet
OutpinsB = Intgval ' Byte auf OutpinsB zu laden
Pulsout EnablePin, Ausführung 1' laden Byte in LCD
Rückkehr
IntgOnly: "extrahieren, 100, 10 und 1 ganze Zahlen von DS18B20 Daten
für Index = 2: 0 Schritt-1 "Index 100 Ganzzahl zuerst zu extrahieren dann 10er Ganzzahl dann 1
lassen Sie Intgval = Degc Dig Index "Verwendung Graben Funktion Ganzzahlen zu extrahieren
Wenn Intgval = 0 und Index = 2, dann lassen Sie Intgval = % 00100000 "Blank eine führende"0"auf dem Display
ElseIf Intgval = 0, dann lassen Sie Intgval = % 00110000' Convert Ganzzahlen, LCD-Zeichen-Codes
ElseIf Intgval = 1, dann lassen Sie Intgval = % 00110001
ElseIf Intgval = 2, dann lassen Sie Intgval = % 00110010
ElseIf Intgval = 3, dann lassen Sie Intgval = % 00110011
ElseIf Intgval = 4, dann lassen Sie Intgval = % 00110100
ElseIf Intgval = 5, dann lassen Sie Intgval = % 00110101
ElseIf Intgval = 6, dann lassen Sie Intgval = % 00110110
ElseIf Intgval = 7, dann lassen Sie Intgval = % 00110111
ElseIf Intgval = 8, dann lassen Sie Intgval = % 00111000
ElseIf Intgval = 9, dann lassen Sie Intgval = % 00111001
ENDIF
GOSUB LoadIntgLCD ' Ausführen Laden Temperatur Text Byte, das in eine Ganzzahl konvertiert wurde
nächsten index
Rückkehr
DegCsign: "erstellen Sie Grad C Text auf dem Display
Intgval = % 11011111' Set Zeichen LCD in "Grad" Zeichencode gesendet werden
GOSUB LoadIntgLCD ' senden Zeichen LCD
Intgval = % 01000011' Set Zeichen LCD in "C" Zeichencode für Celsius gesendet werden
GOSUB LoadIntgLCD ' senden Zeichen LCD
Intgval = % 00100000' Set Zeichen zu LCD zu richten "" Zeichencode für ein Leerzeichen vor den Farenheight-Wert
GOSUB LoadIntgLCD ' senden Zeichen LCD
Rückkehr
DegFsign: "erstellen Sie Grad F Text auf dem Display
Intgval = % 11011111' Set Zeichen LCD in "Grad" Zeichencode gesendet werden
GOSUB LoadIntgLCD ' senden Zeichen LCD
Intgval = % 01000110' eingestellten Zeichen, LCD, "F"-Zeichen-Code für Farenheight gesendet werden
GOSUB LoadIntgLCD ' senden Zeichen LCD
Rückkehr
Intgval = % 00100000' Set Zeichen zu LCD zu richten "" Zeichencode für einen Raum nach Farenheight Wert als Minuszeichen verwendet löschen
GOSUB LoadIntgLCD ' senden Zeichen LCD
Intgval = % 00100000' Set Zeichen zu LCD zu richten "" Zeichen-Code für einen Raum nach dem Farenheight Wert, wenn klar Intgval > 100 verwendet
GOSUB LoadIntgLCD ' senden Zeichen LCD
DegFcalc: "Farenheight Wert für positive Farenheight Lesungen
DegC = Degc * 9 / 5 + 32' Farenheight Wert von Celsius Wert berechnen
GOSUB IntgOnly ' beginnen um 100, 10 und 1 extrahieren Ganzzahlen für Farenheight Wert
Debug
Rückkehr
DegFcalcPos: "Farenheight Wert für positive Farenheight Lesungen ableiten, wenn c negativ ist
DegC = Degc * 9/5' Farenheight Wert von Celsius Wert berechnen
DegC = 32-Degc "Farenheight Wert von Celsius zu berechnen
GOSUB IntgOnly ' beginnen um 100, 10 und 1 extrahieren Ganzzahlen für Farenheight Wert
Rückkehr
DegFcalcNeg: "Farenheight Wert für negative Farenheight Lesungen
DegC = Degc * 9/5-32' Farenheight Wert von Celsius Wert berechnen
GOSUB IntgOnly ' beginnen um 100, 10 und 1 extrahieren Ganzzahlen für Farenheight Wert
Rückkehr
MinusSign:
Intgval = "-" "set Charakter in"Minuszeichen"Zeichencode auf LCD gesendet werden
GOSUB LoadIntgLCD
Rückkehr
BelowZeroC: "suchen Sie unter Null Grad Celsius
Wählen Sie Fall degc
Fall 0 bis 125' ignorieren diesen Fall - Temperatur im Normalbereich positiv
Fall 129, 183' Celsius im Bereich von minus ist schicken ein Minus-Zeichen-Zeichen LCD
DegC = Degc-128 "für die DSDS18B20 korrekt MSB auf"1"oder 128 für minus Temperatur einstellen
Degflag = 1' Set Flagge Minustemperatur Zustand
GOSUB MinusSign ' Falls Celsius ist im Bereich von minus senden ein Minus-Zeichen-Zeichen LCD
ENDSELECT
Rückkehr
BelowZeroF:
Wählen Sie Fall degc
Fall 0 bis 124' ignorieren diesen Fall - Temperatur im Normalbereich positiv
GOSUB DegFcalc
Fall 129, 146' der Fall, wo nur Celsius im Bereich von minus ist
DegC = Degc-128 "für die DSDS18B20 korrekt einstellen MSB auf"1"oder 128 für minus Temperatur Conditio
GOSUB DegFcalcPos
Fall 147, 183' der Fall, wo Farenheight im Bereich von minus ist, ein Minus-Zeichen-Zeichen an LCD senden
DegC = Degc-128 "für die DSDS18B20 korrekt MSB auf"1"oder 128 für minus Temperatur einstellen
GOSUB MinusSign ' der Fall, wo Farenheight ist im Bereich von minus, senden ein Minus-Zeichen-Zeichen LCD
GOSUB DegFcalcNeg
ENDSELECT
Rückkehr
CheckFlag:
Wenn Degflag = 1, dann lassen Sie Degc = Degc + 128' Reset die Korrektur für die DSDS18B20 MSB auf "1" oder 128 für minus Temperatur Bedingung festlegen
ENDIF
Rückkehr