Garis lari. Arduino. Max7219 dan sepasang kabel. Pelajaran Arduino: membuat ticker menggunakan mikrokontroler Ticker pada layar 1602

Garis merayap di LCD pada HD44780.

Pencarian “solusi siap pakai” untuk ticker di C tidak membuahkan hasil apa pun. Jadi saya harus melakukannya sendiri.

“Potongan” kode ini memungkinkan Anda untuk menampilkan garis lari (dari kanan ke kiri), di mana saja dan menggunakan sejumlah familiar, dalam indikator LCD dengan pengontrol HD44780 atau serupa.

Hal pertama yang perlu Anda tunjukkan adalah bahwa bahasa C tidak mengizinkan Anda bekerja dengan string "secara langsung". Artinya, tidak mungkin menyalin karakter dari satu string ke string lainnya menggunakan operator penugasan ( = )... untuk ini, Anda perlu menggunakan fungsi khusus strncpy(). Secara umum, beberapa fungsi digunakan untuk bekerja dengan string di C. Di Self-Tormentors, bab terpisah dikhususkan untuk penggunaan fungsi-fungsi ini. Di Bantuan"e di CV_AVR, deskripsi fungsi untuk bekerja dengan string ada di bagian "Fungsi String". Prototipe fungsi-fungsi ini ada di file string.h.

"...string sumber..." - serangkaian karakter yang harus ditampilkan di baris "berjalan";

"...karakter yang ditampilkan..." - "garis merayap" yang sebenarnya.

Untuk mengatur garis merayap, algoritma berikut dipilih:

1. Karakter yang ditampilkan bergeser dari kanan ke kiri. Yang paling kiri adalah “hilang” dalam kasus ini.

2. Setelah pergeseran, karakter berikutnya dari string sumber disalin ke karakter paling kanan.

3. Ketika akhir baris sumber tercapai, karakter pertama baris sumber menjadi karakter berikutnya.

Untuk menggeser karakter - untuk sel yang digeser, kode karakter dibaca dari layar RAM (DDRAM) HD44780 dan ditulis ke sel RAM sebelah kiri.

Menurut DataSheet pada HD44780, karakter kiri baris atas memiliki alamat DDRAM 0x00, dan karakter kiri baris bawah memiliki alamat 0x40. Harus diingat bahwa untuk mengakses RAM layar (dan bukan RAM penghasil karakter), bit RS harus sama dengan 1 (RS adalah bit paling signifikan dalam byte alamat, lihat DataSheet).

Hasilnya, kami mendapatkan bahwa untuk "mengalamatkan" karakter kiri kedua dari baris atas, Anda perlu "bekerja" dengan alamat tersebut 0x01 | 0x80 = 0x81.

