#picaxe 40x
init:
'inputs
symbol TempA=1 ;DS18B20 temperature
symbol TempB=2 ;DS18B20 temperature
'outputs
symbol oLCD=2 'LCD display
'variables
symbol SWmodeA=b0
symbol SWmodeB=b1
symbol SWmodeC=b2
symbol HtrPwr=b3
symbol wTraw=w2 ;raw temperature data from DS18B20
symbol act_T=w2 ;actual temperature in * 10 degrees
'insert test values
SWmodeA=0
SWmodeB=1
SWmodeC=1
HtrPwr=50
'power up LCD
pause 1000
'initialise LCD screen
serout oLCD, T2400, (254,128) 'line 0 posn 0
if SWmodeA=1 then
serout oLCD, T2400, ("L") 'show 'L'
else
serout oLCD, T2400, ("l") 'show 'l'
endif
serout oLCD, T2400, (254, 135)
if SWmodeB=1 then
serout oLCD, T2400, ("C") 'show 'C'
else
serout oLCD, T2400, ("c") 'show 'c'
endif
serout oLCD, T2400, (254, 192, "M") 'show 'M'
serout oLCD, T2400, (254, 199)
if SWmodeC=1 then
serout oLCD, T2400, ("K") 'show 'K'
else
serout oLCD, T2400, ("k") 'show 'k'
endif
serout oLCD, T2400, (254, 205)
if HtrPwr < 10 then
serout oLCD, T2400, (" ", #HtrPwr)
elseif HtrPwr < 100 then
serout oLCD, T2400, (" ", #HtrPwr)
else
serout oLCD, T2400, (#HtrPwr)
endif
serout oLCD, T2400, ("%")
main:
ReadTemp12 TempA,wTraw ;12 bit resolution read of DS18B20 probe
;temp = raw * 0.0625
;to display temp in 1 decimal place * 10 (ie. integer):
;temp = raw * 0.625
;temp = raw * 5/8
act_T= wTraw * 5/8 ;raw temp now in *10 format
'move to correct screen position
serout oLCD, T2400, (254, 193)
'and display it
gosub subWriteLCDtempUnits
gosub subWriteLCDtempDec
ReadTemp12 TempB,wTraw ;12 bit resolution read of DS18B20 probe
;temp = raw * 0.0625
;to display temp in 1 decimal place * 10 (ie. integer):
;temp = raw * 0.625
;temp = raw * 5/8
act_T= wTraw * 5/8 ;raw temp now in *10 format
act_T= act_T ;calibrate temp
'move to correct screen position
serout oLCD, T2400, (254, 136)
'and display it
gosub subWriteLCDtempUnits
gosub subWriteLCDtempDec
goto main
subWriteLCDtempUnits:
act_T=act_T/10 'degrees value (units)
if act_T<10 then
serout oLCD, T2400, ("0", #act_T)
elseif act_T<100 then
serout oLCD, T2400, (#act_T)
else
serout oLCD, T2400, (254, 16, #act_T)
endif
return
subWriteLCDtempDec:
act_T=act_T//10 'degrees value (tenths)
serout oLCD, T2400, (".", #act_T)
return