- Bekerja dari Layar LCD 16x2
- Diagram Sirkuit untuk Antarmuka LCD dengan Mikrokontroler STM8
- Perpustakaan LCD STM8 - File Header untuk STM8S103F3P6
- Program LCD untuk Mikrokontroler STM8S
- STM8 dengan LCD - Bekerja
Layar LCD Alfanumerik 16x2 adalah tampilan yang paling umum digunakan di kalangan penghobi dan penggemar. Tampilan ini sangat berguna ketika Anda ingin menampilkan informasi dasar kepada pengguna dan juga dapat membantu dalam menguji atau men-debug kode kami. Modul LCD 16x2 khusus ini mudah didapat dan telah populer sejak lama. Anda dapat mempelajari lebih lanjut tentang dasar-dasar modul LCD 16x2 di artikel terkait.
Untuk melanjutkan rangkaian tutorial Mikrokontroler STM8 kita, dalam tutorial ini, kita akan belajar bagaimana menghubungkan LCD dengan Mikrokontroler STM8. Kami sebelumnya telah menghubungkan LCD 16x2 dengan banyak mikrokontroler lain juga, tutorialnya tercantum di bawah ini dan Anda dapat memeriksanya jika tertarik.
Jika Anda baru mengenal STM8, lihat artikel memulai dengan Mikrokontroler STM8 untuk memahami dasar-dasar papan pengontrol dan lingkungan pemrograman. Kami tidak akan membahas dasar-dasar dalam tutorial ini.
Bekerja dari Layar LCD 16x2
Seperti namanya, LCD 16x2 akan memiliki 16 Kolom dan 2 Baris. Jadi secara total kita akan bisa menampilkan 32 karakter pada tampilan ini dan karakter tersebut bisa berupa huruf atau angka atau bahkan simbol. Pinout LCD 16x2 sederhana yang kami gunakan dalam tutorial ini ditunjukkan di bawah-
Seperti yang Anda lihat, layar memiliki 16 pin dan kita dapat membaginya menjadi lima kategori, Pin Power, Pin kontras, Pin Kontrol, Pin Data, dan pin Backlight seperti yang ditunjukkan pada tabel di bawah ini. Kami akan membahas detail setiap pin saat kami membahas diagram rangkaian tutorial ini.
Kategori | Pin NO. | Nama Pin | Fungsi |
Pin Daya | 1 | VSS | Pin Ground, terhubung ke Ground |
2 | VDD atau Vcc | Pin tegangan + 5V | |
Kontras Pin | 3 | V0 atau VEE | Pengaturan Kontras, terhubung ke Vcc melalui resistor variabel. |
Pin Kontrol | 4 | RS | Register Pilih Pin, RS = 0 Mode perintah, RS = 1 Mode data |
5 | RW | Pin Baca / Tulis, RW = 0 Mode tulis, RW = 1 Mode baca | |
6 | E | Aktifkan, pulsa tinggi ke rendah perlu mengaktifkan LCD | |
Pin Data | 7-14 | D0-D7 | Pin Data, Menyimpan Data untuk ditampilkan pada LCD atau instruksi perintah |
Pin Lampu Latar | 15 | LED + atau A | Untuk menyalakan Lampu Latar + 5V |
16 | LED- atau K. | Tanah Backlight |
Di bagian belakang LCD, seperti yang ditunjukkan pada gambar di bawah ini, Anda akan menemukan dua titik hitam, di dalamnya terdapat IC driver LCD HD44780 (dilingkari merah). Mikrokontroler kami harus berkomunikasi dengan IC ini yang pada gilirannya akan mengontrol apa yang sedang ditampilkan pada LCD. Jika Anda penasaran untuk mengetahui bagaimana sebenarnya semua ini bekerja, Anda harus memeriksa cara kerja layar LCD 16x2 di mana kita telah membahas cara kerja LCD secara rinci.
Dalam tutorial ini, kita akan membahas diagram rangkaian dan kode untuk menampilkan karakter alfamerik (huruf dan angka) pada layar LCD 16x2 menggunakan perintah sederhana LCD_print _char dan LCD_print_string . Perintah-perintah ini dapat langsung digunakan dalam program setelah memasukkan file header kita. File header menangani semua sebagian besar hal untuk Anda sehingga tidak wajib mengetahui cara kerja tampilan atau IC driver HD44780.
Diagram Sirkuit untuk Antarmuka LCD dengan Mikrokontroler STM8
Sirkuit LCD STM8 lengkap dapat ditemukan pada gambar di bawah ini. Seperti yang Anda lihat, koneksi untuk STM8S103F3P6 Controller dengan LCD sangat sederhana, kami memiliki layar LCD yang terhubung langsung ke papan kami dan ST-link juga terhubung untuk memprogram papan.
Pin power Vss dan Vcc dihubungkan ke pin 5V pada papan STM8S, perhatikan bahwa tegangan operasi LCD adalah 5V dan dihubungkan untuk beroperasi pada 3.3V. Jadi meskipun Mikrokontroler STM8S103F3P6 beroperasi pada 3.3V wajib memiliki supply 5V untuk LCD, Anda dapat menghindari hal ini dengan menggunakan IC pengontrol muatan tetapi kami tidak akan membahasnya dalam tutorial ini.
Selanjutnya kita memiliki kontras pin yang digunakan untuk mengatur kontras LCD, kita telah menghubungkannya ke potensiometer sehingga kita dapat mengontrol kontrasnya. Kami telah menggunakan pot 10k, tetapi Anda juga dapat menggunakan nilai terdekat lainnya, pot bertindak sebagai pembagi potensial untuk memberikan 0-5 V ke pin kontras, biasanya Anda juga dapat menggunakan resistor secara langsung untuk menyediakan sekitar 2.2V untuk kontras yang wajar nilai. Kemudian kami memiliki pin reset (RS), Read / Write (RW), dan Enable (E). Pin baca-tulis diardekan karena kami tidak akan membaca apa pun dari LCD, kami hanya akan melakukan operasi tulis. Dua pin kontrol Rs dan E lainnya masing-masing dihubungkan ke pin PA1 dan PA2.
Kemudian kami memiliki pin data DB0 ke DB7. LCD 16x2 dapat beroperasi dalam dua mode, satu mode operasi 8-bit di mana kita harus menggunakan semua 8 pin data (DB0-DB7) pada LCD dan yang lainnya adalah mode operasi 4-bit di mana kita hanya membutuhkan 4 pin data (DB4-DB7). Mode 4-bit umumnya digunakan karena memerlukan lebih sedikit pin GPIO dari pengontrol, jadi kami juga menggunakan mode 4-bit dalam tutorial ini dan hanya menghubungkan pin DB4, DB5, DB6, dan DB7 ke pin PD1, PD2, PD3, dan PD4 masing-masing.
Dua pin terakhir BLA dan BLK digunakan untuk menyalakan LED lampu latar internal, kami telah menggunakan resistor 560-ohm sebagai resistor pembatas arus. Pemrogram ST-Link terhubung seperti biasa seperti di tutorial sebelumnya. Saya membuat koneksi lengkap di papan tempat memotong roti dan pengaturan saya terlihat seperti ini yang ditunjukkan pada gambar di bawah.
Perpustakaan LCD STM8 - File Header untuk STM8S103F3P6
Sebelum kita melanjutkan dalam diagram rangkaian, mari kita dapatkan file header LCD STM8 dari GitHub menggunakan tautan berikut-
File header LCD STM8S 16x2
Anda dapat mengunduh repo lengkap dan mendapatkan file stm8s103_LCD_16x2.h atau cukup kode dari tautan di atas. Saat menyetel proyek, pastikan Anda menyertakan semua file header yang diperlukan dalam direktori inc bersama dengan file header ini.
Jika Anda tidak yakin bagaimana menambahkan file header dan mengkompilasi program, ikuti video di bagian bawah halaman ini. Dan jika Anda penasaran tentang cara kerja kode di dalam file header, Anda dapat melihat tutorial PIC dengan LCD. File header yang digunakan dalam proyek ini sangat mirip dengan yang dijelaskan di sana, jadi kami tidak akan membahasnya secara detail.
Program LCD untuk Mikrokontroler STM8S
Untuk demonstrasi, kami akan memprogram pengontrol STM8S kami untuk menampilkan string sederhana seperti "Circuit Digest" dan kemudian kami akan menaikkan nilai "Test" untuk setiap satu detik di baris kedua. Program lengkapnya dapat ditemukan di bagian bawah halaman ini. Penjelasannya sebagai berikut.
Kami memulai program kami dengan menentukan pin dan menambahkan file header yang diperlukan seperti biasa. Dalam diagram sirkuit yang kami diskusikan di atas, kami telah menghubungkan LCD_RS ke PA1 jadi kami telah mendefinisikannya sebagai LCD_RS GPIOA, GPIO_PIN_1. Demikian pula, kami telah melakukan hal yang sama untuk pin lain juga. Jika mereka mengikuti sirkuit yang berbeda, pastikan Anda mengubah nilai-nilai ini sesuai dengan itu.
# tentukan LCD_RS GPIOA, GPIO_PIN_1 # tentukan LCD_EN GPIOA, GPIO_PIN_2 # tentukan LCD_DB4 GPIOD, GPIO_PIN_1 # tentukan LCD_DB5 GPIOD, GPIO_PIN_2 # tentukan LCD_DB6 GPIOD, GPIO_PIN_2 # tentukan LCD_DB4 GPIOD, GPIO_PIN_1 # tentukan LCD_DB5 GPIOD, GPIO_PIN_2 # tentukan LCD_DB6 GPIOD, GPIO_PIN_3 # tentukan LCD_DB7.hm_16x210
Selanjutnya di dalam program utama kami, kami telah mendeklarasikan variabel yang diperlukan untuk kode sampel ini. Kami memiliki variabel uji yang disebut test_var yang diinisialisasi ke nol, kami akan menaikkan variabel dan menampilkannya di LCD. Karakter d1 hingga d4 mewakili 4 digit variabel uji karena LCD kita tidak dapat menampilkan nilai int secara langsung, kita harus mengubahnya menjadi karakter.
// Deklarasi variabel int test_var = 0; char d4, d3, d2, d1;
Fungsi LCD_Begin () digunakan untuk menginisialisasi LCD. Fungsi ini akan menginisialisasi semua pin GPIO yang diperlukan dan juga mengatur LCD dalam mode LCD 16x2. Kemudian kita memiliki fungsi LCD_Clear () yang digunakan untuk menghapus semua nilai pada LCD, ini akan menghapus semua yang ada di LCD sehingga bersih untuk menulis nilai baru. Kemudian kita memiliki fungsi LCD_Set_Cursor (x, y) di mana x dan y adalah posisi di mana kita perlu menulis karakter baru kita. Misalnya, (1,1) berarti baris pertama dan kolom pertama, demikian pula (2,12) berarti baris kedua 12 kolom. Perhatikan bahwa kami memiliki 2 baris dan 16 kolom di sini seperti yang telah kita bahas sebelumnya.
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
Sekarang, LCD disetel, dibersihkan, dan kursor berada di tempatnya. Hal berikutnya adalah mencetak sesuatu di layar. Kita dapat menggunakan LCD_Print_String ("Contoh String") untuk mencetak string ke LCD dan LCD_Print_Char (a) untuk mencetak nilai karakter ke LCD. Dalam program kami di sini kami telah mencetak "STM8S103F3P3 LCD" dan membuat penundaan selama 5 detik menggunakan kode di bawah ini.
Lcd_Print_String ("STM8S103F3P3 LCD"); delay_ms (5000);
Setelah penundaan 5 detik, kami mengosongkan LCD lagi dan menampilkan "Circuit Digest" di baris pertama dan "Test:" di baris kedua.
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Circuit Digest"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("Tes:");
Di dalam while loop, kita akan membagi nilai pada variabel integer test_var menjadi karakter individu sehingga dapat ditampilkan pada LCD menggunakan operator pembagian dan modulus sederhana. Kami juga menambahkan '0' untuk mengonversi nilai ASCII menjadi karakter.
d4 = test_var% 10 + '0'; d3 = (test_var / 10)% 10 + '0'; d2 = (test_var / 100)% 10 + '0'; d1 = (test_var / 1000) + '0';
Kemudian kita atur kursor ke (2,6) karena kita sudah menulis “Test:” di baris kedua yang terdiri dari 6 karakter. Jika kita timpa, karakter yang ada akan diganti dengan karakter baru di LCD. Kami juga telah menambahkan penundaan 1 detik dan menaikkan variabel.
Lcd_Set_Cursor (2,6); Lcd_Print_Char (d1); Lcd_Print_Char (d2); Lcd_Print_Char (d3); Lcd_Print_Char (d4); delay_ms (1000); test_var ++;
STM8 dengan LCD - Bekerja
Untuk menguji program kami, cukup unggah kode ke pengontrol kami dan nyalakan dengan port micro-USB. Perhatikan bahwa LCD membutuhkan 5V untuk bekerja sehingga wajib untuk menyalakan papan dari port USB. Kami sebelumnya telah menyalakannya langsung dari ST-link karena kami tidak membutuhkan pasokan 5V.
Seperti yang Anda lihat, LCD bekerja seperti yang diharapkan dengan nilai variabel uji bertambah untuk kira-kira setiap detik. Juga, perhatikan bahwa kami belum menggunakan timer dan hanya menggunakan fungsi penundaan untuk membuat penundaan ini jadi jangan berharap durasi penundaan akurat, kami akan menggunakan timer nanti di tutorial lain untuk tujuan itu.
Pekerjaan lengkap proyek dapat ditemukan di video yang ditautkan di bawah ini. Semoga Anda menikmati tutorial ini dan mempelajari sesuatu yang bermanfaat. Jika Anda memiliki pertanyaan, tinggalkan di bagian komentar atau gunakan forum kami untuk pertanyaan teknis lainnya.