Koneksi layar LSD. Kursus pelatihan

Setiap amatir radio, setelah sejumlah proyek sederhana buatan sendiri, sampai pada tujuan membangun sesuatu yang megah menggunakan sensor dan tombol. Lagi pula, jauh lebih menarik untuk menampilkan data pada layar daripada pada monitor port. Namun kemudian muncul pertanyaan: tampilan mana yang harus dipilih? Dan secara umum bagaimana cara menghubungkannya, apa yang diperlukan untuk menghubungkannya? Jawaban atas pertanyaan-pertanyaan tersebut akan dibahas dalam artikel ini.

LCD 1602

Di antara banyak pilihan tampilan, saya ingin secara khusus menyebutkan layar LCD1602 berdasarkan pengontrol HD4478. Tampilan ini tersedia dalam dua warna: huruf putih dengan latar belakang biru, huruf hitam dengan latar belakang kuning. Menghubungkan LCD 1602 ke Arduino juga tidak akan menimbulkan masalah, karena sudah ada perpustakaan bawaan dan tidak perlu mengunduh tambahan apa pun. Tampilan berbeda tidak hanya dalam harga, tetapi juga ukurannya. Seringkali amatir radio menggunakan 16 x 2, yaitu 2 baris yang terdiri dari 16 karakter. Namun ada juga yang 20 x 4 dimana terdapat 4 baris yang terdiri dari 20 karakter. Dimensi dan warna tidak berperan apa pun dalam menghubungkan layar LCD 1602 ke Arduino, keduanya terhubung dengan cara yang sama. Sudut pandang 35 derajat, waktu respons tampilan 250 ms. Ia dapat bekerja pada suhu -20 hingga 70 derajat Celcius. Selama pengoperasian, ia menggunakan 4 mA untuk layar dan 120 mA untuk lampu latar.

Di mana itu digunakan?

Tampilan ini populer tidak hanya di kalangan amatir radio, tetapi juga di kalangan produsen besar. Misalnya printer dan mesin kopi juga menggunakan LCD1602. Ini karena harganya yang murah, tampilan ini berharga 200-300 rubel di situs Cina. Layak dibeli di sana, karena di toko kami markup untuk tampilan ini sangat tinggi.

Menghubungkan ke Arduino

Menghubungkan LCD 1602 ke Arduino Nano dan Uno juga demikian. Anda dapat bekerja dengan tampilan dalam dua mode: 4 bit dan 8. Saat bekerja dengan 8-bit, bit tingkat rendah dan tinggi digunakan, dan dengan 4-bit, hanya bit tingkat rendah. Tidak ada gunanya bekerja dengan 8-bit, karena ini akan menambah 4 kontak lagi untuk koneksi, yang tidak disarankan, karena kecepatannya tidak akan lebih tinggi, batas pembaruan tampilan adalah 10 kali per detik. Secara umum, untuk menghubungkan LCD 1602 ke Arduino, banyak kabel yang digunakan, yang menyebabkan beberapa ketidaknyamanan, tetapi ada pelindung khusus, tetapi akan dibahas lebih lanjut nanti. Foto menunjukkan koneksi layar ke Arduino Uno:

Kode sampel:

#termasuk // Tambahkan perpustakaan LiquidCrystal yang diperlukan lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup())( lcd.begin(16, 2); // Mengatur ukuran layar lcd.setCursor(0, 0); // Mengatur kursor ke awal 1 baris lcd.print("Halo, dunia!"); // Keluarkan teks lcd.setCursor(0, 1); // Atur kursor ke awal baris 2 lcd.print("site") ; // Keluaran teksnya ) void loop ()( )

Apa fungsi kode tersebut? Langkah pertama adalah menghubungkan perpustakaan untuk bekerja dengan tampilan. Seperti disebutkan di atas, perpustakaan ini sudah termasuk dalam Arduino IDE dan tidak perlu diunduh dan diinstal tambahan. Selanjutnya, kontak yang terhubung ke pin ditentukan: RS, E, DB4, DB5, DB6, DB7, masing-masing. Kemudian ukuran layar diatur. Karena kami bekerja dengan versi dengan 16 karakter dan 2 baris, kami menulis nilai berikut. Kami menempatkan kursor di awal baris pertama dan menampilkan teks pertama kami Hello World. Selanjutnya, tempatkan kursor pada baris kedua dan tampilkan nama situsnya. Itu saja! Menghubungkan lcd 1602 ke Arduino Uno dipertimbangkan.

Apa itu I2C dan mengapa itu diperlukan?

Seperti disebutkan di atas, menghubungkan layar membutuhkan banyak kontak. Misalnya, saat bekerja dengan banyak sensor dan layar LCD, 1602 pin mungkin tidak cukup. Seringkali amatir radio menggunakan versi Uno atau Nano, yang tidak memiliki banyak kontak. Kemudian orang-orang datang dengan perisai khusus. Misalnya I2C. Ini memungkinkan Anda menghubungkan layar hanya dengan 4 pin. Ini dua kali lipatnya. Modul I2C dijual terpisah, di mana Anda perlu menyoldernya sendiri, dan sudah disolder ke layar LCD 1602.

Koneksi menggunakan modul I2C

Menghubungkan LCD 1602 ke Arduino Nano dengan I2C hanya memakan sedikit ruang, hanya 4 pin: ground, power dan 2 output data. Kami menghubungkan daya dan ground masing-masing ke 5V dan GND di Arduino. Kami menghubungkan dua kontak yang tersisa: SCL dan SDA ke pin analog mana pun. Pada foto terlihat contoh menghubungkan lcd 1602 ke arduino dengan modul I2C:

