Strona 1 z 1

Duże fonty na alfanumerycznym LCD

: 23 sty 2018, 17:44
autor: Henryk
Witam :D
Przeglądając stronę domową Gospodarza , zaciekawił mnie ten artykuł .
Postanowiłem nieco podłubać w kodzie z innej strony , jak inaczej można z jakieś zmiennej " wydłubać " wartości do wyświetlenia ;)
Pewnie można jeszcze prościej osiągnąć cel , ale ja to wieczny amator .
  1. $sim
  2. $regfile = "m8def.dat"
  3. $crystal = 8000000
  4. Config Lcdpin = Pin , Db7 = Portc.0 , Db6 = Portc.1 , Db5 = Portc.2 , Db4 = Portc.3 , E = Portc.4 , Rs = Portc.5
  5. Config Lcd = 16 * 2
  6. Cursor Off Noblink
  7. Dim Wartosc As Byte
  8. Dim Pierwsza As Byte , Druga As Byte , Trzecia As Byte
  9. Dim Linia_g(10) As String * 3 , Linia_d(10) As String * 3
  10. Dim Text As String * 3
  11. Dim A As String * 1
  12. Cls
  13. Wartosc = 0
  14. Text = "000"
  15. A = "0"
  16. Pierwsza = 0
  17. Druga = 0
  18. Trzecia = 0
  19.  
  20. '=========TABLICA na DUŻE CYFRY===========
  21. 'Cyfra 0
  22. Linia_g(10) = "{006}{002}{005}"                             'chr(6) + Chr(2) + Chr(5)
  23. Linia_d(10) = "{006}{003}{005}"                             'Chr(6) + Chr(3) + Chr(5)
  24.  
  25. 'Cyfra 1
  26. Linia_g(1) = "{032}{032}{005}"                              ' "  " + Chr(5)
  27. Linia_d(1) = "{032}{032}{005}"                              '"  " + Chr(5)
  28.  
  29. 'Cyfra 2
  30. Linia_g(2) = "{007}{004}{005}"                              'Chr(7) + Chr(4) + Chr(5)
  31. Linia_d(2) = "{006}{003}{003}"                              'Chr(6) + Chr(3) + Chr(3)
  32.  
  33. 'Cyfra 3
  34. Linia_g(3) = "{032}{004}{005}"                              '" " + Chr(4) + Chr(5)
  35. Linia_d(3) = "{032}{003}{005}"                              '" " + Chr(3) + Chr(5)
  36.  
  37. 'Cyfra 4
  38. Linia_g(4) = "{006}{003}{005}"                              'Chr(6) + Chr(3) + Chr(5)
  39. Linia_d(4) = "{032}{032}{005}"                              '"  " + Chr(5)
  40.  
  41. 'Cyfra 5
  42. Linia_g(5) = "{006}{004}{001}"                              'Chr(6) + Chr(4) + Chr(1)
  43. Linia_d(5) = "{003}{003}{005}"                              'Chr(3) + Chr(3) + Chr(5)
  44.  
  45. 'Cyfra 6
  46. Linia_g(6) = "{006}{004}{001}"                              'Chr(6) + Chr(4) + Chr(1)
  47. Linia_d(6) = "{006}{003}{005}"                              'Chr(6) + Chr(3) + Chr(5)
  48.  
  49. 'Cyfra 7
  50. Linia_g(7) = "{006}{002}{005}"                              'Chr(6) + Chr(2) + Chr(5)
  51. Linia_d(7) = "{032}{032}{005}"                              '"  " + Chr(5)
  52.  
  53. 'Cyfra 8
  54. Linia_g(8) = "{006}{004}{005}"                              'Chr(6) + Chr(4) + Chr(5)
  55. Linia_d(8) = "{006}{003}{005}"                              'Chr(6) + Chr(3) + Chr(5)
  56.  
  57. 'Cyfra 9
  58. Linia_g(9) = "{006}{004}{005}"                              'Chr(6) + Chr(4) + Chr(5)
  59. Linia_d(9) = "{003}{003}{005}"                              'Chr(3) + Chr(3) + Chr(5)
  60.  
  61. ' ZAPIS W POSTACI{002}{032} ZMNIEJSZA KOD O 676 BAJTÓW '
  62. Cls
  63.  
  64. Do
  65. Gosub Licz
  66. If Pierwsza = 0 Then
  67.  Pierwsza = 10
  68.  End If
  69. If Druga = 0 Then
  70. Druga = 10
  71. End If
  72. If Trzecia = 0 Then
  73. Trzecia = 10
  74. End If
  75. Locate 1 , 6
  76. Lcd Linia_g(pierwsza) ; Linia_g(druga) ; Linia_g(trzecia)
  77. Locate 2 , 6
  78. Lcd Linia_d(pierwsza) ; Linia_d(druga) ; Linia_d(trzecia)
  79.  Locate 2 , 1 : Lcd Wartosc
  80. Wait 1
  81.  Incr Wartosc
  82. Loop
  83.  
  84. End
  85.  
  86. Licz:
  87.  Text = Str(wartosc)                                               'zamiana zmiennej wartość na tekst
  88.  Text = Format(text , "000")                                'formatowanie tekstu
  89. A = Mid(text , 1 , 1)                                       'wpisanie do A jedneg znaku z pierwszej pozycji zmiennej Tekst
  90.  Pierwsza = Val(a)                                          'zmienna Pierwsza przyjmuje wartość zmiennej A
  91. A = Mid(text , 2 , 1)                                       'jw ....drugi znak
  92.  Druga = Val(a)
  93. A = Mid(text , 3 , 1)
  94.  Trzecia = Val(a)
  95.  
  96.  Return
