
Program Membaca Kumpulan Tombol Tersusun Matrik
Part 1
;- BAB3_14.ASM -------------------------------------------------------------------
;
; Program Untuk Membaca Tombol-Tombol Yang Disusun Secara Matrik,
; Masukan ke Tombol Pada Port 3, Keluaran dibaca pada Port 2, dan
; hasil ditampilkan pada 7-segmen di Port 0
;
;---------------------------------------------------------------------------------
ORG 0H
;
MULAI:
MOV P2,#0FEH ; Buat P2.0=0 (Untuk Baca Tombol 0,A,B,C,F4)
JB P3.7,KEY1 ; Apakah tombol 'C' (P3.7) ditekan (P3.7=0)
; Tidak! cek tombol lain di KEY1
MOV P0,#0AAH ; Ya! Keluarkan Kode Huruf 'C' Ke Port 0
SJMP MULAI ; Ulangi lagi dari awal
KEY1:
JB P3.6,KEY2 ; Apakah tombol 'B' (P3.6) ditekan (P3.6=0)
; Tidak! cek tombol lain di KEY2
MOV P0,#38H ; Ya! Keluarkan kode huruf 'B' ke port 0
SJMP MULAI ; Ulangi lagi dari awal
KEY2:
JB P3.5,KEY3 ; Apakah tombol 'A' (P3.5) ditekan (P3.5=0)
; Tidak! cek tombol lain di KEY3
MOV P0,#60H ; Ya! Keluarkan kode huruf 'A' ke port 0
SJMP MULAI ; Ulangi lagi dari awal
KEY3:
JB P3.4,KEY4 ; Apakah tombol '0' (P3.4) ditekan (P3.4=0)
; Tidak! cek tombol lain di KEY4
MOV P0,#22H ; Ya! Keluarkan kode huruf 'A' ke port 0
SJMP MULAI ; Ulangi lagi dari awal
KEY4:
JB P3.3,KEY5 ; Apakah tombol F4 (P3.3) ditekan (P3.3=0)
; Tidak! cek tombol lain di KEY5
MOV P0,#70H ; Ya! Keluarkan kode '' ke port 0
SJMP MULAI ; Ulangi lagi dari awal
KEY5:
MOV P2,#0FDH ; Buat P2.1=0 (Untuk Baca Tombol 1,2,3,D,F3)
JB P3.7,KEY6
MOV P0,#34H
SJMP MULAI
KEY6:
JB P3.6,KEY7
MOV P0,#25H
SJMP MULAI
KEY7:
JB P3.5,KEY8
MOV P0,#0A4H
SJMP MULAI
KEY8:
JB P3.4,KEY9
MOV P0,#77H
SJMP MULAI
KEY9:
JB P3.3,KEY10
MOV P0,#22H
SJMP MULAI
KEY10:
MOV P2,#0FBH ; Buat P2.2=0 (Untuk Baca Tombol 4,5,6,E,F2)
JB P3.7,KEY11
MOV P0,#0A8H
SJMP MULAI
KEY11:
JB P3.6,KEY12
MOV P0,#28H
SJMP MULAI
KEY12:
JB P3.5,KEY13
MOV P0,#29H
SJMP MULAI
KEY13:
JB P3.4,KEY14
MOV P0,#71H
LJMP MULAI
KEY14:
JB P3.3,KEY15
MOV P0,#22H
LJMP MULAI
KEY15:
MOV P2,#0F7H ; Buat P2.3=0 (Untuk Baca Tombol 7,8,9,F,F1)
JB P3.7,KEY16
MOV P0,#0E8H
LJMP MULAI
KEY16:
JB P3.6,KEY17
MOV P0,#21H
LJMP MULAI
KEY17:
JB P3.5,KEY18
MOV P0,#20H
LJMP MULAI
KEY18:
JB P3.4,KEY19
MOV P0,#67H
LJMP MULAI
KEY19:
JB P3.3,KEY20
MOV P0,#0E0H
KEY20:
LJMP MULAI ; ulangi lagi dari awal
END
Part 2
;- BAB3_15.ASM -------------------------------------------------------------------
;
; Program untuk membaca tombol-tombol yang disusun secara matrik,
; masukan tombol pada port 1, keluaran tombol pada port 2 dan hasil
; ditampilkan pada display 7 segment di port 0
; Penggunaan Lokasi memori RAM:
; 70h : menyimpan data pembanding masukan P3
; 71h : menyimpan awal indeks data (per baris pada sebuah kolom)
; 72h : menyimpan indeks data yang akan ditampilkan ke 7-segmen
; 73h : menyimpan jumlah baris tombol matriks
; Cara 2 : pakai metoda pembanding melalui RAM internal AT89C51/52
;
; ------------------------------------------------------------------------------
ORG 0H
;
MULAI:
MOV 73H,#5 ;jumlah baris tombol matrik
MOV R5,#0FEH ;data scan untuk port 2 (kolom, active low)
MOV DPTR,#ANGKA ;DPTR menunjuk ke awal data tampilan
MOV 71H,#0 ;awal indeks data per baris
ULANG:
MOV 70H,#07FH ;data pembanding masukan P3
MOV 72H,#0 ;indeks untuk baris bersangkutan
ULANG1:
MOV P2,R5 ;kirim data scan ke Port 2
MOV A,P3 ;baca hasilnya di Port 3
;tombol mana yang ditekan
CJNE A,70H,GESER1 ;apakah sama dengan data pembanding?
MOV A,72H ;ya, indeks baris
ADD A,71H ;ditambah awal indeks data pd baris tsb.
MOVC A,@A+DPTR ;untuk membaca data yang sesuai
MOV P0,A ;untuk ditampilkan ke 7-segmen (P0)
SJMP MULAI ;ulangi lagi dari Mulai
GESER1:
INC 72H ;tidak, naikkan indeks baris (next row)
MOV A,70H ;data pembanding
RR A ;digeser-putar ke kanan
MOV 70H,A ;sebanyak 1 bit (utk scan kolom berikutnya)
MOV A,72H
CJNE A,#4,ULANG1 ;ulangi sebanyak kolom tombol
NEXTSCAN:
MOV A,71H ;indeks baris per kolom dinaikkan 5
ADD A,#5 ;agar menunjuk ke kolom berikut
MOV 71H,A ;pada baris pertama
MOV A,R5 ;
RL A ;data scan di-rotate agar
MOV R5,A ;menunjuk ke kolom berikutnya
DJNZ 73H,ULANG ;jumlah baris dikurangi 1
;jika <> 0 ulangi proses dari "Ulang"
MOV P2,#0FFH ;matikan tampilan 7-segmen
LJMP MULAI ;ulangi proses dari awal
;-------------------------------------------------------------------------------
; data-data untuk tampilan 7-segmen disimpan di
; memori program (menyatu dengan program)
;-------------------------------------------------------------------------------
ANGKA: DB 0cH,0f9H,0a4H,0b0H,99H,92H,82H,0f8H,80H,90H,0A8H
DB 28H,29H,71H,0BAH,0E8H,21H,20H,67H,0E0H
END
Semoga bermanfaat & selamat belajar!