Kode program

Jika untuk bekerja dengan tampilan tanpa modul hanya perlu menggunakan satu perpustakaan, maka untuk bekerja dengan modul Anda memerlukan dua perpustakaan. Salah satunya sudah termasuk dalam Arduino IDE - Wire. Perpustakaan lain, LiquidCrystal I2C, harus diunduh secara terpisah dan diinstal. Untuk menginstal perpustakaan di Arduino, isi arsip yang diunduh harus dimuat ke folder root Perpustakaan. Contoh kode program menggunakan I2C:

#termasuk #termasuk LCD LiquidCrystal_I2C (0x27,16,2); // Mengatur tampilan void setup() ( lcd.init(); lcd.backlight(); // Menghidupkan lampu latar tampilan lcd..setCursor(8, 1); lcd.print("LCD 1602"); ) void loop( ) ( // Atur kursor ke baris kedua dan karakter nol. lcd.setCursor(0, 1); // Menampilkan jumlah detik sejak Arduino dimulai lcd.print(millis()/1000); )

Seperti yang Anda lihat, kodenya hampir sama.

Bagaimana cara menambahkan simbol Anda sendiri?

Masalah dengan tampilan ini adalah tidak adanya dukungan untuk alfabet dan simbol Sirilik. Misalnya, Anda perlu memuat beberapa simbol ke dalam tampilan agar dapat mencerminkannya. Untuk melakukan ini, tampilan memungkinkan Anda membuat hingga 7 simbol Anda sendiri. Bayangkan tabelnya:

0 0 0 1 0
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
0 0 0 1 0
0 0 0 0 0

Jika 0 - tidak ada apa-apa di sana, jika 1 - ini adalah area yang dicat. Pada contoh di atas Anda dapat melihat pembuatan simbol "smiling smiley". Menggunakan contoh program di Arduino akan terlihat seperti ini:

#termasuk #termasuk // Tambahkan perpustakaan yang diperlukan // Bit mask dari simbol senyuman byte smile = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LCD Kristal Cair(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup())( lcd.begin(16, 2); // Mengatur ukuran layar lcd.createChar(1, smile); // Membuat nomor karakter 1 lcd.setCursor(0, 0); // Atur kursor ke awal baris 1 lcd.print("\1"); // Menampilkan wajah tersenyum (karakter nomor 1) - "\1" ) void loop ())( )

Seperti yang Anda lihat, bitmask dibuat sama seperti tabel. Setelah dibuat, itu dapat ditampilkan sebagai variabel di layar. Ingatlah bahwa Anda hanya dapat menyimpan 7 karakter di memori. Pada prinsipnya, ini sudah cukup. Misalnya, jika Anda perlu menampilkan simbol derajat.

Masalah di mana tampilan mungkin tidak berfungsi

Ada kalanya tampilan tidak berfungsi. Misalnya menyala, tetapi tidak menampilkan karakter. Atau tidak menyala sama sekali. Pertama, periksa apakah Anda telah menghubungkan pin dengan benar. Jika Anda menggunakan koneksi LCD 1202 ke Arduino tanpa I2C, kabel akan sangat mudah tersangkut, yang dapat menyebabkan tampilan tidak berfungsi dengan benar. Anda juga harus memastikan bahwa kontras tampilan ditingkatkan, karena dengan kontras minimum bahkan tidak terlihat apakah LCD 1602 dihidupkan atau tidak. Jika ini tidak membantu, mungkin masalahnya terletak pada penyolderan kontak, ini adalah saat menggunakan modul I2C. Alasan umum lainnya mengapa tampilan tidak berfungsi adalah pengaturan alamat I2C yang salah. Faktanya adalah ada banyak produsen, dan mereka dapat memasukkan alamat yang berbeda, Anda perlu memperbaikinya di sini:

LCD LiquidCrystal_I2C (0x27,16,2);

Dalam tanda kurung Anda dapat melihat dua nilai, 0x27 dan 16.2 (16.2 adalah ukuran tampilan, dan 0x27 adalah alamat I2C). Alih-alih nilai-nilai ini, Anda dapat mencoba menyetel 0x37 atau 0x3F. Alasan lainnya hanyalah LCD 1602 yang rusak. Mengingat hampir semua produk Arduino dibuat di China, Anda tidak dapat 100% yakin bahwa produk yang dibeli tidak cacat.

Pro dan kontra dari LCD 1602

Mari kita lihat kelebihan dan kekurangan layar LCD 1602.

  • Harga. Modul ini dapat dibeli dengan harga yang sangat terjangkau di toko-toko Cina. Harganya 200-300 rubel. Kadang-kadang bahkan dijual bersama dengan modul I2C.
  • Mudah untuk terhubung. Mungkin tidak ada yang menghubungkan LCD 1602 tanpa I2C hari ini. Dan dengan modul ini, koneksi hanya membutuhkan 4 kontak, tidak akan ada “jaringan” kabel.
  • Pemrograman. Berkat perpustakaan yang sudah jadi, bekerja dengan modul ini menjadi mudah; semua fungsi sudah ditulis. Dan jika Anda perlu menambahkan simbol Anda sendiri, hanya perlu beberapa menit.
  • Selama penggunaannya oleh ribuan amatir radio, tidak ada kerugian besar yang teridentifikasi, hanya ada kasus pembelian yang cacat, karena tampilan versi China yang paling banyak digunakan.

