$regfile = "m168def.dat" $crystal = 8000000 $hwstack = 40 $swstack = 32 $framesize = 32 Config Portb.0 = Output Config Portd.6 = Output Config Portd.2 = Output Config Portd.5 = Output Config Portd.0 = Output 'подключение датчика к PortD.7 Dht_put Alias Portd.7 Dht_get Alias Pind.7 Dht_io_set Alias Ddrd.7 '******* Настройка дисплея ******* Config Sda = Portc.4 'конфигурация портов I2c Config Scl = Portc.5 'Config I2cdelay = 10 'тактовая частота I2c=100 КГц '**************************** Res Alias Portc.3 ' reset дисплея Led Alias Portd.5 Set Portb.0 Reset Portd.6 'объявление подпрограммы Declare Sub Get_th(tp As Byte , Hl As Byte) Config Serialin = Buffered , Size = 128 Config Serialout = Buffered , Size = 128 '***** Адреса Дисплея ***** Const Address = &B01111000 'адрес Индикатора Const Control = &B10000000 Const Osn = &B00000001 Const Addressread = &B01000000 Const Y1 = &B01000000 Const Y2 = &B01000001 Const Y3 = &B01000010 Const Y4 = &B01000100 Const X0 = &B10000000 '***** Переменные ***** Dim Ii As Word Dim Byte0 As Byte Dim Byte1 As Byte Dim Hb As Byte Dim Peremennaya As Integer Dim Tp As Byte 'перееменная для хранения температуры Dim Hl As Byte 'переменная для хранения влажности Dim Crc As Byte 'переменная для хранения байта четности Dim Mybyte As Byte Dim Sensor_data As String * 40 'сюда будут записываться данные отсылаемые датчиком Dim Tmp_str8 As String * 8 Dim Count As Byte 'переменная для подсчета принятых бит '***************************************** Dim Column As Byte Dim Stroka As Byte Dim Simvolov As Byte Dim Data_string As String * 20 Dim Character As String * 1 Enable Interrupts Set Dht_io_set Set Dht_put '***** Настройка дисплея ***** Reset Res Waitms 100 Set Res Waitms 100 I2cstart I2cwbyte Address I2cwbyte Control I2cwbyte Osn I2cwbyte Control I2cwbyte &B00100000 ' ram v=0 I2cwbyte Control I2cwbyte &B00001001 'display setting command page I2cwbyte Control I2cwbyte &B00001100 'normal mode I2cwbyte Control I2cwbyte &B00000101 'multiplex rate 1/34 I2cwbyte Control 'I2cwbyte &B00010100 'bias 'I2cwbyte Control I2cwbyte Osn 'osnovnaya I2cwbyte Control I2cwbyte &B00001010 'Instruction set I2cwbyte Control I2cwbyte &B00001000 'Hv config I2cwbyte Control I2cwbyte &B0000111 'Hv program control I2cwbyte Control I2cwbyte &B00100010 ' temperaturni kof I2cwbyte Control I2cwbyte &B00000111 'select high Vlcd/voltage multipleer I2cwbyte Control I2cwbyte &B1000000 'Vlcd set I2cwbyte Control I2cstop '************************ ' На начало '************************ I2cstart I2cwbyte Address I2cwbyte Control I2cwbyte Osn I2cwbyte Control I2cwbyte Y1 I2cwbyte Control I2cwbyte X0 I2cstop '************************ ' Очистка '************************ I2cstart I2cwbyte Address I2cwbyte Addressread For Ii = 1 To 640 I2cwbyte &H00 Next I2cstop '************************ ' На начало '************************ I2cstart I2cwbyte Address I2cwbyte Control I2cwbyte Osn I2cwbyte Control I2cwbyte Y1 I2cwbyte Control I2cwbyte X0 I2cstop '************************ Do Call Get_th(tp , Hl) '************************ ' На начало '************************ I2cstart I2cwbyte Address I2cwbyte Control I2cwbyte Osn I2cwbyte Control I2cwbyte Y1 I2cwbyte Control I2cwbyte X0 I2cstop '************************ Data_string = "Температура " Gosub Indickacia Data_string = Str(tp) Gosub Indickacia Data_string = "°C" Gosub Indickacia '****** На начало 2 строки ******* I2cstart I2cwbyte Address I2cwbyte Control I2cwbyte Osn I2cwbyte Control I2cwbyte Y2 I2cwbyte Control I2cwbyte X0 I2cstop '*************** Data_string = "Влажность " Gosub Indickacia Data_string = Str(hl) Gosub Indickacia Data_string = " %" Gosub Indickacia Waitms 1500 Loop Sub Get_th(tp As Byte , Hl As Byte) Count = 0 Sensor_data = "" Set Dht_io_set 'делаем PD.6 выходом Reset Dht_put 'прижимаем шину к земле Waitms 25 'ждем не менее 18мс Set Dht_put 'отпускаем шину Waitus 40 Reset Dht_io_set 'делаем PD.6 входом Waitus 40 'ждем 40 мкс If Dht_get = 1 Then 'если на нем по прежнему 1 Hb = 1 'значит датчик не ответил Exit Sub 'выходим из подпрограммы End If 'если датчик ответил и прижал шину к земле продолжаем работу Waitus 80 'ждем еще 80 мкс If Dht_get = 0 Then 'если на линии по прежнему 0 Hb = 2 'значит датчик сошел с ума Exit Sub 'выходим из подпрограммы End If 'если все нормально и датчик ответил правильно, тогда продолжаем While Dht_get = 1 : Wend 'ждем пока на шине появится 1 Do 'начинаем принимать 40 бит данных While Dht_get = 0 : Wend 'ждем появления на шине 0 Waitus 30 'после появления 0 ждем 30мкс If Dht_get = 1 Then 'если на шине 1 Sensor_data = Sensor_data + "1" 'записываем в переменную эту единицу While Dht_get = 1 : Wend 'и ждем пока датчик отправит следующий бит Else 'иначе, если там был 0 Sensor_data = Sensor_data + "0" 'записываем этот 0 в переменную End If Incr Count 'увеличиваем счетчик на 1 Loop Until Count = 40 'повторяем пока счетчик не досчитает до 40 Set Dht_io_set Set Dht_put 'начинаем раскладывать полученные данные Tmp_str8 = Left(sensor_data , 8) 'берем левые 8 символов переменной Hl = Binval(tmp_str8) 'это целая часть влажности Tmp_str8 = Mid(sensor_data , 17 , 8) 'вытаскиваем 8 символов из середины Tp = Binval(tmp_str8) 'это целая часть температуры Tmp_str8 = Right(sensor_data , 8) 'правые 8 символов Crc = Binval(tmp_str8) 'проверочные данные 'проверка контрольной суммы Mybyte = Tp + Hl 'складываем значение температуры и влажности If Mybyte <> Crc Then 'если контрольная сумма не сошлась Hb = 3 'значит полученные данные не верны End If End Sub 'возвращаемся в главный цикл программы '************************ Indickacia: I2cstart I2cwbyte Address I2cwbyte Addressread Simvolov = Len(data_string) Stroka = 1 While Stroka <= Simvolov Character = Mid(data_string , Stroka , 1) Select Case Character 'Position the pointer to the correct character in the Eeprom and read the first byte Case "0" : Restore Zero Case "1" : Restore One Case "2" : Restore Two Case "3" : Restore Three Case "4" : Restore Four Case "5" : Restore Five Case "6" : Restore Six Case "7" : Restore Seven Case "8" : Restore Eight Case "9" : Restore Nine Case "A" : Restore A Case "B" : Restore B Case "C" : Restore C Case "D" : Restore D Case "E" : Restore E Case "F" : Restore F Case "G" : Restore G Case "H" : Restore H Case "I" : Restore I Case "J" : Restore J Case "K" : Restore K Case "L" : Restore L Case "M" : Restore M Case "N" : Restore N Case "O" : Restore O Case "P" : Restore P Case "Q" : Restore Q Case "R" : Restore R Case "S" : Restore S Case "T" : Restore T Case "U" : Restore U Case "V" : Restore V Case "W" : Restore W Case "X" : Restore X Case "Y" : Restore Y Case "Z" : Restore Z Case "a" : Restore A1 Case "b" : Restore B1 Case "c" : Restore C1 Case "d" : Restore D1 Case "e" : Restore E1 Case "f" : Restore F1 Case "g" : Restore G1 Case "h" : Restore H1 Case "i" : Restore I1 Case "j" : Restore J1 Case "k" : Restore K1 Case "l" : Restore L1 Case "m" : Restore M1 Case "n" : Restore N1 Case "o" : Restore O1 Case "p" : Restore P1 Case "q" : Restore Q1 Case "r" : Restore R1 Case "s" : Restore S1 Case "t" : Restore T1 Case "u" : Restore U1 Case "v" : Restore V1 Case "w" : Restore W1 Case "x" : Restore X1 Case "y" : Restore Ysmal Case "z" : Restore Z1 Case "А" : Restore A Case "а" : Restore A1 Case "Б" : Restore Be Case "б" : Restore Be1 Case "В" : Restore Ve Case "в" : Restore Ve1 Case "Г" : Restore Ge Case "г" : Restore Ge1 Case "Д" : Restore De Case "д" : Restore De1 Case "Е" : Restore E Case "е" : Restore E1 Case "Ё" : Restore Jo Case "ё" : Restore Jo1 Case "Ж" : Restore Je Case "ж" : Restore Je1 Case "З" : Restore Ze Case "з" : Restore Ze1 Case "И" : Restore Ji Case "и" : Restore Ji1 Case "Й" : Restore Ij Case "й" : Restore Ij1 Case "К" : Restore K Case "к" : Restore Ka Case "Л" : Restore Le Case "л" : Restore Le1 Case "М" : Restore M Case "м" : Restore Me Case "Н" : Restore H Case "н" : Restore Ne Case "О" : Restore O Case "о" : Restore O1 Case "П" : Restore Pee Case "п" : Restore Pe1 Case "Р" : Restore P Case "р" : Restore P1 Case "С" : Restore C Case "с" : Restore C1 Case "Т" : Restore T Case "т" : Restore Te Case "У" : Restore Yu Case "у" : Restore Ysmal Case "Х" : Restore X Case "х" : Restore X1 Case "Ч" : Restore Che Case "ч" : Restore Che1 Case "Ц" : Restore Ce Case "ц" : Restore Ce1 Case "Ф" : Restore Fee Case "ф" : Restore Fe1 Case "Ш" : Restore She Case "ш" : Restore She1 Case "Щ" : Restore Sche Case "щ" : Restore Sche1 Case "Ь" : Restore B1 Case "ь" : Restore Myag Case "Ъ" : Restore Tverd Case "ъ" : Restore Tverd1 Case "Ы" : Restore Bi Case "ы" : Restore Bi1 Case "Э" : Restore Ye Case "э" : Restore Ye1 Case "Ю" : Restore Ju Case "ю" : Restore Ju1 Case "Я" : Restore Ya Case "я" : Restore Ya1 '************************************* Case " " : Restore Spacesign Case "-" : Restore Dash Case "." : Restore Dot Case ":" : Restore Colon Case ">" : Restore Arrowright Case "°" : Restore Degree Case "@" : Restore Alpha Case "&" : Restore Ampersand Case "'" : Restore Apostrophe Case "<" : Restore Arrowleft Case "*" : Restore Asterisc Case "," : Restore Comma Case "$" : Restore Dollar Case "=" : Restore Equals Case "!" : Restore Exclamation Case "Ѕ" : Restore Grid Case "#" : Restore Hash Case "(" : Restore Leftparagraph Case "[" : Restore Leftsquareparagraph Case "%" : Restore Percent Case "+" : Restore Plus Case "^" : Restore Powerof Case "?" : Restore Question 'Case D3310quotation : Restore Quotation Case "]" : Restore Rightparagraph Case ")" : Restore Rightsquareparagraph Case ";" : Restore Semicolon Case "/" : Restore Slash Case "\" : Restore Backslash Case "_" : Restore Underscore End Select For Ii = 1 To 5 Read Column I2cwbyte Column Next I2cwbyte &H00 Incr Stroka Wend I2cstop Return End 'end program '=============================================================================== 'ASCII data 'набор кирилицы 'Б Be: Data &H7F , &H49 , &H49 , &H49 , &H31 Be1: Data &H7C , &H4A , &H4A , &H49 , &H31 'В Ve: Data &H7F , &H49 , &H49 , &H49 , &H36 Ve1: Data &H7C , &H54 , &H54 , &H28 , &H00 'Г Ge: Data &H7F , &H01 , &H01 , &H01 , &H03 Ge1: Data &H7C , &H04 , &H04 , &H04 , &H0C 'Д De: Data &HE0 , &H51 , &H4F , &H41 , &HFF De1: Data &HE0 , &H54 , &H4C , &H44 , &HFC 'Ё Jo: Data &H7C , &H55 , &H54 , &H55 , &H44 Jo1: Data &H38 , &H55 , &H54 , &H55 , &H18 'Ж Je: Data &H77 , &H08 , &H7F , &H08 , &H77 Je1: Data &H6C , &H10 , &H7C , &H10 , &H6C 'З Ze: Data &H41 , &H49 , &H49 , &H49 , &H36 Ze1: Data &H44 , &H54 , &H54 , &H54 , &H28 'И Ji: Data &H7F , &H10 , &H08 , &H04 , &H7F Ji1: Data &H7C , &H20 , &H10 , &H08 , &H7C 'Й Ij: Data &H7C , &H21 , &H12 , &H09 , &H7C Ij1: Data &H78 , &H42 , &H24 , &H12 , &H78 'К Ka: Data &H7C , &H10 , &H28 , &H44 , &H00 'Л Le: Data &H20 , &H41 , &H3F , &H01 , &H7F Le1: Data &H20 , &H44 , &H3C , &H04 , &H7C 'М Me: Data &H7C , &H08 , &H10 , &H08 , &H7C 'Н Ne: Data &H7C , &H10 , &H10 , &H10 , &H7C 'П Pee: Data &H7F , &H01 , &H01 , &H01 , &H7F Pe1: Data &H7C , &H04 , &H04 , &H04 , &H7C 'T Te: Data &H04 , &H04 , &H7C , &H04 , &H04 'У Yu: Data &H47 , &H28 , &H10 , &H08 , &H07 'Ч Che: Data &H07 , &H08 , &H08 , &H08 , &H7F Che1: Data &H0C , &H10 , &H10 , &H10 , &H7C 'Ф Fee: Data &H0C , &H12 , &H7F , &H12 , &H0C Fe1: Data &H18 , &H24 , &H7E , &H24 , &H18 'Ц Ce: Data &H7F , &H40 , &H40 , &H40 , &HFF Ce1: Data &H7C , &H40 , &H40 , &H40 , &HFC 'Ш She: Data &H7F , &H40 , &H7F , &H40 , &H7F She1: Data &H7C , &H40 , &H78 , &H40 , &H7C 'Щ Sche: Data &H7F , &H40 , &H7F , &H40 , &HFF Sche1: Data &H7C , &H40 , &H78 , &H40 , &HFC 'Ь Myag: Data &H7C , &H50 , &H50 , &H20 , &H00 'Ъ Tverd: Data &H01 , &H7F , &H48 , &H48 , &H30 Tverd1: Data &H04 , &H7C , &H50 , &H50 , &H20 'Ы Bi: Data &H7F , &H48 , &H30 , &H00 , &H7F Bi1: Data &H7C , &H50 , &H20 , &H00 , &H7C 'Э Ye: Data &H22 , &H41 , &H49 , &H49 , &H3E Ye1: Data &H28 , &H44 , &H54 , &H54 , &H38 'Ю Ju: Data &H7F , &H08 , &H3E , &H41 , &H3E Ju1: Data &H7C , &H10 , &H38 , &H44 , &H38 'Я Ya: Data &H46 , &H29 , &H19 , &H09 , &H7F Ya1: Data &H08 , &H54 , &H34 , &H14 , &H7C 'Digits Zero: Data &H3E , &H51 , &H49 , &H45 , &H3E One: Data &H00 , &H42 , &H7F , &H40 , &H00 Two: Data &H42 , &H61 , &H51 , &H49 , &H46 Three: Data &H22 , &H41 , &H49 , &H49 , &H36 Four: Data &H18 , &H14 , &H12 , &H7F , &H10 Five: Data &H27 , &H45 , &H45 , &H45 , &H39 Six: Data &H3E , &H49 , &H49 , &H49 , &H32 Seven: Data &H61 , &H11 , &H09 , &H05 , &H03 Eight: Data &H36 , &H49 , &H49 , &H49 , &H36 Nine: Data &H26 , &H49 , &H49 , &H49 , &H3E 'Upper-case A: Data &H7E , &H09 , &H09 , &H09 , &H7E B: Data &H7F , &H49 , &H49 , &H49 , &H36 C: Data &H3E , &H41 , &H41 , &H41 , &H22 D: Data &H7F , &H41 , &H41 , &H41 , &H3E E: Data &H7F , &H49 , &H49 , &H49 , &H41 F: Data &H7F , &H09 , &H09 , &H09 , &H01 G: Data &H3E , &H41 , &H49 , &H49 , &H3A H: Data &H7F , &H08 , &H08 , &H08 , &H7F I: Data &H00 , &H41 , &H7F , &H41 , &H00 J: Data &H20 , &H41 , &H41 , &H41 , &H3F K: Data &H7F , &H08 , &H14 , &H22 , &H41 L: Data &H7F , &H40 , &H40 , &H40 , &H40 M: Data &H7F , &H02 , &H04 , &H02 , &H7F N: Data &H7F , &H04 , &H08 , &H10 , &H7F O: Data &H3E , &H41 , &H41 , &H41 , &H3E P: Data &H7F , &H09 , &H09 , &H09 , &H06 Q: Data &H3E , &H41 , &H51 , &H61 , &H7E R: Data &H7F , &H09 , &H19 , &H29 , &H46 S: Data &H06 , &H49 , &H49 , &H49 , &H30 T: Data &H01 , &H01 , &H7F , &H01 , &H01 U: Data &H3F , &H40 , &H40 , &H40 , &H3F V: Data &H1F , &H20 , &H40 , &H20 , &H1F W: Data &H7F , &H20 , &H10 , &H20 , &H7F X: Data &H63 , &H14 , &H08 , &H14 , &H63 Y: Data &H03 , &H04 , &H78 , &H04 , &H03 Z: Data &H61 , &H51 , &H49 , &H45 , &H43 'Lower-case A1: Data &H20 , &H54 , &H54 , &H54 , &H78 B1: Data &H7F , &H48 , &H44 , &H44 , &H38 C1: Data &H38 , &H44 , &H44 , &H44 , &H28 D1: Data &H38 , &H44 , &H44 , &H48 , &H7F E1: Data &H38 , &H54 , &H54 , &H54 , &H18 F1: Data &H00 , &H04 , &H7E , &H05 , &H00 G1: Data &H0C , &H52 , &H52 , &H4A , &H3C H1: Data &H7F , &H08 , &H04 , &H04 , &H78 I1: Data &H00 , &H44 , &H7D , &H40 , &H00 J1: Data &H00 , &H40 , &H44 , &H3D , &H00 K1: Data &H7F , &H20 , &H10 , &H28 , &H44 L1: Data &H00 , &H41 , &H7F , &H40 , &H00 M1: Data &H7C , &H04 , &H18 , &H04 , &H7C N1: Data &H7C , &H08 , &H04 , &H04 , &H78 O1: Data &H38 , &H44 , &H44 , &H44 , &H38 P1: Data &H7C , &H14 , &H24 , &H24 , &H18 Q1: Data &H18 , &H24 , &H24 , &H14 , &H7C R1: Data &H7C , &H04 , &H04 , &H08 , &H00 S1: Data &H08 , &H54 , &H54 , &H54 , &H20 T1: Data &H04 , &H3F , &H44 , &H40 , &H00 U1: Data &H3C , &H40 , &H40 , &H40 , &H7C V1: Data &H1C , &H20 , &H40 , &H20 , &H1C W1: Data &H3C , &H40 , &H30 , &H40 , &H3C X1: Data &H44 , &H28 , &H10 , &H28 , &H44 Ysmal: Data &H0C , &H50 , &H50 , &H48 , &H3C Z1: Data &H44 , &H64 , &H54 , &H4C , &H44 'Special characters Spacesign: Data &H00 , &H00 , &H00 , &H00 , &H00 Dot: Data &H00 , &H60 , &H60 , &H00 , &H00 Dash: Data &H08 , &H08 , &H08 , &H08 , &H08 Colon: Data &H00 , &H36 , &H36 , &H00 , &H00 Degree: Data &H00 , &H07 , &H05 , &H07 , &H00 Leftsquareparagraph: Data &H00 , &H7F , &H41 , &H41 , &H00 Rightsquareparagraph: Data &H00 , &H41 , &H22 , &H1C , &H00 'Data &H00 , &H41 , &H41 , &H7F , &H00 Grid: Data &H55 , &H2A , &H55 , &H2A , &H55 Powerof: Data &H04 , &H02 , &H01 , &H02 , &H04 Underscore: Data &H40 , &H40 , &H40 , &H40 , &H40 Semicolon: Data &H00 , &H56 , &H36 , &H00 , &H00 Arrowleft: Data &H08 , &H1C , &H36 , &H63 , &H41 Arrowright: Data &H41 , &H63 , &H36 , &H1C , &H08 Equals: Data &H14 , &H14 , &H14 , &H14 , &H14 Question: Data &H02 , &H01 , &H51 , &H09 , &H06 Alpha: Data &H32 , &H49 , &H59 , &H51 , &H3E Exclamation: Data &H00 , &H00 , &H5F , &H00 , &H00 Quotation: Data &H00 , &H07 , &H00 , &H07 , &H00 Hash: Data &H14 , &H7F , &H14 , &H7F , &H14 Dollar: Data &H24 , &H2A , &H7F , &H2A , &H12 Percent: Data &H23 , &H13 , &H08 , &H64 , &H62 Ampersand: Data &H36 , &H49 , &H55 , &H22 , &H50 Apostrophe: Data &H00 , &H05 , &H03 , &H00 , &H00 Leftparagraph: Data &H00 , &H1C , &H22 , &H41 , &H00 Rightparagraph: Data &H00 , &H41 , &H41 , &H7F , &H00 'Data &H00 , &H41 , &H22 , &H1C , &H00 Asterisc: Data &H14 , &H08 , &H3E , &H08 , &H14 Plus: Data &H08 , &H08 , &H3E , &H08 , &H08 Comma: Data &H00 , &H00 , &H50 , &H30 , &H00 Slash: Data &H20 , &H10 , &H08 , &H04 , &H02 Backslash: Data &H02 , &H04 , &H08 , &H10 , &H20