Ngomong-ngomongin mikro jadi inget masa lalu nih saya. Pertama kali saya mencoba LCD 2x16 dengan program Assembly. Langsung aja deh tanpa basa basi yg terlalu panjaaaaang....panjang kaya punya saya yg banyak di sukai bidadari didunia...hehehe..(celana panjang maksudnya)..hehehe. Saya punya contoh program sederhananya nih untuk ngetes LCD berjalan dengan baik atau tidak....mudah-mudahan bermanfaat ye...??
Pengujian
LCD karakter 2x16 dengan cara pembuatan perangkat lunak terlebih dahulu untuk
Menampilkan Data ke LCD Karakter 2x16. Hal ini dijalankan dengan mengirimkan
inisialisasi dan mengkonfigurasikan sejumlah instruksi ke LCD. Antara lain:
pengaturan lebar data interface 8 bit
atau 4 bit data bus, pemilihan ukuran
font karakter 5x8 atau 5x11 dan
lain-lain, dengan instruksi sebagai berikut.
Init_lcd:
mov
r1,#00000001b ;Display clear
call
write_inst ;
mov
r1,#00111000b ;Function set,
;Data 8 bit,2 line font 5x8
call
write_inst ;
mov
r1,#00001100b ;Display on,
;cursor off,cursor blink off
call
write_inst
mov
r1,#00000111b ;Entry mode, Set
increment
call
write_inst
ret
;
Pada pembuatan perangkat lunak
ini akan menuliskan kalimat ”GUNAWAN AMSARI ELEKTRO” yang akan
ditampilkan pada layar LCD Karakter dengan menggunakan look up table dan dilakukan proses geser ke kiri atau kekanan sesuai dengan keinginan kita hanya merubah sedikit programnya aja c...dibagian : mov R1,#geserL ;R1 = GeserLeft.
contoh hasilnya seperti ini :
Untuk melakukan pembuatan
perangkat lunak ini harus melakukan beberapa langkah sebagai berikut:
1.
Pasang jumper
LCD_EN, yang berfungsi untuk memberikan power
supply +5V
2.
Hubungkan modul
Mikrokontroler Trainer dengan power supply +5V.
3.
Hubungkan modul Mikrokontroler Trainer dengan rangkaian programmer
4.
Buka Program MCS-51, sebagai editor dan compiler
program
5.
Ketik program berikut ini:
$mod52
;
;
DataLCD equ 30h
geserL equ 00011011b ; 0 0 0 1 S/C R/L X X
geserR equ 00011111b ; 0 0 0 1 S/C R/L X X
;
org 0h
ljmp startprogram
;;;;;;;;;;;;;;;;;;;;;;SUBROUTINES;;;;;;;;;;;;;;;;;;;;;;;;;;;
startprogram:
call init_LCD
call write_char
call geser
sjmp startprogram
ret
geser:
mov R6,#34 ;R6 = 34; geser sebanyak 34 karakter
lagi: mov R1,#geserL ;R1 = GeserLeft
call write_inst
call delay
djnz R6,lagi ;R6=R6-1, jika R6 ? 0 maka lompat ke
lagi
;
write_char:
mov dptr,#word1 ;DPTR = [ address word1 ]
mov r3,#35 ;R3=40,number character to be display
mov r1,#80h ;R1=80h,address DDRAM start position
call write_inst
;
write1:clr a
; A = 0
movc a,@a+dptr ; A = [A+ DPTR]
mov r1,A ; R1 = A
inc dptr ; DPTR = DPTR +1
call write_data ;
djnz r3,write1 ; R3 = R3-1,
ret
;
Init_lcd:
Mov r1,#00000001b ;Display clear
call write_inst ;
mov r1,#00111000b ;Function set,
;Data 8 bit,2 line font 5x8
Call write_inst ;
mov r1,#00001100b ;Display on,
;cursor off,cursor blink off
Call write_inst
Mov r1,#00000111b ;Entry mode, Set increment
Call write_inst
ret
;
Write_inst:
Clr P3.6 ; RS = P3.6= 0, write mode
instruction
Mov P0,R1 ; D7 s/d D0 = P0 = R1
Setb P3.7 ; EN = 1 = P3.7
Call delay ; call delay time
Clr P3.7 ; EN = 0 = P3.7
ret
;
Write_data:
Setb P3.6 ; RS = P3.6 = 1, write mode
data
Mov P0,R1 ; D7 s/d D0 = P0 = R1
Setb P3.7 ; EN = 1 = P3.7
Call delay ; call delay time
Clr P3.7 ; EN = 0 = P3.7
ret
;
word1: DB
'GUNAWAN AMSARI ELEKTRO'
;
Delay: push 06h
push 07h
mov r6,#080h
LDel: mov r7,#0ffh
djnz r7,$
djnz r6,LDel
pop 07h
pop 06h
ret
end
Kalau mau coba silahkan tinggal copy aja. Kalau mau merubah tulisan tinggal edit bagian yang bertulisan GUNAWAN AMSARI ELEKTRO nya.
Semoga Bermanfaat....
2 komentar:
IC dan compiler yang digunakan apa ya mas...??
pake IC AT89s52 n comp software Asm51 gan...
Posting Komentar