Strona 1 z 2

Zegar LCD Bascom

: 02 lut 2021, 14:14
autor: Domin
Witam serdecznie, zwracam się do Was z ogromną prośbą. Potrzebuje jako zadanie zrobić zegar LCD, który mniej więcej będzie podobny do tych zegarów w samochodach.
00: 00 : 00
gdzie pierwsze 2 cyfry możemy ustawić na 24 godziny, kolejne 2 na 59 minut i kolejne dwie na 59 sekund.
Po przyciśnięciu guzika będzie nam przeskakiwać z godzin na minuty i z minut na sekundy.
a po dłuższym przyciśnięciu pozostanie zapisane.
Totalnie się w tym gubię i nie daję sobie rady. Bardzo prosiłbym o pomoc :cry:

Re: Zegar LCD Bascom

: 02 lut 2021, 17:01
autor: niveasoft
Domin .. no nic nie wiesz to widać.
Jaki procesor , jaki wyswietlacz..
-Proszę forumowiczów którzy chcieliby tu błysnąć o powstrzymanie się od odpowiedzi (może to wkręt).

Re: Zegar LCD Bascom

: 02 lut 2021, 18:36
autor: Pikczu
No właśnie jako zadanie!!
Więc słuchamy co proponujesz ?

Re: Zegar LCD Bascom

: 03 lut 2021, 2:58
autor: Domin
nie to nie jest wkręt, profesor powiedział zrobić i ma działać obojętnie jak, a na zajęciach nie używamy tego programu w ogóle, dlatego przyszedłem na to forum z prośbą o pomoc

Re: Zegar LCD Bascom

: 03 lut 2021, 14:18
autor: niveasoft
Pomoc tu uzyskasz jak pokażesz, że cokolwiek próbowałeś robić... nie licz na gotowca. Możemy poprawić Tobie jakiś kod...ale musisz dodać dwa do dwóch :P

Re: Zegar LCD Bascom

: 04 lut 2021, 17:05
autor: Domin
  1. $sim
  2. $regfile = "m32def.dat"
  3. $crystal = 16000000
  4. $hwstack = 40
  5. $swstack = 16
  6. $framesize = 32
  7.  
  8. Dim Liczh As Byte
  9. Dim Liczm As Byte
  10. Dim Liczs As Byte
  11. Dim Liczba As Byte
  12. Cursor Off
  13. Config Porta = Output
  14. Porta = 255
  15.  
  16. Funkcja_przel Alias Pina.5
  17. Liczba = 0
  18.  
  19.  
  20. Deflcdchar 0,32,32,15,17,17,15,1,14' g
  21.  
  22.  
  23.  
  24. Cls
  25. Locate 1, 6
  26. Lcd "Witam"
  27. Cls
  28. Gosub Disp
  29.  
  30.  
  31. Do
  32.          Debounce funkcja_przel , 0 , Funkcja , Sub
  33.          Liczba = Encoder(pina.7 , Pina.6 , Lewo , Prawo , 0)
  34.          Waitus 150
  35. Loop
  36. End
  37.  
  38. Lewo:
  39. If Liczba = 0 Then
  40.    If Liczh > 0 Then Liczh = Liczh - 1
  41.    If Liczh < 0 Then Liczh = 24
  42.    Gosub Disp
  43. End If
  44. If  Liczba = 1 Then
  45.    If Liczm > 0 Then Liczm = Liczm - 1
  46.    If Liczm < 0 Then Liczm = 59
  47.    Gosub Disp
  48. End If
  49. If Liczba = 2 Then
  50.    If Liczs > 0 Then Liczs = Liczs - 1
  51.    If Liczs < 0 Then Liczs = 59
  52.    Gosub Disp
  53. End If
  54. Return
  55.  
  56. Prawo:
  57. If Liczba = 0 Then
  58.    If Liczh < 25 Then Liczh = Liczh + 1
  59.    If Liczh = 25 Then Liczh = 0
  60.    Gosub Disp
  61. End If
  62.  
  63. If  Liczba = 1 Then
  64.    If Liczm < 60 Then Liczm = Liczm - 1
  65.    If Liczm = 60 Then Liczm = 0
  66.    Gosub Disp
  67. End If
  68. If Liczba = 2 Then
  69.    If Liczs < 60 Then Liczs = Liczs - 1
  70.    If Liczs = 60 Then Liczs = 0
  71.    Gosub Disp
  72. End If
  73. Return
  74.  
  75. Disp:
  76. Cls
  77. Locate 1, 6
  78. Lcd "Ze"; Chr(0) ;"ar"
  79. Locate 2, 5
  80. Lcd Liczh ; ":" ; Liczm ; ":" ; Liczs
  81.  
  82. Return
  83.  
  84. Funkcja:
  85. If Liczba = 0 Then
  86.       Locate 2, 5
  87.       Cursor Blink
  88. End If
  89. If Liczba = 1 Then
  90.       Locate 2, 8
  91.       Cursor Blink
  92. End If
  93. If Liczba = 2 Then
  94.       Locate 2, 10
  95.       Cursor Blink
  96. End If
  97. If Liczba = 3 Then Gosub Zegar
  98. If Liczba = 4 Then Liczba = 0
  99. Return
  100.  
  101.  
  102. Zegar:
  103.  
  104. If Liczh < 25 Then
  105.    If Liczm < 60 Then
  106.       If Liczs < 60 Then
  107.       Liczs = Liczs + 1
  108.       Gosub Disp
  109.       Wait 1
  110.       Else
  111.          Liczm = Liczm + 1
  112.          Liczs = 0
  113.       End If
  114.    Else
  115.       Liczm = 0
  116.       Liczh = Liczh + 1
  117.    End If
  118. Else
  119.    Liczh = 0
  120. End If
  121. Return

