написал исходник для счета имп. с выводом на семисегментный индик. В качестве импульсов стоит валкодер через + питания. При вращение валкодера мигает индикатор. Как сделать так чтобы не моргал пока имп. идут. числа меняются, но через раз. У меня будет как-бы два куска программы одна отвечает за кнопки, вторая будет счетчиком которая отображает имп. на индикатор.
об этом позже, сначала хотел бы разобраться с миганием и чтобы имп. нормально считал, а не через раз. Помогите пожалуйста с кодом, как решить проблему?
Прошивку сразу опробываю на макетной плате которая специально для этого собрал.
'семисегментный индикатор макет mega8535
$regfile = "m8535.dat"
$crystal = 6000000
$hwstack = 40
$swstack = 16
$framesize = 32
$sim
Dim W As Word 'для переменн. выдел. 2 байта
Dim N1 As Byte
Dim N2 As Byte
Dim N3 As Byte
Dim M1 As Long
Dim M2 As Long
Dim M3 As Long
Config Portb = Output 'выходы на сегменты
Config Porta = Output 'выходы на светодиоды
Ddrd = &B11111011 'выходы кроме 2-го бита(он вход имп.)
Ddrc = &B00000001 'портС входы кроме 0-го бита
Portc = &B11111110 'подтяжка входов резис-ми
Sw_reset Alias Pinc.7 'кнопка "обнулить счетчик"
Puls Alias Pind.2 ' вход для импульсов
Dig1 Alias Porta.0 ' 1-й разряд индикатора
Dig2 Alias Porta.1 ' 2-й разряд индикатора
Dig3 Alias Porta.2 ' 3-й разряд индикатора
Do
Dig1 = 0 : Dig2 = 1 : Dig3 = 1
'Porta = &B00000011
Select Case N1
Case 0 : Portb = &B01010000
Case 1 : Portb = &B01111011
Case 2 : Portb = &B00110100
Case 3 : Portb = &B00110010
Case 4 : Portb = &B00011011
Case 5 : Portb = &B10010010
Case 6 : Portb = &B10010000
Case 7 : Portb = &B01111010
Case 8 : Portb = &B00010000
Case 9 : Portb = &B00010010
End Select
Waitms 5
Dig2 = 0 : Dig1 = 1 : Dig3 = 1
'Porta = &B00000101
Select Case N2
Case 0 : Portb = &B01010000
Case 1 : Portb = &B01111011
Case 2 : Portb = &B00110100
Case 3 : Portb = &B00110010
Case 4 : Portb = &B00011011
Case 5 : Portb = &B10010010
Case 6 : Portb = &B10010000
Case 7 : Portb = &B01111010
Case 8 : Portb = &B00010000
Case 9 : Portb = &B00010010
End Select
Waitms 5
Dig3 = 0 : Dig2 = 1 : Dig1 = 1
'Porta = &B00000110
Select Case N3
Case 0 : Portb = &B01010000
Case 1 : Portb = &B01111011
Case 2 : Portb = &B00110100
Case 3 : Portb = &B00110010
Case 4 : Portb = &B00011011
Case 5 : Portb = &B10010010
Case 6 : Portb = &B10010000
Case 7 : Portb = &B01111010
Case 8 : Portb = &B00010000
Case 9 : Portb = &B00010010
End Select
Waitms 5
M1 = W
M2 = M1
M3 = M1
M1 = M1 Mod 1000 '
M1 = M1 / 100
N1 = Abs(m1)
M2 = M2 Mod 100 '
M2 = M2 / 10
N2 = Abs(m2)
M3 = M3 Mod 10 '
N3 = Abs(m3)
Debounce Sw_reset , 0 , Resets , Sub
Debounce Puls , 1 , Impulse , Sub
Loop
End
Resets:
If Sw_reset = 0 Then 'кн. сброс нажата?
Waitms 30
W = 0 'выводим на индикатор 000
End If
Impulse:
If Puls = 1 Then
Wend
Incr W
Waitms 20
End If
Return
End