- Berfungsi Paparan LCD 16x2
- Litar Diagram ke Antara Muka LCD dengan Mikrokontroler STM8
- Perpustakaan LCD STM8 - Fail Header untuk STM8S103F3P6
- Program LCD untuk Mikrokontroler STM8S
- STM8 dengan LCD - Berfungsi
Paparan LCD Alfanumerik 16x2 adalah paparan yang paling biasa digunakan di kalangan penggemar dan peminat. Paparan sangat berguna apabila anda ingin memaparkan maklumat asas kepada pengguna dan juga dapat membantu dalam menguji atau menyahpepijat kod kami. Modul LCD 16x2 khusus ini mudah didapati dan telah lama popular. Anda boleh mengetahui lebih lanjut mengenai asas modul LCD 16x2 dalam artikel yang dipautkan.
Untuk meneruskan siri tutorial Mikrokontroler STM8 kami, dalam tutorial ini, kami akan belajar bagaimana menghubungkan antara muka LCD dengan Mikrokontroler STM8. Kami sebelumnya telah menghubungkan LCD 16x2 dengan banyak mikrokontroler lain, tutorial disenaraikan di bawah dan anda boleh memeriksanya jika berminat.
Sekiranya anda baru menggunakan STM8, lihat artikel permulaan Mikrokontroler STM8 untuk memahami asas-asas papan pengawal dan persekitaran pengaturcaraan. Kami tidak akan membahas asas-asas dalam tutorial ini.
Berfungsi Paparan LCD 16x2
Seperti namanya, LCD 16x2 akan mempunyai 16 Tiang dan 2 Baris. Jadi secara keseluruhan, kita akan dapat memaparkan 32 aksara pada paparan ini dan watak-watak ini boleh berupa huruf atau angka atau bahkan simbol. Pinout LCD 16x2 ringkas yang kami gunakan dalam tutorial ini ditunjukkan di bawah-
Seperti yang anda lihat, paparan mempunyai 16 pin dan kita dapat membaginya menjadi lima kategori, Pin Daya, pin kontras, Pin Kawalan, pin Data, dan pin Lampu Latar seperti yang ditunjukkan dalam jadual di bawah. Kami akan mengetahui perincian setiap pin apabila kita membincangkan gambarajah litar tutorial ini.
Kategori | Pin TIDAK. | Nama Pin | Fungsi |
Pin Kuasa | 1 | VSS | Ground Ground, disambungkan ke Ground |
2 | VDD atau Vcc | Pin Voltan + 5V | |
Pin Kontras | 3 | V0 atau VEE | Pengaturan Kontras, disambungkan ke Vcc melalui perintang berubah-ubah. |
Pin Kawalan | 4 | RS | Daftar Pilih Pin, RS = 0 Mod arahan, RS = 1 Mod data |
5 | RW | Pin Baca / Tulis, RW = 0 Mod penulisan, RW = 1 mod Baca | |
6 | E | Aktifkan, nadi tinggi hingga rendah perlu mengaktifkan LCD | |
Pin Data | 7-14 | D0-D7 | Pin Data, Menyimpan Data yang akan dipaparkan di LCD atau arahan arahan |
Pin Lampu Latar | 15 | LED + atau A | Untuk menghidupkan Lampu Belakang + 5V |
16 | LED- atau K | Tanah Lampu Latar |
Di bahagian belakang LCD, seperti yang ditunjukkan dalam gambar di bawah, anda akan menemui dua titik hitam, di dalamnya kami mempunyai IC pemacu LCD HD44780 (dilingkari merah). Mikrokontroler kita harus berkomunikasi dengan IC ini yang seterusnya akan mengawal apa yang dipaparkan di LCD. Sekiranya anda ingin tahu bagaimana sebenarnya semua ini berfungsi, anda harus melihat cara kerja paparan LCD 16x2 di mana kita telah membincangkan bagaimana LCD berfungsi secara terperinci.
Dalam tutorial ini, kita akan membincangkan rajah litar dan kod untuk memaparkan aksara huruf (huruf dan nombor) pada paparan LCD 16x2 menggunakan perintah LCD_print _char dan LCD_print_string yang mudah . Perintah ini secara langsung dapat digunakan dalam program setelah memasukkan file header kami. Fail tajuk menguruskan semua perkara untuk anda, jadi tidak wajib mengetahui bagaimana paparan atau IC pemacu HD44780 berfungsi.
Litar Diagram ke Antara Muka LCD dengan Mikrokontroler STM8
Litar LCD STM8 lengkap boleh didapati di gambar di bawah. Seperti yang anda lihat sambungan untuk Pengawal STM8S103F3P6 dengan LCD sangat mudah, kami mempunyai paparan LCD yang dihubungkan terus ke papan kami dan pautan ST juga disambungkan untuk memprogram papan.
Pin kuasa Vss dan Vcc disambungkan ke pin 5V pada papan STM8S, perhatikan bahawa voltan operasi LCD adalah 5V dan disambungkan untuk beroperasi pada 3.3V. Oleh itu, walaupun Mikrokontroler STM8S103F3P6 beroperasi pada 3.3V adalah wajib untuk menyediakan bekalan 5V untuk LCD, anda boleh mengelakkannya dengan menggunakan IC pengawal caj tetapi kami tidak akan membincangkannya dalam tutorial ini.
Seterusnya, kita mempunyai pin kontras yang digunakan untuk mengatur kontras LCD, kita telah menghubungkannya ke potensiometer sehingga kita dapat mengendalikan kontras. Kami telah menggunakan periuk 10k, tetapi anda juga dapat menggunakan nilai lain yang berdekatan, periuk berfungsi sebagai pembahagi berpotensi untuk memberikan 0-5 V ke pin kontras, biasanya anda juga dapat menggunakan perintang secara langsung untuk memberikan sekitar 2.2V untuk kontras yang wajar nilai. Kemudian kita mempunyai pin reset (RS), Read / Write (RW), dan Enable (E). Pin baca-tulis dibumikan kerana kami tidak akan membaca apa-apa dari LCD, kami hanya akan melakukan operasi tulis. Dua pin kawalan yang lain Rs dan E masing-masing disambungkan ke pin PA1 dan PA2.
Kemudian kita mempunyai pin data DB0 hingga DB7. LCD 16x2 dapat beroperasi dalam dua mod, satu adalah mod operasi 8-bit di mana kita harus menggunakan semua 8 pin data (DB0-DB7) pada LCD dan yang lain adalah mod operasi 4-bit di mana kita hanya memerlukan 4 pin data (DB4-DB7). Mod 4-bit biasanya digunakan kerana memerlukan pin GPIO yang lebih sedikit dari pengawal, jadi kami juga telah menggunakan mod 4-bit dalam tutorial ini dan hanya menghubungkan pin DB4, DB5, DB6, dan DB7 untuk pin PD1, PD2, PD3, dan PD4 masing-masing.
Dua pin terakhir BLA dan BLK digunakan untuk menghidupkan lampu latar dalaman, kami telah menggunakan perintang 560 ohm sebagai perintang penghad semasa. Pengaturcara ST-Link dihubungkan seperti biasa dalam tutorial sebelumnya. Saya membuat sambungan lengkap di papan roti dan susunan saya seperti ini ditunjukkan dalam gambar di bawah.
Perpustakaan LCD STM8 - Fail Header untuk STM8S103F3P6
Sebelum meneruskan gambarajah litar, mari dapatkan fail header LCD STM8 dari GitHub menggunakan pautan berikut-
Fail header LCD STM8S 16x2
Anda boleh memuat turun repo yang lengkap dan mendapatkan fail stm8s103_LCD_16x2.h atau menggunakan kod dari pautan di atas. Semasa menetapkan projek, pastikan anda memasukkan semua fail header yang diperlukan dalam direktori inc bersama dengan file header ini.
Sekiranya anda tidak pasti cara menambahkan fail tajuk dan menyusun program, ikuti video di bahagian bawah halaman ini. Dan jika anda ingin tahu bagaimana kod di dalam fail tajuk berfungsi, anda boleh melihat PIC dengan tutorial LCD. Fail header yang digunakan dalam projek ini sangat serupa dengan fail yang dijelaskan di sana, jadi kami tidak akan memperincikannya.
Program LCD untuk Mikrokontroler STM8S
Untuk demonstrasi, kami akan memprogram pengawal STM8S kami untuk menampilkan rentetan sederhana seperti "Circuit Digest" dan kemudian kami akan menaikkan nilai "Uji" untuk setiap satu detik pada baris kedua. Program lengkap boleh didapati di bahagian bawah halaman ini. Penjelasannya adalah seperti berikut.
Kami memulakan program kami dengan menentukan pin dan menambahkan fail tajuk yang diperlukan seperti biasa. Dalam rajah litar yang telah dibincangkan di atas, kami telah menghubungkan LCD_RS ke PA1 jadi kami telah menetapkannya sebagai LCD_RS GPIOA, GPIO_PIN_1. Begitu juga, kami telah melakukan perkara yang sama untuk pin lain juga. Sekiranya mereka mengikuti litar lain, pastikan anda mengubah nilai-nilai ini dengan sewajarnya.
#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_3 #defin_8_Perhatian__8_Perhatian_D_8_Perhatian_d_8_Perhatian_d8
Selanjutnya di dalam program utama kami, kami telah menyatakan pemboleh ubah yang diperlukan untuk contoh kod ini. Kami mempunyai pemboleh ubah ujian yang disebut test_var yang diinisialisasi menjadi sifar, kami akan menaikkan pemboleh ubah dan memaparkannya di LCD. Karakter d1 hingga d4 mewakili 4 digit pemboleh ubah ujian kerana LCD kita tidak dapat menampilkan nilai int secara langsung, kita harus menukarnya menjadi watak.
// Deklarasi berubah-ubah int test_var = 0; char d4, d3, d2, d1;
Fungsi LCD_Begin () digunakan untuk menginisialisasi LCD. Fungsi ini akan memulakan semua pin GPIO yang diperlukan dan juga menetapkan LCD dalam mod LCD 16x2. Kemudian kita mempunyai fungsi LCD_Clear () yang digunakan untuk membersihkan semua nilai pada LCD, ini akan menghapus semua yang ada di LCD sehingga bersih untuk menulis nilai baru. Kemudian kita mempunyai fungsi LCD_Set_Cursor (x, y) di mana x dan y adalah kedudukan di mana kita perlu menulis watak baru kita. Sebagai contoh, (1,1) bermaksud baris pertama dan Colum pertama, sama (2,12) bermaksud baris kedua 12 lajur, juga. Perhatikan bahawa kita mempunyai 2 baris dan 16 lajur di sini seperti yang telah kita bincangkan sebelumnya.
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
Sekarang, LCD diatur, dibersihkan, dan kursor ada di tempat tersebut. Perkara seterusnya adalah mencetak sesuatu di skrin. Kita dapat menggunakan LCD_Print_String ("Sample String") untuk mencetak rentetan ke LCD dan LCD_Print_Char (a) untuk mencetak nilai watak ke LCD. Dalam program kami di sini kami telah mencetak "STM8S103F3P3 LCD" dan membuat penundaan selama 5 saat menggunakan kod di bawah ini.
Lcd_Print_String ("STM8S103F3P3 LCD"); kelewatan_ms (5000);
Selepas kelewatan 5 saat, kami membersihkan LCD sekali lagi dan memaparkan "Circuit Digest" di baris pertama dan "Test:" Saya baris kedua.
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Litar Digest"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("Ujian:");
Di dalam loop sementara , kita akan membahagikan nilai pada test_var pemboleh ubah integer menjadi watak individu sehingga dapat dipaparkan di LCD menggunakan operator pembahagian dan modulus sederhana. Kami juga telah menambahkan '0' untuk menukar nilai ASCII ke watak.
d4 = test_var% 10 + '0'; d3 = (test_var / 10)% 10 + '0'; d2 = (test_var / 100)% 10 + '0'; d1 = (test_var / 1000) + '0';
Kemudian kita telah menetapkan kursor ke (2,6) kerana kita sudah menulis "Uji:" di baris kedua yang terdiri daripada 6 aksara. Sekiranya kita menimpa, watak yang ada akan diganti dengan watak baru di LCD. Kami juga menambah kelewatan 1 saat dan menambah pemboleh ubah.
Lcd_Set_Cursor (2,6); Lcd_Print_Char (d1); Lcd_Print_Char (d2); Lcd_Print_Char (d3); Lcd_Print_Char (d4); kelewatan_ms (1000); test_var ++;
STM8 dengan LCD - Berfungsi
Untuk menguji program kami, cukup muat naik kod ke pengawal kami dan aktifkan dengan port mikro-USB. Perhatikan bahawa LCD memerlukan 5V untuk berfungsi, jadi adalah wajib untuk menghidupkan papan dari port USB. Kami sebelum ini mengaktifkannya secara langsung dari ST-link kerana kami tidak memerlukan bekalan 5V.
Seperti yang anda lihat LCD berfungsi seperti yang diharapkan dengan nilai pemboleh ubah ujian meningkat untuk setiap saat lebih kurang. Juga, perhatikan bahawa kami belum menggunakan pemasa dan hanya menggunakan fungsi kelewatan untuk membuat penundaan ini, jadi jangan mengharapkan tempoh penundaan tepat, kami akan menggunakan pemasa kemudian dalam tutorial lain untuk tujuan tersebut.
Penyelesaian projek yang lengkap dapat dilihat dalam video yang dipautkan di bawah. Semoga anda menikmati tutorial dan mempelajari sesuatu yang berguna. Sekiranya anda mempunyai sebarang pertanyaan, tinggalkan di bahagian komen atau gunakan forum kami untuk pertanyaan teknikal yang lain.