Artikel ini membahas cara menghubungkan 1602 ke Arduino, dan juga memberikan contoh program untuk bekerja dengan tampilan ini. Ini benar-benar salah satu yang terbaik di kategorinya, bukan tanpa alasan ribuan amatir radio memilihnya untuk proyek mereka!

Layar LCD berdimensi 1602, berdasarkan pengontrol HD44780, merupakan salah satu layar paling sederhana, terjangkau, dan populer untuk pengembangan berbagai perangkat elektronik. Hal ini dapat ditemukan baik pada perangkat yang dirakit di atas lutut, maupun pada perangkat industri, seperti, misalnya, mesin kopi. Modul dan perisai bertema Arduino yang paling populer seperti dan dikumpulkan berdasarkan tampilan ini.

Pada artikel ini kami akan memberi tahu Anda cara menghubungkannya ke Arduino dan menampilkan informasi.

Komponen yang digunakan (beli di China):

. Papan kontrol

. Menghubungkan kabel

Layar ini mempunyai dua desain: lampu latar kuning dengan huruf hitam atau, yang lebih umum, lampu latar biru dengan huruf putih.

Ukuran tampilan pada pengontrol HD44780 bisa berbeda, namun akan dikontrol dengan cara yang sama. Dimensi yang paling umum adalah 16x02 (yaitu 16 karakter dalam dua baris) atau 20x04. Resolusi simbolnya sendiri adalah 5x8 piksel.

Kebanyakan tampilan tidak mendukung alfabet Sirilik; hanya tampilan bertanda CTK yang memilikinya. Tapi kita bisa mencoba menyelesaikan sebagian masalah ini (lanjutan di artikel).

Keluaran tampilan:

Layar memiliki konektor 16pin untuk koneksi. Pin ditandai di bagian belakang papan.

1 (VSS) - Catu daya pengontrol (-)
2 (VDD) - Catu daya pengontrol (+)
3 (VO) - Pin kontrol kontras
4 (RS) - Daftar pilih
5 (R/W) - Baca/Tulis (mode tulis saat terhubung ke ground)
6 (E) - Aktifkan (strobe saat menurun)
7-10 (DB0-DB3) - Bit tingkat rendah dari antarmuka 8-bit
11-14 (DB4-DB7) - Bit antarmuka tingkat tinggi
15 (A) - Catu daya lampu latar anoda (+).
16 (K) - Catu daya lampu latar katoda (-).

Mode uji mandiri:

Sebelum mencoba menghubungkan dan menampilkan informasi, ada baiknya untuk mengetahui apakah tampilan berfungsi atau tidak. Untuk melakukan ini, Anda perlu memberikan tegangan ke pengontrol itu sendiri ( VSS dan VDD), nyalakan lampu latar ( A dan K), dan sesuaikan juga kontrasnya.

Untuk mengatur kontras, gunakan potensiometer 10 kOhm. Tidak peduli apa bentuknya. +5V dan GND disuplai ke kaki luar, kaki tengah dihubungkan ke output V.O.

Setelah menerapkan daya ke sirkuit, kontras yang benar harus dicapai; jika tidak diatur dengan benar, tidak ada yang akan ditampilkan di layar. Untuk mengatur kontras, mainkan potensiometer.

Jika sirkuit dipasang dengan benar dan kontras disesuaikan dengan benar, garis atas harus diisi dengan persegi panjang di layar.

Keluaran informasi:

Pustaka LiquidCrystal.h yang dibangun ke dalam Arduino IDE digunakan untuk mengoperasikan layar.

Fungsionalitas perpustakaan

//Bekerja dengan kursor lcd.setCursor(0, 0); // Atur kursor (nomor sel, baris) lcd.rumah(); // Atur kursor ke nol (0, 0) lcd.kursor(); // Aktifkan visibilitas kursor (garis bawah) lcd.noCursor(); // Hapus visibilitas kursor (garis bawah) lcd.berkedip(); // Mengaktifkan kedipan kursor (kursor 5x8) lcd.noBlink(); // Mematikan kedipan kursor (kursor 5x8) //Keluaran informasi lcd.print("situs"); // Keluaran informasi lcd.hapus(); // Hapus tampilan, (hapus semua data) atur kursor ke nol lcd.kananKeKiri(); // Perekaman dilakukan dari kanan ke kiri lcd.kiriKeKanan(); // Penulisan dilakukan dari kiri ke kanan lcd.scrollDisplayRight(); // Geser semua yang ada di tampilan satu karakter ke kanan lcd.scrollDisplayLeft(); // Geser semua yang ada di tampilan satu karakter ke kiri //Informasi berguna untuk mata-mata :) lcd.noDisplay(); // Informasi di tampilan menjadi tidak terlihat, data tidak terhapus // jika, pada saat fungsi ini aktif, tidak ada yang ditampilkan, maka layar LCD(); // Saat memanggil fungsi display(), semua informasi yang ada

Layarnya sendiri dapat beroperasi dalam dua mode:

Mode 8-bit - bit rendah dan tinggi digunakan untuk ini (BB0-DB7)

Mode 4-bit - hanya bit paling tidak signifikan yang digunakan untuk ini (BB4-DB7)

Tidak disarankan menggunakan mode 8-bit pada tampilan ini. Pengoperasiannya membutuhkan 4 kaki lagi, dan praktis tidak ada peningkatan kecepatan karena Kecepatan refresh tampilan ini terbatas< 10раз в секунду.

Untuk mengeluarkan teks, Anda perlu menghubungkan pin RS, E, DB4, DB5, DB6, DB7 ke pin pengontrol. Mereka dapat dihubungkan ke pin Arduino apa pun, yang utama adalah mengatur urutan kode yang benar.

Kode sampel:

#termasuk LCD Kristal Cair(7, 6, 5, 4, 3, 2); ruang kosong mempersiapkan()(lcd.begin(16, 2); // Atur ukuran layar lcd.setCursor(0, 0); lcd.print("Halo dunia!"); // Menampilkan teks lcd.setCursor (0, 1); // Atur kursor ke awal baris 2 lcd.print("situs"); // Teks keluaran ) batal lingkaran (){ }

Buat simbol Anda sendiri

Kami telah memilah keluaran teks, huruf-huruf alfabet Inggris tertanam dalam memori pengontrol di dalam layar dan tidak ada masalah dengannya. Namun apa yang harus dilakukan jika simbol yang diperlukan tidak ada dalam memori pengontrol?

Tidak masalah, simbol yang dibutuhkan dapat dibuat secara manual (total maksimal 7 simbol). Sel dalam tampilan yang kami pertimbangkan memiliki resolusi 5x8 piksel. Tugas membuat simbol hanyalah menulis topeng bit dan menempatkannya di tempat di mana titik-titik harus menyala dan angka nol di tempat yang tidak seharusnya menyala.

Pada contoh di bawah ini kita akan menggambar wajah tersenyum.

Kode sampel

//Diuji pada Arduino IDE 1.0.5#termasuk #termasuk // Tambahkan perpustakaan yang diperlukan // Bitmask dari simbol senyuman byte senyuman = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LCD Kristal Cair(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) ruang kosong mempersiapkan()(lcd.begin(16, 2); // Atur ukuran layar lcd.createChar(1, senyum); // Buat simbol nomor 1 lcd.setCursor(0, 0); // Atur kursor ke awal 1 baris lcd.print("\1"); // Menampilkan wajah tersenyum (karakter nomor 1) - "\1") ruang kosong lingkaran (){ }

Bonusnya

Di komentar, seorang anggota komunitas mengirimkan link ke pembuat simbol

  • igorka

      generator karakter seperti di atas,
      Aku melakukannya karena aku tidak lemah)

Kali ini saya ingin memberi tahu Anda cara menghubungkan layar dari ponsel Nokia 1202 ke mikrokontroler Atmega8. Kami memprogram di lingkungan CodeVision. Saya bisa saja salah di sana-sini. Tidak lama kemudian saya mengetahui apa itu. Saya tidak punya pengalaman pemrograman dan saya belum menulis perpustakaan untuk bekerja dengan tampilan. Mereka disalin dari satu proyek di Internet. Semua fungsi yang diperlukan ditulis di sana dan ada font 5 * 8 dalam huruf Latin dan Sirilik. Ada juga beberapa karakter 12*16 dan 24*32, yang digunakan penulis perpustakaan di perangkatnya. Jika Anda menghapusnya, maka font 5*8 akan memakan sekitar 700 byte flash mikrokontroler. Oleh karena itu, mikrokontroler untuk proyek tersebut harus diambil "lebih gemuk", dalam kasus saya, saya menggunakan Atmega8. Cukup. Semua file - sumber, perpustakaan, dll., .

Diagram koneksi indikator

Diagram skema menghubungkan layar LCD ke MK

Saya menggambar diagram koneksi. Untuk memberi daya pada layar, Anda memerlukan tegangan 3,3V. Jika Anda memberi daya pada mikrokontroler dari 5V, maka pasang pembagi resistor dan sirkuit mikro 78L33. Jika seluruh rangkaian ditenagai oleh 3.3V, pembagi resistor tidak diperlukan. Nampaknya Atmega8A dapat beroperasi dari 3.3V asalkan frekuensinya tidak lebih tinggi dari 8 MHz. Secara pribadi, saya belum mencobanya. Saya telah merakit semuanya di papan debug yang ditenagai oleh 5V. Anda tidak boleh meletakkan elektrolit berkapasitas besar di depan layar itu sendiri. Pada awal pengoperasian, pengontrol mengirimkan perintah inisialisasi ke layar. Dibutuhkan waktu untuk mengisi kapasitor. Saat sedang mengisi daya dan tampilan mulai berfungsi, beberapa waktu akan berlalu dan tidak akan menerima perintah inisialisasi. Tentu saja, ini adalah milidetik, tetapi dalam kasus ini efeknya terlihat.


Menampilkan diagram pinout

Layar Nokia 1202 memiliki antarmuka SPI 9-bit. Mikrokontroler yang kami pilih tidak memiliki kemewahan ini. Oleh karena itu, untuk berkomunikasi dengan tampilan, kami tidak menggunakan perangkat keras, tetapi perangkat lunak SPI, bisa dikatakan, "tidak perlu dipikirkan". Saya tidak akan memberi tahu Anda cara membuat proyek baru di CodeVision - pikirkan sendiri. Saya hanya akan mengatakan itu semua pin PORTB harus dikonfigurasi sebagai output. Dalam pengaturan proyek Anda perlu memberi tanda centang pada " Simpan Konstanta Global dalam Memori FLASH" Tindakan ini diperlukan agar susunan font dan gambar kita disimpan di flash.


Jadi, kami membuat proyek tersebut. Kami memilih mikrokontroler, mengatur frekuensi jam, dan mengkonfigurasi proyek. Apa berikutnya? Dan kemudian Anda perlu menambahkan perpustakaan untuk bekerja dengan perpustakaan tampilan dan penundaan. Buka kemasan arsip. Ada dua file di sana. Mereka perlu disalin ke folder tertentu. Saya harap Anda menginstal CodeVision langsung di drive C:\. Jika ya, salin file ke jalur yang sesuai:

C:\cvavreval\inc untuk file 1100.inc, dan
C:\cvavreval\lib untuk file 1100.h .


Saya juga ingin mengatakan bahwa penetapan pin mikrokontroler dapat diubah dalam file 1100.h. Maka diagram koneksi akan berubah. Mari kita mulai membuat kode. Mari kita tampilkan saja beberapa tulisan pada tampilan dengan font utama 5*8. Pada awalnya kami akan menambahkan perpustakaan.

#termasuk< 1100.h>// menampilkan perpustakaan
#termasuk // tunda perpustakaan

Di bagian paling bawah, sebelum loop while(1)() utama, kita menginisialisasi tampilan dan menghapusnya.

lcd_init(); // menampilkan inisialisasi
lcd_clear(); // hapus tampilan

Kami juga akan menempatkan tulisan kami sebelum siklus utama. Biarkan pengontrol terlebih dahulu menampilkan pesan di layar, lalu memutar loop utama. Kami menulis ini:

print_string("Keluarkan tulisan",5,0);
print_string("Apapun yang kita inginkan",0,1);
print_string("BUCKER",10,2);

Saya pikir semuanya jelas di sini. Digit pertama adalah koordinat x pada tampilan. Nilainya bisa dari 0 hingga 96. Yang kedua adalah string. Mulai dari 0 hingga 7. Pada prinsipnya, 8 setengah baris muat di sana, tetapi kita tidak akan membaca setengah baris. Kami mengkompilasi dan mem-flash. Mari kita lihat hasilnya. Anda juga dapat menginstal Proteus dan mengujinya. Pengontrol dapat dikonfigurasi untuk beroperasi dari generator internal pada frekuensi yang ditentukan dalam proyek dengan penundaan mulai 64 ms. Saya menambahkan arsip dengan proyek yang dikompilasi. Frekuensi 8MHz.


Tapi seperti yang sudah saya tulis di awal, ada juga simbol lain di perpustakaan. Benar, tidak ada huruf, yang ada hanya angka. Sekarang mari kita mempersulit tugas ini sedikit. Biarlah prasasti itu tidak menjadi lembam, tetapi berubah. Katakanlah menghitung dari 0 hingga 9 dengan selang waktu 1 detik. Ketika mencapai 9, maka akan diatur ulang ke nol dan mulai lagi. Mari kita ambil bilangan besar berukuran 24*32. Baiklah, mari kita mulai. Anda dapat mengambil proyek sebelumnya dan menghapus tiga baris "print_string". Segera setelah menambahkan perpustakaan, mari kita deklarasikan variabel global tertentu M.

karakter m = 0;

Anda cukup menulis:

Dalam hal ini, secara otomatis akan diberi nilai 0. Di loop utama kita menulis ini:

char_24_32(m,35,2); //fungsi keluaran simbol 24*32
penundaan_ms(1000); // tunggu 1 detik
m++; // tambahkan 1 ke variabel m
jika(m>9)m=0; // Kondisi. Jika variabel m lebih besar dari 9, maka m sama dengan 0.

Saya membuat video pendek tentang program yang berfungsi

Saya akan mencoba memberi tahu Anda cara menggambar dan menampilkannya di layar tampilan. Cara membuat array dan fungsi untuk mengeluarkannya dan cara membalikkan gambar. Perpustakaan dipinjam dari situs cxem.net. Bahan disiapkan Kedai bir.

Diskusikan artikel MENGHUBUNGKAN TAMPILAN KE MIKROKONTROLER

Apa yang merupakan bagian integral dari sejumlah besar perangkat elektronik? Tentu saja, sarana indikasi dan keluaran data secara grafis. Akan selalu lebih nyaman dan menyenangkan bagi pengguna bila hasil “kotak pintar” dapat dilihat secara visual. Oleh karena itu, hari ini kami akan menghubungkan layar ke STM32 untuk menampilkan teks dan angka. Pahlawan eksperimen kami adalah tampilan yang cukup populer dari Winstar. Omong-omong, klarifikasi penting muncul di komentar bahwa metodologinya pada dasarnya sama untuk semua tampilan berdasarkan HD44780. Terima kasih kepada JekaKey untuk tambahan penting)

Pertama, layar harus terhubung ke pengontrol. Unduh lembar data dan cari pinout WH1602. Lihat disini:

Seperti yang Anda ketahui, menampilkan WH1602 memiliki 16 pin. Mari kita lihat masing-masing secara terpisah...

Pin Vss, Vdd dan K perlu disambungkan ke ground dan power, yaitu persis seperti yang ditunjukkan pada tabel, tidak ada kejutan dan bahkan tidak ada yang perlu didiskusikan)

Pin nomor 3 digunakan untuk mengatur kontras - jika kita menerapkan +5V di sana, kita sama sekali tidak akan melihat apa pun, dan jika kita menghubungkan pin ke ground, kita akan mengagumi dua baris kotak hitam 😉 Tentu saja, ini tidak cocok untuk kita , jadi kita perlu menggantung potensiometer (resistor) di sana dengan resistansi variabel) untuk mengatur kontrasnya. Visibilitas karakter terbaik disediakan oleh tegangan 0,5-0,7 V pada pin tampilan ini.

