📄 ds18b20.bas
字号:
$regfile = "m16def.dat"
$crystal = 3276800
Config 1wire = Porta.0
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.0 , Rs = Portb.1
Config Lcd = 16 * 2
Cls
Dim Systemcounter As Byte
Dim Systemcounter2 As Byte
Dim Sensorid1(8) As Byte
Dim Sensorid2(8) As Byte
Dim Sensorid3(8) As Byte
Dim Sensorstate(3) As Byte
Dim Currentwendu(3) As Single
Dim N As Byte
Declare Sub Refreshwendu()
Declare Sub Findsensors()
Declare Sub Screen()
Call Findsensors()
Cls
Cursor Off
Waitms 500
Do
Call Refreshwendu()
For N = 1 To 3
Home
Lcd "Sensor " ; N
Locate 2 , 4
Lcd "T= " ; Currentwendu(n)
Wait 2
Screen
Next
Loop
End
'转换温度
Sub Refreshwendu()
Dim Readdata(9) As Byte
Dim Temperature As Word
Dim Wendu As Single
Dim Systemcounter1 As Byte
Dim Sensorid As Byte
'启动温度转换
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 800
For Sensorid = 1 To 3
If Sensorstate(sensorid) = 1 Then
1wreset
1wwrite &H55
'匹配总线ID
For Systemcounter1 = 1 To 8
If Sensorid = 1 Then : 1wwrite Sensorid1(systemcounter1)
Elseif Sensorid = 2 Then : 1wwrite Sensorid2(systemcounter1)
Elseif Sensorid = 3 Then : 1wwrite Sensorid3(systemcounter1)
End If
Next
1wwrite &HBE
For Systemcounter1 = 1 To 9
Readdata(systemcounter1) = 1wread()
Next
Temperature = Readdata(2) * 256
Temperature = Temperature + Readdata(1)
If Readdata(2) > 15 Then
Temperature = Not Temperature
Temperature = Temperature + 1
Wendu = Temperature / 16
Wendu = 0 - Wendu
Else
Wendu = Temperature / 16
End If
Currentwendu(sensorid) = Wendu
Else
Currentwendu(sensorid) = -255 '如果传感器不存在则设置为-255度
End If
Next
End Sub
'查找传感器,总线上必须挂有至少一个传感器
Sub Findsensors()
Dim Systemcounter4 As Byte
Dim Foundsensor As Byte
Locate 1 , 1
Lcd "Find Sensor"
Foundsensor = 0
Sensorid1(1) = 1wsearchfirst()
'开始寻找第一个传感器
Sensorstate(1) = 1
Incr Foundsensor
For Systemcounter4 = 2 To 3
If Systemcounter4 = 2 Then Sensorid2(1) = 1wsearchnext()
If Systemcounter4 = 3 Then Sensorid3(1) = 1wsearchnext()
'寻找下一个传感器
If Err = 1 Then Exit For
Sensorstate(systemcounter4) = 1
Incr Foundsensor
Waitms 200
Next
Cls
Waitms 500
Locate 1 , 1
Lcd "Found " ; Foundsensor ; " Sensors"
Waitms 1000
End Sub
Sub Screen()
Local J As Byte
For J = 1 To 16
Locate 1 , J : Lcd "*"
Locate 2 , J : Lcd "*"
Waitms 30
Next
For J = 16 To 1 Step -1
Locate 1 , J : Lcd " "
Locate 2 , J : Lcd " "
Waitms 30
Next
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -