1

Тема: LCD1602_4BIT

// Подключаем пины Arduino к пинам LCD1602
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
int int_out;
unsigned long times;

void setup() {
  Serial.begin(9600);
  // Устанавливаем пины в режим вывода
  pinMode(rs, OUTPUT);
  pinMode(en, OUTPUT);
  pinMode(d4, OUTPUT);
  pinMode(d5, OUTPUT);
  pinMode(d6, OUTPUT);
  pinMode(d7, OUTPUT);

  // Инициализируем экран
  lcd_init();
}

void loop() {
  times=millis();
  for(int i1=0;i1<10000;i1++){
  lcd_command(0x80);
  lcd_print("LCD1602");
  lcd_command(0xC0);
  lcd_print(String(int_out++));
  }
   lcd_command(0x01);
   int_out=0;
   Serial.print("4-bit ");Serial.println(millis()-times);
   delay(1000);
}

void lcd_init() {
  // Инициализация экрана
  delay(100);
  lcd_command(0x03);delayMicroseconds(4500);
  lcd_command(0x03);delayMicroseconds(4500);
  lcd_command(0x03);delayMicroseconds(200);
  lcd_command(0x02);
  lcd_command(0x28);
  lcd_command(0x0C);
  lcd_command(0x01);
}

void lcd_command(byte cmd) {
  // Отправляем команду на экран
  digitalWrite(rs, LOW);delayMicroseconds(100);
  lcd_write(cmd);
}

void lcd_print(String str) {
  // Выводим строку на экран
  digitalWrite(rs, HIGH);
  for (int i = 0; i < str.length(); i++) {
    lcd_write(str[i]);
  }
}

void lcd_write(byte data) {
  // Отправляем данные на экран
  digitalWrite(d4, (data >> 4) & 0x01);
  digitalWrite(d5, (data >> 5) & 0x01);
  digitalWrite(d6, (data >> 6) & 0x01);
  digitalWrite(d7, (data >> 7) & 0x01);

  digitalWrite(en, HIGH);
  delayMicroseconds(1);
  digitalWrite(en, LOW);
  delayMicroseconds(50);
  
  digitalWrite(d4, (data >> 0) & 0x01);
  digitalWrite(d5, (data >> 1) & 0x01);
  digitalWrite(d6, (data >> 2) & 0x01);
  digitalWrite(d7, (data >> 3) & 0x01);

  digitalWrite(en, HIGH);
  delayMicroseconds(1);
  digitalWrite(en, LOW);
  delayMicroseconds(50);
}

2

Re: LCD1602_4BIT

LCD1602_8BIT

// Подключаем пины Arduino к пинам LCD1602
const int rs = 12, en = 11, d0 = 2, d1 = 3, d2 = 4, d3 = 5, d4 = 6, d5 = 7, d6 = 8, d7 = 9;
int int_out;
unsigned long times;

void setup() {
    Serial.begin(9600);
  // Устанавливаем пины в режим вывода
  pinMode(rs, OUTPUT);
  pinMode(en, OUTPUT);
  pinMode(d0, OUTPUT);
  pinMode(d1, OUTPUT);
  pinMode(d2, OUTPUT);
  pinMode(d3, OUTPUT);
  pinMode(d4, OUTPUT);
  pinMode(d5, OUTPUT);
  pinMode(d6, OUTPUT);
  pinMode(d7, OUTPUT);

  // Инициализируем экран
  lcd_init();
}

void loop() {
  times=millis();
  for(int i1=0;i1<10000;i1++){
  lcd_command(0x80);
  lcd_print("LCD1602");
  lcd_command(0xC0);
  lcd_print(String(int_out++));
  }
   lcd_command(0x01);
   int_out=0;
   Serial.print("8-bit ");Serial.println(millis()-times);
   delay(1000);
}

void lcd_init() {
  // Инициализация экрана
  delay(100);
  lcd_command(0x03);delayMicroseconds(4500);
  lcd_command(0x03);delayMicroseconds(4500);
  lcd_command(0x03);delayMicroseconds(200);
  lcd_command(0x02);
  lcd_command(0x38);
  lcd_command(0x0C);
  lcd_command(0x01);
}

void lcd_command(byte cmd) {
  // Отправляем команду на экран
  digitalWrite(rs, LOW);delayMicroseconds(100);
  lcd_write(cmd);
}

void lcd_print(String str) {
  // Выводим строку на экран
  digitalWrite(rs, HIGH);
  for (int i = 0; i < str.length(); i++) {
    lcd_write(str[i]);
  }
}

void lcd_write(byte data) {
  // Отправляем данные на экран
  digitalWrite(d7, (data >> 7) & 0x01);
  digitalWrite(d6, (data >> 6) & 0x01);
  digitalWrite(d5, (data >> 5) & 0x01);
  digitalWrite(d4, (data >> 4) & 0x01);
  digitalWrite(d3, (data >> 3) & 0x01);
  digitalWrite(d2, (data >> 2) & 0x01);
  digitalWrite(d1, (data >> 1) & 0x01);
  digitalWrite(d0, (data >> 0) & 0x01);

  digitalWrite(en, HIGH);
  delayMicroseconds(1);
  digitalWrite(en, LOW);
  delayMicroseconds(50);
}

3

Re: LCD1602_4BIT

http://forum.rcl-radio.ru/uploads/images/2023/04/51032f0325bbe61476a1af1bc32dc52e.gif

4

Re: LCD1602_4BIT

http://forum.rcl-radio.ru/uploads/images/2023/04/2fb6df590a962da72d0fa94ff7765085.gif