⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.bas

📁 DS18B20三路检测+1602LCD DS18B20三路检测+1602LCD DS18B20三路检测+1602LCD
💻 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 + -