Fungsi untuk menulis dan membaca "konten internal" HD44780 ada di perpustakaan (prototipe di LCD.h.... oleh karena itu.. program itu sendiri:

/* untuk CV_AVR

Dalam contoh ini, garis merayap ditampilkan dalam bit 8 (0xC7) hingga 16 dari garis terbawah indikator 16-bit.

. ......

#termasuk

karakter yang tidak ditandatangani n_sim=1,m_end=43; //43 - panjang garis pada contoh
...........

mohon_stroka())(
karakter i yang tidak ditandatangani;

// menggeser garis merayap

jika(mohon_str)(
untuk(saya=0;saya<9;i++)lcd_write_byte(0xC7+i,lcd_read_byte(0xC8+i));
mohon_str=0;

// menulis karakter selanjutnya ke posisi paling kanan

lcd_gotoksi(15,1);
lcd_putchar(ish_str);
if(++n_sim>m_end)n_sim=1;
}
}

Glosarium:

n_sim - penunjuk ke posisi karakter saat ini dalam string sumber;

m_end - jumlah total karakter dalam string sumber;

mohon_str- sedikit "aktifkan" shift. Dengan bantuannya Anda dapat mengatur kecepatan lari;

ish_str - string sumber.

Kemungkinan besar, masing-masing kompiler C yang ada memiliki fungsi perpustakaan untuk bekerja dengan HD44780. Oleh karena itu, “membuat ulang” program untuk kompiler “Anda” tidak akan sulit.

Saya "menyiapkan" string sumber menggunakan utilitas terkenal "HD44780.exe". Saat menggunakannya, panjang garis ditunjukkan di komentar: "/* Panjang maksimum garis: 43 byte */"

Setiap tahun, panel dipasang pada rambu toko, jalan, dan lorong yang menampilkan pesan iklan dalam bentuk teks. Lampu pada panel menyala dengan cara berbeda: garis bergerak ke atas, bawah, ke kanan dan kiri. Gambar bercahaya juga relevan.

Orang yang lewat tidak akan mengabaikan aksesori tersebut. Banyak insinyur elektronik pemula yang tertarik dengan cara kerja desain ini dan apa yang diperlukan untuk membuatnya. Produk ini dapat dengan mudah dibuat di rumah. Artikel ini akan memperkenalkan prinsip-prinsip pengoperasian ticker kepada pecinta perangkat elektronik pemula, di mana Arduino digunakan sebagai komponen utamanya.

Ticker pada Arduino merupakan produk elektronik berbasis mikrokontroler Arduino. Area kerja perangkat ditutupi dengan LED. Tujuan utamanya adalah untuk menyiarkan gambar dan pesan teks. Data bisa statis atau animasi.

String ringan dibuat menggunakan modul. Ukuran defaultnya adalah 32x16 cm. Luas permukaan kerja secara langsung bergantung pada jumlah modul dan ukurannya.

Selain itu, pengontrol dimasukkan ke dalam saluran, yang berperan untuk mengontrol gambar. Perangkat beroperasi secara offline. Untuk mengubah pesan teks atau gambar, ticker terhubung ke komputer. Profil aluminium menahan seluruh struktur.

Berdasarkan skema warnanya, ada 2 jenis ticker di Arduino:

  1. Monokrom atau warna tunggal.
  2. Berbagai corak - biasanya 8 warna, latar belakang hitam juga disertakan.

Kebanyakan orang lebih menyukai warna merah karena warnanya paling jenuh. Warna putih juga tak kalah populernya. Jika lampu putih bersinar terang dengan latar belakang hitam, teks terlihat lebih rapi.

Pengguna menempatkan semua data dalam memori mikrokontroler. Ada beberapa metode untuk memperbarui gambar atau garis:

  1. Dasar - melalui kabel USB. Mikroprosesor Arduino dihubungkan melalui port USB ke perangkat komputer. Dari komputer, pengembang mentransfer kode programnya ke memori mikroprosesor.
  2. Melalui jaringan melalui kabel Lan. Metode ini disediakan untuk pengguna yang terus-menerus memperbarui string elektronik. Teknik penyambungannya mirip dengan poin sebelumnya.

Berdasarkan jenisnya, ada papan lari yang dibuat untuk penggunaan di dalam dan luar ruangan. Yang di luar ruangan sering kali dilindungi dengan kanopi khusus untuk mencegah air hujan masuk ke LED.

Seperangkat alat dan bahan yang diperlukan

Di bawah ini adalah tabel yang merinci alat yang Anda perlukan untuk membuat lampu berjalan di Arduino.

Alat Keunikan
Nano merupakan model yang ukurannya paling kecil di antara jajaran Arduino. Berdasarkan sifatnya, platform ini mirip dengan kerabatnya - . Insinyur elektronik pemula umumnya membuat model perangkat mereka yang ringkas, sehingga Nano yang ringkas berguna untuk ini. Soket untuk daya eksternal tersembunyi di dalam. Pekerjaan dilakukan melalui port USB. Ciri-ciri lainnya mirip dengan model Uno.

Parameter Teknis:

  • tegangan yang diperlukan untuk memberi daya pada perangkat adalah 5 Volt;
  • berat – 7 gram;
  • ukuran – 19x42 mm;
  • frekuensi operasi – 16 MHz;
  • memori flash – 16 KB;
  • RAM – 2 KB;
  • pin digital – 14 buah, 6 di antaranya dapat digunakan sebagai output PWM
  • Daya input yang dibutuhkan sekitar 12 Volt.

Ada 2 cara untuk memberdayakan platform:

  1. Melalui mikro USB atau mini USB.
  2. Saat menggunakan sel daya eksternal, yang tegangan totalnya antara 6 hingga 20 Volt. Praktis tidak ada gelombang denyut.
pita LED Strip LED dihubungkan secara paralel, di beberapa bagian. Panjang setiap segmen tidak boleh lebih dari 5 m. Selain itu, di toko-toko dijual dengan standar ini. Jika Anda perlu membuat garis yang membutuhkan 10 atau bahkan 15 meter, Anda harus mengotak-atiknya. Dalam situasi apa pun, bagian pertama tidak boleh dihubungkan ke awal bagian kedua. Dipercaya bahwa 5 meter adalah panjang yang menunjukkan perhitungan di mana jalur pita itu ditahan. Jika Anda memberi beban pada selotip, selotip itu akan pecah dan produk jadinya akan rusak.

Dan dari sisi yang terawat, teks track akan terlihat jelek karena cahayanya tidak merata: di awal track cahayanya akan terang, tetapi di akhir akan redup.

Kabel Kumpulan kabel untuk menghubungkan komponen
Papan kendali proses Mikroprosesor dan bagian lain untuk produk jadi (misalnya Troika Shield) ditempatkan pada platform kontrol.

Gambar dan diagram

Untuk mengontrol strip LED, pertama-tama, Anda perlu menerapkan tegangan ke anoda port bernomor 2 hingga 9. Setelah itu, tegangan disuplai langsung ke katoda. Untuk melakukan ini, Anda memerlukan blok transistor.

Perhatian! Output dari platform ini adalah 5 Volt. Untuk menghubungkan anoda di papan, Anda perlu menggunakan resistor yang beroperasi pada 220 Ohm. Pada saat yang sama, untuk menghubungkan blok transistor ke output, diperlukan 1 resistor KOhm.

Proyek ini mencakup penggunaan transistor bipolar 2N2904. Jika Anda menghubungkan semua transistor ke kontak Anda pada platform matriks, Anda hanya memerlukan 10 transistor. Saat merancang perangkat elektronik, transistor jenis ini adalah yang paling populer dan memenuhi semua kriteria dan ketentuan untuk mengembangkan ticker di Arduino. Tegangan kecil akan disuplai ke sistem yang dibuat.

Mari kita jelaskan bagaimana lampu pada pita itu menyala. 1 kontak dipilih, yang bertanggung jawab untuk memasok sinyal ke anoda LED. Bersamaan dengan tindakan sebelumnya, sinyal disuplai ke basis emitor dari lubang keluaran di penghitung. Oleh karena itu, tegangan dari kolektor transistor langsung menuju ke katoda LED. Pada permukaan matriks, anoda pada baris yang berdekatan terjalin dengan katoda pada kolom yang berdekatan. Oleh karena itu, pengguna dapat mengamati fenomena di mana seluruh ticker menyala secara bersamaan.

Ada pilihan lain:

Diagramnya akan terlihat seperti ini:

Bagian perangkat lunak

Untuk implementasi pertama, kodenya mungkin terlihat seperti ini:

Batalkan pengaturan())( int i; untuk(i = 2; i< 10; i++) pinMode(i,OUTPUT); pinMode(clock,OUTPUT); pinMode(reset,OUTPUT); digitalWrite(reset,HIGH); delayMicroseconds(5); digitalWrite(reset,LOW); } void display_symbol(int loops) { for(x=0;x-1;y--)( byte temp = simbol[x][y]; byte temp_2=simbol[y]; byte val = (temp<>7-z);<8; i++) digitalWrite(i+2, (val>untuk(int saya =0; saya

>i)&B00000001);

penundaanMikrodetik(800);<= 100) { delay(30); if (key1Value <= 100) { digitalWrite(RGB5,HIGH); digitalWrite(RGB6, HIGH); delay(50); digitalWrite(RGB4, HIGH); digitalWrite(RGB7,HIGH); delay(50); digitalWrite(RGB3, HIGH); digitalWrite(RGB8, HIGH); delay(50); digitalWrite(RGB2,HIGH); digitalWrite(RGB9, HIGH); delay(50); digitalWrite(RGB1, HIGH); digitalWrite(RGB10, HIGH); delay(1000); } else { digitalWrite(RGB1, LOW); digitalWrite(RGB2, LOW); digitalWrite(RGB3, LOW); digitalWrite(RGB4, LOW); digitalWrite(RGB5, LOW); digitalWrite(RGB6, LOW); digitalWrite(RGB7, LOW); digitalWrite(RGB8, LOW); digitalWrite(RGB9, LOW); digitalWrite(RGB10, LOW); } } if (key2Value <= 100) { digitalWrite(RGB1,HIGH); digitalWrite(RGB6, HIGH); delay(40); digitalWrite(RGB2, HIGH); digitalWrite(RGB7,HIGH); delay(40); digitalWrite(RGB3, HIGH); digitalWrite(RGB8, HIGH); delay(40); digitalWrite(RGB4,HIGH); digitalWrite(RGB9, HIGH); delay(40); digitalWrite(RGB5, HIGH); digitalWrite(RGB10, HIGH); delay(1000); } else { digitalWrite(RGB1, LOW); digitalWrite(RGB2, LOW); digitalWrite(RGB3, LOW); digitalWrite(RGB4, LOW); digitalWrite(RGB5, LOW); digitalWrite(RGB6, LOW); digitalWrite(RGB7, LOW); digitalWrite(RGB8, LOW); digitalWrite(RGB9, LOW); digitalWrite(RGB10, LOW); } if (key3Value <= 100) { digitalWrite(RGB1,HIGH); delay(90); digitalWrite(RGB1, LOW); digitalWrite(RGB2, HIGH); delay(90); digitalWrite(RGB2, LOW); digitalWrite(RGB3, HIGH); delay(90); digitalWrite(RGB3, LOW); digitalWrite(RGB4, HIGH); delay(90); digitalWrite(RGB4, LOW); digitalWrite(RGB5,HIGH); delay(90); digitalWrite(RGB5, LOW); digitalWrite(RGB6,HIGH); delay(90); digitalWrite(RGB6, LOW); digitalWrite(RGB7,HIGH); delay(90); digitalWrite(RGB7, LOW); digitalWrite(RGB8,HIGH); delay(90); digitalWrite(RGB8, LOW); digitalWrite(RGB9,HIGH); delay(90); digitalWrite(RGB9, LOW); digitalWrite(RGB10,HIGH); delay(1000); } else { digitalWrite(RGB1, LOW); digitalWrite(RGB2, LOW); digitalWrite(RGB3, LOW); digitalWrite(RGB4, LOW); digitalWrite(RGB5, LOW); digitalWrite(RGB6, LOW); digitalWrite(RGB7, LOW); digitalWrite(RGB8, LOW); digitalWrite(RGB9, LOW); digitalWrite(RGB10, LOW); } if (key4Value <= 100) { digitalWrite(RGB1,HIGH); delay(50); digitalWrite(RGB1, LOW); digitalWrite(RGB2, HIGH); delay(50); digitalWrite(RGB2, LOW); digitalWrite(RGB3, HIGH); delay(50); digitalWrite(RGB3, LOW); digitalWrite(RGB4,HIGH); delay(50); digitalWrite(RGB4, LOW); digitalWrite(RGB5, HIGH); delay(50); digitalWrite(RGB5, LOW); digitalWrite(RGB6, HIGH); delay(50); digitalWrite(RGB6, LOW); digitalWrite(RGB7,HIGH); delay(50); digitalWrite(RGB7, LOW); digitalWrite(RGB8, HIGH); delay(50); digitalWrite(RGB8, LOW); digitalWrite(RGB9, HIGH); delay(50); digitalWrite(RGB9, LOW); digitalWrite(RGB10,HIGH); delay(50); digitalWrite(RGB10, LOW); digitalWrite(RGB9, HIGH); delay(50); digitalWrite(RGB9, LOW); digitalWrite(RGB8, HIGH); delay(50); digitalWrite(RGB8, LOW); digitalWrite(RGB7,HIGH); delay(50); digitalWrite(RGB7, LOW); digitalWrite(RGB6, HIGH); delay(50); digitalWrite(RGB6, LOW); digitalWrite(RGB5, HIGH); delay(50); digitalWrite(RGB5, LOW); digitalWrite(RGB4,HIGH); delay(50); digitalWrite(RGB4, LOW); digitalWrite(RGB3, HIGH); delay(50); digitalWrite(RGB3, LOW); digitalWrite(RGB2, HIGH); delay(50); digitalWrite(RGB2, LOW); digitalWrite(RGB1, HIGH); delay(50); digitalWrite(RGB1, LOW); delay(1000); } else { digitalWrite(RGB1, LOW); digitalWrite(RGB2, LOW); digitalWrite(RGB3, LOW); digitalWrite(RGB4, LOW); digitalWrite(RGB5, LOW); digitalWrite(RGB6, LOW); digitalWrite(RGB7, LOW); digitalWrite(RGB8, LOW); digitalWrite(RGB9, LOW); digitalWrite(RGB10, LOW); } }

digitalWrite(jam,TINGGI);

penundaanMikrodetik(5);

  1. digitalWrite(jam,RENDAH);
  2. ) ) ) ) )
  3. Kode program untuk mengimplementasikan proyek “crawling line on Arduino” pada kasus kedua adalah sebagai berikut:
  4. Ke dalam RGB1 =12; ke dalam RGB2 =11; ke dalam RGB3 =10; ke dalam RGB4 =9; ke dalam RGB5 =8; ke dalam RGB6 =7; ke dalam RGB7 =6; ke dalam RGB8 =5; ke dalam RGB9 =4; ke dalam RGB10 =3; int kunci1 =A3; int kunci2 =A2; int kunci3 =A1; int kunci4 =A0; batal setup() ( Serial.begin(9600); pinMode(RGB1, OUTPUT); pinMode(RGB2, OUTPUT); pinMode(RGB3, OUTPUT); pinMode(RGB4, OUTPUT); pinMode(RGB5, OUTPUT); pinMode(RGB6 , KELUARAN); pinMode(RGB8, OUTPUT); pinMode(RGB10, KELUARAN); pinMode(kunci2, INPUT_PULLUP); INPUT_PULLUP); pinMode(kunci4, INPUT_PULLUP); = analogRead(key2); int key3Value = analogRead(key3); int key4Value = analogRead(key4);

Petunjuk langkah demi langkah untuk membuat perangkat

Algoritma untuk membuat ticker Arduino:

Kami memuat kode program yang dijelaskan di atas ke dalam mikroprosesor menggunakan kabel USB dan komputer.

Kami juga menempatkan strip LED pada platform kontrol.

Kami menghubungkan semua bagian menjadi satu.

Nyalakan daya. Di video terakhir Anda dapat memahami cara kerja skema versi kedua:
Kontrol ponsel cerdas


#termasuk
[ , 8 , 9 , 10 , 11 ]);
Lampu LED dapat dikontrol dari smartphone. Untuk mengimplementasikan rencana ini, Anda memerlukan Bluetooth dan modul khusus - HC-06, yang dirancang untuk Arduino. Tapi kita akan melakukan ini di pelajaran berikutnya. Proyek bagus untuk semua orang. Untuk bekerja dengan tampilan grafik karakter, kami menyarankan menggunakan perpustakaan LiquidCrystal, yang disertakan dalam set Arduino IDE standar dan dirancang untuk bekerja melalui antarmuka paralel 8-bit (4-bit). Jika layar Anda terhubung ke Arduino melalui bus I2, maka Anda perlu menginstal perpustakaan LiquidCrystal_I2C (sebagian besar fungsinya mengulangi fungsi perpustakaan pertama).}

Tampilan yang didukung:

Menampilkan Koneksi dan inisialisasi


LCD1602 - tampilan karakter (16x02 karakter),


batalkan pengaturan())(

#termasuk
#termasuk
lcd.mulai(16 , 2);// Penjelasan: batalkan pengaturan())(, 16 , 2);
Lampu LED dapat dikontrol dari smartphone. Untuk mengimplementasikan rencana ini, Anda memerlukan Bluetooth dan modul khusus - HC-06, yang dirancang untuk Arduino. Tapi kita akan melakukan ini di pelajaran berikutnya. Proyek bagus untuk semua orang. OBJEK.mulai(NUM_COLUMN, NUMBER_ROWS); ) }

Tampilan yang didukung:



OBYEK Kristal Cair(RS, E, D0, D1, D2, D3, D4, D5, D6, D7);
dengan antarmuka I2C (hijau)

#termasuk
#termasuk
lcd.mulai(16 , 2);// Penjelasan: batalkan pengaturan())(, 16 , 2);
Lampu LED dapat dikontrol dari smartphone. Untuk mengimplementasikan rencana ini, Anda memerlukan Bluetooth dan modul khusus - HC-06, yang dirancang untuk Arduino. Tapi kita akan melakukan ini di pelajaran berikutnya. Proyek bagus untuk semua orang. OBJEK.mulai(NUM_COLUMN, NUMBER_ROWS); ) }

Tampilan yang didukung:
OBYEK LiquidCrystal_I2C (I2C_ADDRESS, COLUMNS_COLUMN, ROW_COUNTY);
// I2C_ADDRESS dapat berupa 0x27 atau 0x3F

LCD2004 - tampilan karakter (20x04 karakter),
dengan antarmuka paralel (biru)

#termasuk
LCD Kristal Cair(2 , 3 , 4 , 5 , 6 , 7[ , 8 , 9 , 10 , 11 ]);
Lampu LED dapat dikontrol dari smartphone. Untuk mengimplementasikan rencana ini, Anda memerlukan Bluetooth dan modul khusus - HC-06, yang dirancang untuk Arduino. Tapi kita akan melakukan ini di pelajaran berikutnya. Proyek bagus untuk semua orang. lcd.mulai(20, 4);}

Tampilan yang didukung:
OBYEK Kristal Cair(RS, E, D4, D5, D6, D7);
batal setup())( OBJEK.mulai(KOLOM, BARIS); )

// Jika 8 kabel bus data digunakan, tunjukkan semuanya
OBYEK Kristal Cair(RS, E, D0, D1, D2, D3, D4, D5, D6, D7);

LCD2004 I2C - tampilan karakter (20x04 karakter),
batalkan pengaturan())(
#termasuk
#termasuk
lcd.mulai(16 , 2);// Penjelasan: batalkan pengaturan())(, 20 , 4);
Lampu LED dapat dikontrol dari smartphone. Untuk mengimplementasikan rencana ini, Anda memerlukan Bluetooth dan modul khusus - HC-06, yang dirancang untuk Arduino. Tapi kita akan melakukan ini di pelajaran berikutnya. Proyek bagus untuk semua orang. OBJEK.mulai(NUM_COLUMN, NUMBER_ROWS); ) }

Tampilan yang didukung:
OBYEK LiquidCrystal_I2C (I2C_ADDRESS, COLUMNS_COLUMN, ROW_COUNTY);
// I2C_ADDRESS dapat berupa 0x27 atau 0x3F

#1 Contoh

Kami menampilkan tulisan pada layar LCD1602 yang terhubung melalui bus I2C. Untuk bekerja dengan layar LCD2004, Anda perlu mengubah baris 3 menjadi LiquidCrystal_I2C lcd(0x27,20,4);

#termasuk // Hubungkan perpustakaan untuk bekerja dengan layar LCD melalui bus I2C LiquidCrystal_I2C lcd(0x27,16,2); // Deklarasikan objek perpustakaan, tentukan parameter tampilan (alamat I2C = 0x27, jumlah kolom = 16, jumlah baris = 2) // Jika tulisan tidak muncul, ganti alamat 0x27 dengan 0x3F void setup())( / / lcd.init(); // Memulai pekerjaan dengan layar LCD lcd.backlight(); // Menghidupkan lampu latar layar LCD lcd.setCursor(0, 0); , 0 baris) lcd.print("LCD"); // Cetak teks "LCD", dimulai dari posisi kursor yang ditetapkan lcd.setCursor(0, 1); // Atur kursor ke posisi (0 kolom, 1 baris ) lcd.print("www.iarduino.ru"); Kami menampilkan teks "www.iarduino.ru", mulai dari posisi kursor yang disetel) // // void loop()() // Kode di dalam loop fungsi dijalankan terus menerus. Namun karena kita menampilkan teks statis, kita hanya perlu menampilkannya satu kali saat startup, tanpa menggunakan kode loop

#2 Contoh

Kami menampilkan tulisan pada layar LCD1602 yang terhubung melalui bus paralel 4-bit. Untuk bekerja dengan tampilan LCD2004, Anda perlu mengubah baris 5 menjadi lcd.begin(20, 4);

#termasuk // Hubungkan perpustakaan LiquidCrystal untuk bekerja dengan layar LCD LiquidCrystal lcd(2,3,4,5,6,7); // Deklarasikan objek perpustakaan, yang menunjukkan pin tampilan (RS, E, D4, D5, D6, D7) // Jika 8 kabel bus data digunakan, maka tentukan (RS, E, D0, D1, D2, D3, D4 , D5, D6,D7) void setup())( // lcd.begin(16, 2); // Memulai pekerjaan dengan layar LCD, menunjukkan nomor (kolom, baris) lcd.setCursor(0, 0); // Atur kursor pada posisi (0 kolom, 0 baris) lcd.print("LCD2004"); // Cetak teks "LDC1602", dimulai dari posisi kursor yang ditetapkan lcd.setCursor(0, 1); Atur kursor ke posisi (0 kolom, 1 baris) ) lcd.print("www.iarduino.ru"); // Cetak teks "www.iarduino.ru", mulai dari posisi kursor yang disetel ) // // void loop()() // Kode di dalam fungsi loop dijalankan terus menerus. Namun karena kita menampilkan teks statis, kita hanya perlu menampilkannya satu kali saat startup, tanpa menggunakan kode loop

#3 Contoh

Kami menampilkan tulisan "Bahasa Rusia" pada layar LCD1602 yang terhubung melalui bus I2C:

#termasuk // Hubungkan perpustakaan untuk bekerja dengan bus I2C #include // Hubungkan perpustakaan untuk bekerja dengan layar LCD melalui bus I2C LiquidCrystal_I2C lcd(0x27,16,2); // Deklarasikan objek perpustakaan, tentukan parameter tampilan (alamat I2C = 0x27, jumlah kolom = 16, jumlah baris = 2) // uint8_t simbol = ( // Deklarasikan array yang terdiri dari 6 simbol asli (bahasa), masing-masing simbol terdiri dari 8 byte ( 0, 0,18,20,24,20,18, 0 ), // hingga ( 0, 0,17,19,21,25,17, 0 ), // dan (10, 4 , 17,19,21,25,17, 0 ), // th ( 0, 0,15,17,15, 5, 9, 0 ), // i ( 0, 0,14,17, 6,17 , 14, 0 ), // z ( 0, 0,17,17,29,19,29, 0 )); // s // void setup())( // lcd.init(); // Memulai pekerjaan dengan layar LCD lcd.backlight(); // Menghidupkan lampu latar layar LCD lcd.createChar(1, simbol ); // Memuat 1 simbol "k" ke dalam RAM tampilan lcd.createChar(2, simbol); // Memuat simbol ke-2 "i" ke dalam RAM tampilan lcd.createChar(3, simbol); simbol "th" ke dalam RAM tampilan lcd.createChar (4, simbol); // Muat simbol ke-4 "i" ke dalam RAM tampilan lcd.createChar(5, simbol); // Muat simbol ke-5 "z" ke dalam menampilkan RAM lcd.createChar(6, simbol); karakter "s" di tampilan RAM lcd.setCursor(0, 0); // Atur kursor ke posisi (0 kolom, 0 baris) lcd.print("Pycc\1\); 2\3 \4\5\6\1" ); // Keluarkan teks "Bahasa Pyccy", di mana "Pycc" ditulis dalam bahasa Latin, dan "bahasa kyy" - dalam karakter dari RAM tampilan) // Jika Anda perlu mengeluarkan karakter dari RAM tampilan, lalu menulis \ dan nomor karakter // void loop( )() // Kode di dalam fungsi loop dijalankan secara terus-menerus. Namun karena kita menampilkan teks statis, kita hanya perlu menampilkannya satu kali saat startup, tanpa menggunakan kode loop

#4 Contoh

Kami menampilkan waktu yang berlalu setelah permulaan pada layar LCD1602 yang terhubung melalui bus I2C:

#termasuk // Hubungkan perpustakaan untuk bekerja dengan bus I2C #include // Hubungkan perpustakaan untuk bekerja dengan layar LCD melalui bus I2C LiquidCrystal_I2C lcd(0x27,16,2); // Deklarasikan objek perpustakaan, tentukan parameter tampilan (alamat I2C = 0x27, jumlah kolom = 16, jumlah baris = 2) // uint8_t tim_D, tim_H, tim_M, tim_S; //Deklarasikan variabel untuk menyimpan hari, jam, menit dan detik. uint32_t tim; // Mendeklarasikan variabel untuk menyimpan jumlah total waktu yang telah berlalu sejak awal.<100){ // Условие выполняется в течении 100 первых миллисекунд каждой новой секунды. delay(100); lcd.setCursor(0, 0); // Устанавливаем курсор в позицию (0 столбец, 0 строка). lcd.print("Days: "); // Выводим текст. if(tim_D<10){lcd.print(0);} // Выводим 0 перед количеством дней. lcd.print(tim_D); // Выводим количество дней. lcd.setCursor(0, 1); // Устанавливаем курсор в позицию (0 столбец, 1 строка) lcd.print("Time: "); // Выводим текст. if(tim_H<10){lcd.print(0);} // Выводим 0 перед количеством часов. lcd.print(tim_H); // Выводим количество часов. lcd.print(":"); // Выводим символ. if(tim_M<10){lcd.print(0);} // Выводим 0 перед количеством минут. lcd.print(tim_M); // Выводим количество минут. lcd.print(":"); // Выводим символ. if(tim_S<10){lcd.print(0);} // Выводим 0 перед количеством секунд. lcd.print(tim_S); // Выводим количество секунд. } // } //

