Sprawdzenie programu. Obsługa wyswietlacza i przycisków


Witam.
Piszę program do obsługi wyświetlacza i przycisków, przyciskami chce sterować bez komend "Wait".
I chciałem zapytać czy ten program będzie poprawny bo na chwile obecną nie mam jak go sprawdzić.

$regfile = "m8def.dat"
$crystal = 8000000
'-----------------------------------------------------------
 
'--------------LCD------------------------------------------
Config Lcdbus = 4
Config Lcd = 16 * 2 : Cursor Off : Cls
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.5 , Db7 = Portc.4 , E = Portc.1 , Rs = Portc.0
'-----------------------------------------------------------
 
'--------------Timer2 Odmierzanie 1s------------------------
Config Timer2 = Timer , Prescale = 256
On Timer2 Interwal
Enable Timer2
Enable Interrupts
Timer2 = 0
'--------------Podświetlenie--------------------------------
Config Portb.5 = Output
Reset Portb.5
Led Alias Portb.5
'-----------------------------------------------------------
 
'-----------------------------------------------------------
Config Portb = &B011100 : Portb = &B011100
Sw_port Alias Pinb
'-----------------------------------------------------------
Dim Dzielnik As Word
Dim Flaga_1s As Bit
Dim Flaga_4ms As Bit
 
Dim Stan_sw As Byte
Dim Sw As Byte
Dim Licznik_sw As Byte
 
Dim Wyswietlanie As Byte
Dim Poz_ekran As Byte
Dim Wyswietlono As Bit
 
Dim Ustawienia As Byte
Dim Poz_ustaw As Byte
'Dim Ustawiono As Bit
 
Wyswietlono = 1
Wyswietlanie = 1
 
'--------------PROGRAM START--------------------------------
Do
Set Led
 
 
If Flaga_4ms = 1 Then
   Flaga_4ms = 0
 
   Gosub Przyciski
 
      If Wyswietlono = 1 Then
         Gosub Wysw_ekran
      Else
         Gosub Wysw_ustaw
      End If
End If
 
If Flaga_1s = 1 Then
   Flaga_1s = 0
 
   Gosub Obliczenia
End If
 
Loop
'-----------------------------------------------------------
 
'--------------Program Koniec-------------------------------
End
'-----------------------------------------------------------
 
'--------------Interwał 1s: dla Timer2----------------------
Interwal:
Timer2 = 131                                                'odlicza 0.004s
Set Flaga_4ms
Incr Dzielnik
   If Dzielnik = 250 Then                                   '0.004s *250=1s
      Set Flaga_1s
   End If
 
Return
'-----------------------------------------------------------
 
'--------------Obliczenia-----------------------------------
Obliczenia:
 
Return
'-----------------------------------------------------------
 
'--------------Przyciski------------------------------------
Przyciski:
Sw = Sw_port And &B011100
 
If Sw <> &B011100 And Stan_sw = Sw Then
   Incr Licznik_sw
      If Licznik_sw = 100 Then
         Licznik_sw = 0
 
         Select Case Stan_sw
'-----------------------------------------------------------
            Case &B001100:                                  'Góra plus
 
               If Wyswietlono = 1 Then
                  Wyswietlanie = Poz_ekran + 1
                     If Wyswietlanie = 6 Then Wyswietlanie = 1
               Else
                  Ustawienia = Poz_ustaw + 1
                  If Ustawienia = 10 Then Ustawienia = 1
               End If
'-----------------------------------------------------------
            Case &B011000:                                  'OK
 
            'zapisanie ustawień i wyjśćie do ekarnu 1
            'oraz gdy jest na ekranie 1 wyświetla date (ale to później)
 
'-----------------------------------------------------------
            Case &B010100:                                  'Dół minus
 
               If Wyswietlono = 1 Then
                  Wyswietlanie = Poz_ekran - 1
                     If Wyswietlanie < 1 Then Wyswietlanie = 5
               Else
                  Ustawienia = Poz_ustaw - 1
                  If Ustawienia < 1 Then Ustawienia = 9
               End If
'-----------------------------------------------------------
            Case &B000100:                                  'Plus + minus = Ustawienia
 
               If Wyswietlono = 1 Then
                  Wyswietlono = 0
                  Ustawienia = 1
               Else
                  Wyswietlono = 1
                  Wyswietlanie = 1
               End If
'-----------------------------------------------------------
            End Select
      End If
Else
   Stan_sw = Sw
   Licznik_sw = 80
End If
 
Return
'-----------------------------------------------------------
 
'--------------Ekran-----------------------------------------
Wysw_ekran:
'If Wyswietlanie <> 0 Then
   'Wyswietlono = 0
   Select Case Wyswietlanie
'--------------Ekran 1--------------------------------------
     Case 1:
       If Poz_ekran <> 1 Then
       Cls
       Locate 1 , 1
       Lcd "11 aaaaaa"
       End If
'--------------Ekran 5--------------------------------------
     Case 5:
       If Poz_ekran <> 5 Then
       Cls
       Locate 1 , 1
       Lcd "55 eeeeee"
       End If
'-----------------------------------------------------------
   End Select
   Poz_ekran = Wyswietlanie
   'Wyswietlanie = 0
   'Wyswietlono = 1
'End If
 
Return
'-----------------------------------------------------------
 
'--------------Ustawienia-----------------------------------
Wysw_ustaw:
'If Ustawienia <> 0 Then
   'Ustawiono = 0
   Select Case Ustawienia
'--------------Ustawienia 1---------------------------------
     Case 1:
       If Poz_ustaw <> 1 Then
       Cls
       Locate 1 , 1
       Lcd "atmvyo74"
       End If
'--------------Ustawienia 9---------------------------------
     Case 9:
       If Poz_ustaw <> 9 Then
       Cls
       Locate 1 , 1
       Lcd "125zvh7k"
       End If
'-----------------------------------------------------------
   End Select
   Poz_ustaw = Ustawienia
   'Ustawienia = 0
   'Ustawiono = 1
'End If
 
Return
'-----------------------------------------------------------
 
'-----------------------------------------------------------

A wszystko co znajduje się w programie powyżej jest napisane dzięki projektom umieszczonym na tej stronie.




Portret użytkownika mirley

Re: LCD

Po pierwsze wszystkie polecenia które leżą luzem poza do loop nigdy się nie wykonają... rozumiem że wstawiając komentarz na końcu zapomniałeś sobie o kilku linijkach

Używasz timera żeby zrobić porządne taktowanie na flagach ale nigdy tego nie używasz. Wstaw przyciski i LCD pod ifa z flagą 4ms z tym że do LCD musisz dodać jeszcze sprawdzanie warunku czy Wyświetlono = 1 i czy Wyswietlanie różne od zero. Jak będziesz chciał w którymkolwiek miejscu w programie wyświetlić jakiś ekran z procedury LCD to poprostu ustawisz np Wyswietlanie = 2 itp.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika ZimZia

Zapomniałem Podziękować :),

Zapomniałem Podziękować :), Dziękuje

Wczoraj wieczorem udało mi się przystosować jakiś stary projekt do obsługi przycisków i przetestować, niestety nie działało wiec trochę pozmieniałem.

Teraz chciałem się zapytać co zrobić ze jak wcisnę OK to wyświetli mi się DATA i będzie widniała na wyświetlaczu przez 3s ale bez użycia Wait.

Przejscie = 1
Wyswietlanie = 1
Poz_ekran = 1
 
'--------------PROGRAM START--------------------------------
Do
Set Led
 
If Flaga_4ms = 1 Then
   Flaga_4ms = 0
 
   Gosub Przyciski
 
    If Przejscie = 1 Then
      If Wyswietlanie = 1 Then
         Gosub Wysw_ekran
      End If
   Else
      If Ustawienia = 1 Then
         Gosub Wysw_ustaw
      End If
   End If
 
      If Data_2s = 1 Then
         Data_2s = 0
         Gosub Data2s
      End If
End If
 
If Flaga_1s = 1 Then
   Flaga_1s = 0
 
   Gosub Obliczenia
 
End If
 
Loop
'-----------------------------------------------------------
 
'--------------Program Koniec-------------------------------
End
'-----------------------------------------------------------
 
