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

📄 ds18b20.bas

📁 多个DS18B20
💻 BAS
字号:
'项目:单线挂多个DS18B20巡回检测显示温度
'结果:在proteus仿真运行成功,巡回显示温度,理论上无论挂多少个DS18B20都可以。
'时间:2007年7月27日16时56分
'开发软件:bascom-avr 11.8.5
'作者:あ邂逅记忆あ
'宜昌AVR单片机    网址:http://ycavr.cn

$regfile = "m16def.dat"
$crystal = 3276800
Baud = 9600
Declare Sub Screen()

Config 1wire = Portd.7                                      '定义单总线接口
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.1 , Rs = Porta.0       '定义液晶接口
Config Lcd = 16 * 2                                         '定义液晶类型为1602
Cls
Cursor Off                                                  '关光标显示

Dim Romdat(8) As Byte
Dim Romadd As Byte
Dim T(2) As Byte
Dim Wd As Word
Dim Temp As Single
Dim A As Byte
Dim M As Byte
Dim N As Byte
Dim I As Byte
Screen
Lcd "Welcome to"
Locate 2 , 2 : Lcd "http://ycavr.cn"
Wait 2
Screen
1wreset
If Err = 0 Then                                             '如果总线上挂有DS18B20则下转检测温度并显示,如果没有DS18B20则结束程序运行。
   Lcd "DS18B20  OK!"
Else
   Lcd "ERROR !"
   End
End If

Romadd = 1
Romdat(1) = 1wsearchfirst()                                 '查找第一个器件
For N = 1 To 8
   Writeeeprom Romdat(n) , Romadd
   Incr Romadd
Next

Do
   Romdat(1) = 1wsearchnext()                               '查找下一个,直到找完为止。
   For N = 1 To 8
      Writeeeprom Romdat(n) , Romadd                        '将ROM地址写入EEPROM
      Incr Romadd
   Next
Loop Until Err = 1
I = 1wirecount()                                            '返回总线上DS18B20的个数
Screen
Lcd "Found " ; I ; " Sensors"                               '显示DS18B20个数
Wait 1

Do
   Romadd = 1
   1wreset
   1wwrite &HCC                                             '跳过ROM匹配
   1wwrite &H44                                             '开始温度转换
   'Waitms 20
   For M = 1 To I
      Screen
      Lcd "No. " ; M
      For N = 1 To 8
         Readeeprom Romdat(n) , Romadd
         Incr Romadd
      Next

      1wreset
      1wwrite &H55                                          'ROM匹配
      For N = 1 To 8
         1wwrite Romdat(n)
      Next
      1wwrite &HBE                                          '读转换温度
      For N = 1 To 2
         T(n) = 1wread()
      Next
      Wd = T(2) * 255
      Wd = Wd + T(1)
      Locate 2 , 1
      If T(2) > 15 Then
         Lcd "T= -"
         Wd = Not Wd
         Incr Wd
      Else
         Lcd "T= +"
      End If
      Temp = Wd / 16
      Lcd Temp ; " C "
      Print M ; Temp
      Wait 2
   Next
Loop
End

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
Home
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -