KALKULATOR SEDERHANA MENGGUNAKAN KEYPAD 4x4 DAN LCD I2C BERBASIS ATMEGA 328P
KALKULATOR SEDERHANA MENGGUNAKAN KEYPAD 4x4 DAN LCD I2C BERBASIS ATMEGA 328P
Jurusan Teknik Elektro Program Studi Teknik Elektronika
Politeknik Negeri Seamarang
Disusun Oleh:
Hendy Frizal I.S
Puput Novianti
Rafa Krisna Mughni A.
1.1. Pengertian
Kalkulator adalah alat yang sangat penting dalam kehidupan
sehari-hari untuk melakukan perhitungan matematika dengan cepat dan akurat.
Dalam dunia teknologi, perangkat seperti kalkulator memberikan dasar untuk
memahami interaksi antara perangkat keras dan perangkat lunak. Pembuatan
kalkulator berbasis keypad adalah salah satu proyek yang memungkinkan penerapan
langsung konsep-konsep tersebut, sekaligus memberikan pemahaman mendalam
mengenai pengolahan input dan output.
1.2 Latar Belakang
Perangkat kalkulator sederhana ini menggunakan keypad
sebagai alat input data dan layar untuk menampilkan hasil perhitungan. Melalui
proyek ini, pengembang dapat memahami cara kerja perangkat keras seperti
mikrokontroler, keypad, dan modul layar, serta bagaimana perangkat ini
berkomunikasi menggunakan kode program.
Proyek kalkulator berbasis keypad memberikan pengalaman
langsung dalam bekerja dengan mikrokontroler, yang merupakan komponen inti dari
banyak perangkat embedded. Mikrokontroler seperti Arduino atau Raspberry Pi
diprogram untuk membaca input dari keypad, memproses data, dan menampilkan
hasil pada layar LCD
1.3 Alat dan Baham
1.
ATmega 328p (Arduino Uno)
2.
Keypad 4x4
3.
Lcd i2c
4.
Breadboard
5.
Kertas karton
6.
Kabel jumper
1.4 Diagram Alir
.include
"m328pdef.inc" ; ======================================== ; Inisialisasi Port dan
Register ;
======================================== ldi r16, 0xFF ; Set PORTC sebagai output (LCD) out DDRC, r16 ldi r16, 0x00 ; Set PORTB sebagai input (keypad) out DDRB, r16 ;
======================================== ; Variabel ;
======================================== .def key = r17 ; Menyimpan input keypad .def op = r18 ; Menyimpan operasi .def num1 = r19 ; Menyimpan angka pertama .def num2 = r20 ; Menyimpan angka kedua .def hasil = r21 ; Menyimpan hasil ;
======================================== ; Fungsi untuk membaca
keypad ;
======================================== key_scan: in key, PINB ; Baca input keypad ret ; ======================================== ; Fungsi untuk menampilkan
hasil di LCD ;
======================================== lcd_init: ldi r16, 0x38 ; Mode 8-bit, 2 baris, 5x8 font out PORTC, r16 ldi r16, 0x0C ; Display ON, cursor OFF out PORTC, r16 ldi r16, 0x01 ; Clear display out PORTC, r16 ldi r16, 0x06 ; Entry mode set: Increment cursor out PORTC, r16 ret lcd_clear: ldi r16, 0x01 ; Clear display out PORTC, r16 ret lcd_write_char: ; Masukkan karakter di r16 sebelum
memanggil fungsi ini out PORTC, r16 ret lcd_write_string: ; Asumsi alamat string disimpan di Z ldi r20, 0 ; Inisialisasi penghitung karakter lcd_string_loop: ld r16, Z+ ; Ambil karakter dari alamat Z cpi r16, 0x00 ; Cek null-terminator breq lcd_string_done rcall lcd_write_char ; Tulis karakter ke
LCD inc r20 ; Tambahkan penghitung rjmp lcd_string_loop lcd_string_done: ret display_lcd: rcall lcd_clear rcall lcd_write_char ; Tampilkan hasil
langsung mov r16, hasil rcall lcd_write_char ret ;
======================================== ; Fungsi untuk memeriksa
operasi ;
======================================== cal_op: cpi key, 0x0D ; Tombol tambah breq add_op cpi key, 0x0C ; Tombol kurang breq sub_op cpi key, 0x0B ; Tombol kali breq mul_op cpi key, 0x0A ; Tombol bagi breq div_op cpi key, 0x0E ; Tombol eksekusi breq exec_op ret ; ======================================== ; Menangani operasi ;
======================================== add_op: ldi op, '+' ; Set operasi tambah ret sub_op: ldi op, '-' ; Set operasi kurang ret mul_op: ldi op, 'x' ; Set operasi kali ret div_op: ldi op, '/' ; Set operasi bagi ret ;
======================================== ; Eksekusi operasi ;
======================================== exec_op: cpi op, '+' ; Jika operasi tambah breq add_exec cpi op, '-' ; Jika operasi kurang breq sub_exec cpi op, 'x' ; Jika operasi kali breq mul_exec cpi op, '/' ; Jika operasi bagi breq div_exec ret ;
======================================== ; Eksekusi perhitungan ;
======================================== add_exec: add num1, num2 ; num1 + num2 mov hasil, num1 rjmp display_lcd sub_exec: sub num1, num2 ; num1 - num2 mov hasil, num1 rjmp display_lcd mul_exec: mul num1, num2 ; num1 * num2 mov hasil, r0 ; Hasil disimpan di r0 setelah MUL rjmp display_lcd div_exec: ; Pembagian num1 / num2 (dengan pembulatan) ldi r22, 0 ; Register sementara untuk hasil mov r23, num1 ; Salin num1 mov r24, num2 ; Salin num2 clr hasil ; Inisialisasi hasil div_loop: cp r23, r24 brlo div_done ; Jika num1 < num2, selesai sub r23, r24 ; num1 -= num2 inc hasil ; hasil++ rjmp div_loop div_done: ret ;
======================================== ; Program Utama ;
======================================== main: rcall lcd_init ; Inisialisasi LCD rjmp key_scan ; Baca input keypad rjmp cal_op ; Periksa operasi rjmp exec_op ; Eksekusi operasi rjmp display_lcd ; Tampilkan hasil ;
======================================== ; Akhir Program ;
======================================== |
1.6. Power Point
Link Youtube : https://youtu.be/nN7WgBqK8hY?si=C5lTdDk125xs-AaN
Komentar
Posting Komentar