19.04.2026

LCD1602 displey moduli [14+]

Suyuq kristalli displey moduli. LCD1602.

16 ta ustun (katak) va 2 ta qatorda yozuvlarni tasvirlovchi, arduinochilar orasida eng ko’p qo’llaniladigan displey modullaridan biri. Uning qator va ustunlari soni bilan farq qiluvchi boshqa turlari ham mavjud (LCD2004 – 20 ta ustun va 4 ta qatorli, LCD0802 – 8 ta ustun va 2 ta qatorli, LCD0801 – 8 ta ustun va 1 ta qatorli). Lekin ularning ishlash prinsipi bir xil bo’lganligi uchun ko’pincha bir xil bibliotekani ularning hammasi uchun qo’llash mumkin.

Yuqorida sabab o’tilgan displeylarning raqamli pinlari soni ko’pligi, ularni Arduinoga ulanganda mikrokontrollerning ham ko’p sondagi pinlari band bo’lib qilishiga olib keladi. Shuning uchun, ko’p hollarda ushbu displeylar qo’shimcha I2C moduli bilan birga qo’llaniladi (yuqoridagi rasmda ko’rsatilgan). Natijada displeyni ulash uchun Arduinodan faqat 2 ta pin (maxsus SDA, SCL pinlari) talab qilinadi xolos. Biroq shu bilan birga, I2C modulli LCD displeyning bibliotekasi (“LiquidCrystal_I2C.h”) ham oddiy displeynikidan (“LiquidCrystal.h”) farq qiladi.

Sketchda “LiquidCrystal_I2C” modulini e’lon qilishda uning shinadagi, 16 sanoq tizimidagi manzilini ko’rsatish talab etiladi. Agar manzil noto’g’ri ko’rsatilsa yoki ko’rsatilmasa, ulangan modul faollashmaydi. Arduino platasining maxsus SDA va SCL pinlariga bir nechta I2C modul parallel ulanishi mumkin, biroq ularning manzili bir-biridan farq qilishi kerak. Agar bir xil manzilli mudullar mavjud bo’lsa, aniq bir modulning manzilini qo’lda o’zgartirish mumkin. Buning uchun moduldagi A0, A1, A2 jamperlardan birining kontaktlarini ulash zarur. Qaysi jamper(lar)ning kontaktlari ulangan yoki uzilganidan kelib chiqib jami 8 ta (PCF8574 chipli modul uchun: 0x20…0x27, PCF8574A chipli modul uchun: 0x38…0x4E) kombinatsiyadagi manzillarni o’rnatish mumkin. Quyidagi maxsus sketch yordamida Arduino platasiga ulangan barcha modullarning manzilini aniqlash mumkin.

I2C modul manzilini aniqlash
#include <Wire.h>
void setup(){
Wire.begin();
Serial.begin(115200);
while (!Serial);
Serial.println(“\nI2C Scanner”);
}

void loop(){
byte error, address;
int nDevices;
Serial.println(“Scanning…”);
nDevices = 0;
for(address = 8; address < 127; address++ ){
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0){
Serial.print(“I2C device found at address 0x”);
if (address<16)
Serial.print(“0”);
Serial.print(address,HEX);
Serial.println(” !”);
nDevices++;
}
else if (error==4) {
Serial.print(“Unknow error at address 0x”);
if (address<16)
Serial.print(“0”);
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println(“No I2C devices found\n”);
else
Serial.println(“done\n”);
delay(2000);
}

Ushbu displeylarning yorug’ligini dastur yordamida boshqarib bo’lmaydi (yoritgich – podsvetkani ulash/uzish mumkin xolos), lekin unga ulangan I2C moduldagi maxsus potensiometr (yuqoridagi rasmga qarang) yordamida displey yorug’ligini (kuchlanishni) oldindan kerakli darajaga sozlab olish mumkin.

I2C modulli LCD1602 displeydan foydalanishda qo’shimcha ravishda “Wire.h” bibliotekasidan ham foydalaniladi. Ushbu displey bilan qo’llash uchun ham Arduinoda tayyor namunaviy sketchlar mavjud. Ular Файл menyusining Примеры/LiquidCrystal_I2C bo’limidan ochiladi. Biz quyida ushbu sketchlarnig ayrimlari bilan qisqacha tanishamiz. Sketchdagi notanish buyruqlar vazifasi misollar davomida qisqacha izohlab ketiladi (bir xil buyruq qayta izohlanmaydi, sketch originalidagi inglizcha izohlar ham ko’rsatilmaydi). Ushbu sketchlarni ishga tushirishimiz uchun ortiqcha elektron komponentlar talab etilmaydi.

Kerakli materiallar:
1) Arduino UNO platasi + USB-kabel + maket platasi + o’tkazgichlar
2) Male-female turli o’tkazgichlar (plata va displeyni bog’lash uchun)
3) LCD1602 displeyi

LCD1602 displeyining SDA va SCL pinlari mikrokontrollerlarning xuddi shunday nomli (AREF yonidagi) pinlariga yokiga quyidagicha ulanadi:

