rem Main.bas file generated by New Project wizard
rem
rem Created: 周日 9月 16 2018
rem Processor: ATmega16
rem Compiler: BASCOM-AVR
rem Write your code here
$regfile = "m16def.dat"
$crystal = 2000000
Config 1wire = Portb.0 '定義BS18B20接在PB0上
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2
Config Lcd = 20 * 4
$baud = 19200
Cls
'Dim SysDS18B20_1 As Byte
'Dim SysDS18B20_2 As Byte
Dim Cgqidi_1(8) As Byte '傳感器id1數組變量
Dim Cgqidi_2(8) As Byte '傳感器id2數組變量
Dim Cgqidi_3(8) As Byte '傳感器id3數組變量
Dim Cgqidi_4(8) As Byte '傳感器id4數組變量
Dim Cgqidi_5(8) As Byte '傳感器id5數組變量
Dim Cgq_zhuangtai(5) As Byte '傳感器——狀態變量
Dim Xianzai__wendu(5) As Single '現在——溫度變量
Declare Sub SUAXIN___WENDU() '聲明刷新轉換溫度過程子程序
Declare Sub FAXIAN_CGQs() '聲明發現傳感器過程子程序
Call FAXIAN_CGQs() '調用發現——傳感器過程子程序
Cls
Waitms 500
Do
Call SUAXIN___WENDU()'轉到刷新轉換溫度過程子程序
Locate 1 , 1
Lcd Fusing(XIANZAI__WENDU(1) , "#.##");"C DS18B20-1"
Locate 2 , 1
lcd Fusing(XIANZAI__WENDU(2) , "#.##") ; "C DS18B20-2"
Locate 3 , 1
Lcd Fusing(xianzai__wendu(3) , "#.##") ; "C DS18B20-3"
Locate 4 , 1
Lcd Fusing(xianzai__wendu(4) , "#.##") ; "C DS18B20-4"
Waitms 1500
Config Adc = Single , Prescaler = Auto , Reference = avcc
Start Adc
Dim W As Word , Channel As Byte , B As Single , D1 As Single , D2 As Single '加插 5V 的短路塊
Channel = 1
W = Getadc(channel)
b=5*w 'B = 2.98 * W
D1 = B / 1023
Locate 2 , 1
'Lcd "AD1= "
Locate 4 , 1
Lcd Fusing (d1 , "#.###"); "V ADC"
Loop
End
'刷新轉換溫度過程子程序
Sub SUAXIN___WENDU()
Dim Readdata(9) As Byte
Dim Temperature As Word
Dim WENDU As Single
Dim SysDS18B20_1 As Byte
Dim CGQidI_ As Byte
'啟動溫度轉換
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 800
For Cgqidi_ = 1 To 5
If CGQ_ZHUANGTAI(CGQidI_) = 1 Then
1wreset
1wwrite &H55
'匹配總線ID
For SysDS18B20_1 = 1 To 8
If CGQidI_ = 1 Then : 1wwrite CGQidI_1(sysDS18B20_1)
Elseif CGQidI_ = 2 Then : 1wwrite CGQidI_2(sysDS18B20_1)
Elseif Cgqidi_ = 3 Then : 1wwrite Cgqidi_3(sysds18b20_1)
Elseif Cgqidi_ = 4 Then : 1wwrite Cgqidi_4(sysds18b20_1)
Elseif Cgqidi_ = 5 Then : 1wwrite Cgqidi_5(sysds18b20_1)
End If
Next
1wwrite &HBE
For SysDS18B20_1 = 1 To 9
Readdata(sysDS18B20_1) = 1wread()
Next
Temperature = Readdata(2) * 256
Temperature = Temperature + Readdata(1)
If Readdata(2) > 15 Then
Temperature = Not Temperature
Temperature = Temperature + 1
WENDU = Temperature * 0.0625
WENDU = 0 - WENDU
Else
WENDU = Temperature * 0.0625
End If
XIANZAI__WENDU(CGQidI_) = WENDU
Else
XIANZAI__WENDU(CGQidI_) = -255 '如果傳感器不存在則設置為-255度
End If
Next
End Sub
'查找傳感器,總線上必須掛有至少一個傳感器
Sub FAXIAN_CGQs()
Dim SysDS18B20_4 As Byte
Dim FAXIAN_CGQ As Byte
Locate 1 , 1
Lcd "FAXIAN_ CGQ"
FAXIAN_CGQ = 0
CGQidI_1(1) = 1wsearchfirst()'開始尋找第一個傳感器
CGQ_ZHUANGTAI(1) = 1
Incr FAXIAN_CGQ
For Sysds18b20_4 = 2 To 5
If SysDS18B20_4 = 2 Then CGQidI_2(1) = 1wsearchnext()
If SysDS18B20_4 = 3 Then CGQidI_3(1) = 1wsearchnext()
If Sysds18b20_4 = 4 Then Cgqidi_4(1) = 1wsearchnext()
If Sysds18b20_4 = 5 Then Cgqidi_5(1) = 1wsearchnext()
'尋找下一個傳感器
If Err = 1 Then Exit For '錯誤代碼為1則退出循環
CGQ_ZHUANGTAI(sysDS18B20_4) = 1
Incr FAXIAN_CGQ
Waitms 1000
Next
Cls
Waitms 500
Locate 1 , 1
Lcd "FAXIAN_ " ; FAXIAN_CGQ ; " CGQs"
Waitms 1000
End Sub
|