Pin RS sudah menjadi pin yang akan kita kendalikan sendiri menggunakan mikrokontroler. Level tegangan rendah (0) pada pin ini berarti perintah akan mengikuti, level tinggi (1) berarti sekarang akan ada data yang akan ditulis ke memori tampilan.

Pin R/W - jelas di sini, apakah kita membaca data (misalnya menampilkan flag sibuk), dalam hal ini ada 1 di pin ini, atau kita menulis perintah/data ke tampilan, maka kita punya 0 di sini.

DB7 – DB0 – bus data, dan itu menjelaskan semuanya)

Pin E disebut sinyal Aktifkan. Untuk itulah dia dibutuhkan. Untuk bekerja dengan tampilan - merekam data atau mengeluarkan perintah - kita perlu mengeluarkan pulsa positif ke pin ini. Artinya, prosedurnya akan terlihat seperti ini:

  1. Pada pin RS, R/W, DB7 - DB0 - sinyal yang diperlukan sesuai dengan perintah kami.
  2. Kami menyediakan satu ke pin E.
  3. Zhdems (menurut lembar data – setidaknya 150 ns)
  4. Kami menerapkan level rendah (0) ke pin E.

Anda perlu memasang 4,2 V pada kaki A/Vee untuk menyalakan lampu latar layar.

Ini adalah bagaimana komunikasi dengan tampilan WH1602 terjadi.

Kita telah menemukan cara untuk menghubungkan WH1602, namun sebelum beralih ke contoh, mari kita lihat perintah apa yang umumnya dipahami oleh layar kita. Untuk melakukan ini, kita masuk ke lembar data dan menemukan tabel yang menarik:

Semua perintah dan sinyal yang harus ada pada pin WH1602 yang sesuai untuk setiap perintah spesifik dijelaskan di sini. Misalnya kita ingin menghapus tampilan, kita melihat tabel, dan inilah perintah yang kita perlukan! Hapus Tampilan!

Kami menerapkan angka nol pada pin RS, R/W, DB7, DB6, DB5, DB4, DB3, DB2, DB1, dan satu untuk pin DB0. Selesai! Apa selanjutnya? Benar sekali, satu di pin E, lalu tunggu beberapa saat dan turunkan E ke nol lagi. Itu saja, tampilannya terhapus 😉 Sesaat sebelum menjalankan perintah berikutnya, Anda harus berhenti sejenak, yang ditunjukkan dalam lembar data untuk setiap perintah. Akan lebih efektif untuk melakukan polling pada bendera sibuk; segera setelah disetel ulang ke 0, Anda dapat terus bekerja. Ada juga perintah khusus untuk membaca bendera ini, jadi semuanya jelas dengan ini) Ayo lanjutkan...

Dan nyatanya semuanya sesuai teori, Anda sudah bisa mencoba menulis sesuatu. Untuk mempermudah pengerjaan tampilan, saya membuat perpustakaan kecil, sekarang mari kita lihat cara menggunakannya. Pertama, unduh

Kami mendapatkan 2 file yang kami miliki, MT_WH1602.c dan MT_WH1602.h. Kami merobek yang kedua, di sini kami perlu memilih pin dan pengontrol yang digunakan.

Omong-omong, tampilan saya terhubung seperti ini:

RS-PC2
R/W – PB10
E–PB14
DB7–PD2
DB6–PC12
DB5–PA8
DB4–PA10
DB3–PA15
DB2–PD11
DB1–PA3
DB0–PA5

Buka file MT_WH1602.h:

#tentukan PLATFORM (STM32F10x)

Selanjutnya, pilih pin mikrokontroler yang terhubung dengan layar. Pertama mari kita atur port mana yang kita gunakan. Ketika saya terhubung, saya menggunakan GPIOA, GPIOB, GPIOC dan GPIOD, kami menulis:

Begitu pula untuk kaki-kaki mikrokontroler lainnya.

Kita sudah selesai dengan setup, mari kita lanjutkan) Untuk memanggil perintah yang diberikan di awal artikel, file MT_WH1602.c berisi fungsi-fungsi berikut (dinamakan berdasarkan nama perintah, jadi menurut saya semuanya jelas) :

batal MT_WH1602_ClearDisplay(batal ) ; batal MT_WH1602_ReturnHome(batal ) ; void MT_WH1602_EntryModeSet (alamat ID bool, shift bool) ; batal MT_WH1602_DisplayOnOff (bool Dbit, bool Cbit, bool Bbit) ; batal MT_WH1602_CursorOrDisplayShift (bool SCbit, bool RLbit) ; batal MT_WH1602_FunctionSet (bool DLbit, bool Nbit, bool Fbit) ; void MT_WH1602_SetCGRAMAddress (alamat uint8_t) ; batal MT_WH1602_SetDDRAMAddress (alamat uint8_t) ; bool MT_WH1602_ReadBusy(batal ) ; batal MT_WH1602_WriteData(uint8_t data) ;

Untuk beberapa perintah kita perlu meneruskan parameter ke fungsi, misalnya:

batal MT_WH1602_DisplayOnOff (bool Dbit, bool Cbit, bool Bbit) ;

Mari kita lihat tabel perintah:

Kita melihat bahwa perintah Display ON/OFF tidak hanya menghidupkan/mematikan tampilan, tetapi juga mengaktifkan/menonaktifkan kursor dan kedipan kursor. Di lembar data, bit perintah ini ditetapkan sebagai D, C, dan B, dan kami meneruskannya sebagai parameter ke fungsi. Jika kita perlu menghidupkan tampilan dan kursor, tetapi menonaktifkan kedipan kursor, kita memanggil perintah sebagai berikut:

