Selasa, 11 Maret 2014

Mengirim text ke LCD 8 bit mode




 LIQUID CRYSTAL DISPLAY

LCD biasanya digunakan dengan microcontroller,yang mana tidak bisa digunakan dengan standard rangkaian IC. LCD untuk menampilkan karakter, pesan teks dll.



model disini adalah yang murah, bagus capabilitasnya dan sering digunakan yaitu m1632 series yang menampilkan 2 line dengan 16 karakter per-linenya. Dapat menampilkan huruf , symbol matematika malahan bisa menampilkan symbol yang dibuat sendiri. kegunaan lainjuga ada feature automatis message geser kanan atau kiri, menampakkan kursor, LED backlight dll.

LCD pin

berikut adalah table dari aplikasi 16 pin pada LCD :
Screen pada LCD

Tiap karakter terdiri dari 5x8 atau 5x11 dot matrix. display contrast bergantung pada supply tegangan yang diatur trimer potensiometer . beberapa lcd terdapat built in backlight seperti hijau atau biru.


LCD memory

LCD display berisi 3 memory block;

> DDRAM display data RAM
> CGRAM character generator RAM
> CGROM character generator ROM


DDRAM Memory

Digunakan untuk menyimpan karakter yang akan ditampilkan. kapasitas memory ini adalah 80 karakter

Cara kerjanya sederhana.konfigurasikan display increment address automatis geser kanan, dan set start address untuk message yang akan ditampilkan ( contoh dari 00H + 80H = 80h ) untuk line 1, untuk line 2 40h+80h=C0h. Setelah itu kirim karakter melalui d0-d7.jika mengirim lebih dari 16 karakter, hanya 16 yang pertama yang tampil, sisanya menggunakan shift command.

CGROM Memory
 Berisi default karakter map dengan semua karakter dapat ditampilkan di screen. Alamat dari CGROM adalah sama dengan karakter dari ASCI. berikut tablenya :



CGRAM Memory

Bagian dari standard karakter, LCD display menampilkan symbol yang didefinisikan sendiri dapat berupa symbol apa saja dalam size 5x8 pixel. RAM memory CGRAM sizenya 64 bytes.
memory register lebar 8 bits, tetapi hanya 5 bit lower yang digunakan. logic 1 dalam setiap register mewakili dimmed dot. sementara 8 lokasi digroup bersama mewakili1 karakter. ilustrasinya seperti ini:


LCD BAsic Command
Semua data ditransfer ke LCD melalui d0-d7 akan diartikan sebagai command atau data itu tergantung dari RS logic state.

RS=1 -bits d0-d7 diartikan sebagai data
RS=0 -bits dd0-d7 dartikan sebagai command yang menentukan display mode.


Busy flag

dibandingkan dengan microcontroller, lcd adalah componen yang sangat lambat . jadi penting untuk menyediakan signal yang mengindikasikan lcd siap menerima data baru. signal inni dapat dibaca dari d7. saat BF bit =0 lcd siap menerima data baru.


Koneksi LCD

bisa mengunakan 4 bit atau 8 bit mode. mode ini diinisialisasi pada pengoperasian awal.
 contoh pemrograman 8 bit mode :

$include(reg51.inc)


;8 bit LCD routines with check busy flag before sending data, command to LCD      
;*************************************************************
LCD      DATA     P2          ;define LCD data port on port 1
BUSY    BIT      LCD.7       ;define LCD busy flag
RS         BIT      P0.0           ;define LCD register select pin
RW        BIT      P0.1           ;define LCD read/write pin
E            BIT      P0.2          ;define LCD enable pin
;*************************************************************


        ORG    00H
        ACALL LCD_INIT

TAMPIL:
     MOV      A,#80H              
     ACALL  COMMAND
     MOV      DPTR,#TEST
     ACALL  DISP_STRING
     MOV     A,#0C0H              
     ACALL  COMMAND
     MOV      DPTR,#TEST1
     ACALL  DISP_STRING
     MOV     R2,#00H
     ACALL  DELAY
     ACALL  DELAY
     ACALL  SHIFT

