UNIT IV
KEYPAD
B. Listing Program
1. Tulis source code seperti dibawah ini:
.include "m8535def.inc"
.def temp =r22
.def dly =r23
.def dly1 =r24
.def Key =r25
rjmp main
main: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0xff
out ddra,r16 ;PortA = output
ldi temp,0x00 ;PortA sebagai power ke 7-segmen
out PORTA,temp
ldi r16,0xff
out ddrb,r16 ;PortB = output
ldi r16,0xc0 ;tampilkan angka nol pertama kali
out portb,r16
Key2:
sbic PINC,PC6 ;tombol "2" tertekan?
rjmp key3 ;jika tidak, cek tombol berikutnya
ldi key,0xa4 ;jika ya...kirim angka ‘2’
out PORTB,key
ret
Key3:
sbic PINC,PC5 ;tombol "3" tertekan?
rjmp keyA ;jika tidak, cek tombol berikutnya
ldi key,0xb0 ;jika ya...kirim angka ‘3’
out PORTB,key
ret
keyA:
sbic PINC,PC4 ;tombol "A" tertekan?
rjmp key4 ;jika tidak, cek tombol berikutnya
ldi key,0x88 ;jika ya...kirim huruf ‘A’
out PORTB,key
Ret
Key4:
ldi temp,brs2 ;disable baris 1..
out PORTC,temp ;dan enable baris2
rcall delay
sbic PINC,PC7 ;tombol "4" tertekan?
rjmp key5 ;jika tidak, cek tombol berikutnya
ldi key,0x99 ;jika ya...kirim angka ‘4’
out PORTB,key
Ret
key5:
sbic PINC,PC6 ;tombol "5" tertekan?
rjmp key6 ;jika tidak, cek tombol berikutnya
ldi key,0x92 ;jika ya...kirim angka ‘5’
out PORTB,key
Ret
Key6:
sbic PINC,PC5 ;tombol "6" tertekan?
rjmp keyB ;jika tidak, cek tombol berikutnya
ldi key,0x82 ;jika ya...kirim angka ‘6’
out PORTB,key
ret
keyB:
sbic PINC,PC4 ;tombol "B" tertekan?
rjmp key7 ;jika tidak, cek tombol berikutnya
ldi key,0x83 ;jika ya...kirim huruf ‘B’
out PORTB,key
ret
Key7:
ldi temp,brs3 ;Disable baris kedua ...
out PORTC,temp ;dan enable baris ketiga
rcall delay
sbic PINC,PC7 ;tombol "7" tertekan?
rjmp key8 ;jika tidak, cek tombol berikutnya
ldi key,0xf8 ;jika ya...kirim angka ‘7’
out PORTB,key
ret
Key8:
sbic PINC,PC6 ;tombol "8" tertekan?
rjmp key9 ;jika tidak, cek tombol berikutnya
key9:
sbic PINC,PC5 ;tombol "9" tertekan?
rjmp keyC ;jika tidak, cek tombol berikutnya
ldi key,0x90 ;jika ya...kirim angka ‘9’
out PORTB,key
ret
keyC:
sbic PINC,PC4 ;tombol "C" tertekan?
rjmp keyBT ;jika tidak, cek tombol berikutnya
ldi key,0xc6 ;jika ya...kirim huruf ‘C’
out PORTB,key
Ret
KeyBT:
ldi temp,brs4
out PORTC,temp
rcall delay
sbic PINC,PC7 ;tombol "F" tertekan?
rjmp keyNOL ;jika tidak, cek tombol berikutnya
ldi key,0x8e ;jika ya...kirim huruf ‘F’
out PORTB,key
Ret
keyNOL:
sbic PINC,PC6 ;tombol "0" tertekan?
rjmp keyKRS ;jika tidak, cek tombol berikutnya
ldi key,0xc0 ;jika ya...kirim angka ‘0’
out PORTB,key
ret
keyKRS:
sbic PINC,PC5 ;tombol "E" tertekan?
rjmp keyD ;jika tidak, cek tombol berikutnya
ldi key,0x86 ;jika ya...kirim huruf ‘E’
out PORTB,key
ret
keyD:
sbic PINC,PC4 ;tombol "D" tertekan?
rjmp check_keys ;jika tidak, cek tombol berikutnya
ldi key,0xa1 ;jika ya...kirim huruf ‘D’
out PORTB,key
ret
; Subrutin Delay
delay: ldi dly,0x10
dl1: ldi dly1,0xff
C. Percobaan Mandiri
Buat rangkaian dan program seperti percobaan diatas dengan menggunakan ATMega 8535
pada Proteus menggunakan aplikasi pemrograman apapun.