'--------------Interwał 1s: dla Timer2----------------------
Interwal:
Timer2 = 131                                                'odlicza 0.004s
Set Flaga_4ms
Incr Dzielnik
If Dzielnik = 250 Then                                      '0.004s *250=1s
   Set Flaga_1s
End If
 
Return
'-----------------------------------------------------------
 
'--------------Obliczenia-----------------------------------
Obliczenia:
 
Return
'-----------------------------------------------------------
 
'--------------Przyciski------------------------------------
Przyciski:
Sw = Sw_port And &B011100
 
If Sw <> &B011100 And Stan_sw = Sw Then
   Incr Licznik_sw
      If Licznik_sw = 100 Then
         Licznik_sw = 0
 
         Select Case Stan_sw
'-----------------------------------------------------------
            Case &B001100:                                  'Góra plus
 
               If Przejscie = 1 Then
                  Incr Poz_ekran
                     If Poz_ekran = 6 Then Poz_ekran = 1
               Else
                  Incr Poz_ustaw
                     If Poz_ustaw = 10 Then Poz_ustaw = 1
               End If
'-----------------------------------------------------------
            Case &B011000:                                  'OK i wyświetlanie dat
 
               If Przejscie = 1 And Poz_ekran = 1 Then
                  Przejscie = 0
                  Wyswietlanie = 0
                  Data_2s = 1
               End If
'-----------------------------------------------------------
            Case &B010100:                                  'Dół minus
 
               If Przejscie = 1 Then
                  Decr Poz_ekran
                     If Poz_ekran < 1 Then Poz_ekran = 5
               Else
                  Decr Poz_ustaw
                     If Poz_ustaw < 1 Then Poz_ustaw = 9
               End If
'-----------------------------------------------------------
            Case &B000100:                                  'Plus + minus = Ustawienia
 
               If Przejscie = 1 Then
                  Przejscie = 0
                  Ustawienia = 1
                  Wyswietlanie = 0
                  Poz_ustaw = 1
               Else
                  Przejscie = 1
                  Ustawienia = 0
                  Wyswietlanie = 1
                  Poz_ekran = 1
               End If
'-----------------------------------------------------------
            End Select
      End If
Else
   Stan_sw = Sw
   Licznik_sw = 80
End If
 
Return
'-----------------------------------------------------------
 
'--------------Ekran-----------------------------------------
Wysw_ekran:
If Wyswietlanie = 1 Then
'--------------Ekran 1--------------------------------------
   If Poz_ekran = 1 Then
      'Cls
      Locate 1 , 1
      Lcd "11 aaaaaa"
   End If
'--------------Ekran 5--------------------------------------
   If Poz_ekran = 5 Then
      'Cls
      Locate 1 , 1
      Lcd "55 eeeeee"
   End If
'-----------------------------------------------------------
End If
 
Return
'-----------------------------------------------------------
 
'--------------Ustawienia-----------------------------------
Wysw_ustaw:
If Ustawienia = 1 Then
'--------------Ustawienia 1---------------------------------
       If Poz_ustaw = 1 Then
       'Cls
       Locate 1 , 1
       Lcd "atmvyo74"
       End If
'--------------Ustawienia 9---------------------------------
       If Poz_ustaw = 9 Then
       'Cls
       Locate 1 , 1
       Lcd "125zvh7k"
       End If
'-----------------------------------------------------------
End If
 
Return
'-----------------------------------------------------------
 
'--------------Data----------------------------------------- << tutaj
Data2s:
Cls
Locate 1 , 1
Lcd "data"
'Wait 1
Przejscie = 1
Wyswietlanie = 1
Poz_ekran = 1
 
Return
'-----------------------------------------------------------
 
'-----------------------------------------------------------

Portret użytkownika mirley

Re: LCD

Zrób zmienną licznik, która będzie sprawdzana i zmniejszana w procedurze obsługi wyświetlacza i jak doliczy do zera to dasz lcd "" a w przeciwnym wypadku lcd "data" tak jak jest. Jak procedura wyświetlania wywołuje się co 4ms to trzeba będzie liczyć w dół od 500. Zatem jak będziesz chciał wyświetlić napis na 1s przypiszesz do zmiennej licz_data wartość 250, jak na 10 sekund to przypiszesz wartość 2500 itd. Zmienna licz_data musi byc word

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.