1:
- Код: Выделить всё • Развернуть
- $regfile = "m16def.dat"
 $crystal = 16000000
 '************************Дополнительные библиотеки******************************
 $lib "lcd4.lbx" 'используем 4-битное подключение дисплея с помощью альтернативной библиотеки
 '***********************************Порты***************************************
 Config 1wire = Portd.0 'Пин, на который повешан DS18B20
 Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7
 Config Lcd = 20 * 4 'используем дисплей на 20 символ и 4 строки
 Cursor Off 'отключаем курсор
 Cls 'очищаем экран дисплея
 '****************************Задаём перемнные***********************************
 Dim Signtemperatura As String * 1 , Celsium As String * 5 , Fahrenhei As String * 5
 Dim Byte0 As Byte , Byte1 As Byte , T As Byte
 Dim Temp As Byte , Faren As Byte
 Dim Faren0 As Single
 '***************************Назначаем процедуры*********************************
 Declare Sub Gettemp
 '*************************Основной цикл программы*******************************
 Do
 Call Gettemp 'Вызываем процедуру Gettemp
 Locate 1 , 1
 Lcd "Ёo бe»ДcёЖ******" ; Celsium 'выводим результат преобразвания Celsium
 Locate 2 , 1
 Lcd "********************"
 Locate 3 , 1
 Lcd "********************"
 Locate 4 , 1
 Lcd "Ёo ЄapeЅґe№їy***" ; Fahrenhei 'выводим результат преобразвания Fahrenhei
 Loop
 End
 Sub Gettemp 'процедура Gettemp
 1wreset
 1wwrite &HCC ' Выдаем команду чтения ПЗУ
 1wwrite &H44 ' Запуск измерения
 Waitms 750 ' Ждем окончания преобразования
 1wreset
 1wwrite &HCC
 1wwrite &HBE ' Команда чтения ОЗУ датчика
 Byte0 = 1wread() ' Читаем нулевой байт
 Byte1 = 1wread() ' Читаем первый байт
 If Byte1 >= 248 Then ' Проверяем на отрицательную температуру.248 в десятичном - 11111000 в двоичном. Если температура отрицательная - вычитаем из &HFF
 Byte0 = &HFF - Byte0
 Byte1 = &HFF - Byte1
 Signtemperatura = "-"
 Else
 Signtemperatura = "+"
 End If
 Temp = Byte0 / 16 ' Сдвигаем нулевой байт вправо на 4 бита (2*2*2*2=16)
 T = Byte1 * 16 ' Сдвигаем первый байт влево на 4 бита (2*2*2*2=16)
 Temp = Temp + T2 ' Формирмируем результам и выдаем его на индикатор. Команда LCD сама преобразует его в десятичный вид
 Faren0 = Temp * 1.8
 Faren = Faren0 + 32
 Celsium = Signtemperatura + Str(temp) + "C"
 Fahrenhei = Signtemperatura + Str(faren) + "F "
 End Sub
2:
- Код: Выделить всё • Развернуть
- $regfile = "m16def.dat"
 $crystal = 16000000
 '************************Дополнительные библиотеки******************************
 $lib "lcd4.lbx" 'используем 4-битное подключение дисплея с помощью альтернативной библиотеки
 '***********************************Порты***************************************
 Config 1wire = Portd.0 'Пин, на который повешан DS18B20
 Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7
 Config Lcd = 20 * 4 'используем дисплей на 20 символ и 4 строки
 Cursor Off 'отключаем курсор
 Cls 'очищаем экран дисплея
 '****************************Задаём перемнные***********************************
 Dim Signtemperatura As String * 1 , Celsium As String * 5
 Dim Byte0 As Byte , Byte1 As Byte , T As Byte
 Dim Dsid1(8) As Byte , Dsid2(8) As Byte
 Dim Temp As Byte , X As Byte
 Dim W As Word
 '*******************************************************************************
 W = 1wirecount()
 Dsid1(1) = 1wsearchfirst()
 Do
 Dsid2(1) = 1wsearchnext()
 Loop Until Err = 1
 '*******************************************************************************
 Do
 Gosub Convallt 'переходим на подпрограмму подачи запросов в датчик температуры
 1wverify Dsid1(1) : X = 1 : Gosub Temperature '1 ds18b20 выводим на первой(Х=1) строчке дисплея
 1wverify Dsid2(1) : X = 2 : Gosub Temperature '2 ds18b20 выводим на второй(Х=2) строчке дисплея
 Loop
 End
 '*******************************************************************************
 Convallt:
 1wreset
 1wwrite &HCC ' Выдаем команду чтения ПЗУ
 1wwrite &H44 ' Запуск измерения
 Waitms 750 ' Ждем окончания преобразования
 Return
 '*******************************************************************************
 Temperature:
 If Err = 0 Then
 1wwrite &HBE ' Команда чтения ОЗУ датчика
 Byte0 = 1wread() ' Читаем нулевой байт
 Byte1 = 1wread() ' Читаем первый байт
 If Byte1 >= 248 Then ' Проверяем на отрицательную температуру.248 в десятичном - 11111000 в двоичном. Если температура отрицательная - вычитаем из &HFF
 Byte0 = &HFF - Byte0
 Byte1 = &HFF - Byte1
 Signtemperatura = "-"
 Else
 Signtemperatura = "+"
 End If
 Temp = Byte0 / 16 ' Сдвигаем нулевой байт вправо на 4 бита (2*2*2*2=16)
 T = Byte1 * 16 ' Сдвигаем первый байт влево на 4 бита (2*2*2*2=16)
 Temp = Temp + T ' Формирмируем результам и выдаем его на индикатор. Команда LCD сама преобразует его в десятичный вид
 Celsium = Signtemperatura + Str(temp) + "C"
 Locate X , 1 'указываем куда вывести на дисплей
 Lcd Celsium
 End If
 Return
 '*******************************************************************************


 
 