// Jika tulisan tidak muncul, ganti alamat 0x27 dengan 0x3F void setup())( // lcd.init(); // Mulai bekerja dengan layar LCD lcd.backlight(); // Nyalakan lampu latar layar Layar LCD ) // // void loop())( // // Dapatkan waktu yang telah berlalu sejak awal: // tim = millis() / 1000; // Dapatkan jumlah total detik (maksimum 4"294"967 detik ≈ 49,7 hari). tim_S = tim % 60 ; // Dapatkan detik: sisa membagi semua detik dengan menit (60 detik). tim = (tim-tim_S) / 60; tim % 60; menit per jam (60 menit) tim = (tim-tim_M) / 60; // Dapatkan jumlah total jam hari // Menampilkan waktu yang telah berlalu sejak awal: // if (millis()%1000)

  • Fungsi umum pada perpustakaan LiquidCrystal dan LiquidCrystal_I2C: mulai( ); kolom, baris,
  • – Menginisialisasi tampilan dengan jumlah kolom, baris, dan ukuran karakter. jernih();
  • – Menghapus tampilan dengan kursor pada posisi 0,0 (Membutuhkan banyak waktu!). rumah();
  • – Mengatur kursor ke posisi 0,0 (Membutuhkan banyak waktu!). menampilkan();
  • – Menghidupkan tampilan dengan cepat (tanpa mengubah data di RAM). tidak ada Tampilan();
  • – Mematikan tampilan dengan cepat (tanpa mengubah data di RAM). berkedip();
  • – Menghidupkan kursor yang berkedip (dengan frekuensi sekitar 1 Hz). tidak adaBlink();
  • – Matikan kursor yang berkedip. kursor();
  • – Aktifkan garis bawah kursor. tidak ada Kursor();
  • – Nonaktifkan garis bawah kursor. gulirDisplayLeft();
  • – Menggulir tampilan ke kiri. Pergeseran tampilan koordinat satu kolom ke kiri (tanpa mengubah RAM). gulirDisplayRight();
  • – Menggulir tampilan ke kanan. Pergeseran tampilan koordinat satu kolom ke kanan (tanpa mengubah RAM). kiriKeKanan();
  • – Menentukan untuk selanjutnya menggeser posisi kursor, setelah menampilkan karakter berikutnya, satu kolom ke kanan. kananKeKiri();
  • – Menentukan untuk selanjutnya menggeser posisi kursor, setelah menampilkan karakter berikutnya, satu kolom ke kiri.– Menentukan bahwa teks akan disejajarkan ke kiri posisi kursor di masa mendatang (seperti biasa).
  • gulir otomatis();– Menunjukkan bahwa teks akan disejajarkan ke kanan dari posisi kursor di masa mendatang.
  • buatChar( nomor, susunan ); – Tulis karakter khusus ke tampilan CGRAM di bawah nomor yang ditentukan.
  • set Kursor( kolom, baris ); – Tempatkan kursor pada posisi yang ditunjukkan oleh kolom dan nomor baris.
  • mencetak( teks ); – Menampilkan teks, simbol, atau angka pada tampilan layar. Sintaksnya mirip dengan fungsi kelas Serial dengan nama yang sama.

Fungsi yang hanya diterapkan di perpustakaan LiquidCrystal_I2C:

  • init();– Menampilkan inisialisasi. Harus menjadi perintah perpustakaan LiquidCrystal_I2C pertama setelah pembuatan objek. Sebenarnya fungsi ini juga ada di perpustakaan LiquidCrystal, namun di perpustakaan itu dipanggil secara otomatis (secara default) ketika sebuah objek dibuat.
  • lampu latar();– Nyalakan lampu latar tampilan.
  • tidak adaLampu Latar();– Mematikan lampu latar tampilan.
  • setLampu Latar( bendera ); – Kontrol lampu latar (benar - nyalakan / salah - matikan), digunakan sebagai pengganti fungsi tanpa lampu latar dan lampu latar.

Koneksi:

// Untuk bus I2C:
#termasuk
#termasuk
Kristal Cair_I2C LCD( alamat , kol , baris );
Menampilkan
OBJEK.mulai(NUM_COLUMN, NUMBER_ROWS); )
}

Parameter:
  • alamat: Alamat tampilan pada bus I2C - 0x27 atau 0x3F
  • kol:
  • baris:
// Untuk bus paralel 4 kabel:
#termasuk
Kristal Cair LCD( R.S. , E , D4 , D5 , D6 , D7 );
Menampilkan
lcd.mulai( kol , baris );
}
Parameter:
  • RS: Jumlah pin Arduino yang terhubung dengan pin RS
  • E: Nomor pin Arduino yang terhubung dengan pin E
  • H0...D3: Jumlah pin Arduino yang terhubung dengan pin D0-D3
  • D4...D7: Jumlah pin Arduino yang terhubung dengan pin D4-D7
  • kol: jumlah kolom yang diimplementasikan di tampilan
  • baris: jumlah baris yang diimplementasikan di layar
// Untuk bus paralel 8 kabel:
#termasuk
Kristal Cair LCD( R.S. , E , D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 );
Menampilkan
lcd.mulai( kol , baris );
}
Fungsi umum pada perpustakaan LiquidCrystal dan LiquidCrystal_I2C: kol , baris , );
Menginisialisasi tampilan dengan dimensi dan karakter layar.
Parameter:
  • kol: jumlah kolom yang diimplementasikan di tampilan
  • baris: jumlah baris yang diimplementasikan di layar
  • ukuran: ukuran karakter, ditunjukkan dengan konstanta:
    LCD_5x8DOTS (default), atau LCD_5x10DOTS
/* Untuk bus I2C: */ #include // Hubungkan perpustakaan untuk bekerja dengan bus I2C #include // Hubungkan perpustakaan untuk bekerja dengan layar LCD melalui bus I2C LiquidCrystal_I2C lcd(0x3F,20,4); // Mendeklarasikan objek perpustakaan, menunjukkan parameter tampilan (alamat I2C = 0x3F, jumlah kolom = 20, jumlah baris = 4) // void setup())( // lcd.init(); // Memulai pekerjaan dengan layar LCD lcd.backlight(); // Menghidupkan lampu latar layar LCD... // Menampilkan informasi yang harus ditampilkan saat startup) // // void loop()() // ... // Informasi keluaran yang harus berubah sesuai dengan algoritma kode Anda) // /* Untuk bus paralel 4 kabel: */ #include // Hubungkan perpustakaan LiquidCrystal untuk bekerja dengan layar LCD LiquidCrystal lcd(2,3,4,5,6,7); // Deklarasikan objek perpustakaan, yang menunjukkan pin tampilan (RS, E, D4, D5, D6, D7) // Jika 8 kabel bus data digunakan, maka tentukan (RS, E, D0, D1, D2, D3, D4 , D5, D6,D7) void setup())( // lcd.begin(16, 2); // Memulai pekerjaan dengan layar LCD, menunjukkan nomor (kolom, baris) ... // Menghasilkan informasi yang seharusnya ditampilkan saat startup) / // void loop()() // ... // Keluarkan informasi yang harus berubah sesuai dengan algoritma kode Anda) //

Fungsi kontrol tampilan:

– Mengatur kursor ke posisi 0,0 (Membutuhkan banyak waktu!).
Menghidupkan tampilan setelah dimatikan oleh fungsi noDisplay.
Catatan: Fungsi ini berjalan cepat dan tidak mengubah tampilan RAM.
– Menghidupkan tampilan dengan cepat (tanpa mengubah data di RAM).
Mematikan layar.
Data pada tampilan tidak akan ditampilkan sampai fungsi tampilan dipanggil, tetapi tidak akan dihapus dari memori RAM, dan setelah fungsi tampilan dipanggil, data tersebut akan ditampilkan kembali.
Catatan: Fungsi ini berjalan cepat dan tidak mengubah tampilan RAM.
– Nonaktifkan garis bawah kursor.
Menggeser koordinat tampilan satu kolom ke kiri.