Można coś w tym kodzie jeszcze uprościć :?: chętnie przyjmę wszelkie porady :)

Re: Duże fonty na alfanumerycznym LCD

: 23 sty 2018, 19:26
autor: niveasoft
Nie wiem czy chcesz wyciągać ze stringa czy zwykłej zmiennej.
Mój program waży o 1/4 mniej bo z 20% zrobiło się 15% tylko nie dodałeś u siebie Deflcdchar i teraz nie wiadomo czy Ty chcesz duże cyfry czy tylko wyciąganie poszczególnych cyfr ;)
Dla stringów też można to zrobić duuużo efektywniej niż Mid i Val



  1. $sim
  2. $regfile = "m8def.dat"
  3. $crystal = 8000000
  4. Config Lcdpin = Pin , Db7 = Portc.0 , Db6 = Portc.1 , Db5 = Portc.2 , Db4 = Portc.3 , E = Portc.4 , Rs = Portc.5
  5. Config Lcd = 16 * 2
  6. Cursor Off Noblink
  7. Deflcdchar 1 , 28 , 24 , 32 , 32 , 32 , 32 , 24 , 28        ' prawy naroznik
  8. Deflcdchar 2 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32        ' gorna kreseczka
  9. Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31        ' dolna kreseczka
  10. Deflcdchar 4 , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31        ' dwie kreseczki
  11. Deflcdchar 5 , 28 , 30 , 30 , 30 , 30 , 30 , 30 , 28        ' prawa belka
  12. Deflcdchar 6 , 7 , 15 , 15 , 15 , 15 , 15 , 15 , 7          ' lewa belka
  13. Deflcdchar 7 , 7 , 3 , 32 , 32 , 32 , 32 , 3 , 7            ' lewy naroznik
  14. Cls
  15.  
  16. Dim Suma As Byte , Wartosc As Byte
  17. Dim Pierwsza As Byte , Druga As Byte , Trzecia As Byte
  18. Dim Linia_g(10) As String * 3 , Linia_d(10) As String * 3
  19. Dim Digits(3) As Byte , N As Byte
  20.  
  21. '=========TABLICA na DUŻE CYFRY===========
  22. 'Cyfra 0
  23. Linia_g(10) = "{006}{002}{005}"                             'chr(6) + Chr(2) + Chr(5)
  24. Linia_d(10) = "{006}{003}{005}"                             'Chr(6) + Chr(3) + Chr(5)
  25.  
  26. 'Cyfra 1
  27. Linia_g(1) = "{032}{032}{005}"                              ' "  " + Chr(5)
  28. Linia_d(1) = "{032}{032}{005}"                              '"  " + Chr(5)
  29.  
  30. 'Cyfra 2
  31. Linia_g(2) = "{007}{004}{005}"                              'Chr(7) + Chr(4) + Chr(5)
  32. Linia_d(2) = "{006}{003}{003}"                              'Chr(6) + Chr(3) + Chr(3)
  33.  
  34. 'Cyfra 3
  35. Linia_g(3) = "{032}{004}{005}"                              '" " + Chr(4) + Chr(5)
  36. Linia_d(3) = "{032}{003}{005}"                              '" " + Chr(3) + Chr(5)
  37.  
  38. 'Cyfra 4
  39. Linia_g(4) = "{006}{003}{005}"                              'Chr(6) + Chr(3) + Chr(5)
  40. Linia_d(4) = "{032}{032}{005}"                              '"  " + Chr(5)
  41.  
  42. 'Cyfra 5
  43. Linia_g(5) = "{006}{004}{001}"                              'Chr(6) + Chr(4) + Chr(1)
  44. Linia_d(5) = "{003}{003}{005}"                              'Chr(3) + Chr(3) + Chr(5)
  45.  
  46. 'Cyfra 6
  47. Linia_g(6) = "{006}{004}{001}"                              'Chr(6) + Chr(4) + Chr(1)
  48. Linia_d(6) = "{006}{003}{005}"                              'Chr(6) + Chr(3) + Chr(5)
  49.  
  50. 'Cyfra 7
  51. Linia_g(7) = "{006}{002}{005}"                              'Chr(6) + Chr(2) + Chr(5)
  52. Linia_d(7) = "{032}{032}{005}"                              '"  " + Chr(5)
  53.  
  54. 'Cyfra 8
  55. Linia_g(8) = "{006}{004}{005}"                              'Chr(6) + Chr(4) + Chr(5)
  56. Linia_d(8) = "{006}{003}{005}"                              'Chr(6) + Chr(3) + Chr(5)
  57.  
  58. 'Cyfra 9
  59. Linia_g(9) = "{006}{004}{005}"                              'Chr(6) + Chr(4) + Chr(5)
  60. Linia_d(9) = "{003}{003}{005}"                              'Chr(3) + Chr(3) + Chr(5)
  61.  
  62.  
  63. Do
  64.  
  65.  N = 3 : Wartosc = Suma
  66.  Do
  67.   Digits(n) = Wartosc Mod 10
  68.   If Digits(n) = 0 Then Digits(n) = 10
  69.   Wartosc = Wartosc / 10
  70.   Decr N
  71.  Loop Until N = 0
  72.  
  73.    Locate 1 , 4
  74.    Lcd Linia_g(digits(1)) ; Linia_g(digits(2)) ; Linia_g(digits(3))
  75.    Locate 2 , 4
  76.    Lcd Linia_d(digits(1)) ; Linia_d(digits(2)) ; Linia_d(digits(3))
  77.    Locate 2 , 1 : Lcd Suma
  78.     Wait 1
  79.      Incr Suma                                              'max255
  80. Loop
  81. End