TAMPIL1:
     MOV      A,#80H              
     ACALL  COMMAND
     MOV     DPTR,#TEST2
     ACALL  DISP_STRING
    MOV      A,#0C0H              
     ACALL  COMMAND
     MOV     DPTR,#TEST3
     ACALL  DISP_STRING
     MOV     R2,#00H
     ACALL  DELAY
     ACALL  DELAY
     ACALL  SHIFT  
   
JMP  TAMPIL

SHIFT:
     ACALL  DELAY
     ACALL  DELAY
     MOV     A,#18H              
     ACALL  COMMAND
     INC        R2
    CJNE     R2,#0Fh,SHIFT
    ACALL   LCD_INIT
    ACALL   DELAY
RET
LCD_INIT:
        MOV      A,#01H                ;Clear LCD
        ACALL    COMMAND  
;        MOV      A,#02H                ;Cursor home posisi
;        MOV      A,#04H                ;Decrement cursor
;        MOV      A,#05H                ;shift screen right
        MOV      A,#06H                 ;Increment cursor
;        MOV      A,#07H                ;shift screen Left
        ACALL    COMMAND
;        MOV      A,#08H                ;Display off, cursor off
;        MOV      A,#0AH                ;Display off, cursor on
        MOV      A,#0CH                 ;Display on ,cursor off
        ACALL    COMMAND
;        MOV      A,#0EH                ;Disply on, cursor blinking
;        MOV      A,#0FH                ;Display on, cursor blinking
;        MOV      A,#10H                ;shift cursor position to left
;        MOV      A,#14H                ;shift cursor position to right
;        MOV      A,#18H                ;shift  display to left
;        MOV      A,#1CH                ;shift  display to right
;        MOV      A,#80H                ;force cursor to begining 1st line
;        MOV      A,#C0H                ;Force cursor to begining 2nd line
        MOV      A,#38H                 ;2 line 5x7 dot matrix 8 bit mode
        ACALL    COMMAND
RET
;=============================================================
COMMAND:
        ACALL    READY                 ;is LCD ready?
        MOV      LCD,A                 ;issue command code
        CLR      RS                    ;RS=0 for command
        CLR      RW                    ;R/W=0 to write to LCD|
        SETB     E                     ;E=1 for H-to-L pulse
        CLR      E                     ;E=0 ,latch in
        RET
;=============================================================
DISPLAY:
        ACALL    READY                 ;is LCD ready?
        MOV      LCD,A                 ;issue data
        SETB     RS                    ;RS=1 for data
        CLR      RW                    ;R/W=0 to write to LCD
        SETB     E                     ;E=1 for H-to-L pulse
        CLR      E                     ;E=0 ,latch in
        RET
;=============================================================
READY:
        SETB     BUSY                  ;make lcd.7 input port
        CLR      RS                    ;RS=0 access command reg
        SETB     RW                    ;R/W=1 read command reg
;read command reg and check busy flag
BACK:
        CLR      E                     ;E=1 for H-to-L pulse
        SETB     E                     ;E=0 H-to-l pulse
        JB       BUSY,BACK             ;stay until busy flag=0
        RET
;=============================================================
DISP_STRING:
   CLR      A                     ;A=0
MOV      R7,#00H               ;R7=0
NEXT_CHAR:
INC      R7       ;R7+1
MOVC     A,@A+DPTR
ACALL    DISPLAY
  MOV      A,R7
CJNE     R7,#0FH,NEXT_CHAR
RET          

;===========================================================
delay: mov r6,#0ffh
delay1: mov r7,#0ffh
delay2: djnz r7,delay2
djnz r6,delay1
ret
;=============================================================
TEST:   DB "Interfacing LCD "
TEST1:  DB "8 bit mode      "
TEST2:  DB  "  Send   Text   "
TEST3:  DB  "  Hello Word    "
;=============================================================


END


















































Tidak ada komentar:

Posting Komentar