– Menggulir tampilan ke kiri. Pergeseran tampilan koordinat satu kolom ke kiri (tanpa mengubah RAM).
Menggeser tampilan koordinat satu kolom ke kanan.
Memanggil fungsi ini secara terus-menerus akan menciptakan efek garis merayap.
Koordinatnya digeser baik untuk informasi yang tersedia di layar maupun untuk informasi yang akan ditampilkan nanti.
Catatan: Fungsi ini berfungsi tanpa mengubah tampilan RAM.
Jika Anda memanggil fungsi tersebut 40 kali berturut-turut, koordinatnya akan kembali ke titik semula
– Menginisialisasi tampilan dengan jumlah kolom, baris, dan ukuran karakter.
Menghapus tampilan dengan mengatur kursor ke posisi 0,0.
Informasi pada tampilan akan dihapus secara permanen.
Catatan: Membutuhkan waktu yang lama.
lampu latar();
Nyalakan lampu latar tampilan.
tidak adaLampu Latar();
Matikan lampu latar tampilan.
Catatan: Fungsi ini hanya diterapkan di perpustakaan LiquidCrystal_I2C.
setLampu Latar( bendera );
Kontrol lampu latar (bukan fungsi noBacklight dan lampu latar).
Parameter:
  • bendera: benar - menyala, dan salah - mematikan lampu latar.
Catatan: Fungsi ini hanya diterapkan di perpustakaan LiquidCrystal_I2C.
/* Menampilkan pesan untuk memantau fungsi kontrol tampilan: */ lcd.cursor(0,0); // Atur kursor ke sudut paling atas tampilan (0 kolom, 0 baris) lcd.print("iarduino.ru"); // Tampilkan teks "iarduino.ru" (huruf pertama "i" akan berada di posisi "0.0", dan "u" terakhir di posisi "10.0", kursor tidak terlihat di posisi "11.0") // lcd.noDisplay (); // Matikan layar (tulisan akan hilang dari layar) lcd.display(); // Nyalakan layar (tulisan akan muncul di layar di tempat yang sama) lcd.scrollDisplayLeft(); // Geser koordinat kolom ke kiri (layar akan menampilkan "arduino.ru" tanpa huruf pertama "i", yang akan melampaui tampilan, tetapi akan tetap berada di RAM-nya) lcd.scrollDisplayRight(); // Geser koordinat kolom ke kanan (layar akan menampilkan "iarduino.ru" di tempat yang sama dengan tampilan aslinya) lcd.clear(); // Bersihkan tampilan (tulisan akan hilang secara permanen dari tampilan) lcd.noBacklight(); // Matikan lampu latar layar lcd.backlight(); // Nyalakan lampu latar layar lcd.setBacklight(0); // Matikan lampu latar layar lcd.setBacklight(1); // Nyalakan lampu latar tampilan

Fungsi kontrol kursor:

set Kursor( kol , baris );
Menempatkan kursor pada posisi yang ditentukan.
Parameter:
  • kol: nomor kolom (mulai dari 0).
  • baris: nomor baris (mulai dari 0)
– Menghapus tampilan dengan kursor pada posisi 0,0 (Membutuhkan banyak waktu!).
Mengatur kursor ke posisi 0,0. Bekerja seperti fungsi setCursor(0,0);
Catatan: Membutuhkan waktu yang lama.
– Mematikan tampilan dengan cepat (tanpa mengubah data di RAM).
Aktifkan kursor berkedip.
Catatan: Kursor menempati seluruh bidang karakter dan berkedip dengan frekuensi sekitar 1 Hz, pada posisi yang telah ditetapkan sebelumnya.
– Menghidupkan kursor yang berkedip (dengan frekuensi sekitar 1 Hz).
Matikan kursor yang berkedip.
Catatan: Kursor menjadi tidak terlihat, namun posisinya tetap dipertahankan.
– Matikan kursor yang berkedip.
Aktifkan garis bawah kursor.
Catatan: Kursor berbentuk karakter garis bawah dan terletak pada posisi penempatannya sebelumnya.
– Aktifkan garis bawah kursor.
Matikan garis bawah kursor.
Catatan: Kursor menjadi tidak terlihat, namun posisinya tetap dipertahankan.
lcd.setCursor(0, 1); // Atur kursor ke karakter pertama baris kedua (penomoran baris dan kolom dimulai dari 0) lcd.home(); // Atur kursor ke karakter pertama dari baris pertama (seperti saat memanggil lcd.setCursor(0,0);) lcd.blink(); // Membuat kursor terlihat (persegi panjang akan berkedip menggantikan kursor) lcd.noBlink(); // Membuat kursor tidak terlihat (menghilangkan persegi panjang yang berkedip) lcd.cursor(); // Membuat kursor terlihat (garis bawah akan muncul di tempat kursor) lcd.noCursor(); // Membuat kursor tidak terlihat (hilangkan garis bawah) // Jika kursor mengenai suatu tempat yang terdapat karakter, maka karakter tersebut tidak hilang

Fungsi yang menunjukkan arah dan kesejajaran:

– Menggulir tampilan ke kanan. Pergeseran tampilan koordinat satu kolom ke kanan (tanpa mengubah RAM).
Menentukan bahwa setelah setiap karakter baru, posisi kursor harus berpindah satu kolom ke kanan.
Catatan: Jika menampilkan teks “abc” maka tampilan akan menampilkan “abc” dan teks berada di sebelah kanan posisi kursor semula.
(Seperti biasanya)
– Menentukan untuk selanjutnya menggeser posisi kursor, setelah menampilkan karakter berikutnya, satu kolom ke kanan.
Menentukan bahwa setelah setiap karakter baru, posisi kursor harus berpindah satu kolom ke kiri.
Catatan: Jika menampilkan teks “abc” maka tampilan akan menampilkan “cba” dan teks berada di sebelah kiri posisi kursor semula.
(Menulis dari kanan ke kiri)
– Menentukan untuk selanjutnya menggeser posisi kursor, setelah menampilkan karakter berikutnya, satu kolom ke kiri.
Menunjukkan bahwa di masa mendatang, teks harus disejajarkan di sebelah kiri posisi kursor aslinya.
Catatan: jika Anda menempatkan kursor pada posisi 10.0 dan menampilkan teks, maka karakter pertama dari teks yang ditampilkan akan berada pada posisi ini.
(Seperti biasanya)
gulir otomatis();
Menunjukkan bahwa di masa depan, teks harus disejajarkan di sebelah kanan posisi kursor aslinya.
Catatan: jika Anda menempatkan kursor pada posisi 10.0 dan menampilkan teks, kursor akan ditempatkan pada posisi ini.
(Koordinat tampilan akan digeser ke kiri, seolah-olah Anda memanggil fungsi scrollDisplayLeft sebanyak huruf pada teks keluaran)
lcd.kiriKeKanan(); // Perintahkan kursor untuk bergerak ke kanan (Seperti biasa pada tulisan Eropa) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Pada tampilan kita akan melihat: "ABC" (Setelah "A" kursor dipindahkan ke kanan dan "B" ditampilkan, kemudian kursor dipindahkan ke kanan dan "C" ditampilkan) lcd.rightToLeft(); // Perintahkan kursor untuk berpindah ke kiri (Seperti pada penulisan kanan ke kiri) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Pada tampilan kita akan melihat: "CBA" (Setelah "A" kursor dipindahkan ke kiri dan "B" ditampilkan, kemudian kursor dipindahkan ke kiri dan "C" ditampilkan) lcd.noAutoscroll(); // Mengatur perataan kiri (Seperti biasa) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Pada tampilan kita akan melihat: "ABC" (Seperti biasa) lcd.autoscroll(); // Atur perataan ke kanan (Koordinat tampilan akan digeser ke kiri sesuai jumlah karakter yang ditampilkan) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Pada tampilan kita akan melihat: "ABC" (Koordinat tampilan akan digeser 3 karakter ke kiri, karena setelah setiap karakter dilakukan panggilan ke fungsi scrollDisplayLeft)

