Big Digit ThermoMeter
This example was written by RETI from Belgium. Big digit thermometer using DALLAS DS1820 1WIRE sensor.
LCD-Display shows temparature with a resolution from 1/10 °C up to 5 digits can be used ont the display. Ideal for clocks,etc...
Download source code in Bas file

' BIG DIGIT THERMOMETER USING DALLAS
DS1820 1WIRE SENSOR
' LCD-DISPLAY SHOWS TEMPERATURE WITH A RESOLUTION FROM
1/10 °C
' UP TO 5 DIGITS CAN BE USED ON THE DISPLAY. IDEAL FOR
CLOCKS,ETC...
'
' 1WIRE : P1.0 ...4K7 to VCC
'
' CODE BY RETI/BELGIUM : CONTACT ME ... rETi@nettaxi.com
$crystal = 11059200
$iramstart = &H60
$ramstart = 0
$ramsize = &H7FFF
$default Xram
$large
Config 1wire = P1.0
1wreset
Config Lcd = 20 * 4
Config Lcdbus = 4
Cursor Off
Display On
Cls
Deflcdchar 1 , 224 , 224 , 224 , 240 , 248 , 252 , 254 , 255 ' B
Deflcdchar 2 , 224 , 224 , 224 , 255 , 255 , 255 , 255 , 255 ' = O
Deflcdchar 3 , 255 , 255 , 255 , 255 , 254 , 252 , 248 , 240 ' !/ O
Deflcdchar 4 , 255 , 255 , 255 , 255 , 239 , 231 , 227 , 225 ' ! O
Deflcdchar 5 , 224 , 224 , 224 , 225 , 227 , 231 , 239 , 255 ' / B
Deflcdchar 6 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 ' ! N
' SYMBOL ARRAYS : INCLUDE DATA TO DISPLAY BIG DIGITS USING
6 CUSTOM LCD SYMBOLS
Dim L1(17) As String * 4 , L2(17) As String * 4 , L3(17) As String * 4 , L4(17) As String * 4
' EACH DIGIT EXISTS OF 12 BYTES DISPLAYING EACH ONE OF THE
ABOVE DEFLCDCHAR'S
' NUMBER 1
L1(1) = " " + Chr(5) + Chr(2) + " "
L2(1) = " " + " " + Chr(7) + " "
L3(1) = " " + " " + Chr(7) + " "
L4(1) = " " + " " + Chr(7) + " "
' NUMBER 2
L1(2) = Chr(5) + Chr(2) + Chr(1) + " "
L2(2) = Chr(5) + Chr(2) + Chr(3) + " "
L3(2) = Chr(6) + " " + " " + " "
L4(2) = Chr(6) + Chr(2) + Chr(2) + " "
' NUMBER 3
L1(3) = Chr(5) + Chr(2) + Chr(1) + " "
L2(3) = " " + Chr(2) + Chr(6) + " "
L3(3) = Chr(2) + " " + Chr(6) + " "
L4(3) = Chr(4) + Chr(2) + Chr(3) + " "
' NUMBER 4
L1(4) = Chr(5) + " " + Chr(2) + " "
L2(4) = Chr(6) + Chr(2) + Chr(6) + " "
L3(4) = " " + " " + Chr(6) + " "
L4(4) = " " + " " + Chr(6) + " "
' NUMBER 5
L1(5) = Chr(2) + Chr(2) + Chr(2) + " "
L2(5) = Chr(6) + Chr(2) + Chr(1) + " "
L3(5) = Chr(2) + " " + Chr(6) + " "
L4(5) = Chr(4) + Chr(2) + Chr(3) + " "
' NUMBER 6
L1(6) = Chr(5) + Chr(2) + Chr(2) + " "
L2(6) = Chr(6) + Chr(2) + Chr(1) + " "
L3(6) = Chr(6) + " " + Chr(6) + " "
L4(6) = Chr(4) + Chr(2) + Chr(3) + " "
' NUMBER 7
L1(7) = Chr(2) + Chr(2) + Chr(2) + " "
L2(7) = " " + Chr(5) + Chr(3) + " "
L3(7) = " " + Chr(6) + " " + " "
L4(7) = " " + Chr(6) + " " + " "
' NUMBER 8
L1(8) = Chr(5) + Chr(2) + Chr(1) + " "
L2(8) = Chr(4) + Chr(2) + Chr(3) + " "
L3(8) = Chr(6) + " " + Chr(6) + " "
L4(8) = Chr(4) + Chr(2) + Chr(3) + " "
' NUMBER 9
L1(9) = Chr(5) + Chr(2) + Chr(1) + " "
L2(9) = Chr(4) + Chr(2) + Chr(6) + " "
L3(9) = " " + " " + Chr(6) + " "
L4(9) = Chr(4) + Chr(2) + Chr(3) + " "
' NUMBER 0
L1(10) = Chr(5) + Chr(2) + Chr(1) + " "
L2(10) = Chr(6) + " " + Chr(6) + " "
L3(10) = Chr(6) + " " + Chr(6) + " "
L4(10) = Chr(4) + Chr(2) + Chr(3) + " "
' DEGREE SYMBOL
L1(11) = Chr(5) + Chr(2) + Chr(1) + " "
L2(11) = Chr(4) + Chr(2) + Chr(3) + " "
L3(11) = " " + " " + " " + " "
L4(11) = " " + " " + " " + " "
' LETTER C
L1(12) = Chr(5) + Chr(2) + Chr(2) + " "
L2(12) = Chr(6) + " " + " " + " "
L3(12) = Chr(6) + " " + " " + " "
L4(12) = Chr(4) + Chr(2) + Chr(2) + " "
' LETTER F
L1(13) = Chr(5) + Chr(2) + Chr(2) + " "
L2(13) = Chr(6) + Chr(2) + Chr(2) + " "
L3(13) = Chr(6) + " " + " " + " "
L4(13) = Chr(6) + " " + " " + " "
' LETTER H
L1(14) = Chr(2) + " " + " " + " "
L2(14) = Chr(6) + Chr(5) + Chr(2) + " "
L3(14) = Chr(6) + " " + Chr(6) + " "
L4(14) = Chr(6) + " " + Chr(6) + " "
' SYMBOL :
L1(15) = " " + " " + " " + " "
L2(15) = " " + Chr(2) + " " + " "
L3(15) = " " + Chr(2) + " " + " "
L4(15) = " " + " " + " " + " "
' SYMBOL .
L1(16) = " " + " "
L2(16) = " " + " "
L3(16) = " " + " "
L4(16) = Chr(3) + " "
' UNKNOW
L1(17) = "?" + " "
L2(17) = "?" + " "
L3(17) = "?" + " "
L4(17) = "?" + " "
Declare Sub Showstring(stri As String * 5)
Dim Stri As String * 5
Declare Sub Rd1820(valu As Single)
Dim Valu As Single
Dim E1 As String * 5
Dim E2 As String * 5
Dim E3 As String * 5
' /**** MAIN LOOP ****/
Do
Call Rd1820(valu)
E1 = Str(valu)
E2 = Left(e1 , 4)
Print E2
E3 = E2 + "°"
Call Showstring(e3)
Loop
' /**** END LOOP ****/
Sub Rd1820(valu As Single)
Dim T1 As Byte , T11 As Single , T2 As Single , T3 As Single , T4 As Single , T7 As Single , T8 As Single
Dim Ar(9) As Byte , I As Byte
Dim X1 As Const 0.25
1wreset
1wwrite &HCC ' Skip ROM command , only one DS1820
1wwrite &H44 ' Convert Temp
1wreset
1wwrite &HCC ' Skip ROM Command
1wwrite &HBE ' Read
Scratchpad command
For I = 1 To 9
Ar(i) = 1wread ' Read out 9 registers (Bytes)
Next I
T1 = Ar(1) / 2
T11 = T1 ' Conversion of Byte to Single
T7 = Ar(7) ' Count Remain
T8 = Ar(8) ' Counts per °C
T2 = T8 - T7 ' Calculate High resolution
T3 = T2 / T8
T4 = T11 - X1
Valu = T4 + T3 ' Return Value to the Main Program
1wreset
End Sub
Sub Showstring(stri As String * 5)
If Len(stri) > 5 Then Stri = Left(stri , 5)
Dim A1 As Byte
Dim A2 As String * 1
Dim A3 As Byte
Dim A4 As Byte
Dim B1 As String * 20
Dim B2 As String * 20
Dim B3 As String * 20
Dim B4 As String * 20
B1 = "" : B2 = "" : B3 = "" : B4 = ""
A4 = Len(stri)
For A1 = 1 To A4
A2 = Mid(stri , A1 , 1)
Select Case A2
Case Is = "1" : A3 = 1
Case Is = "2" : A3 = 2
Case Is = "3" : A3 = 3
Case Is = "4" : A3 = 4
Case Is = "5" : A3 = 5
Case Is = "6" : A3 = 6
Case Is = "7" : A3 = 7
Case Is = "8" : A3 = 8
Case Is = "9" : A3 = 9
Case Is = "0" : A3 = 10
Case Is = "°" : A3 = 11
Case Is = "C" : A3 = 12
Case Is = "c" : A3 = 12
Case Is = "F" : A3 = 13
Case Is = "f" : A3 = 13
Case Is = "H" : A3 = 14
Case Is = "h" : A3 = 14
Case Is = "X" : A3 = 15
Case Is = "." : A3 = 16
Case Else : A3 = 17
End Select
B1 = B1 + L1(a3)
B2 = B2 + L2(a3)
B3 = B3 + L3(a3)
B4 = B4 + L4(a3)
Next A1
Upperline
Lcd B1
Lowerline
Lcd B2
Thirdline
Lcd B3
Fourthline
Lcd B4
End Sub
|