Może wiecie jak zniszczyć to stukanie,aby wykonywanie od nowa pętli głównej programu
tego nie powodowało.Poniżej daje kod programu którego wadą są właśnie stuki
Kod: Zaznacz cały
'*******************Konfiguracja portów********************
$regfile = "m16def.dat"
$crystal = 16000000
Config Lcd = 40 * 2
Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.4 , Rs = Portd.5
Config Portb = Output 'szyna danych do pokeya
Config Portc = Output '4 młodsze bity-szyna adresowa,4 starsze-nieużywane
Config Pind.6 = Input 'nieużywany
Config Pind.7 = Input 'nieużywany
Config Pina.0 = Input 'wiersz 1 klawiatury
Config Pina.1 = Input 'wiersz 2 klawiatury
Config Pina.2 = Input 'wiersz 3 klawiatury
Config Pina.3 = Input 'wiersz 4 klawiatury
Config Pina.4 = Output 'kolumna 1 klawiatury
Config Pina.5 = Output 'kolumna 2 klawiatury
Config Pina.6 = Output 'kolumna 3 klawiatury
Config Pina.7 = Output 'kolumna 4 klawiatury
'*******************Przypisanie nazw wejściom portów****************************
W1 Alias Pina.0 '1 wiersz klawiatóry
W2 Alias Pina.1 '2 wiersz klawiatóry
W3 Alias Pina.2 '3 wiersz klawiatóry
W4 Alias Pina.3 '4 wiersz klawiatóry
'*******************Przypisanie nazw wyjściom portów****************************
Kol1 Alias Porta.4 '1 kolumna klawiatury
Kol2 Alias Porta.5 '2 kolumna klawiatury
Kol3 Alias Porta.6 '3 kolumna klawiatury
Kol4 Alias Porta.7 '4 kolumna klawiatury
'*******************Ustawienia stanów kolumn klawiatury*************************
Set Kol1 'stan aktywny kolumny-wysoki
Set Kol2 'stan aktywny kolumny-wysoki
Set Kol3 'stan aktywny kolumny-wysoki
Set Kol4 'stan aktywny kolumny-wysoki
'***************Dołączanie rezystorów podciągających do wyjść procesora*********
Set Porta.0 'dołączenie rezystora podciągającego
Set Porta.1 'dołączenie rezystora podciągającego
Set Porta.2 'dołączenie rezystora podciągającego
Set Porta.3 'dołączenie rezystora podciągającego
Set Portd.6 'dołączenie rezystora podciągającego
Set Portd.7 'dołączenie rezystora podciągającego
'******************Obsługa przerwania klawiatóry na timer0**********************
Config Timer0 = Timer , Prescale = 64 'Konfiguracja timer0
On Timer0 Mult_kl 'timer0 obsłóguje podprogram "mult_kl"
Enable Interrupts 'Odblokowanie przerwań
Enable Timer0
Load Timer0 , 200 'Ładowanie timera0 liczbą 200
'************************************* Zmienne *********************************
Dim A As Byte 'zmienna dla rejestru AUDC1
Dim B As Byte 'zmienna dla rejestru AUDC2
Dim C As Byte 'zmienna dla rejestru AUDC3
Dim D As Byte 'zmienna dla rejestru AUDC4
Dim E As Byte 'zmienna dla rejestru
Dim F As Byte 'zmienna dla rejestru
Dim G As Byte 'zmienna dla rejestru
Dim H As Byte 'zmienna dla rejestru
Dim I As Byte 'zmienna licznikowa dla klawiatury
Dim Adres As Byte 'zmienna licznikowa-określa wartość adresu
Dim Przycisk As Byte 'zmienna przechowująca wartość naciśniętego klawisza
Declare Sub Obsluga
'*********************Pętla główna programu*************************************
Cls
Lcd " FRa FRa FRc FRd AMa AMb AMc AMd"
Do
Call Obsluga
Gosub Wpis
Loop
End 'end program
'*************************Obsługa rejestrów********************************
Sub Obsluga 'Obsługa wartości zmiennych i ich wysyłania pod dany adres
For Adres = 1 To 8 'pętla wykonywana 8 razy(zwiększa o 1 wartość adresu pod który wyśle się dane)
If Adres = 1 Then 'jeśli adres=1 to
If Przycisk = 116 Then
Incr A
Elseif Przycisk = 164 Then
Decr A
End If
If A = 16 Then
A = 15
If A = 255 Then
A = 0
End If
End If
Portc = 0 'wysłanie pod adres 0 wartości zmiennej A)
Portb = A
Locate 2 , 1
Lcd A
End If
If Adres = 2 Then 'Rejestr AUDC2
If Przycisk = 196 Then 'jeśli adres=2 to
Incr B
Elseif Przycisk = 228 Then
Decr B
End If
If B = 255 Then
B = 254
If B = 0 Then
B = 1
End If
End If
Portc = 1 'wysłanie pod adres 1 wartości zmiennej B)
Portb = B
Locate 2 , 5
Lcd B
End If
If Adres = 3 Then
If Przycisk = 114 Then 'Rejestr
Incr C 'jeśli adres=3 to
Elseif Przycisk = 162 Then
Decr C
End If
If C = 255 Then
C = 254
If C = 0 Then
C = 1
End If
End If
Portc = 2 'wysłanie pod adres 2 wartości zmiennej C)
Portb = C
Locate 2 , 9
Lcd C
End If
If Adres = 4 Then
If Przycisk = 194 Then 'Rejestr AUDC3
Incr D 'jeśli adres=4 to
Elseif Przycisk = 226 Then
Decr D
End If
If D = 255 Then
D = 254
If D = 0 Then
D = 1
End If
End If
Portc = 3 'wysłanie pod adres 3 wartości zmiennej D)
Portb = D
Locate 2 , 13
Lcd D
End If
If Adres = 5 Then 'jeśli adres=5 to
If Przycisk = 115 Then 'rejestr
Incr E
Elseif Przycisk = 163 Then
Decr E
End If
Portc = 4
Portb = E 'wysłanie pod adres 4 wartości zmiennej E)
Locate 2 , 26
Lcd E
End If
If Adres = 6 Then
If Przycisk = 195 Then 'Rejestr
Incr F 'jeśli adres=6 to
Elseif Przycisk = 227 Then
Decr F
End If
Portc = 5 'wysłanie pod adres 5 wartości zmiennej F)
Portb = F
Locate 2 , 30
Lcd F
End If
If Adres = 7 Then 'jeśli adres=7 to
If Przycisk = 113 Then 'Rejestr
Incr G
Elseif Przycisk = 161 Then
Decr G
End If
Portc = 6 'wysłanie pod adres 6 wartości zmiennej G)
Portb = G
Locate 2 , 34
Lcd G
End If
If Adres = 8 Then 'jeśli adres=8 to
If Przycisk = 193 Then 'Rejestr
Incr H
Elseif Przycisk = 225 Then
Decr H
End If
Portc = 7
Portb = H 'wysłanie pod adres 7 wartości zmiennej H)
Locate 2 , 37
Lcd H
End If
Next Adres
End Sub
'*********************Wysyłanie pod adres 1000 konfigurującego bajtu danych*****
Wpis:
Portc = &B00001000 'wysłanie pod adres 8 wartości 0)
Portb = &B00000000
Return
'**********************Obsługa klawiatury**********************************************
Mult_kl:
Load Timer0 , 200
Przycisk = 0
For I = 1 To 4
Select Case I
Case 1:
Set Kol4
Reset Kol1
Case 2:
Set Kol1
Reset Kol2
Case 3:
Set Kol2
Reset Kol3
Case 4:
Set Kol3
Reset Kol4
End Select
If W1 = 0 Then
Przycisk = 1
Exit For
Elseif W2 = 0 Then
Przycisk = 2
Exit For
Elseif W3 = 0 Then
Przycisk = 3
Exit For
Elseif W4 = 0 Then
Przycisk = 4
Exit For
End If
Next I
If Przycisk <> 0 Then
I = Pina And &B11110000
Przycisk = I + Przycisk
End If
Return