Fungsi input teks dan simbol:

createChar(angka,array);
Menulis karakter khusus ke CGRAM tampilan dengan nomor yang ditentukan.
Jika Anda ingin menampilkan teks (menggunakan fungsi cetak) yang berisi karakter yang Anda tetapkan, tentukan garis miring dan nomor di mana karakter ini ditulis: print("C\1MBO\2").
Parameter:
  • nomor: nomor di mana simbol itu akan ditulis.
  • susunan: array yang mewakili karakter yang akan ditulis.
Catatan: Array terdiri dari beberapa byte, yang jumlahnya sama dengan jumlah baris pada simbol. Setiap bit byte yang ditetapkan sesuai dengan piksel karakter yang ditetapkan (ditampilkan).
mencetak(teks);
Menampilkan teks, simbol, atau angka pada tampilan layar.
Parameter:
  • teks: karakter, angka atau string yang akan ditampilkan.
Catatan: Sintaksnya mirip dengan fungsi kelas Serial dengan nama yang sama.
#termasuk // Hubungkan perpustakaan untuk bekerja dengan bus I2C #include // Hubungkan perpustakaan untuk bekerja dengan layar LCD melalui bus I2C LiquidCrystal_I2C lcd(0x27,16,2); // Deklarasikan objek perpustakaan, yang menunjukkan parameter tampilan (alamat I2C = 0x27, jumlah kolom = 16, jumlah baris = 2) // uint8_t simbol_d = (0b00000, // 1 baris simbol "d" 0b00000, / / Baris ke-2 dari simbol "d" " 0b00110, // Baris ke-3 dari karakter "d" 0b01010, // Baris ke-4 dari karakter "d" 0b01010, // Baris ke-5 dari karakter "d" 0b01010, // Baris ke-6 dari karakter "d" 0b11111, // baris ke-7 dari karakter "d" " 0b10001); // Baris ke-8 dari simbol "d" Seluruh array dapat ditulis dalam satu baris: uint8_t simbol_d=(0,0,6,10,10,10,31,17);

Setiap orang telah lama terbiasa dengan kenyataan bahwa setiap perangkat elektronik memiliki layar, yang dengannya ia memberikan segala macam informasi berguna kepada seseorang. Pemutar MP3 menunjukkan nama trek yang sedang diputar, remote control quadcopter menampilkan telemetri penerbangan, bahkan mesin cuci menampilkan waktu hingga pencucian selesai, dan smartphone biasanya menampung seluruh desktop komputer pribadi! Kemungkinan besar, perangkat Anda berikutnya juga dapat menggunakan layar kecil :) Mari kita coba membuat jam elektronik sederhana! Dan sebagai papan skor kami menggunakan layar kristal cair karakter 1602 yang umum dan murah. Ini dia, seperti pada gambar: Selain 16x2, tampilan karakter 20x4 (masing-masing empat baris 20 karakter), serta tampilan grafis dengan resolusi 128x64 piksel dinilai cukup populer. Ini dia dalam gambarnya:

1. Menghubungkan layar LCD karakter 1602

Layar 1602 memiliki 16 pin. Biasanya diberi nomor dari kiri ke kanan, jika dilihat seperti pada gambar. Terkadang pin ditandatangani, seperti: DB0, DB1, EN, dll. Dan terkadang mereka hanya menunjukkan nomor keluaran. Bagaimanapun, daftar pin selalu sama: 1 - "GND", ground (minus daya); 2 - "Vcc", catu daya +5V; 3 - "VEE", kontras; pemilihan register; 5 - "R/W", arah transfer data (tulis/baca); 15 - anoda lampu latar (+5V); 16 — katoda lampu latar (tanah). Jalur VEE, RS dan empat jalur data DB4, DB5, DB6, DB7 terhubung ke output digital pengontrol. Kita akan menghubungkan jalur “R/W” ke “ground” pengontrol (karena kita hanya memerlukan fungsi penulisan ke memori tampilan). Kami tidak akan menghubungkan lampu latar untuk saat ini, saya rasa Anda dapat dengan mudah mengetahuinya sendiri :) Diagram skema untuk menghubungkan layar ke Arduino Uno
Penampilan tata letak
Untuk jaga-jaga, juga berupa tanda:
Layar LCD 1602 1 2 4 6 11 12 13 14 15 16
Arduino Uno GND +5V 4 5 6 7 8 9 +5V GND

2. Pemrograman “Halo, dunia!”

Untuk bekerja dengan layar LCD dengan berbagai ukuran dan tipe, editor Arduino IDE memiliki perpustakaan khusus Kristal Cair. Untuk menyertakan perpustakaan, kami menulis ekspresi berikut di baris pertama program kami: #include Selanjutnya, kita perlu menunjukkan pin Arduino mana yang kita gunakan untuk menghubungkan layar. Kami akan menunjukkan informasi ini saat menginisialisasi modul: LiquidCrystal lcd(4, 5, 6, 7, 8, 9); Di sini, dua argumen pertama adalah pin RS dan EN, dan empat sisanya adalah bus data DB4-DB7 garis. Selanjutnya, kita tentukan ukuran tampilan menggunakan perintah “begin”: lcd.begin(16, 2); Izinkan saya mengingatkan Anda bahwa tampilan kami memiliki dua baris, masing-masing 16 karakter. Terakhir, kita memerlukan fungsi “cetak” sederhana untuk menampilkan teks. Output dari frasa terkenal yang menggunakan fungsi ini akan terlihat seperti ini: lcd.print("Halo, dunia!"); Program lengkapnya akan terlihat seperti ini: #include LCD Kristal Cair(4, 5, 6, 7, 8, 9); void setup())( lcd.begin(16, 2); lcd.print("Halo, dunia!"); ) void loop())( ) Muat ke Arduino Uno dan lihat apa yang terjadi di layar. Ada tiga situasi utama 🙂 1) Layar akan menampilkan “Halo, dunia!”. Ini berarti Anda menghubungkan semuanya dengan benar, dan kontrasnya secara ajaib ternyata dikonfigurasi dengan benar pada awalnya. Kami bersukacita dan melanjutkan ke bab berikutnya. 2) Layar akan menampilkan serangkaian persegi panjang hitam - diperlukan penyesuaian kontras! Inilah sebabnya kami menambahkan potensiometer dengan kenop ke sirkuit. Kami memutarnya dari satu sisi ke sisi lainnya hingga tulisan yang jelas muncul di layar. 3) Dua baris persegi panjang hitam. Kemungkinan besar, Anda melakukan kesalahan saat menghubungkan. Periksa tiga kali semua kabel. Jika Anda tidak menemukan kesalahan, mintalah kucing Anda memeriksanya!

3. Memprogram jam

Sekarang tampilannya berfungsi dengan baik, mari kita coba mengubah perangkat sederhana kita menjadi jam tangan elektronik sungguhan. Perhatian! Untuk menampilkan waktu, kita memerlukan perpustakaan Waktu. Jika belum diinstal, Anda dapat mengunduh arsipnya dari tautan. Mari kita hubungkan: #include Kemudian kita atur tanggal dan waktu saat ini menggunakan fungsi “setTime”: setTime(23, 59, 59, 12, 31, 2015); Semuanya jelas di sini: jam, menit, detik, bulan, hari, tahun. Untuk menampilkan tanggal kami menggunakan banyak fungsi:
  • year() - akan mengembalikan tahun kepada kita;
  • bulan() — bulan;
  • hari() - hari;
  • jam() - jam;
  • menit() - mengembalikan menit;
  • kedua() - kedua.
