Bargraph na wyświetlaczu HD44780

Tu możesz pisać o swoich problemach z pisaniem programów w języku C dla AVR.
Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Bargraph na wyświetlaczu HD44780

Postautor: Antystatyczny » poniedziałek 10 kwie 2023, 22:08

Witam wszystkich serdecznie.

Ostatnio pracowałem hobbystycznie nad sterownikiem pasków ledowych RGB i przy okazji opracowałem wyświetlanie bargraphów na wyświetlaczach HD44780. No i właśnie tym chcę się z Wami podzielić ( za darmo :P ). Pewnie można będzie to i owo poprawić, ale to już pozostawiam dociekliwym. Poniżej prezentuję ciało funkcji:

Kod: Zaznacz cały

void HD44780_bargraph(int8_t x, int8_t y, uint8_t length, uint16_t value, uint16_t max)
{
   uint32_t strips = length * 5;
   uint32_t valPerStrip = max * 100UL / strips;
   uint32_t barLength = value * 100UL / valPerStrip;
   
   HD44780_goto(x, y);
   HD44780_putc('[');               //left margin
   do
   {
      if (barLength > 4)
      {
         HD44780_putc(5);
         barLength -= 5;
      }
      else
      {
         HD44780_putc(barLength);
         barLength -= barLength;
      }
   } while (--length);

   HD44780_putc(']');               //right margin
}





Ok, a więc x i y to współrzędne początkowe bargraphu. Length to długość bargraphu. Do długości należy doliczyć prawy znak ograniczający bargraph.
Następny parametr to value, czy wartość, którą chcemy wyświetlić. Ostatni parametr (max) określa, jaka wartość value będzie uznawana jako maksymalna.

Miłego korzystania z tego kawałka kodu.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: Bargraph na wyświetlaczu HD44780

Postautor: Antystatyczny » poniedziałek 10 kwie 2023, 22:24

Zapomniałem dodać, że do poprawnej pracy tej funkcji należy wrzucić do pamięci wyświetlacza kilka znaków:

Kod: Zaznacz cały

static const uint8_t b[6][8] PROGMEM = {   {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0}, {16, 16, 16, 16, 16, 16, 16, 0},
                                 {24, 24, 24, 24, 24, 24, 24, 0}, {28, 28, 28, 28, 28, 28, 28, 0},
                                 {30, 30, 30, 30, 30, 30, 30, 0}, {31, 31, 31, 31, 31, 31, 31, 0}   };
      


oraz

Kod: Zaznacz cały

for (uint8_t i = 0; i < 6; i++)
   {
      HD44780_defchar_P(i, b[i]);
   }
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
j23
Expert
Expert
Posty: 506
Rejestracja: czwartek 08 paź 2015, 18:40

Re: Bargraph na wyświetlaczu HD44780

Postautor: j23 » wtorek 11 kwie 2023, 13:55

Nie ma to jak miodna grafika w rozdzielczości 2x16 ...
-DZIĘKUJĘ Kolego Anty, bo ja na pewno skorzystam :) :like:
Internet łączy ludzi, którzy dzielą się swoimi zainteresowaniami, pomysłami i potrzebami, bez względu na geograficzne (przeciwności).
BOB TAYLOR, PARC

Awatar użytkownika
ZbeeGin
User
User
Posty: 492
Rejestracja: sobota 08 lip 2017, 17:16
Lokalizacja: Śląsko-Zagłębiowska Metropolia
Kontaktowanie:

Re: Bargraph na wyświetlaczu HD44780

Postautor: ZbeeGin » wtorek 11 kwie 2023, 17:43

Nie takie rzeczy się robiło w assemblerze MCS51. :)
Spróbuj jeszcze sobie zrobić dynamiczne wyświetlanie całego banku CGRAM w różnych miejscach wraz podmianą jego zawartości. Wtedy to nawet grafikę 80x14 można wyświetlać na całym ekranie.

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: Bargraph na wyświetlaczu HD44780

Postautor: Antystatyczny » środa 12 kwie 2023, 20:57

ZbeeGin pisze:Spróbuj jeszcze sobie zrobić dynamiczne wyświetlanie całego banku CGRAM w różnych miejscach wraz podmianą jego zawartości


Może w niedalekiej przyszłości spróbuję. Póki co kończę projekty, na które nie miałem czasu przez ostatnich dziesięć lat. W każdym razie poszukam w sieci filmików, które pokazują, jaki to daje efekt wizualny i może to mnie zachęci :)
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.


Wróć do „Programowanie AVR w C”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość