' ***************************************************************************
' *
' * Title : LCD Thermometer LM35.bas
' * Version : 1.0
' * Last Updated : 17.04.2006
' * Target : AT Mega8
' * Author : www.avrprojects.net
' * Program code : BASCOM AVR
' * Hardware req. : LM35
' * Description : read analog value from LM 35 temperature sensor, show the result on a LCD
' * display with bar-graph
' ***************************************************************************
$regfile = "M8def.dat" ' use the Mega8
$crystal = 10000000
Deflcdchar 0 , 32 , 32 , 31 , 31 , 31 , 31 , 32 , 32 'delenie
Deflcdchar 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 'palka sprava
Deflcdchar 2 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 'palka sleva
Deflcdchar 3 , 16 , 16 , 31 , 31 , 31 , 31 , 16 , 16 'palka sleva i delenie
Deflcdchar 4 , 1 , 1 , 31 , 31 , 31 , 31 , 1 , 1 'palka sprava i delenie
Deflcdchar 5 , 32 , 32 , 28 , 28 , 28 , 28 , 32 , 32 'polovina delenia
Deflcdchar 6 , 1 , 1 , 29 , 29 , 29 , 29 , 1 , 1 'palka sprava i polovina delenia
Deflcdchar 7 , 16 , 16 , 28 , 28 , 28 , 28 , 16 , 16 'palka sleva i polovina delenia
Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.6 , Rs = Portd.7
Config Lcd = 20 * 4
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'config ADC
Start Adc
Dim W As Word , Perc As Word , Volt As Word , Volt_d As Byte , Channel As Byte , I As Byte , Cols As Byte , Cols_d As Byte , T As Byte , Cols_1 As Byte
Cls
Cursor Off
Locate 3 , 1
Lcd "0"
Locate 3 , 5
Lcd "10"
Locate 3 , 10
Lcd "20"
Locate 3 , 15
Lcd "30"
Locate 3 , 19
Lcd Chr(223) ; "C"
Do
W = Getadc(0)
Volt = W * 5
Volt_d = Volt Mod 10
Volt = Volt / 10
Locate 1 , 1
Lcd Volt ; "," ; Volt_d
Cols = Volt / 2
Cols_d = Volt Mod 2
Cols_1 = Cols + 1
Locate 2 , 1
If Cols = 0 Then
If Cols_d = 0 Then
Lcd Chr(2)
Else
Lcd Chr(7)
End If
Else
Lcd Chr(3)
End If
For I = 2 To 20
T = I Mod 5
If T = 0 Then
If Cols_1 = I Then
If Cols_d = 1 Then
Lcd Chr(6)
Else
Lcd Chr(1)
End If
End If
If Cols < I And Cols_1 < I Then Lcd Chr(1)
If Cols >= I And Cols_1 > I Then Lcd Chr(4)
Else
If Cols_1 = I Then
If Cols_d = 1 Then
Lcd Chr(5)
Else
Lcd Chr(32)
End If
End If
If Cols < I And Cols_1 < I Then Lcd Chr(32)
If Cols >= I And Cols_1 > I Then Lcd Chr(0)
End If
Next I
Waitms 1000
Loop
End