MT_WH1602_DisplayOnOff(1, 1, 0);

Secara umum, semuanya sederhana 😉

Singkatnya, kita membuat proyek baru, menambahkan perpustakaan untuk bekerja dengan tampilan WH1602, membuat file .c kosong dan mulai mengisinya dengan kode:

// Sertakan file perpustakaan#sertakan "MT_WH1602.h" /*******************************************************************/ int utama(batal) ( // Panggil fungsi inisialisasi, kita tidak dapat melakukannya tanpanya =)() ; // Sekarang kita perlu membuat konfigurasi tampilan awal // Dokumentasi dan Internet merekomendasikan melakukan ini ;) MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Delay(1000 ) ; MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Delay(1000 ) ; MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Delay(1000 ) ; MT_WH1602_FunctionSet(1, 1, 1); MT_WH1602_Delay(1000 ) ; MT_WH1602_DisplayOnOff(1, 0, 0); MT_WH1602_Delay(1000 ) ; MT_WH1602_ClearDisplay() ; MT_WH1602_Delay(2000) ; // Misalnya, saya mengambil nilai penundaan pertama yang terlintas dalam pikiran) // Secara umum, Anda perlu memeriksa tampilan bendera sibuk // Sekarang mari kita tampilkan sesuatu, seperti nama situs kita MT_WH1602_WriteData(0x6D) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x69) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x72) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x6F) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x74) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x65) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x68) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x6E) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x69) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x73) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x2E) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x72) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x75) ; MT_WH1602_Delay(100) ; sementara (1 ) ( __NOP() ; ) ) /*******************************************************************/

Selesai, mari kita periksa)


Seperti yang Anda lihat, semuanya berfungsi dengan benar)

Ngomong-ngomong, entah bagaimana saya lupa pertanyaan tentang apa yang harus ditulis di layar untuk menampilkan karakter ini atau itu. Ini pelat dari lembar data:

Jadi, untuk menentukan nilai apa yang akan ditulis ke dalam memori tampilan, Anda perlu mengambil angka yang tertulis di atas dan kiri tabel ini untuk simbol tertentu. Misalnya simbol “A”. Mari kita lihat - simbol ini berhubungan dengan kolom 0100 (0x4) dan baris 0001 (0x1). Ternyata untuk menampilkan simbol “A” Anda perlu menuliskan nilai 0x41 ke dalam tampilan.

Itu saja sekarang =) Kami telah mengatur koneksi dan pengoperasian layar WH1602, jadi sampai jumpa lagi!

P.S. Saat bekerja dengan perpustakaan, saya tidak menguji fungsi membaca bendera sibuk, jadi jika tiba-tiba ada yang tidak berfungsi sebagaimana mestinya, tulis, kami akan mencari tahu)

  • Modul FC-113 didasarkan pada chip PCF8574T, yang merupakan register geser 8-bit - "expander" input-output untuk bus serial I2C. Pada gambar, sirkuit mikro diberi nama DD1.
  • R1 adalah resistor trim untuk mengatur kontras layar LCD.
  • Jumper J1 digunakan untuk menyalakan lampu latar tampilan.
  • Pin 1…16 digunakan untuk menghubungkan modul ke pin layar LCD.
  • Bantalan kontak A1...A3 diperlukan untuk mengubah alamat I2C perangkat. Dengan menyolder jumper yang sesuai, Anda dapat mengubah alamat perangkat. Tabel menunjukkan korespondensi alamat dan jumper: "0" menunjukkan sirkuit terbuka, "1" menunjukkan jumper terpasang. Secara default, ketiga jumper dan alamat perangkat terbuka 0x27.

2 Diagram koneksi untuk layar LCD ke Arduino melalui protokol I2C

Modul terhubung ke Arduino dengan cara standar untuk bus I2C: pin SDA modul terhubung ke port analog A4, pin SCL terhubung ke port analog A5 Arduino. Modul ini ditenagai oleh +5 V dari Arduino. Modul itu sendiri dihubungkan oleh pin 1…16 ke pin 1…16 yang sesuai pada layar LCD.


3 Perpustakaan untuk bekerja melalui protokol I2C

Sekarang kita memerlukan perpustakaan untuk bekerja dengan LCD melalui antarmuka I2C. Anda dapat menggunakan, misalnya, yang ini (tautan di baris "Unduh Kode Contoh dan Pustaka").

Arsip yang diunduh LiquidCrystal_I2Cv1-1.rar unzip ke folder \perpustakaan\, yang terletak di direktori Arduino IDE.

Perpustakaan mendukung serangkaian fungsi standar untuk layar LCD:

FungsiTujuan
Kristal cair() membuat variabel tipe LiquidCrystal dan menerima parameter koneksi tampilan (nomor pin);
mulai() menginisialisasi tampilan LCD, mengatur parameter (jumlah baris dan karakter);
jernih() membersihkan layar dan mengembalikan kursor ke posisi awal;
rumah() kembalikan kursor ke posisi awal;
set Kursor() mengatur kursor ke posisi tertentu;
menulis() menampilkan simbol pada layar LCD;
mencetak() menampilkan teks pada layar LCD;
kursor() menunjukkan kursor, mis. menggarisbawahi di bawah tempat karakter berikutnya;
tanpa Kursor() menyembunyikan kursor;
berkedip() kursor berkedip;
tidak berkedip() Batalkan flashing;
tidak ada Tampilan() mematikan layar sambil menyimpan semua informasi yang ditampilkan;
menampilkan() menyalakan layar sambil menyimpan semua informasi yang ditampilkan;
gulirTampilanKiri() gulir isi tampilan 1 posisi ke kiri;
gulirTampilanKanan() gulir isi tampilan 1 posisi ke kanan;
gulir otomatis() aktifkan gulir otomatis;
tidak ada Gulir Otomatis () nonaktifkan gulir otomatis;
kiri ke kanan() mengatur arah teks dari kiri ke kanan;
kanan ke kiri() arah teks dari kanan ke kiri;
buatChar() membuat karakter khusus untuk layar LCD.

4 Sketsa untuk keluaran teks ke layar LCD melalui bus I2C

Mari kita buka sampelnya: Sampel File LiquidCrystal_I2C CustomChars dan kami akan mengubahnya sedikit. Kami akan menampilkan pesan yang di ujungnya akan ada simbol berkedip. Komentar pada kode mengomentari semua nuansa sketsa.

#termasuk // sertakan perpustakaan Wire #include // menghubungkan perpustakaan LCD #define printByte(args) write(args); // uint8_t hati = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // bit mask dari simbol “hati” LiquidCrystal_I2C lcd(0x27, 16, 2); // Tetapkan alamat 0x27 untuk layar LCD 16x2 batalkan pengaturan() ( lcd.init(); // menginisialisasi tampilan LCD lcd.backlight(); // nyalakan lampu latar layar lcd.createChar(3, hati); // membuat simbol “hati” di sel memori 3 lcd.home(); // letakkan kursor di pojok kiri atas, pada posisi (0,0) lcd.!"); // mencetak satu baris teks lcd.setCursor(0, 1); // memindahkan kursor ke baris 2, karakter 1 lcd.print( " i "); // mencetak pesan pada baris 2 lcd.printByte(3); // mencetak simbol "hati" yang terletak di sel ke-3 lcd.print("Arduino"); } lingkaran kosong() (// mem-flash karakter terakhir lcd.setCursor(13, 1); // pindahkan kursor ke baris 2, karakter 1 lcd.print("\t"); penundaan(500); lcd.setCursor(13, 1); // pindahkan kursor ke baris 2, karakter 1 lcd.print(" "); penundaan(500); }

Omong-omong, karakter ditulis dengan perintah lcd.createChar();, tetap berada di memori tampilan bahkan setelah daya dimatikan, karena ditulis untuk menampilkan ROM 1602.

5 Buat simbol Anda sendiri untuk layar LCD

Mari kita lihat lebih dekat masalah pembuatan simbol Anda sendiri untuk layar LCD. Setiap karakter di layar terdiri dari 35 titik: 5 lebar dan 7 tinggi (+1 garis cadangan untuk garis bawah). Pada baris 6 sketsa di atas kita mendefinisikan array yang terdiri dari 7 angka: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Konversi bilangan heksadesimal ke biner: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Angka-angka ini tidak lebih dari bit mask untuk masing-masing dari 7 baris simbol, di mana "0" menunjukkan titik terang dan "1" menunjukkan titik gelap. Misalnya, simbol hati yang ditetapkan sebagai bitmask akan muncul di layar seperti yang ditunjukkan pada gambar.

6 Kontrol layar LCD melalui bus I2C

Ayo unggah sketsanya ke Arduino. Prasasti yang kami tentukan dengan kursor berkedip di bagian akhir akan muncul di layar.


7 Ada apa di belakang bus I2C

Sebagai bonus, mari kita lihat diagram waktu untuk menampilkan karakter Latin "A", "B" dan "C" pada layar LCD. Karakter-karakter ini disimpan dalam ROM tampilan dan ditampilkan di layar hanya dengan mengirimkan alamatnya ke layar. Diagram diambil dari pin tampilan RS, RW, E, D4, D5, D6 dan D7, mis. sudah setelah konverter “bus paralel I2C” FC-113. Kami dapat mengatakan bahwa kami sedang mempelajari lebih dalam tentang perangkat keras.


Diagram waktu keluaran karakter Latin “A”, “B” dan “C” pada layar LCD 1602

Diagram menunjukkan bahwa karakter yang ada di tampilan ROM (lihat halaman 11 lembar data, tautan di bawah) ditransmisikan dalam dua camilan, yang pertama menentukan nomor kolom tabel, dan yang kedua - nomor baris. Dalam hal ini, data “terkunci” di tepi sinyal pada saluran E(Aktifkan), dan garis R.S.(Register select) dalam keadaan logis, yang berarti data sedang ditransfer. Keadaan rendah pada saluran RS berarti instruksi sedang dikirim, yang kita lihat sebelum setiap karakter dikirimkan. Dalam hal ini, kode instruksi untuk pengangkutan kembali ke posisi (0, 0) layar LCD dikirimkan, yang juga dapat diketahui dengan mempelajari deskripsi teknis tampilan.

Dan satu contoh lagi. Diagram pengaturan waktu ini menunjukkan keluaran simbol Hati pada layar LCD.


Sekali lagi, dua impuls pertama Memungkinkan mematuhi instruksi Rumah()(0000 0010 2) - mengembalikan kereta ke posisi (0; 0), dan dua yang kedua - menampilkan simbol "Hati" (instruksi) ke layar LCD yang tersimpan di sel memori 3 10 (0000 0011 2 lcd.createChar(3, hati); sketsa).