Ini adalah tutorial keenam kami dalam PIC Tutorial Series kami, dalam tutorial ini kami mempelajari Interfacing LCD 16x2 dengan PIC Microcontroller. Dalam tutorial sebelumnya kami telah mempelajari asas-asas PIC menggunakan beberapa Program LED berkedip dan juga telah belajar Cara menggunakan Timer dalam PIC Microcontroller. Anda boleh menyemak di sini semua tutorial tentang Pembelajaran Mikrokontroler PIC menggunakan pengkompil MPLABX dan XC8.
Tutorial ini akan menjadi menarik kerana kita akan belajar Cara Memadankan LCD 16 × 2 dengan PIC16F877A, periksa Video terperinci di akhir tutorial ini. Sudah lama kita menggunakan LED untuk petunjuk pengguna. Mari kita lihat bagaimana kita dapat menjadikan projek kita kelihatan lebih keren dan berguna dengan menggunakan paparan LCD. Lihat juga artikel kami sebelumnya mengenai Interfacing LCD dengan 8051, dengan Arduino, dengan Raspberry Pi, dengan AVR.
Fungsi untuk Interfacing LCD dengan PIC Microcontroller:
Untuk mempermudah kami, kami telah membuat perpustakaan kecil yang dapat mempermudah anda semasa menggunakan LCD ini dengan PIC16F877A kami. Fail tajuk "MyLCD.h" diberikan di sini untuk dimuat turun, yang mengandungi semua fungsi yang diperlukan untuk menggerakkan LCD menggunakan PIC MCU. Kod perpustakaan dijelaskan dengan baik oleh baris komen tetapi jika anda masih mempunyai keraguan hubungi kami melalui bahagian komen. Lihat juga artikel ini untuk kerja LCD Asas dan Pinoutsnya.
Catatan: Selalu disarankan untuk mengetahui apa yang sebenarnya berlaku di dalam fail tajuk anda kerana ia akan membantu anda dalam proses penyahpepijatan atau semasa menukar MCU.
Sekarang, ada dua cara untuk menambahkan kod ini ke dalam program anda. Anda boleh menyalin semua baris kod di atas di MyLCD.h dan menampalnya sebelum kekosongan utama (). Atau anda boleh memuat turun fail tajuk menggunakan pautan dan menambahkannya ke fail tajuk projek anda ( #include "MyLCD.h "; ). Ini dapat dilakukan dengan mengklik kanan pada fail tajuk dan memilih Tambahkan Item yang ada dan melayari ke fail tajuk ini.
Di sini saya telah menyalin dan menampal kod fail tajuk ke dalam fail C utama saya. Oleh itu, jika anda menggunakan kod kami, maka anda tidak perlu memuat turun dan menambahkan fail tajuk ke dalam program anda, cukup gunakan Kod lengkap yang diberikan pada akhir Tutorial ini. Perhatikan juga bahawa perpustakaan ini hanya akan menyokong PIC16F PIC Microcontroller.
Di sini saya menerangkan setiap fungsi di dalam fail tajuk kami di bawah:
batal Lcd_Start (): Fungsi ini harus menjadi fungsi pertama yang harus dipanggil untuk mula bekerja dengan LCD kita. Kita harus memanggil fungsi ini hanya sekali untuk mengelakkan kelewatan dalam program ini.
batal Lcd_Start () {Lcd_SetBit (0x00); untuk (int i = 1065244; i <= 0; i--) NOP (); Lcd_Cmd (0x03); __delay_ms (5); Lcd_Cmd (0x03); __delay_ms (11); Lcd_Cmd (0x03); Lcd_Cmd (0x02); // 02H digunakan untuk Kembali ke rumah -> Membersihkan RAM dan memulakan LCD Lcd_Cmd (0x02); // 02H digunakan untuk Kembali ke rumah -> Membersihkan RAM dan memulakan LCD Lcd_Cmd (0x08); // Pilih Baris 1 Lcd_Cmd (0x00); // Paparkan Baris 1 Baris Lcd_Cmd (0x0C); // Pilih Baris 2 Lcd_Cmd (0x00); // Paparkan Clear Row 2 Lcd_Cmd (0x06); }
Lcd_Clear (): Fungsi ini membersihkan skrin LCD dan dapat digunakan di dalam gelung untuk membersihkan penampilan data sebelumnya.
Lcd_Clear () {Lcd_Cmd (0); // Kosongkan LCD Lcd_Cmd (1); // Gerakkan kursor ke kedudukan pertama}
batal Lcd_Set_Cursor (x pos, y pos): Setelah dimulakan, LCD kami sudah siap untuk mengambil perintah, kami dapat mengarahkan LCD untuk mengatur kursornya di lokasi pilihan anda dengan menggunakan fungsi ini. Andaikan jika, kita memerlukan kursor pada watak ke-5 baris pertama. Maka fungsi akan menjadi tidak sah Lcd_Set_Cursor (1, 5)
batal Lcd_Set_Cursor (char a, char b) {char temp, z, y; jika (a == 1) {temp = 0x80 + b - 1; // 80H digunakan untuk menggerakkan kursor z = temp >> 4; // Turunkan 8-bit y = temp & 0x0F; // 8 bit atas Lcd_Cmd (z); // Tetapkan Row Lcd_Cmd (y); // Tetapkan Lajur} lain jika (a == 2) {temp = 0xC0 + b - 1; z = temp >> 4; // Turunkan 8-bit y = temp & 0x0F; // 8-bit atas Lcd_Cmd (z); // Tetapkan Row Lcd_Cmd (y); // Tetapkan Lajur}}
batal Lcd_Print_Char (data char): Setelah kursor diatur, kita dapat menulis watak ke kedudukannya dengan memanggil fungsi ini dengan mudah.
batal Lcd_Print_Char (data char) // Hantar 8-bit melalui mod 4-bit {char Lower_Nibble, Upper_Nibble; Lower_Nibble = data & 0x0F; Atas_Nibble = data & 0xF0; RS = 1; // => RS = 1 Lcd_SetBit (Upper_Nibble >> 4); // Hantar separuh atas dengan beralih dengan 4 EN = 1; untuk (int i = 2130483; i <= 0; i--) NOP (); EN = 0; Lcd_SetBit (Lower_Nibble); // Hantar separuh Bawah EN = 1; untuk (int i = 2130483; i <= 0; i--) NOP (); EN = 0; }
batal Lcd_Print_String (char * a): Jika sekumpulan watak hendak ditampilkan, fungsi rentetan dapat digunakan.
batal Lcd_Print_String (char * a) {int i; untuk (i = 0; a! = '\ 0'; i ++) Lcd_Print_Char (a); // Pisahkan rentetan menggunakan penunjuk dan panggil fungsi Char}
Setiap kali Lcd_Print_Char (data char) dipanggil, nilai wataknya masing-masing dikirim ke garis data LCD. Watak-watak ini mencapai HD44780U dalam bentuk bit. Sekarang IC ini menghubungkan bit dengan watak yang akan ditampilkan dengan menggunakan memori ROM seperti yang ditunjukkan pada jadual di bawah. Anda boleh mendapatkan bit untuk semua watak dalam lembar data HD44780U LCD Controller.
Sekarang, kerana kami berpuas hati dengan fail tajuk kami, mari buat litar dan uji programnya. Periksa juga fail header lengkap yang diberikan dalam pautan yang diberikan di atas.
Diagram dan Ujian Litar:
Berikut adalah rajah litar untuk Interfacing 16x2 LCD dengan PIC Microcontroller.
Saya tidak menunjukkan sambungan bekalan kuasa atau ICSP di litar di atas, kerana kami menggunakan papan yang sama dengan yang kami gunakan dalam tutorial sebelumnya, periksa di sini.
Satu perkara penting yang perlu diperhatikan dalam program ini adalah definisi pin LCD:
#tentukan RS RD2 #tentukan EN RD3 #tentukan D4 RD4 #tentukan D5 RD5 #tentukan D6 RD6 #tentukan D7 RD7
Definisi pin ini boleh diubah mengikut persediaan perkakasan pengaturcara. Ingatlah untuk mengubah konfigurasi port yang dihormati dalam fungsi utama jika anda menukar di sini.
Perkakasan untuk projek ini sangat mudah. Kami akan menggunakan semula modul PIC yang sama seperti yang kami gunakan kali terakhir dan menyambungkan modul LCD ke PIC kami menggunakan kabel jumper.
Sambungannya dapat difahami dengan jadual berikut:
Pin LCD No. |
Nama Pin LCD |
Nama Pin MCU |
Pin MCU No. |
1 |
Tanah |
Tanah |
12 |
2 |
VCC |
+ 5V |
11 |
3 |
VEE |
Tanah |
12 |
4 |
Daftar Pilih |
RD2 |
21 |
5 |
Baca tulis |
Tanah |
12 |
6 |
Aktifkan |
RD3 |
22 |
7 |
Bit Data 0 |
NC |
- |
8 |
Bit Data 1 |
NC |
- |
9 |
Bit Data 2 |
NC |
- |
10 |
Bit Data 3 |
NC |
- |
11 |
Bit Data 4 |
RD4 |
27 |
12 |
Bit Data 5 |
RD5 |
28 |
13 |
Bit Data 6 |
RD6 |
29 |
14 |
Bit Data 7 |
RD7 |
30 |
15 |
Positif LED |
+ 5V |
11 |
16 |
Negatif LED |
Tanah |
12 |
Sekarang mari kita buat sambungan, buang kod ke MCU kami dan sahkan outputnya.
Sekiranya anda mempunyai masalah atau keraguan, sila gunakan bahagian komen. Lihat juga Video Demo yang diberikan di bawah.