Arduino UNO: SDA – A4, SCL – A5, VCC – +5V, GND – GND.
Wemos D1 mini: SDA – D2, SCL – D1, VCC – +5V, GND – GND.

Elektron komponentlarning bog’lanish sxemasi (male-female o’tkazgichlari qo’llanilsa, maket platasi qo’llanilishi shart emas):

LCD1602. 'HelloWorld' sketchi

// “HelloWorld” sketchi displeyga “Hello, world!” matnli yozuvini chiqaradi.

#include <Wire.h> // I2C moduli bibliotekasi ulanmoqda
#include <LiquidCrystal_I2C.h> // Displey bibliotekasi ulanmoqda

LiquidCrystal_I2C lcd(0x27, 16, 2); // LiquidCrystal_I2C turidagi lcd nomli obyekt e’lon qilinmoqda
// Argumentdagi qiymatlar: 0x27 – I2C modulning unikal manzili. I2C portiga ulangan barcha displeylar unikal manzilga ega bo’lishi shart; 16 va 2 sonlari – displey ekranidagi ustunlar va qatorlar soni.

void setup()
{
lcd.begin(); // lcd nomli displey faollashtirilmoqda
lcd.backlight(); // Displey yoritkichi (podsvetka) yoqilmoqda. Uzish buyrug’i – lcd.noBacklight();
lcd.print(“Hello, world!”); // Matn displeyga chiqarilmoqda
}

void loop()
{

}

Natija:

LCD1602. 'BlinkingCursor' sketchi

// “BlinkingCursor” sketchi displeyda har 4 sekundda kursor hosil qilib, uni pirpirash rejimiga o’tkazadi va uni bekor qiladi. Mos ravishda displeyda “No cursor blink” yoki “Cursor blink” matnli yozuvlarini chiqaradi.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()

{
lcd.begin();
}

void loop()
{
bool blinking = true; // bool turidagi blinking o’zgaruvchisi e’lon qilinmoqda va unga true qiymati o;zlashtirilmoqda
lcd.cursor(); // Displeyda kursorni ko’rsatish funksiyasi faollashtirilmoqda

while (1) { // “Quyidagi kod to’xtovsiz bajarilsin:”
if (blinking) { // “Agar blinking = true bo’lsa … sharti tekshirilmoqda
lcd.clear(); // Displey tozalanmoqda
lcd.print(“No cursor blink”); // Displeyga ‘No cursor blink‘ matni chiqarilmoqda
lcd.noBlink(); // Pirpirash rejimi bekor qilinmoqda
blinking = false; // blinking o’zgaruvchisi qiymati false ga o’zgartirilmoqda
} else { // “Aksincha…” (ya’ni,Agar blinking = false bo’lsa … sharti tekshirilmoqda)
lcd.clear(); // Displey tozalanmoqda
lcd.print(“Cursor blink”); // Displeyga ‘Cursor blink‘ matni chiqarilmoqda
lcd.blink(); // Pirpirash rejimi o’rnatilmoqda
blinking = true; // blinking o’zgaruvchisi qiymati true ga o’zgartirilmoqda
}
delay(4000); //4 sekundlik pauza o’rnatilmoqda
}
}

Natija:

LCD1602. 'SerialDisplay' sketchi

// “SerialDisplay” sketchi port monitori orqali kiritilgan yozuvlarni displeyga chiqaradi

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
lcd.begin();
lcd.backlight();

Serial.begin(9600);
}

void loop()
{
if (Serial.available()) { // “Agar portda axborot paydo bo’lsa…” sharti tekshirilmoqda
delay(100); // stabillashtiruvchi pauza o’rnatilmoqda
lcd.clear();

while (Serial.available() > 0) { // “port monitoridan kamida 1 ta yozuv yuborilsa…”
lcd.write(Serial.read()); // portdan qabul qilingan yozuv displeyga chiqariladi
}
}
}

}

Natija:

Shuningdek, “CustomChars” sketchi yordamida displeyga chiqarish mumkin bo’lgan maxsus belgilar ro’yxatini ko’rish mumkin. Kelgusida esa, aniq bir maxsus belgini uning kodi bo’yicha hosil qilish mumkin bo’ladi:

Kerakli materiallar:

1) LCD1602 displeyiga “HelloWorld” sketchi orqali turli boshqa raqamlar va matnli yozuvlarni chiqaring;

2) LCD1602 displeyiga “BlinkingCursor” sketchi orqali turli boshqa yozuvlarni chiqaring;

3) Barcha topshiriqlarni Wemos D1 Mini platasi yordamida bajaring;

4) Yuqoridagi sketchlardan foydalanib ushbu dars mavzusiga doir shaxsiy o’quv loyihasi taklifini bering va uni amalda bajaring, uning videosini tayyorlang (muvaffaqiyatli unikal loyihalar videosiga havolalar o’quvchining nomidan saytning shu joyiga joylashtirib boriladi).

Добавить комментарий