Re: Duże fonty na alfanumerycznym LCD

: 23 sty 2018, 20:13
autor: Henryk
Witaj Bartku :D
Interesuje mnie właśnie wyciąganie liczb ze stringów .
To co przedstawiłem w kodzie , tak na serio , to scheda z mojej walki na samym początku przygody z Bascom .
Tak obszedłem problem który mnie w tedy męczył .
Kupiłem wtedy cały zestaw płyta testowa , książka i Bascom , tylko po to , by zbudować sekwencyjny licznik impulsów na wyświetlaczach 7seg. :lol:
Głowa pusta w temacie a tam piszą o jakimś maskowaniu bitów , wyodrębnianiu liczb do wyświetlenia itd. ( w dalszym ciągu mam z tym kłopot ;) )
Ale mniejsza o mój stan wiedzy , liczą się chęci poznawcze i upór do działania :D

Re: Duże fonty na alfanumerycznym LCD

: 23 sty 2018, 20:29
autor: niveasoft
Poniższy program działa w symulatorze tak samo jak poprzedni ;)
Na string Wartość nałożona jest tablica Digits(3) poprzez Overlay.
Jeśli w w string zapiszesz "456" to w Digits(1) będzie "4", w Digits(2) będzie "5" a w Digits(3) będzie "6"
To jednak ciągle są "literki"a nie cyfry/wartości. W tablicy ASCII wartości dla cyfr zaczynają się "przesunięte" o 48
Czyli 0 ma 48, 1 ma 49 itd..
Wystarczy od takiej literki odjąć 48 i masz wartość.
Oczywiście jak będziesz miał dłuższy string Wartosć As String* 8 to piszesz Dim Digits(8) At Wartosć Overlay
  1. $sim
  2.  
  3. $regfile = "m8def.dat"
  4. $crystal = 8000000
  5.  
  6.  
  7. Config Lcdpin = Pin , Db7 = Portc.0 , Db6 = Portc.1 , Db5 = Portc.2 , Db4 = Portc.3 , E = Portc.4 , Rs = Portc.5
  8. Config Lcd = 16x2
  9. Cursor Off , Noblink
  10. Deflcdchar 1 , 28 , 24 , 32 , 32 , 32 , 32 , 24 , 28        ' prawy naroznik
  11. Deflcdchar 2 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32        ' gorna kreseczka
  12. Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31        ' dolna kreseczka
  13. Deflcdchar 4 , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31        ' dwie kreseczki
  14. Deflcdchar 5 , 28 , 30 , 30 , 30 , 30 , 30 , 30 , 28        ' prawa belka
  15. Deflcdchar 6 , 7 , 15 , 15 , 15 , 15 , 15 , 15 , 7          ' lewa belka
  16. Deflcdchar 7 , 7 , 3 , 32 , 32 , 32 , 32 , 3 , 7            ' lewy naroznik
  17. Cls
  18.  
  19.  
  20. Dim Suma As Byte , N As Byte
  21. Dim Wartosc As String * 3
  22. Dim Digits(3) As Byte At Wartosc Overlay
  23.  
  24. Dim Pierwsza As Byte , Druga As Byte , Trzecia As Byte
  25. Dim Linia_g(10) As String * 3 , Linia_d(10) As String * 3
  26.  
  27.  
  28.  
  29. '=========TABLICA na DUŻE CYFRY===========
  30. 'Cyfra 0
  31. Linia_g(10) = "{006}{002}{005}"                             'chr(6) + Chr(2) + Chr(5)
  32. Linia_d(10) = "{006}{003}{005}"                             'Chr(6) + Chr(3) + Chr(5)
  33.  
  34. 'Cyfra 1
  35. Linia_g(1) = "{032}{032}{005}"                              ' "  " + Chr(5)
  36. Linia_d(1) = "{032}{032}{005}"                              '"  " + Chr(5)
  37.  
  38. 'Cyfra 2
  39. Linia_g(2) = "{007}{004}{005}"                              'Chr(7) + Chr(4) + Chr(5)
  40. Linia_d(2) = "{006}{003}{003}"                              'Chr(6) + Chr(3) + Chr(3)
  41.  
  42. 'Cyfra 3
  43. Linia_g(3) = "{032}{004}{005}"                              '" " + Chr(4) + Chr(5)
  44. Linia_d(3) = "{032}{003}{005}"                              '" " + Chr(3) + Chr(5)
  45.  
  46. 'Cyfra 4
  47. Linia_g(4) = "{006}{003}{005}"                              'Chr(6) + Chr(3) + Chr(5)
  48. Linia_d(4) = "{032}{032}{005}"                              '"  " + Chr(5)
  49.  
  50. 'Cyfra 5
  51. Linia_g(5) = "{006}{004}{001}"                              'Chr(6) + Chr(4) + Chr(1)
  52. Linia_d(5) = "{003}{003}{005}"                              'Chr(3) + Chr(3) + Chr(5)
  53.  
  54. 'Cyfra 6
  55. Linia_g(6) = "{006}{004}{001}"                              'Chr(6) + Chr(4) + Chr(1)
  56. Linia_d(6) = "{006}{003}{005}"                              'Chr(6) + Chr(3) + Chr(5)
  57.  
  58. 'Cyfra 7
  59. Linia_g(7) = "{006}{002}{005}"                              'Chr(6) + Chr(2) + Chr(5)
  60. Linia_d(7) = "{032}{032}{005}"                              '"  " + Chr(5)
  61.  
  62. 'Cyfra 8
  63. Linia_g(8) = "{006}{004}{005}"                              'Chr(6) + Chr(4) + Chr(5)
  64. Linia_d(8) = "{006}{003}{005}"                              'Chr(6) + Chr(3) + Chr(5)
  65.  
  66. 'Cyfra 9
  67. Linia_g(9) = "{006}{004}{005}"                              'Chr(6) + Chr(4) + Chr(5)
  68. Linia_d(9) = "{003}{003}{005}"                              'Chr(3) + Chr(3) + Chr(5)
  69.  
  70.  
  71. Do
  72.  
  73.   Wartosc = Str(suma)
  74.   Wartosc = Format(wartosc , "000")
  75.  
  76.  N = 3 :
  77.  Do
  78.   Digits(n) = Digits(n) - 48
  79.   If Digits(n) = 0 Then Digits(n) = 10
  80.    Decr N
  81.  Loop Until N = 0
  82.  
  83.    Locate 1 , 4
  84.    Lcd Linia_g(digits(1)) ; Linia_g(digits(2)) ; Linia_g(digits(3))
  85.    Locate 2 , 4
  86.    Lcd Linia_d(digits(1)) ; Linia_d(digits(2)) ; Linia_d(digits(3))
  87.    Locate 2 , 1 : Lcd Suma
  88.     Wait 1
  89.      Incr Suma                                              'max255
  90. Loop
  91. End

Re: Duże fonty na alfanumerycznym LCD

: 23 sty 2018, 20:38
autor: Henryk
Dziękuje za te przykłady , nieco jaśniej w głowie ;)
Czas przećwiczyć temat i coś przydatnego na warsztacie wydłubać . 8-)