Advertisement
Hauke

HD44780 multible bargraphs

Jan 26th, 2017
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.91 KB | None | 0 0
  1. /*
  2.  * Library: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung
  3.  * (c) by Hauke Marquardt
  4.  */
  5.  
  6. void lcd_add_static_chars() {
  7.   uint8_t char10[8] = {0b11111, 0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000},
  8.           char01[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111},
  9.           char11[8] = {0b11111, 0b11111, 0b11111, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111};
  10.   lcd_generatechar(5, char10);
  11.   lcd_generatechar(6, char01);
  12.   lcd_generatechar(7, char11);
  13. }
  14.  
  15. void lcd_display_bars(uint8_t *tmpValues, uint8_t rows) {
  16.   uint8_t endChars[4][8] = {0}, currentEndChar = 0;
  17.   for(uint8_t lcd_row = 0; lcd_row < rows; lcd_row++) {
  18.     for(uint8_t i = 1; i <= 16; i++) {
  19.       if((tmpValues[0 + 2 * lcd_row] > (i - 1) * 5 && tmpValues[0 + 2 * lcd_row] < i * 5) || tmpValues[1 + 2 * lcd_row] > (i - 1) * 5 && tmpValues[1 + 2 * lcd_row] < i * 5) {
  20.         for(uint8_t c = 0; c < 6; c++) {
  21.           if(tmpValues[0 + 2 * lcd_row] >= ((i - 1) * 5) + c)
  22.             for(uint8_t r = 0; r < 3; r++)
  23.               endChars[currentEndChar][r] |= (1 << 4 - c  + 1);
  24.           if(tmpValues[1 + 2 * lcd_row] >= ((i - 1) * 5) + c)
  25.             for(uint8_t r = 5; r < 8; r++)
  26.               endChars[currentEndChar][r] |= (1 << 4 - c + 1);
  27.         }
  28.         lcd_generatechar(currentEndChar, endChars[currentEndChar]);
  29.         lcd_setcursor(i - 1, lcd_row + 1);
  30.         lcd_data(currentEndChar);
  31.         currentEndChar++;
  32.       }
  33.       else {
  34.         lcd_setcursor(i - 1, lcd_row + 1);
  35.         if(tmpValues[0 + 2 * lcd_row] >= i * 5 && tmpValues[1 + 2 * lcd_row] >= i * 5) lcd_data(uint8_t(7));
  36.         else if(tmpValues[0 + 2 * lcd_row] >= i * 5 && tmpValues[1 + 2 * lcd_row] < i * 5) lcd_data(uint8_t(5));
  37.         else if(tmpValues[0 + 2 * lcd_row] < i * 5 && tmpValues[1 + 2 * lcd_row] >= i * 5) lcd_data(uint8_t(6));
  38.         else lcd_data(' ');
  39.       }
  40.     }
  41.   }
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement