PIC Lesson: LCD HD44780


LCD (Liquid Crystal Display) adalah satu alat untuk display pelbagai character. Antaranya LCD yang mempunyai dot matrix controller HD44780. HD44780 boleh beroperasi pada 5X8 atau 5X10 dot matrix. LCD ini mempunyai beberapa saiz mengikut bilangan character. Antaranya 16X2 atau 20X4 character. 16X2 character bermakna LCD itu mempunyai 16 character pada line dengan 2 lines. LCD ini mempunyai 16 pins.

Di bawah adalah skematik untuk LCD HD44780.

Transistor di pasang pada sambungan backlight adalah supaya boleh ‘ON’ dan ‘OFF’ LCD backlight. Lihat document di bawah untuk instruction LCD.

Berikut adalah videonya.

PIC Source Code

/*
Programmer: Shahrulnizam Mat Rejab
PIC (Crystal Frequency):
PIC16F877A (20MHz), PIC16F887 (20MHz), PIC16F1939 (Internal 32MHz) 
PIC18F4520 (10MHz), PIC18F4550 (10MHz), PIC18F46K22 (Internal 16MHz)
Compiler: HI-TECH C for PIC10/12/16 V9.83, PIC18 V9.80
Last Modified: 14 November 2013
Website: http://shahrulnizam.com
*/

#if defined (_16F877A) || (_16F887)
	#define	A0		PORTAbits.RA0
	#define	D0		PORTAbits.RA1
#elif defined (_16F1939) || (_18F4520) || (_18F4550) || (_18F46K22)
	#define	A0		LATAbits.LATA0
	#define	D0		LATAbits.LATA1
#endif
#define	ADC
#define	HD44780

#include "LibraryHardware.h"
#include "LibraryPeripheral.h"
#include "LibraryUniversalDisplay.h"

void setup()
{
initialize();
TRISA=0b00000011;
TRISB=0b00000000;
TRISC=0b00000000;
TRISD=0b00000000;
TRISE=0b00000000;
BUZZER=1;
adc_init(0);
lcd_init();						
lcd_goto(0,0);						
lcd_string(" TILT SENSOR EX ");	
}

void loop()
{
int value;
value=(int)(4.888*adc_read(0));
BUZZER=D0;

lcd_goto(0,1);				
lcd_string(" D0:");	
lcd_number(D0,DEC,1);
lcd_string(" A0:");
lcd_number(value/1000,DEC,1);
lcd_string(".");
lcd_number(value%1000,DEC,3);
lcd_string("V ");

delay(100);
}

66 responses to “PIC Lesson: LCD HD44780”

  1. Hamka:
    salam. untuk masukkan input analog voltage, hamka perlu gune port analog yg tersedia ade dlm PIC tu. utk PIC16F877a mcm yang shahrul guna, port analog terletak dekat port A. make sure voltage output yang dihasilkan boleh dibaca oleh PIC tersebut. semua ni boleh baca dalam datasheet.

  2. salam. shahrul kalo aku nk msukkn 2 o/p dr adc ke 16×2 lcd display, kt bhgn programming ko tnjk kt ats yg ak kne msukkn 2 value adc tu?

  3. Shahrul,
    Bagaimana kalau saya nak tulis program guna BasicPro. apakah perbezaan source code yang ditulis menggunakan HI-TECH ANSI C dengan BasicPro?

  4. Shahrul,
    Saya dah cuba on off LED guna PIC Basic Pro.OK.
    Soalan sy, kalau sy gunakan MPLab, programming guna C dan Compiler HI-TECH ANSI C ni, compile instruction guna Build kan? step ni akan convert C language tu kepada hex code kan?
    Boleh tak saya gunakan PICKit 2 Programmer untuk loadkan hex code ke PIC? bukan in circuit programmer tu?
    TQ

  5. nk tnye….klu….kte gne pic16f873a….n nk display bcaan dr 4 sensor kt LCD…time nk bt programing kte just ambik value dr sensor or kte kne declair rmus dlm program 2?

  6. Shahrul,

    sy dh try buat program ni..testing dlm mplab ok.
    tp bile buat simulation x jadi.sy dh buat u untuk 8bit n ok..tp untuk 4 bit ni x jadi..ada solution x..?…

    • lynx, backlight boleh sambung terus ke ground. Contrast sepatutnya tidak boleh sambung ke ground, tulisannya tidak dapat dipaparkan tetapi kadang2 ada LCD yg boleh di ground kan contrast nya.

  7. pin 15 dan pin 16 pada LCD mmemang kena buat connection mcm dalam gmbr rajah 2 ke? kalau pin 15 dan pin 16 xbuat apa2 connection blh x? ada effect apa2 x pd LCD 2? sbb ada datasheet hanya tunjuk connection/ penerangan untuk pin 1-14 shj

  8. Well, I’m confused with SK40c from cytron website,which provided video demo.

    I’m confused with pic.h and p18f4520.h
    Which type of compiler should I actually use ?
    I’m new to this microcontroller.

  9. So, you saying I should set the compiler to Hi-Tech Universal Toolsuite instead Microchip C18 Toolsuite ?

    I’m involved these due to project.

  10. I have build error :
    No valid installed HI-TECH compiler drivers

    I’m using MPLABIDE v8.66.
    Any idea how to solve it ?

  11. I’m still dealing same problem same error, Sir.
    I have follow your below link how to setup for MPLABIDE.

  12. salam sharulnizam, nak tanya sket. saya da try cari pic16f887 dalam library isis proteus 7.1 tapi tiada. saya menggantikannya dengan menggunakan pic16f877a. boleh tak coding dari pic16f887 berfungsi seperti biasa dalam pic berbeza ?

  13. salam saudara shahrul….sy menggunakan lcd JHD162A(16×2) dr sk40c kit from cytron….sy ingin transfer data guna 4 bit mcm yg saudara buat…tp sy x dapat display dgn betul menggunakan code saudara…yg kluar dr lcd adalah char yg papetah….boleh tolong sy x??

    • ws, taufiq. Program memang tak display dgn board Cytron kerana berbeza pin. Kena tukarkan pin sama ada tukarkan dalam program ataupun tukar schematic pada hardware.

  14. tmkasih saudara,
    sy da tukar da pin kat hardware spt dlm code saudara…cuma pin yg ade kat lcd cy gune ni 14 saje…so jd led light tu sy x gune la(sy x connect ape2 ke kaki RD3)…tp tu x jd masalahkan…skrg ni sy masih lg x dapat nak display string…setahu sy 4 bit ni kite kene hantar 2 kali command data ke lcd kan…? ade idea x??

  15. salam…untuk function delay spt __delay_ms(x),
    boleh x klau sy buat variable x itu adalah rumus matematik…cthnya period of pulse(in milisec)….krn sy cdg selepas kira pediod tu sy hendak delay sbyk 3/4 drpd period yg telah dikira….cthnya __delay_ms(3*x/4)…ape pendapat saudara @ ase idea lain yg boleh digunakan…

  16. askm. Tuan, bagaimana jika saya gunakan displaytech 162A sebagai output lcd, perlukah driver? mana nak cari driver? atau hanya letak #include
    #include “lcd.h” dalam programming?

  17. hai…tq reply jwp. saya ada cuba coding saudara ni >>project character lcd & header LibraryHD44780.h tetapi
    bila compile guna hi-tech c ada error iaitu :
    1. undefined ANSEL & ANSELH dan juga
    2. undefine symbol __delay_ms

    kenapa ya? saya check semua follow contoh saja.tq

    • pd, untuk masalah no. 1, setkan PIC kepada PIC16F887 bukannya PIC16F877A. Untuk masalah no. 2, mungkin tertinggal #include htc.h . Sepatutnya kalau copy program tu 100%, patut tiada masalah.

  18. saudara betul, saya guna pic16f877, saudara ada sample coding pic ni untuk interface dgn lcd? htc tu wajib? saya tak letak…tak da error pun, ia untuk apa? tqvm sebab banyak bantu.

    • Baca lg sekali, PIC16F887 bukan PIC16F877. Kat atas ni dah sample coding interface dgn LCD. htc tu penting, x de error x semestinya jadi. Compile file kosong pun x de error gak.

  19. tq saudara. saya perlukan coding untuk pic16f877 (lama) ..pic16f887 yg saudara buat kat atas tu saya xda. jika saudara ada coding, mohon upload ya. tqvm. banyak info saya dpt dari web ni. tq

  20. I did as directed, and written in your code. But still no LCD display, I’ve inserted into the file header. Thanks to explain LCD header file.

  21. terima kasih bnyk2,,perkongsian ilmu ni..moga menjadi amal kebajikan tuan..
    sy bnyk belajar dri blog tuan..

    assalamualaikum.

  22. Hi Shahrul, if your source code success after compiled it means how do u link it with lcd above to display your required character in lcd???

  23. Salam.
    you have library to lcd display model JHD629_204A .
    this display is 20×4.
    this not compatible with hd 44780.
    please send to me the library.

    thank you so much

Leave a Reply

Your email address will not be published. Required fields are marked *