bab8c - display lcd
TRANSCRIPT
-
8/9/2019 BAB8C - Display LCD
1/27
Minimum sistem 8088 126
Percobaan 3 : Display LCD
gambar 8.4.Display LCD
LCD yang digunakan adalah : M1632 yang terdiri dari 2 baris, 16 kolomdimulai dari baris1 paling atas dan kolom 0 paling kiri.
Sebelum menampilkan karakter pada LCD, maka harus mengikuti prosedur
sebagai berikut:
Inisialisasi
Pemesanan tempat
Penulisan data
Inisialisasi terdiri dari
Display Clear
0 0 0 0 0 0 0 0 0 1
RS R/-W D7 D6 D5 D4 D3 D2 D1 D0
Instruksi ini akan menghapus semua display dan mengembalikan kursor ke
-
8/9/2019 BAB8C - Display LCD
2/27
-
8/9/2019 BAB8C - Display LCD
3/27
Minimum sistem 8088 128
C = 1, kursor akan ditampilkan
C = 0 , kursor tidak ditampilkan
B = 1, karakter tempat posisi kursor berkedip
B = 0, karakter tempat posisi kursor tidak berkedip
Cursor/Display Shift
0 0 0 0 0 1 S/C R/L * *
RS R/-W D7 D6 D5 D4 D3 D2 D1 D0
Instruksi ini akan menggerakkan kursor dan menggeser display tanpa
mengubah RAM
S/C R/L Operasi
0 0 Posisi kursor digeser ke kiri
0 1 Posisi kursor digeser ke kanan
1 0 Seluruh display digeser ke kiri dengan kursornya
1 1 Seluruh display digeser ke kanan dengan kursornya
Function Set
0 0 0 0 1 DL 1 * * *
RS R/-W D7 D6 D5 D4 D3 D2 D1 D0
DL = 1, panjang data diatur 8 bit
DL = 0, panjang data 4 bit (D7D4)
Pin yang digunakan
-
8/9/2019 BAB8C - Display LCD
4/27
-
8/9/2019 BAB8C - Display LCD
5/27
Minimum sistem 8088 130
kolom 0, ketiklah program berikut:
CODE_SEG SEGMENTASSUME CS:CODE_SEG,DS:CODE_SEG,ES:CODE_SEG,SS:CODE_SEG
ORG 100H ;program mulai origin 100h
start: jmp mulai
porta equ 300h ;port a ppiportb equ 301h ;port b ppiportc equ 302h ;port c ppictrlword equ 303h ;port cw ppi
DISPCLR EQU 00000001BFUNCSET EQU 00111000BENTRMOD EQU 00000110B
DISPON EQU 00001100BCURSOR EQU 00001110BBLINK EQU 00001101B
Mulai:mov al,10000000b ;init ppimov dx,CtrlWord ;pada 80H mode = 0out dx,al ;port a = output
;port b = output;port c lower = output;port c upper = output
call init_LCDlagi:
mov al,80hcall control_out
mov al,30hcall data_out
mov al,0C0hcall control_outmov al,31hcall data_out
jmp lagi
init_LCD proc nearmov al,DISPCLRcall control_outmov al,FUNCSETcall control_outmov al,ENTRMODcall control_out
-
8/9/2019 BAB8C - Display LCD
6/27
Minimum sistem 8088 131
mov al,DISPONcall control_outmov al,CURSORcall control_out
retinit_LCD endp
; PA7 : E; PA6 : RScontrol_out proc near
mov dx,portcout dx,alcall delay
mov dx,portamov al,00000000b
out dx,alcall delay
mov dx,portamov al,10000000bout dx,alcall delay
mov dx,portamov al,00000000bout dx,alcall delayret
control_out endp
data_out proc nearmov dx,portcout dx,alcall delay
mov dx,portamov al,01000000bout dx,alcall delay
mov dx,portamov al,11000000bout dx,alcall delay
mov dx,portamov al,01000000bout dx,alcall delay
-
8/9/2019 BAB8C - Display LCD
7/27
Minimum sistem 8088 132
retdata_out endp
delay proc near ; Procedure delay
push cx ; simpan cxmov cx,0ffffh ; isi cx dengan lama delayloop $ ; loopng sampai cx=0pop cx ; keluarkan cxret ; kembali ke program utama
delay endp
ORG 20F0H ;alamat yang dituju;setelah menekan reset
DB 0EAH ;JMP reset keDW 0100H ;alamat offset 0100hDW 0FDF0H ;alamat segmen 0FBFh
Untuk membuat tulisan di LCD, ikuti algoritma berikut :
Pindahkan data di ROM ke RAM
Tempatkan data dari tulisan ke suatu alamat bx di RAM dengan memberi
perintah :
lea bx,setting
Ambil satu per satu data di alamat bx tadi, kemudian pesan tempat di
LCD baris 1 dan kolom 0 dan kirim data. Ulangi sampai data ke 16 .
Gunakan prosedur berikut :
baris1 proc nearmov ah,0mov al,kolomadd ax,80h ; baris 1call controlout ; pesan tempat baris 1 kolom x
mov ah,0mov al,data_teksmov data,alcall dataoutret
baris1 endp
disp proc nearmov kolom,0
-
8/9/2019 BAB8C - Display LCD
8/27
Minimum sistem 8088 133
xor bx,bxlea bx,settingmov cx,16
lagi2: mov dl,[bx]
mov data_teks,dlcall baris1inc bx ; naikkan alamat datainc kolom ; naikkan kolom LCDloop lagi2ret
disp endp
Editlah program di atas menjadi:
awal db ?setting db 'KEYPAD : 'akhir db ?
mulai:Mov AX, CS ; Menyamakan data segment dengan code segmentMov DS, AXXor AX, AX ; Mengenolkan ES dan SS supaya
; mengarah pada alamat RAM Minimum SistemMov ES, AX ; ES = 0 -> segment address RAMMov SS, AX ; SS = 0 -> segment address RAM
Lea SI, Awal ; menyalin data dari ROM ke RAMLea CX, Akhir ; CX diisi offset AkhirDtMov DI, SI ; DI = [SI]Sub CX, SI ; CX = [CX]-[SI] = AkhirDt-AwalDt
; = jumlah dataCld ; Membuat Direction flag = 0 -> SI&DI incrementedRep Movsb ; ulang { ES:[DI] nilai maksimum RAM
Xor AX,AX ; Menolkan data segment agar menunjuk alamat data di; RAM yang telah disalinkan dari ROM pada sistem min
Mov DS,AX ; DS = 0 -> segment address RAM
mov al,10000000bmov dx,cwout dx,al
call init_lcdcall disp
putar:
-
8/9/2019 BAB8C - Display LCD
9/27
Minimum sistem 8088 134
jmp putar
baris1 proc near
mov ah,0mov al,kolomadd ax,80h ; baris 1call controlout
mov ah,0mov al,data_teksmov data,alcall dataoutret
baris1 endp
disp proc nearmov kolom,0xor bx,bxlea bx,settingmov cx,16
lagi2: mov dl,[bx]mov data_teks,dlcall baris1inc bxinc kolomloop lagi2ret
disp endp
Aplikasi Keypad dan LCD
; DIGUNAKAN UNTUK MENAMPILKAN DATA DARI KEYPAD KE DISPLAY LCD
; DATA LCD : PC; E : PB0; RS : PB1
; data keypad; PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0; OE X X X B A D C
CODE_SEG SEGMENT ; code_seg sebagai segmentASSUME CS:CODE_SEG,DS:CODE_SEG,SS:CODE_SEGORG 100H ; program ditulis mulai origin 100h
start: jmp mulai ; Awal program pada Org 0100H
pa2 equ 304h
-
8/9/2019 BAB8C - Display LCD
10/27
-
8/9/2019 BAB8C - Display LCD
11/27
Minimum sistem 8088 136
in al,dxand al,128cmp al,128
je putar
in al,dxand al,00001111bcall konv_keypad_to_binmov data_key,al
mov data,80hcall controlout
mov al,data_keymov ah,0add ax,30h
mov data,alcall dataout
tunggu:mov dx,pc2 ; status tombol dilepas PC7 = 1in al,dxand al,128cmp al,0
je tunggu
jmp putar
; PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0; OE X X X B A D C KEY; 0 1 0 0 1; 1 0 0 0 2; 1 1 0 0 3; 0 0 0 1 4; 0 1 0 1 5; 1 0 0 1 6; 1 1 0 1 7; 0 0 1 0 8; 0 1 1 0 9; 1 0 1 0 0; 1 1 1 0 *; 0 0 1 1 #
konv_keypad_to_bin proc nearcmp al,4
jne k1mov al,1ret
k1:
-
8/9/2019 BAB8C - Display LCD
12/27
Minimum sistem 8088 137
cmp al,8jne k2mov al,2ret
k2:cmp al,12
jne k3mov al,3ret
k3:cmp al,1
jne k4mov al,4ret
k4:cmp al,4
jne k5mov al,4ret
k5:cmp al,5
jne k6mov al,5ret
k6:cmp al,9
jne k7mov al,6ret
k7:cmp al,13
jne k8mov al,7ret
k8:cmp al,2
jne k9mov al,8ret
k9:cmp al,6
jne k0mov al,9ret
k0:cmp al,10
jne kbmov al,0ret
kb:
-
8/9/2019 BAB8C - Display LCD
13/27
Minimum sistem 8088 138
cmp al,14jne kpmov al,14ret
kp:cmp al,3
jne metumov al,3ret
metu:ret
konv_keypad_to_bin endp
;---------------------------------------; PEMESANAN TEMPAT;---------------------------------------
; E : PB0 : 0 1 0; RS : PB1 : 0controlout proc near
mov dx,pb2mov al,0out dx,alcall delay_lcd
mov dx,pb2mov al,1out dx,alcall delay_lcd
mov dx,pa2mov al,dataout dx,alcall delay_lcd
mov dx,pb2mov al,0out dx,alcall delay_lcdret
controlout endp
;---------------------------------------; PENEMPATAN DATA;---------------------------------------; E : PB0 : 0 1 0; RS : PB1 : 1dataout proc near
mov dx,pb2mov al,2out dx,al
-
8/9/2019 BAB8C - Display LCD
14/27
Minimum sistem 8088 139
call delay_lcd
mov dx,pb2mov al,3
out dx,alcall delay_lcd
mov dx,pa2mov al,dataout dx,alcall delay_lcd
mov dx,pb2mov al,2out dx,alcall delay_lcd
retdataout endp
;--------------------------------; INISIALISASI LCD;--------------------------------init_lcd proc near
mov data,DISPCLRcall controloutcall delay_lcd
mov data,FUNCSETcall controloutcall delay_lcd
mov data,ENTRMODcall controloutcall delay_lcd
mov data,DISPONcall controloutcall delay_lcdret
init_lcd endp
delay_lcd proc near ; Procedure delaypush cx ; simpan cxmov cx,01fffh ; isi cx dengan lama delayloop $ ; loopng sampai cx=0pop cx ; keluarkan cxret ; kembali ke program utama
delay_lcd endp ; akhir procedure delay
delay proc near ; Procedure delay
-
8/9/2019 BAB8C - Display LCD
15/27
Minimum sistem 8088 140
push cx ; simpan cxmov cx,0ffffh ; isi cx dengan lama delayloop $ ; loopng sampai cx=0pop cx ; keluarkan cx
ret ; kembali ke program utamadelay endp ; akhir procedure delay
ORG 20F0H ; alamat yang dituju setelah resetDB 0EAH ; JMP reset keDW 0100H ; alamat offset 0100hDW 0FDF0H ; alamat segmen 0FBFh
CODE_SEG ENDS ; batas segment code_segEND START ; akhir program
Aplikasi keypad, ADC dan LCD
; DIGUNAKAN UNTUK MENAMPILKAN DATA DARI KEYPAD KE DISPLAY LCD DARI; PPI1 DAN DIBANDINGKAN DENGAN DATA ADC
; PPI2; PA : DATA DAC; PC : DATA ADC; PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0
; x x x C B A WR RD
; PPI1; DATA LCD : PC; E : PB0; RS : PB1
; data keypad; PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0; OE X X X B A D C
CODE_SEG SEGMENT ; code_seg sebagai segmentASSUME CS:CODE_SEG,DS:CODE_SEG,SS:CODE_SEGORG 100H ; program ditulis mulai origin 100h
start: jmp mulai ; Awal program pada Org 0100H
;----------------------------------; KONSTANTA ROM;----------------------------------pa1 equ 00hpb1 equ 01hpc1 equ 02hcw1 equ 03h
-
8/9/2019 BAB8C - Display LCD
16/27
Minimum sistem 8088 141
pa2 equ 304hpb2 equ 305hpc2 equ 306hcw2 equ 307h
DISPCLR equ 00000001BFUNCSET equ 00111000BENTRMOD equ 00000110BDISPON equ 00001100B
;-------------------------------; VARIABEL RAM;-------------------------------awal db ?kolom db ?data db ?
data_teks db ?data_key1 db ?data_key2 db ?data_key3 db ?ratusan db ?puluhan db ?satuan db ?setting db 'SETTING : 'hasil db ' ADC : 'key_ke db ?status db ?data_setting db ?dataadc db ?datadac db ?akhir db ?
;-----------------------------------; PROGRAM UTAMA;------------------------------------mulai:
Mov AX, CS ; Menyamakan data segment dengan code segmentMov DS, AXXor AX, AX ; Mengenolkan ES dan SS supaya
; mengarah pada alamat RAM Minimum SistemMov ES, AX ; ES = 0 -> segment address RAMMov SS, AX ; SS = 0 -> segment address RAM
Lea SI, Awal ; menyalin data dari ROM ke RAMLea CX, Akhir ; CX diisi offset AkhirDtMov DI, SI ; DI = [SI]Sub CX, SI ; CX = [CX]-[SI] = AkhirDt-AwalDt
; = jumlah dataCld ; Membuat Direction flag = 0 -> SI&DI incrementedRep Movsb ; ulang { ES:[DI]
-
8/9/2019 BAB8C - Display LCD
17/27
Minimum sistem 8088 142
Mov SP,2000h ; SP = 2000h = 8Kb -> nilai maksimum RAM
Xor AX,AX ; Menolkan data segment agar menunjuk alamat data di
; RAM yang telah disalinkan dari ROM pada sistem minMov DS,AX ; DS = 0 -> segment address RAM
mov al,10001001b ; PPI 1mov dx,cw1 ; A,B = outputout dx,al ; C = input
mov al,10001001b ; PPI 2mov dx,cw2 ; A,B = outputout dx,al ; C = input
call init_lcdmuter:
call disp_setcall disp_hasil
;--------------------------------------------; PENEKANAN TOMBOL KE 1;--------------------------------------------tombol1:
mov al,8Ahmov data,alcall controlout ; penekanan ke 1 di basris 1 kolom 10call tombol_ditekan
je tombol1
in al,dxand al,00001111bcall konv_keypad_to_binmov data_key1,al
mov ah,0add ax,30hmov data,alcall dataout ; tampilkan di LCD
tunggu:call tombol_dilepas
je tunggu
;---------------------------------------------; PENEKANAN TOMBOL KE 2
-
8/9/2019 BAB8C - Display LCD
18/27
Minimum sistem 8088 143
;---------------------------------------------tombol2:
mov al,8BHmov data,al
call controlout ; penekanan ke 2 di basris 1 kolom 11call tombol_ditekan
je tombol2
in al,dxand al,00001111bcall konv_keypad_to_binmov data_key2,al
mov ah,0add ax,30hmov data,al
call dataouttunggu2:
call tombol_dilepasje tunggu2jmp tombol3
kembali_ke_awal:jmp muter
;-------------------------------------------; PENEKANAN TOMBOL KE 3;-------------------------------------------tombol3:
mov al,8CHmov data,alcall controlout ; penekanan ke 2 di basris 1 kolom 12call tombol_ditekan
je tombol3
in al,dxand al,00001111bcall konv_keypad_to_binmov data_key3,al
mov ah,0add ax,30hmov data,alcall dataout
tunggu3:call tombol_dilepas
je tunggu3
;----------------------------------------; CEK STATUS TERAKHIR
-
8/9/2019 BAB8C - Display LCD
19/27
Minimum sistem 8088 144
;----------------------------------------cek:
call tombol_ditekanje cek
in al,dxand al,00001111bcall konv_keypad_to_binmov status,al
tunggu4:call tombol_dilepas
je tunggu4
mov al,statuscmp al,32
je kembali_ke_awal ; jika tombol * ditekan kembali ke
awal
cmp al,40je tampil ; jika tombol # ditekan lompat ke
tampiljne cek
tampil:xor ax,axmov al,data_key1mov bl,100mul blmov ratusan,al
xor ax,axmov al,data_key2mov bl,10mul blmov puluhan,al
xor ax,axmov al,data_key3
xor bx,bxmov bl,puluhanadd ax,bx
xor bx,bxmov bl,ratusanadd ax,bx
mov dx,pa2out dx,almov data_setting,al
-
8/9/2019 BAB8C - Display LCD
20/27
Minimum sistem 8088 145
looping:call read_adccall disp_adc
jmp looping
;--------------------------------------------; TES PENEKANAN TOMBOL;--------------------------------------------tombol_ditekan proc near
mov dx,pc1 ; status tombol ditekan PC7 = 0in al,dxand al,128cmp al,128ret
tombol_ditekan endp
;--------------------------------------------; TES PELEPASAN TOMBOL;--------------------------------------------tombol_dilepas proc near
mov dx,pc1 ; status tombol dilepas PC7 = 1in al,dxand al,128cmp al,0ret
tombol_dilepas endp
; PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0; OE X X X B A D C KEY; 0 1 0 0 1; 1 0 0 0 2; 1 1 0 0 3; 0 0 0 1 4; 0 1 0 1 5; 1 0 0 1 6; 1 1 0 1 7; 0 0 1 0 8; 0 1 1 0 9; 1 0 1 0 0; 1 1 1 0 *; 0 0 1 1 #
konv_keypad_to_bin proc nearcmp al,4
jne k1mov al,1ret
k1:cmp al,8
-
8/9/2019 BAB8C - Display LCD
21/27
Minimum sistem 8088 146
jne k2mov al,2ret
k2:
cmp al,12jne k3mov al,3ret
k3:cmp al,1
jne k4mov al,4ret
k4:cmp al,4
jne k5
mov al,4ret
k5:cmp al,5
jne k6mov al,5ret
k6:cmp al,9
jne k7mov al,6ret
k7:cmp al,13
jne k8mov al,7ret
k8:cmp al,2
jne k9mov al,8ret
k9:cmp al,6
jne k0mov al,9ret
k0:cmp al,10
jne kbmov al,0ret
kb:cmp al,14
-
8/9/2019 BAB8C - Display LCD
22/27
Minimum sistem 8088 147
jne kpmov al,14ret
kp:
cmp al,3jne metumov al,3ret
metu:ret
konv_keypad_to_bin endp
;----------------------------------; PEMBACAAN ADC;-----------------------------------read_adc proc near
mov dx,pb2mov al,3out dx,alcall delay_lcd
mov al,1out dx,alcall delay_lcd
mov al,3out dx,alcall delay
mov al,2out dx,alcall delay_lcd
mov dx,pc2in al,dxmov dataadc,alcall delay_lcd
mov dx,pb2mov al,3out dx,alcall delay_lcdret
read_adc endp
;--------------------------------------; TAMPILAN ADC DI LCD;--------------------------------------disp_adc proc near
xor ax,ax
-
8/9/2019 BAB8C - Display LCD
23/27
Minimum sistem 8088 148
mov al,dataadcmov bl,10div bl ; hasil di al, sisa di ahmov satuan,ah
mov ah,0mov bl,10div blmov puluhan,ahmov ratusan,al
mov data,0CAhcall controloutxor ax,axmov al,ratusanadd ax,30h
mov data,alcall dataout
mov data,0CBhcall controloutxor ax,axmov al,puluhanadd ax,30hmov data,alcall dataout
mov data,0CChcall controloutxor ax,axmov al,satuanadd ax,30hmov data,alcall dataoutret
disp_adc endp
;---------------------------------------; PEMESANAN TEMPAT;---------------------------------------; E : PB0 : 0 1 0; RS : PB1 : 0controlout proc near
mov dx,pb1mov al,0out dx,alcall delay_lcd
mov dx,pb1mov al,1
-
8/9/2019 BAB8C - Display LCD
24/27
Minimum sistem 8088 149
out dx,alcall delay_lcd
mov dx,pa1
mov al,dataout dx,alcall delay_lcd
mov dx,pb1mov al,0out dx,alcall delay_lcdret
controlout endp
;-------------------------------------
; PENEMPATAN DATA;-------------------------------------; E : PB0 : 0 1 0; RS : PB1 : 1dataout proc near
mov dx,pb1mov al,2out dx,alcall delay_lcd
mov dx,pb1mov al,3out dx,alcall delay_lcd
mov dx,pa1mov al,dataout dx,alcall delay_lcd
mov dx,pb1mov al,2out dx,alcall delay_lcdret
dataout endp
;------------------------------; INISIALISASI LCD;------------------------------init_lcd proc near
mov data,DISPCLRcall controloutcall delay_lcd
-
8/9/2019 BAB8C - Display LCD
25/27
Minimum sistem 8088 150
mov data,FUNCSETcall controloutcall delay_lcd
mov data,ENTRMODcall controloutcall delay_lcd
mov data,DISPONcall controloutcall delay_lcdret
init_lcd endp
;-----------------------------------------------
; PENULISAN TEKS DI BARIS 1;-----------------------------------------------baris1 proc near
mov ah,0mov al,kolomadd ax,80h ; baris 1mov data,alcall controlout
mov al,data_teksmov data,alcall dataoutret
baris1 endp
;-------------------------------------------------; PENULISAN TEKS DI BARIS 2;-------------------------------------------------baris2 proc near
mov ah,0mov al,kolomadd ax,0C0h ; baris 2mov data,alcall controlout
mov al,data_teksmov data,alcall dataoutret
baris2 endp
;----------------------------------------------------------------------------
-
8/9/2019 BAB8C - Display LCD
26/27
Minimum sistem 8088 151
; PENGAMBILAN DATA TEKS BARIS 1 KE MEMORI;-----------------------------------------------------------------------------disp_set proc near
mov kolom,0
xor bx,bxlea bx,settingmov cx,16
lagi1: mov dl,[bx]mov data_teks,dlcall baris1inc bxinc kolomloop lagi1ret
disp_set endp
;--------------------------------------------------------------------------; PENGAMBILAN DATA TEKS BARIS 2 KE MEMORI;--------------------------------------------------------------------------disp_hasil proc near
mov kolom,0xor bx,bxlea bx,hasilmov cx,16
lagi2: mov dl,[bx]mov data_teks,dlcall baris2inc bxinc kolomloop lagi2
retdisp_hasil endp
;---------------------------------; DELAY UNTUK LCD;---------------------------------delay_lcd proc near ; Procedure delay
push cx ; simpan cxmov cx,002ffh ; isi cx dengan lama delayloop $ ; loopng sampai cx=0pop cx ; keluarkan cxret ; kembali ke program utama
delay_lcd endp ; akhir procedure delay
;----------------------------------------------------; DELAY UNTUK PROGRAM UTAMA;----------------------------------------------------delay proc near ; Procedure delay
push cx ; simpan cxmov cx,0ffffh ; isi cx dengan lama delay
-
8/9/2019 BAB8C - Display LCD
27/27
loop $ ; loopng sampai cx=0pop cx ; keluarkan cxret ; kembali ke program utama
delay endp ; akhir procedure delay
;----------------------------------------------------------------; ALAMAT JUMP RESET UNTUK ROM 2764;----------------------------------------------------------------
ORG 20F0H ; alamat yang dituju setelah resetDB 0EAH ; JMP reset keDW 0100H ; alamat offset 0100hDW 0FDF0H ; alamat segmen 0FBFh
CODE_SEG ENDS ; batas segment code_segEND START ; akhir program