TRISA = %00000001 TRISB = %00000000 TRISC = %00000000 ADCON0 = %00000000 ADCON1 = %00000111 T VAR WORD ' n Var Byte ' переменная значения зажигаемого разряда i Var Byte ' переменная равная количеству разрядов индикатора b var byte c var BYTE temperature VAR WORD ' Температура temp_tmp var byte temperature_2 VAR WORD count_remain VAR BYTE ' Остаток счета count_per_c VAR BYTE ' Счет C float1 var byte DQ VAR PortA.0 ' One-wire Data-Pin "DQ" on PortC.0 Segments Var PORTB ' вывод сегментов на PORTB Digits Var PORTC ' вывод анодов цифр на PORTC DP VAR PORTB.7 Cold_Bit VAR temperature.Bit11 Busy VAR BIT ' Busy Status-Bit Deg Var Word ' Conversion to centigrade Word PORTB = $00 PORTC = $00 OWOut DQ, 1, [$CC, $44] ' Старт измерения температуры 1 Wait_Up: OWIN DQ, 4, [Busy] ' Read busy-bit IF Busy = 0 THEN GOTO Wait_Up ' Still busy..?, Wait_Up..! Start_Convert: OWOut DQ, 1, [$CC, $44] ' Старт измерения температуры 1 OWOut DQ, 1, [$CC, $BE] ' Прочитать температуру '1 OWIn DQ, 0, [temperature.LOWBYTE, temperature.HIGHBYTE] ; IF Cold_Bit = 1 THEN GOTO minus_temp ; temperature = ((temperature * 10)>>4) gosub convert IF temperature > 99 THEN GOTO TEMP_10 FOR c = 1 TO 100 For i = 0 To 1 ' счетчик разрядов n = temperature Dig i ' выделить число для индикации Segments = %11111111 ' погасить индикаторы IF I = 0 THEN PORTC = %00001000 IF I = 1 THEN PORTC = %00010000 Lookup n, [%11000000, %11111001, %10100100, %10110000, %10011001, %10010010, %10000010, %11111000, %10000000, %10010000], Segments IF i = 1 THEN DP = 0 PAUSEUS 2000 Next i NEXT c GOTO Start_Convert TEMP_10: FOR c = 1 TO 100 For i = 0 To 2 ' счетчик разрядов n = temperature Dig i ' выделить число для индикации Segments = %11111111 ' погасить индикаторы IF I = 0 THEN PORTC = %00001000 IF I = 1 THEN PORTC = %00010000 IF I = 2 THEN PORTC = %00100000 Lookup n, [%11000000, %11111001, %10100100, %10110000, %10011001, %10010010, %10000010, %11111000, %10000000, %10010000], Segments IF i = 1 THEN DP = 0 PAUSEUS 2000 Next i ' продолжить вычислять разряд NEXT c GOTO Start_Convert Convert: If Cold_Bit = 1 Then temperature = ~temperature + 1 temp_tmp = temperature.LowByte & $F LookUp temp_tmp, [0,1,1,2,2,3,4,4,5,6,6,7,7,8,9,9], float1 temperature = temperature >> 4 temperature = temperature * 10 + float1 Return 'Test_Display: 'for B = 1 to 2 'Segments = %11011111 'GOSUB Dis 'Segments = %11111110 'GOSUB Dis 'Segments = %11111101 'GOSUB Dis 'Segments = %10111111 'GOSUB Dis 'Segments = %11101111 'GOSUB Dis 'Segments = %11110111 'GOSUB Dis 'Segments = %11111011 'GOSUB Dis 'Segments = %10111111 'GOSUB Dis 'NExt B 'Segments = %11011111 'GOSUB Dis 'Segments = %10000000 'GOSUB Dis 'PORTC = %00000000 'PAUSE 300 'RETURN 'Dis: ' FOR i = 0 to 255 ' PORTC = %00100000 ' PAUSEUS 30 ' PORTC = %00010000 ' PAUSEUS 30 ' PORTC = %00001000 ' PAUSEUS 30 ' PORTC = %00000100 ' PAUSEUS 30 ' PORTC = %00000010 ' PAUSEUS 30 ' PORTC = %00000001 ' PAUSEUS 30 ' NEXT i 'RETURN end