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



 1.5 Program

.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

Postingan populer dari blog ini

SISTEM LAMPU PENERANGAN JALAN OTOMATIS DENGAN SENSOR LDR BERBASIS ATMega8535

SISTEM PEMANTAUAN SUHU DAN KELEMBABAN PADA SUATU RUANGAN MENGGUNAKAN SENSOR DHT22 BERBASIS MIKROKONTROLLER ARDUINO UNO ATMEGA328P

ATAP OTOMATIS DENGAN SENSOR HUJAN BERBASIS ATMEGA 8535