aktualnie mój kod wygląda tak, coś jednak zrobiłem nie tak bo wyskakują mi liczby 255 a godziny blokują się po 4. Mam też problem z rekacją na switcha, po kliknięciu nie przeszkakuję na kolejną faze z godzin na minuty, i próbowałem na różne sposoby i nic nie działa . Czy mogę liczyć na Waszą pomoc ?

Re: Zegar LCD Bascom

: 04 lut 2021, 17:07
autor: Jacek
Kolego umieść ten kod tak jak powinien być umieszczony w poście.
pozdrawiam Jacek.

Re: Zegar LCD Bascom

: 04 lut 2021, 17:10
autor: Domin
  1. $sim
  2. $regfile = "m32def.dat"
  3. $crystal = 16000000
  4. $hwstack = 40
  5. $swstack = 16
  6. $framesize = 32
  7.  
  8. Dim Liczh As Byte
  9. Dim Liczm As Byte
  10. Dim Liczs As Byte
  11. Dim Liczba As Byte
  12. Cursor Off
  13. Config Porta = Output
  14. Porta = 255
  15.  
  16. Funkcja_przel Alias Pina.5
  17. Liczba = 0
  18.  
  19.  
  20. Deflcdchar 0,32,32,15,17,17,15,1,14' g
  21.  
  22.  
  23.  
  24. Cls
  25. Locate 1, 6
  26. Lcd "Witam"
  27. Cls
  28. Gosub Disp
  29.  
  30.  
  31. Do
  32.          Debounce funkcja_przel , 0 , Funkcja , Sub
  33.          Liczba = Encoder(pina.7 , Pina.6 , Lewo , Prawo , 0)
  34.          Waitus 150
  35. Loop
  36. End
  37.  
  38. Lewo:
  39. If Liczba = 0 Then
  40.    If Liczh > 0 Then Liczh = Liczh - 1
  41.    If Liczh < 0 Then Liczh = 24
  42.    Gosub Disp
  43. End If
  44. If  Liczba = 1 Then
  45.    If Liczm > 0 Then Liczm = Liczm - 1
  46.    If Liczm < 0 Then Liczm = 59
  47.    Gosub Disp
  48. End If
  49. If Liczba = 2 Then
  50.    If Liczs > 0 Then Liczs = Liczs - 1
  51.    If Liczs < 0 Then Liczs = 59
  52.    Gosub Disp
  53. End If
  54. Return
  55.  
  56. Prawo:
  57. If Liczba = 0 Then
  58.    If Liczh < 25 Then Liczh = Liczh + 1
  59.    If Liczh = 25 Then Liczh = 0
  60.    Gosub Disp
  61. End If
  62.  
  63. If  Liczba = 1 Then
  64.    If Liczm < 60 Then Liczm = Liczm - 1
  65.    If Liczm = 60 Then Liczm = 0
  66.    Gosub Disp
  67. End If
  68. If Liczba = 2 Then
  69.    If Liczs < 60 Then Liczs = Liczs - 1
  70.    If Liczs = 60 Then Liczs = 0
  71.    Gosub Disp
  72. End If
  73. Return
  74.  
  75. Disp:
  76. Cls
  77. Locate 1, 6
  78. Lcd "Ze"; Chr(0) ;"ar"
  79. Locate 2, 5
  80. Lcd Liczh ; ":" ; Liczm ; ":" ; Liczs
  81.  
  82. Return
  83.  
  84. Funkcja:
  85. If Liczba = 0 Then
  86.       Locate 2, 5
  87.       Cursor Blink
  88. End If
  89. If Liczba = 1 Then
  90.       Locate 2, 8
  91.       Cursor Blink
  92. End If
  93. If Liczba = 2 Then
  94.       Locate 2, 10
  95.       Cursor Blink
  96. End If
  97. If Liczba = 3 Then Gosub Zegar
  98. If Liczba = 4 Then Liczba = 0
  99. Return
  100.  
  101.  
  102. Zegar:
  103.  
  104. If Liczh < 25 Then
  105.    If Liczm < 60 Then
  106.       If Liczs < 60 Then
  107.       Liczs = Liczs + 1
  108.       Gosub Disp
  109.       Wait 1
  110.       Else
  111.          Liczm = Liczm + 1
  112.          Liczs = 0
  113.       End If
  114.    Else
  115.       Liczm = 0
  116.       Liczh = Liczh + 1
  117.    End If
  118. Else
  119.    Liczh = 0
  120. End If
  121. Return

Re: Zegar LCD Bascom

: 04 lut 2021, 17:19
autor: niveasoft
Poprawiłem te posty, ale na przyszłość proszę zastosuj tę instrukcje viewtopic.php?f=3&t=107

Trudno jest zasymulować enkoder w symulatorze a Ty masz wpisane u góry $sim. To testujesz to na procesorze czy w symulatorze?
Jak na prawdziwym uC to usuń lub zakomentuj na początek te $sim

Re: Zegar LCD Bascom

: 04 lut 2021, 17:22
autor: Domin
testuje to na symulatorze niestety, dopiero gotowy kod sprawdza profesor z urządzeniami :/ właśnie mi sprawdził i wytknął mi te błedy o których napisałem, ze nie przeskakuje między liczbami, i po kręceniu wyskakuje max godzina 4 a sekundy i minuty pokazuja 255