Stap 4: Het programma
Hieronder wordt het programma geplakt. In principe kunt u volgen hoe het werkt door het lezen van de opmerkingen van het programma. Meer ervaren programmeurs zullen waarschijnlijk weten hoe eenvoudiger en efficiënter code te schrijven. Wat kan ik zeggen, dit is mijn eerste poging en het schijnt te werken.
' *** TemperatureSensor.bas ***
' Dit programma wordt uitgevoerd op een PICAXE - 20 X 2 bij 4MHz die de temperatuur leest van een
' DS18B20 temperatuursensor & verzonden naar een HD44780 compatibele 16 x 2 LCD display.
'
' Ontwikkeld door Simon Carter, 10 maart 2013.
' *** Constanten ***
symbool EnablePin = C.7 ' LCD inschakelen pin verbonden met C.7
symbool RegSelPin = C.4 ' LCD registreren Selelect pin verbonden met C.4
symbool TempPin = C.1 ' temperatuur sensorgegevens gekoppeld aan C.1
' *** Variabelen ***
symbool char = b0 ' karakter worden verzonden naar de LCD
symbool index = b1 ' gebruikt als teller in de For-Next lussen
symbool degc b2 = ' de waarde van de temperatuur van de DS18B20 sensor ontvangen
symbool intgval = b3 ' gebruikt om tijdelijk elk getalwaarde geëxtraheerd uit het aantal ontvangen van de sensor
symbool degflag = b4 ' een vlag gebruikt bij het omgaan met negatieve temperatuurbereiken. 0 = postive bereik, 1 = negatieve bereik
symbool degf = b5 ' gebruikt voor het houden van graden farenheight waarden
' *** Richtlijnen ***
#com 3' download poort opgeven
#picaxe 20 x 2' opgeven processor
#no_data ' besparen tijd downloaden
#terminal uit ' terminal-venster uitschakelen
' *** Tabel ***
Tabel 0, ("de temperatuur")
' *** Hoofdprogramma ***
dirsB = % 11111111' set alle portB-pinnen als uitgang
dirsC = % 10111001' ingesteld C.6 en C.2, C.1 als input
pullup % 00000010' inschakelen C.6 interne pullup weerstand
' *** Initialiseren het LCD ***
onderbreken 200' pauze 200 mS voor LCD initialisatie volgens de specificaties van de HD44780
char = 56' setup voor 8-bits, 2 lijnen & 5 X 8 display
GOSUB CmdLCD ' instructie verzenden LCD
char = 12' weergave op, cursor uit
GOSUB CmdLCD ' instructie verzenden LCD
char = 1' duidelijke display, ga naar huis naar lijn 1 van LCD-display
GOSUB CmdLCD ' instructie verzenden LCD
wacht 1
' *** 'Temperature' op lijn 1 van de LCD - SMS ***
voor index = 0 tot en met 15
readtable index, char ' teksttekens in de tabel lezen
GOSUB TxtLCD ' tekst in de tabel verzenden met LCD
volgende index
' *** Hoofdlus - lezen van de DS18B20 sensor ***
doen
char = 194' cursor verplaatsen naar het begin van de lijn twee
GOSUB CmdLCD ' de instructie verzenden LCD
readtemp TempPin, degc ' Lees de temperatuur van de DS18B20 sensor op pin C1.0 ontvangen
pauze 800' pauze > 750 mS voor volgens de specificaties van de DS18B20 sensor
' degc = 24 invoegen temperatuur testwaarden hier om te controleren functie
degflag = 0' reset de vlag op 0 d.w.z. veronderstellen positieve temperatuurbereik om mee te beginnen
GOSUB BelowZeroC ' Controleer voor onder nul temperaturen
GOSUB IntgOnly ' uittreksel van 10 en 1 van gehele getallen van de DS18B20 gegevens
GOSUB DegCsign ' genereren deg C teken
GOSUB CheckFlag ' controleren als te maken met temperaturen in de min bereik en aanpassen van degc waarde
GOSUB BelowZeroF ' Controleer voor onder nul temperaturen
GOSUB DegFsign ' Controleer voor onder nul temperaturen
' genereren deg F teken
lus
' *** Subroutines ***
CmdLCD:
lage RegSelPin ' LCD instellen voor een byte van de opdracht
goto LoadLCD
TxtLCD: ' LCD instellen voor tekst byte
hoge RegSelPin
LoadLCD:; uitvoeren van laden byte in LCD
outpinsB = char ' laden byte op outpinsB
pulsout EnablePin, 1' geladen bytes op LCD
terugkeer
LoadIntgLCD: ' uitvoeren laden temperatuur tekst byte die is omgebouwd tot een geheel getal
hoge RegSelPin ' LCD instellen voor tekst byte
outpinsB = intgval ' laden byte op outpinsB
pulsout EnablePin, 1' uitvoeren laden byte in LCD
terugkeer
IntgOnly: "uitpakken 100's, van 10 en 1 van gehele getallen van de DS18B20 gegevens
voor index = stap 2 tot en met 0 -1 ' index 100 's geheel getal eerst uitpakken dan 10 geheel getal dan 1 instellen
laat intgval = degc graven index ' functie gebruik graven om uit te pakken van de gehele getallen
Als intgval = 0 en de index laat intgval dan = 2% 00100000 = ' leeg alle toonaangevende "0" op het display
anders als intgval = 0 dan laat intgval = % 00110000' converteren gehele getallen tot LCD tekencodes
anders als intgval = 1 dan laten intgval = % 00110001
anders als intgval = 2 dan laten intgval = % 00110010
anders als intgval = 3 dan laat intgval = % 00110011
anders als intgval = 4 dan laat intgval = % 00110100
anders als intgval = 5 dan laten intgval = % 00110101
anders als intgval = 6 dan laten intgval = % 00110110
anders als intgval laat intgval dan = 7 = % 00110111
anders als intgval = 8 dan laat intgval = % 00111000
anders als intgval = 9 dan laten intgval = % 00111001
endif
GOSUB LoadIntgLCD ' uitvoeren laden temperatuur tekst byte die is omgebouwd tot een geheel getal
volgende index
terugkeer
DegCsign: ' Maak graden C tekst op het display
intgval = % 11011111' set karakter worden verzonden naar LCD om de tekencode "Mate"
GOSUB LoadIntgLCD ' tekens verzenden LCD
intgval = % 01000011' set karakter worden verzonden naar LCD om "C"-tekencode voor Celsius
GOSUB LoadIntgLCD ' tekens verzenden LCD
intgval = % 00100000' set karakter worden verzonden naar LCD om te "" tekencode voor een spatie voor de farenheight-waarde
GOSUB LoadIntgLCD ' tekens verzenden LCD
terugkeer
DegFsign: ' Maak graden F tekst op het display
intgval = % 11011111' set karakter worden verzonden naar LCD om de tekencode "Mate"
GOSUB LoadIntgLCD ' tekens verzenden LCD
intgval = % 01000110' set karakter worden verzonden naar LCD om de tekencode "F" voor Farenheight
GOSUB LoadIntgLCD ' tekens verzenden LCD
terugkeer
intgval = % 00100000' set karakter worden verzonden naar LCD om te "" tekencode voor een spatie na farenheight waarde te wissen wanneer minteken gebruikt
GOSUB LoadIntgLCD ' tekens verzenden LCD
intgval = % 00100000' set karakter worden verzonden naar LCD om te "" tekencode voor een spatie na farenheight waarde te wissen wanneer intgval > 100 gebruikt
GOSUB LoadIntgLCD ' tekens verzenden LCD
DegFcalc: ' Farenheight waarde voor positieve Farenheight lezingen ontlenen
degC = degc * 9 / 5 + 32' Farenheight waarde van heeft waarde berekenen
GOSUB IntgOnly ' starten als u wilt uitpakken 100's, van 10 en 1 van gehele getallen voor Farenheight waarde
debug
terugkeer
DegFcalcPos: ' Farenheight waarde voor positieve Farenheight lezingen ontlenen wanneer celcius negatief is
degC = degc * 9/5' Farenheight waarde van heeft waarde berekenen
degC = 32-degc ' Farenheight waarde van heeft waarde berekenen
GOSUB IntgOnly ' starten als u wilt uitpakken 100's, van 10 en 1 van gehele getallen voor Farenheight waarde
terugkeer
DegFcalcNeg: ' Farenheight waarde voor negatieve Farenheight lezingen ontlenen
degC = degc * 9/5-32' Farenheight waarde van heeft waarde berekenen
GOSUB IntgOnly ' starten als u wilt uitpakken 100's, van 10 en 1 van gehele getallen voor Farenheight waarde
terugkeer
MinusSign:
intgval = "-" ' karakter worden verzonden naar de LCD voor "minus teken" tekencode instellen
GOSUB LoadIntgLCD
terugkeer
BelowZeroC: ' Kijk voor hieronder nul deg C
Selecteer zaak degc
geval 0 tot 125' negeren dit geval - de temperatuur in het normale bereik van positieve
zaak 129 tot 183' het geval waar celsius in de min bereik verzenden een minteken karakter door LCD
degC degc-128 = ' correct is voor de DSDS18B20 MSB instelt op "1" of 128 voor minus temperatuur voorwaarde
degflag = 1' set vlag die aangeeft negatieve temperatuur voorwaarde
GOSUB MinusSign ' het geval waar celsius in de min bereik verzenden een minteken-karakter LCD
endselect
terugkeer
BelowZeroF:
Selecteer zaak degc
geval 0 tot 124' het negeren van dit geval - de temperatuur in het normale bereik van positieve
GOSUB DegFcalc
kast 129 tot 146' het geval waar enige celsius in de min bereik
degC degc-128 = ' correct is voor de DSDS18B20 MSB instelt op "1" of 128 voor minus temperatuur conditio
GOSUB DegFcalcPos
geval 147 naar 183' het geval waar de farenheight in de min bereik is verzenden een minteken-karakter LCD
degC degc-128 = ' correct is voor de DSDS18B20 MSB instelt op "1" of 128 voor minus temperatuur voorwaarde
GOSUB MinusSign ' het geval waar de farenheight is in de min bereik verzenden een minteken-karakter LCD
GOSUB DegFcalcNeg
endselect
terugkeer
CheckFlag:
Als degflag = 1 dan laat degc = degc + 128' Reset de correctie voor de DSDS18B20 MSB instelt op "1" of 128 voor minus temperatuur voorwaarde
endif
terugkeer