|
发表于 2012-3-27 10:17:42
|
显示全部楼层
只想看一下结构,用VS打开的效果
'项目:单线挂多个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
|
|