Sekarang mari kita perhatikan fakta ini. Jika kita menghitung jumlah karakter dalam entri tanggal biasa: “31/12/2015 23:59:59”, kita mendapatkan 19. Dan kita hanya punya 16! Namun, itu tidak cocok dalam satu baris. Anda dapat mengatasi masalah ini dengan fungsi lain yang berguna - "setCursor". Fungsi ini mengatur kursor ke posisi yang diinginkan. Misalnya: lcd.setCursor(0,1); Tempatkan kursor di awal baris kedua. Kursor adalah lokasi karakter dari mana keluaran teks akan dimulai dengan perintah “cetak” berikutnya. Mari gunakan fungsi ini untuk menampilkan tanggal di baris pertama dan waktu di baris kedua. Semuanya jelas sekarang dengan tampilan tanggal dan waktu. Hal-hal rutin tetap ada. Misalnya, setelah setiap tampilan terisi, kita akan menghapusnya dengan fungsi “clear()”: lcd.clear(); Juga tidak masuk akal bagi kami untuk menampilkan data lebih dari sekali dalam satu detik, jadi kami akan menjeda 1000 milidetik di antara dua iterasi. Jadi, jika digabungkan, kita mendapatkan program berikut: #include #termasuk LCD Kristal Cair(4, 5, 6, 7, 8, 9); void setup())( lcd.begin(16, 2); setTime(7,0,0,1,10,2015); // 7 pagi, 10 Januari 2015) void loop())( lcd.clear( ); lcd.print(hari()); lcd.print("."); lcd.print("."); lcd.setCursor(0 , 1); (":"); lcd.print(":"); (1000 ) Unggah sketsa ke Arduino Uno dan lihat perkembangan jamnya! 🙂 Untuk mengkonsolidasikan pengetahuan yang diperoleh, saya sarankan untuk meningkatkan jam kita menjadi jam alarm yang lengkap. Yang perlu Anda lakukan hanyalah menambahkan beberapa tombol dan bel :)

QAPASS LCD 1602 tidak mendukung font Rusia, tetapi Anda dapat menampilkan alfabet Cyrillic di Arduino dengan membuat karakter Anda sendiri. Mari kita lihat cara membuat simbol dan huruf apa pun dalam Cyrillic di layar LCD Arduino. Untuk melakukan ini, kita perlu menggunakan variabel dalam sketsa byte dan fungsi lcd.createChar(). Mari kita segera perhatikan bahwa kapasitas memori pada Arduino untuk karakter dibatasi hanya delapan karakter.

Cara menampilkan karakter Anda pada LCD 1602

Tabel pembuat karakter (CGROM) akan membantu Anda menampilkan simbol atau huruf Sirilik di layar. Jenis memori di Arduino seperti CGRAM dapat menyimpan karakter asli, namun ukuran memorinya terbatas dan hanya dapat menampung 8 karakter asli. Salah satu simbol nonstandar yang berguna untuk membuat stasiun cuaca rumah adalah tanda derajat. Mari kita menggambar sebuah simbol.


Untuk memulai, ambil selembar kertas dan gambarlah sebuah meja di atasnya dengan 5 kolom dan 8 baris. Selanjutnya, arsir sel-sel dalam tabel (lihat foto di atas) yang akan muncul di layar. Faktanya adalah setiap karakter pada layar terdiri dari piksel (lebar 5 piksel dan tinggi 8 piksel). Selanjutnya, bayangkan simbol kita sebagai larik data yang terdiri dari delapan elemen - delapan baris.

Kami menampilkan simbol kami sendiri di LCD 1602

Untuk pelajaran ini kita memerlukan rincian berikut:

  • Papan Arduino Uno / Arduino Nano / Arduino Mega;
  • monitor LCD 1602;
  • kabel pria-wanita.

Layar LCD dihubungkan melalui I2C menggunakan empat kabel pria-wanita - 2 kabel data dan 2 kabel daya. Jika Anda menghubungkan layar Ardiuno UNO, gunakan pin sirkuit berikut SDA terhubung ke port A4, keluaran SCL– ke port A5 dan dua kabel daya – GND dan 5V. Jika QAPASS 1602 terhubung melalui bus I2C ke Arduino Mega, maka board memiliki port yang sesuai - SDA dan SCL.

Sketsa untuk membuat simbol pada LCD I2C

#termasuk #termasuk // buat simbolmu sendiri dan beri nama "simvol" byte simvol = ( 0b01100, 0b10010, 0b10010, 0b01100, 0b00000, 0b00000, 0b00000, 0b00000 ); batal pengaturan()(lcd.init()); // menginisialisasi tampilan LCD lcd.lampu latar(); lcd.createChar(1, simvol); lcd.setCursor(0,0); // letakkan kursor pada 1 karakter baris pertama lcd.print(char(1));

// mencetak karakter pada baris pertama

  1. ) putaran kosong () ( )
  2. Penjelasan untuk kodenya: menggunakan array byte simvol = ( ); kami mengenkripsi tanda derajat yang kami gambar sebelumnya di selembar kertas; fungsi lcd.createChar(angka, data); membuat simbol khusus untuk LCD, dengan tanda kurung ditentukan nomor— simbol nomor dan
  3. data

— data tentang array.

setiap baris array dimulai dengan 0b - “nol” dan huruf besar “b”.

Menampilkan font Rusia pada LCD 1602

#termasuk Layar QAPASS mendukung 8 karakter baru (bernomor 0 hingga 7) berukuran 5 kali 8 piksel. Sebuah huruf dalam Cyrillic, seperti simbol, dapat ditentukan sebagai array delapan byte yang mengkarakterisasi string yang sesuai. Anda dapat menambahkan hingga 8 karakter, jadi gunakan kombinasi huruf Latin dan Sirilik saat mengeluarkannya, seperti pada contoh. Unggah sketsa dengan tulisan “I ❤ site” Sketsa dengan huruf Rusia di LCD I2C // perpustakaan untuk mengendalikan perangkat melalui I2C#termasuk // sambungkan perpustakaan untuk LCD 1602 LCD LiquidCrystal_I2C (0x27,20,2); byte hati = ( 0b00000, 0b01010, 0b11111, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000 ); byte I = ( 0b01111, 0b10001, 0b10001, 0b01111, 0b00101, 0b01001, 0b10001, 0b00000 ); byte B = ( 0b11111, 0b10000, 0b10000, 0b11110, 0b10001, 0b10001, 0b11110, 0b00000 ); byte N = ( 0b10001, 0b10001, 0b10011, 0b10101, 0b11001, 0b10001, 0b10001, 0b00000 ); byte F = ( 0b01110, 0b10101, 0b10101, 0b10101, 0b01110, 0b00100, 0b00100, 0b00000 ); batal pengaturan()(lcd.init()); // menginisialisasi tampilan LCD lcd.lampu latar(); // aktifkan lampu latar tampilan // memberikan nomor seri pada karakter lcd.createChar(1, hati); lcd.createChar(2, Saya); lcd.createChar(3, B); lcd.createChar(4, N); lcd.createChar(5, F);

// mencetak karakter pada baris pertama

  1. lcd.setCursor(6,0);
  2. // atur kursor ke karakter ke-6 pada baris pertama lcd.print(char(2)); lcd.cetak(" ");
  3. lcd.print(char(1));
  • lcd.setCursor(0,1);

    semacam ulasan "pendek"... seolah-olah mereka sedang terburu-buru di suatu tempat