'读取DS18B20温度数据,并在LCD上显示出来
'设计者 啊艺
'编译器BASCOM-AVR1.11.8.1
'//////////////////////////////////////
$regfile = "M16def.dat"
$crystal = 1000000
Config 1wire = Portb.7 '定义单总线器件的接口
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0 '定义单片机与LCD的接口,请书写在同一行
Config Lcd = 20 * 2
'*************************************************
Dim I As Byte
Dim C(2) As Byte
Dim T As Word
Dim Wendu As Single
Dim G As String * 10
Do
Cls
Cursor Off
1wreset '单总线初始化
1wwrite &HCC '主机向单总线器件发送跳过ID码指令
1wwrite &H44 '主机向单总线发送温度转换指令
Waitms 800 '精度不同时间也不同,9位93.75ms,10位187.5ms,11位375ms,12位750ms
1wreset '单总线初始化
1wwrite &HCC '主机向单总线器件发送跳过ID码指令
1wwrite &HBE '主机向单总线发送读取RAM指令
'单总线器收到读RAM指令后会跟着输出自己的9个字节的RAM数据,主机用数组C(i)保存前两个字节的温度数据
For I = 1 To 2
C(i) = 1wread()
Next
'把两个单字节的温度数据合并为一个双字节,得到原始温度数据
T = C(2) * 256
T = T + C(1)
'在LCD上把16位的原始温度数据以十六进制的方式显示出来
'Lcd Hex(t)
'如果温度为正,则T的最高位的4位都为0,否则为1
'负温度的计算:原始数据取反、加1、再乘以 0.0625
'正温度的计算:原始数据乘以 0.0625
Locate 2 , 1
If C(2) > 15 Then
T = Not T
T = T + 1
Wendu = T * 0.0625
'G = Fusing(wendu , "#.##")
'Lcd "-" ; G ; "C"
Lcd "-" ; Wendu
Else
Wendu = T * 0.0625
'G = Fusing(wendu , "#.##")
'Lcd "+" ; G ; "C"
Lcd "+" ; Wendu
End If
Wait 1 '等待一秒钟,目的是让LCD显示清晰一点
Loop
End
上一篇:AVR(ATMEGA128/ATMEGA16)数码管显示
下一篇:AVR串口发送程序
推荐阅读最新更新时间:2024-03-16 15:16