Паяльник

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Паяльник » Микроконтроллеры » Русские буквы на LCD1602 + Arduino Uno


Русские буквы на LCD1602 + Arduino Uno

Сообщений 1 страница 3 из 3

1

Программа выводит на экран все символы из набора LCD контроллера.

Таким нехитрым способом можно посмотреть какие символы содержатся в вашем LCD дисплее.

При нажатии на кнопку выходят каждые 32 символа (2 ряда по 16)

Код:
// Печатаем всю таблицу символов на LCD1602
// каждое нажатие кнопки выводит по 16 символов в каждый ряд
// общее количество 255 символов

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); 

/* SDA - A4
   SCL - A5
*/

#define Button 11 // Кнопка Next

int Val;
int k=0;  

void setup () {
  Serial.begin(9600);
  Wire.begin();
  lcd.begin(16,2);
  lcd.backlight();
  lcd.home();
  lcd.clear();  
  pinMode(Button, INPUT_PULLUP); // Подтяжка пина к +5в  
}

void loop () {
Val = digitalRead (Button);    
  if (Val == LOW)
  {       
  digitalClockDisplay();
  }  
  delay(200);
}


void digitalClockDisplay(){
 
    lcd.setCursor(0,0);

   for (int i = 0; i<16; i++)
  {
    lcd.setCursor(i, 0);   
    lcd.write(k);
    k++;
  }
   for (int i = 0; i<16; i++)
  {
    lcd.setCursor(i, 1);   
    lcd.write(k);
    k++;
  }
  Serial.println(k);
  
}

0

2

http://s4.uploads.ru/t/WEmyI.jpg
МОЖНО ВОТ ТАК...

1602_RUS

#include <Wire.h> // подключаем штатную библиотеку позволяющую взаимодействовать с I2C/TWI-устройствами
#include <LiquidCrystal_I2C.h> // Подключаем библиотеку для работы с дисплеем

LiquidCrystal_I2C lcd(0x3F,16,2); // устанавливаем адрес 0x27 или 0x3F, и дисплей 16 символов в 2 строки (16х2)
static byte addon_letters[16];
void init_rus(const char* letters_use )
{
  static byte letters[][8]   = {
        { B11110, B10000, B10000, B11110, B10001, B10001, B11110, B00000 },//Б
        { B11111, B10000, B10000, B10000, B10000, B10000, B10000, B00000 },//Г
        { B00110, B01010, B01010, B01010, B01010, B11111, B10001, B00000 },//Д
        { B10001, B10101, B10101, B01110, B10101, B10101, B10001, B00000 },//Ж
        { B01110, B10001, B00001, B00110, B00001, B10001, B01110, B00000 },//З
        { B10001, B10001, B10001, B10011, B10101, B11001, B10001, B00000 },//И
        { B10101, B10001, B10001, B10011, B10101, B11001, B10001, B00000 },//Й
        { B00110, B01001, B01001, B01001, B01001, B01001, B11001, B00000 },//Л
        { B11111, B10001, B10001, B10001, B10001, B10001, B10001, B00000 },//П
        { B10001, B10001, B10001, B01111, B00001, B10001, B01110, B00000 },//У
        { B01110, B10101, B10101, B10101, B01110, B00100, B00100, B00000 },//Ф
        { B10010, B10010, B10010, B10010, B10010, B10010, B11111, B00001 },//Ц
        { B10001, B10001, B10001, B01111, B00001, B00001, B00001, B00000 },//Ч
        { B10101, B10101, B10101, B10101, B10101, B10101, B11111, B00000 },//Ш
        { B10101, B10101, B10101, B10101, B10101, B10101, B11111, B00001 },//Щ
        { B10000, B10000, B10000, B11110, B10001, B10001, B11110, B00000 },//Ь
        { B11000, B01000, B01000, B01110, B01001, B01001, B01110, B00000 },//Ъ
        { B10001, B10001, B10001, B11001, B10101, B10101, B11001, B00000 },//Ы
        { B01110, B10001, B00001, B00111, B00001, B10001, B01110, B00000 },//Э
        { B10010, B10101, B10101, B11101, B10101, B10101, B10010, B00000 },//Ю
        { B01111, B10001, B10001, B01111, B00101, B01001, B10001, B00000 },//Я
  };
  static char chars[] = {'Б','Г','Д','Ж','З','И','Й','Л','П','У','Ф','Ц','Ч','Ш','Щ','Ь','Ъ','Ы','Э','Ю','Я'};
  static byte empty[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
  int index = 0, cl = sizeof(chars)/sizeof(char),i,j,symb;
  memset(addon_letters,0,sizeof(addon_letters));
  for( j = 0; j < strlen(letters_use) && j < 16; j++ )
          lcd.createChar(j, empty);

  for( j = 0; j < strlen(letters_use) && j < 16; j++ )
  {
          symb = -1;
          for( i=0; i < cl; i++ ) if( chars[i] == letters_use[j] ) { symb = i; addon_letters[index] = letters_use[j]; break; }
          if( symb != -1 ) { lcd.createChar(index, letters[symb]); index++; }
  }
}
void print_rus(char *str) {
  static char rus_letters[] = {'А','В','Е','Ё','К','М','Н','О','Р','С','Т','Х'};
  static char trans_letters[] = {'A','B','E','E','K','M','H','O','P','C','T','X'};
  int lcount = sizeof(rus_letters)/sizeof(char), i, j;
  for( i=0; i<strlen(str); i++ )
  {
        if( byte(str[i]) == 208 ) continue; // 208 ignore
        int found = 0;
        for(j=0; j < 16; j++) if( addon_letters[j] != 0 && byte(str[i]) == byte(addon_letters[j]) ) { lcd.write(j); found = 1; break; }
        if(!found) for(j=0; j < lcount; j++) if( byte(str[i]) == byte(rus_letters[j]) ) { lcd.write(trans_letters[j]); found = 1; break; }
        if(!found) lcd.write(byte(str[i]));
  } 
}
void print_rus(int x, int y, char *str) {
  lcd.setCursor(x, y);
  print_rus(str);
}
void setup() // НАСТРОЙКИ
{
  lcd.init(); // инициализация LCD
  lcd.backlight(); // включаем подсветку
}

void loop() // ОСНОВНОЙ ЦИКЛ
{
  init_rus("ДЛЫЗЙЬЯЖ"); // можно выбрать 8 символов
  lcd.clear(); // устанавливаем курсор на 1 строку, 0 символ
  print_rus(0,0,"++++++++++++++++");
  print_rus(0,1,"ЛЕТО,ЯСНЫЙ ДЕНЬ.");
  delay(3000);
  lcd.clear();
  print_rus(0,0,"ОСЕНЬ СКОРО...");
  print_rus(0,1,"****************");
  delay(3000);
}

0

3

besteugen
А сразу вопрос: если убрать второе сообщение, то первое пойдет казяблами, почему?

0


Вы здесь » Паяльник » Микроконтроллеры » Русские буквы на LCD1602 + Arduino Uno


создать форум