Уважаемые спецы! Помогите разобраться со следующей проблемой. Хочу сделать динамическую посегментную индикацию, но затык в том, что все цифры выводятся нормально, а девятка всегда с точкой. Даже если я в массиве делаю так, чтоб разряд полностью потух (вместо отображения 9), то семь сегментов тухнут, а децимальная точка все равно горит. Кусок кода, отвечающий за индикацию ниже. Принцип следующий - для текущего сегмента проверяется, горит ли он в соответствующем разряде, или нет. Если горит, то разряд зажигается. Может это и не эффективно, т.к. сегментов 8, а разрядов всего 4 - можно было бы применить классическую динамическую индикацию, но хочется упростить печатку за счет транзисторов в разрядах и резисторов в сегментах, оставить только 4 резистора в разрядах.
Код: Выделить всё
Indikaciya:
High_ind = Min_work
Low_ind = Sec_work
If Decode_high = 1 Then
Cyfra(2) = High_ind Mod 10 'младший разряд минут(12 mod 10 = 2)
Cyfra(1) = High_ind / 10 'старший разряд минут(12 / 10 = 1)
End If
If Decode_low = 1 Then
Cyfra(4) = Low_ind Mod 10
Cyfra(3) = Low_ind / 10
End If
If Point_on = 1 Then Cyfra(2) = Cyfra(2) + 10 'зажигаем точку, если надо
If Common_cathode = 1 Then 'тушим индикаторы
Razryad_1 = 1
Razryad_2 = 1
Razryad_3 = 1
Razryad_4 = 1
Portd = 0
Else
Razryad_1 = 0
Razryad_2 = 0
Razryad_3 = 0
Razryad_4 = 0
Portd = 1
End If
For I = 1 To 4
Cyfra_work = Cyfra(i)
Razryad_work = Cyfra_work * 8 'выбор строки в таблице
Razryad_work = Segment + Razryad_work 'выбор столбца
Razryad_work = Lookup(razryad_work , Cifri) 'забираем данные
If Common_cathode = 1 Then Razryad_work = Not Razryad_work 'инверсия в случае общего катода
Razryad(i) = Razryad_work 'сохраняем результат
Next I
Portd = Segment_out 'зажигаем нужный сегмент
Rotate Segment_out , Right 'проворачиваем дальше для поджига следующего
Razryad_1 = Razryad(1) 'зажигаем разряды
Razryad_2 = Razryad(2)
Razryad_3 = Razryad(3)
Razryad_4 = Razryad(4)
Incr Segment
If Segment > 8 Then Segment = 1
Return
End 'end program
Cifri:
' h g f e d c b a | символ|
Data 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 '"0"
Data 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 '"1"
Data 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 '"2"
Data 0 , 1 , 0 , 0 , 1 , 1 , 1 , 1 '"3"
Data 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 '"4"
Data 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 '"5"
Data 0 , 1 , 1 , 1 , 1 , 1 , 0 , 1 '"6"
Data 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 '"7"
Data 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 '"8"
Data 0 , 1 , 1 , 0 , 1 , 1 , 1 , 1 '"9"
Проблема в строке
Razryad_work = Lookup(razryad_work , Cifri) - если в разряде девятка, то эта строка всегда возвращает единицу, и соответственно в разряде зажигается точка. Что тут не так?