Top Banner
LAPORAN PURWARUPA KALKULATOR SEDERHANA MENGGUNAKAN INTERFACE LCD 8bit DAN KEYPAD Disusun guna memenuhi tugas : Teknik Interface dan Periperal oleh dosen pengampu matakuliah : Eko Didik Widianto, ST., MT. Kelompok 5 : Adhitama Ksatriya Nugraha L2N008001 Indra Permana 21120111120007 Refika Khoirunnissa 21120111120019 Dayani Tambunan 21120111130036 PROGRAM STUDI SISTEM KOMPUTER FAKULTAS TEKNIK UNIVERSITAS DIPONEGORO 2012
33

PURWARUPA KALKULATOR SEDERHANA

Aug 06, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: PURWARUPA KALKULATOR SEDERHANA

LAPORAN

PURWARUPA KALKULATOR SEDERHANA

MENGGUNAKAN INTERFACE LCD 8bit DAN KEYPAD

Disusun guna memenuhi tugas : Teknik Interface dan Periperal

oleh dosen pengampu matakuliah : Eko Didik Widianto, ST., MT.

Kelompok 5 :

Adhitama Ksatriya Nugraha L2N008001

Indra Permana 21120111120007

Refika Khoirunnissa 21120111120019

Dayani Tambunan 21120111130036

PROGRAM STUDI SISTEM KOMPUTER

FAKULTAS TEKNIK

UNIVERSITAS DIPONEGORO

2012

Page 2: PURWARUPA KALKULATOR SEDERHANA

1. Tujuan

a. Untuk memenuhi tugas mata kuliah teknik interface dan periperal.

b. Mengetahui sistem kerja interface keypad.

c. Mengetahui sistem kerja interface LCD 8bit.

d. Mengetahui bagaimana caranya menghubungkan antar interface agar dapat

saling berintegrasi.

e. Mengetahui bagaimana cara membuat skematik rangkaian elektronik.

2. Alat dan Bahan

a. Notebook

b. Simulator ISIS PROTEUS

c. Code Vision AVR

d. Mikrokontroler Atmel 89C51

e. Notepad ++

f. Interface Keypad dengan tipe Small Calculator

g. Interface LCD 8bit

3. Dasar Teori

3.1 Mikrokontroler Atmel 89C51

Seri Atmel AT89 merupakan keluarga dari Intel 8051, ini merupakan

mikrokontroler 8 bit (μCs) yang diproduksi oleh Atmel Corporation.

Berdasarkan inti dari Intel 8051, seri AT89 masih sangat populer sebagai

mikrokontroler yang bersifat general, karena instruksi standar set industri, dan

Page 3: PURWARUPA KALKULATOR SEDERHANA

biaya unit yang rendah. Hal ini memungkinkan sejumlah besar kode legal untuk

digunakan kembali tanpa modifikasi dalam aplikasi baru. Sementara jauh lebih

kuat daripada seri AT90 baru dari AVR RISC mikrokontroler, pengembangan

produk baru terus berlanjut dengan seri AT89 untuk keuntungan tersebut.

Mikrokontroler Memiliki ROM yang dapat ditulis dan dihapus dengan

menggunakan listrik dan dikenal dengan EEPROM (Electrical Erasenable

Programing ROM).

Mikrokontroler 89c51 memiliki keistimewaan sebagai berikut :

a) Sebuah CPU 8 bit

b) Osilator internal dan pewaktu

c) RAM internal 128 byte

d) Empat buah programmable port I/O, masing masing terdiri atas 8 buah jalur

I/O

e) Dua Buah Timer/Counter 16 bit

f) Lima buah jalur interupsi (2 buah interupsi eksternal dan 3 buah interupsi

internal)

g) Sebuah Port Serial dengan control serial Full Duplex UART

h) Kemampuan melaksanakan operasi perkalian, pembagian dan Operasi

Boolean

i) Kecepatan pelaksaan intruksi dari 4 MHZ sampai 24 MHZ

Page 4: PURWARUPA KALKULATOR SEDERHANA

Gambar 1 Blok Diagram Mikrokontroler

Page 5: PURWARUPA KALKULATOR SEDERHANA

3.2 Pena-Pena Mikrokontroler 89c51

Pena pena 89c51 diperlihatkan pada gambar 2. Penjelasan masing-masing

pena adalah

sebagai berikut :

a) Pena 1 sampai 8 (Port 1) merupakan port pararel 8bit dua arah

(bidirectional) yang dapa digunakan untuk berbagai keperluan (general

Purpose).

b) Pena 9 (reset) merupakan rest aktif tinggi). Pulsa transisi dari rendah ke

tinggi akan mereset 8951. Pena ini dihubungkan ke power on reset

c) Pena 10 sampai 17 (port 3) adalah port parallel 8 bit dua arah yang

memiliki fungsi pengganti. Fungsi pengganti meliputi TxD, RxD, Int0

(Interrupt 0), Int1 (Interrupt 1). T0, T1, WR(Write) dan RD(Read) Bila

fungsi pengganti tidak dipakai, pena-pena ini dapat digunakan sebagai

port parallel 8 bit serbaguna.

d) Pena 18 (XTAL 1) adalah pena masukan ke rangkaian osilator internal.

Sebuah osilator kristal atau sumber osilator luar dapat digunakan.

e) Pena 19 (Xtal 2) adalah pena keluaran ke rangkaian osilator internal.

Pena ini dipakai bila menggunakan osilator kristal

f) Pena 20 (Ground) dihubungkan ke Vss atau Ground

g) Pena 21 sampai 28 (Port 2) adalah port pararel 2 (P2) selebar 8 bit dua

arah. Port 2 ini digunakan sebagai pengalamat bila dilakukan

pengaksesan memori eksternal

h) Pena 29 adalah pena PSEN (Program Store Enable) yang merupakan

sinyal pengomtrol yang membolehkan program memory eksternal

masuk ke dalam bus selama proses pemberian/pengambilan instruksi

(fetching)

Gambar 2 Pena Atmel 89c51

Page 6: PURWARUPA KALKULATOR SEDERHANA

i) Pena 30 adalah pena ALE (Addres Latch Enable) yang digunakan untuk

menahan alamat memori eksternal selama proses pelaksanaan instruksi

j) Pena 31 (EA). Bila pena ini diberi logika tinggi (H) mikrokontroler akan

melaksanakan instruksi dari ROM/EPROM. Ketika isi program counter

kurang dari 4096. Bila diberi logika rendah (L), mikrokontroler akan

melaksanakan seluruh instruksi dari program emori program luar.

k) Pena 32 sampai 39 (Port 0) merupakan port pararel 8 bit open drain dua

arah. Bila digunakan untuk mengakses memori luar, port ini akan

memultipleks alamat memori dengan data.

l) Pena 40 (Vcc) dihubungkan dengan ke Vcc + 5 volt

3.3 Perancangan Rangkaian Minimum ATMEL 89C51

Yang dimaksud rangkaian Minimum adalah rangkaian yang secara

minimal harus ada agar mikroprosesor dapat bekerja.

Mikroprosesor dapat bekerja minimal komponen yang harus ada yaitu :

ori Program umumnya menggunakan EEPROM (Read Only

Memory)

Memory)

– 24 Mhz))

Page 7: PURWARUPA KALKULATOR SEDERHANA

3.4 Pewaktuan CPU (Crystal)

Mikrokontroler 8951 memiliki osilator internal bagi sumber clock CPU.

Untuk menggunakan osilator internal diperlukan kristal antara XTAL1 dan pena

XTAL 2 an sebuah kapasitor ground seperti terlihat pada gambar berikut Untuk

kristalnya dapat digunakan frekuensi dari 4 sampai 24 MHZ. Sedang untuk

kapasitor dapat bernilai 20 pF sampai 40 pF. Bila menggunakan clock eksternal

rangkaian dihubungkan seperti berikut :

4. Cara Kerja dan Langkah Pemrograman

a. Aktifkan Code Vision AVR

b. Pada File | New atau klik ikon Create New File

Gambar 4 Jendela New Project

Gambar 3 Rangkaian Clock Eksternal

Page 8: PURWARUPA KALKULATOR SEDERHANA

c. Membuat projek baru, klik project yang terdapat pada kotak dialog Create New

File, kemudian klik tombol OK.

Gambar 5 Jendela Create New File

d. Setelah memilih file yang akan dibuat maka akan muncul sebuah kotak dialog

Confirm, kotak ini menawarkan apakah akan menggunakan CodeWizardAVR

atau tidak. Klik tombol No pada kotak dialog Confirm.

Gambar 6 Jendela konfirmasi bantuan CodeWizardAVR

Setelah selesai melakukan configurasi, tahap selanjutnya adalah menuliskan

listing yang akan dibuat seperti gambar di bawah ini.

Page 9: PURWARUPA KALKULATOR SEDERHANA

Gambar 7 Jendela kerja CodeVisionAVR

Setelah konfigurasi file telah selesai maka langkah selanjutnya adalah

dilakukan kompilasi atau build, untuk menghasilkan file HEX maupun COFF

maka klik menu Project | build atau klik ikon Build yang terdapat pada toolbar.

Gambar 8 Jendela kompilasi

Bila program C tidak terdapat kesalahan maka akan muncul sebuah kotak

Informasi yang menyatakan bahwa program telah selesai dikompilasi dan di-build

tanpa kesalahan.

4.1 Menggambar Skematik Rangkian

Rangkaian elektronik yang akan dirancang dapat dilihat pada gambar

dibawah ini. Rangkaian ini berfungsi sebagai input dan output.

Page 10: PURWARUPA KALKULATOR SEDERHANA

Gambar 9 Rangkaian Skematik Sensor LM 35

Rangkaian elektronik diatas dibuat dengan menggunakan simulasi ISIS.

Program ISIS berguna untuk menggambarkan skematik rangkaian elektronik dan

sekaligus menguji rangkaian yang dibuat apakah sudah dapat bekerja dengan baik

atau belum.

4.2 Menghubungkan Antar Komponen

Hal yang perleu diperhatikan sebelum menghubungkan komponen satu

dengan yang lain. Terlebih dahulu mencari komponen yang kita butuhkan melalui

library. Ada beberapa cara untuk memilih komponen daru library, yaitu:

1. Klik tombol Pick Device

Page 11: PURWARUPA KALKULATOR SEDERHANA

Gambar 10 Jendela Pick Device

2. Langkah selanjutnya adalah mencari komponen yang diperlukan dari libarry.

Pencarian komponen adalah dengan mengetahui komponen beserta tipe dan

nilainya. Setelah menemukan komponen yang diinginkan klik OK.

3. Setelah semua komponen sudah dipilih, komponen apasaja yang diperlukan

akan muncul pada kotak dialog Devices, seperti gambar dibawah ini.

Gambar 11 Form Devices

Page 12: PURWARUPA KALKULATOR SEDERHANA

3. Setelah itu, drag komponen ke lembar kerja dan hubungkan atar komponen

tersebut. Klik pda komponen (akan muncul gambar pensil), setelah muncul line

hubungkan ke komponen yang satu dengan komponen yang satunya.

Gambar 12 Menghubungkan antar Komponen

5. Analisa dan Pembahasan

5.1 Rangkain Interface LCD 8bit

Gambar 13 Rangkaian Skematik LCD 8bit

Page 13: PURWARUPA KALKULATOR SEDERHANA

Port yang digunakan sebagai keluaran dari mikrokontroler adalah Port 2

yang dihubungkan ke kaki LCD. Gambar yang lebih jelasnya seperti dibawah ini.

Gambar 14 Hubungan port I/O mikrokontroler dengan kaki LCD

Pada gambar diatas terlihat dengan jelas, pada port 2 mikrokontroler

terhubung dengan kaki – kaki pada LCD. Adapun fungsi dari tiap kaki dari LCD

adalah sebagai berikut :

1. Pin 1 (Vss) : Berfungsi sebagai Ground

2. Pin 2 (Vdd) : Berfungsi sebagai masukan tegangan ke LCD

3. Pin 3 (Vee) : Berfungsi sebagai tegangan kontras LCD yang dihubungkan

dengan potensiometer (mengatur tingkat kecerahan LCD).

4. Pin 4 (Rs) : Berfungsi sebagai register select.

5. Pin 5 (Rw) : Berfungsi masukan baca tulis ( Read = 1, Write = 0).

6. Pin D0-D7 : Berfungsi sebagai jalur Bus data.

Sedangkan port 2 pada mikrokontroler (PC0 – PC7) berfungsi sebagai pin

I/O dua arah dan fungsi khusus.

Page 14: PURWARUPA KALKULATOR SEDERHANA

Port 2 sedang digunakan untuk menulis data pada LCD. Juga, P1.0 pin

digunakan sebagai RS (Register Select untuk LCD) dan P1.1 pin digunakan

sebagai E (Aktifkan pin untuk LCD).

Setiap LCD 16x2 dapat digunakan di sini yang memiliki kontroler

HD44780U di dalamnya. Misalnya, JHD162A LCD dapat digunakan dengan kode

ini dengan mudah.

Sebuah kristal 11,0592 MHz digunakan di sini. Kita dapat menggunakan

nilai kristal dari 3 sampai 24MHz dengan 8051. Seperti yang kita tahu bahwa

8051 kontroler mikro memiliki arsitektur yang menjalankan instruksi dalam 12

siklus CPU [1], maka kristal ini 11.0592MHz membuat ini berjalan pada 8051

0,92 MIPS (Million instruksi per detik).

Listing Program Interface LCD 8bit :

#include<reg51.h>

//Function declarations

void cct_init(void);

void delay(int);

void lcdinit(void);

void writecmd(int);

void writedata(char);

void ReturnHome(void);

//Pin description

/*

P2 is data bus // pena P2 sebagai data bus

P1.0 is RS // pena P1.0 sebagai RS

P1.1 is E // pena P1.1 sebagai E

*/

// Defines Pins

sbit RS = P1^0;

sbit E = P1^1;

// Main program

Page 15: PURWARUPA KALKULATOR SEDERHANA

void main(void)

{

cct_init(); //menjadikan semua port nol

lcdinit(); //menginisialisasi LCD

writedata('H'); //memasukan huruf “H”

writedata('e'); //memasukan huruf “e”

writedata('l'); //memasukan huruf “l”

writedata('l'); //memasukan huruf “l”

writedata('o'); //memasukan huruf “0”

writedata(' '); //memberikan spasi

writedata('W'); //memasukan huruf “W”

writedata('o'); //memasukan huruf “o”

writedata('r'); //memasukan huruf “r”

writedata('l'); //memasukan huruf “l”

writedata('d'); //memasukan huruf “d”

writedata('!'); //memasukan huruf “!”

ReturnHome(); //Kembali ke posisi 0

while(1)

{

}

}

void cct_init(void)

{

P0 = 0x00; //tidak digunakan

P1 = 0x00; //tidak digunakan

P2 = 0x00; //digunakan sebagai port data

P3 = 0x00; //digunakan untuk meng-generate E dan Rs

}

void delay(int a)

{

int i;

for(i=0;i<a;i++); //null statement

}

void writedata(char t)

{

RS = 1; // => RS = 1

P2 = t; //Data transfer

E = 1; // => E = 1

delay(150);

Page 16: PURWARUPA KALKULATOR SEDERHANA

E = 0; // => E = 0

delay(150);

}

void writecmd(int z)

{

RS = 0; // => RS = 0

P2 = z; //Data transfer

E = 1; // => E = 1

delay(150);

E = 0; // => E = 0

delay(150);

}

void lcdinit(void)

{

///////////// Reset process from datasheet /////////

delay(15000);

writecmd(0x30);

delay(4500);

writecmd(0x30);

delay(300);

writecmd(0x30);

delay(650);

/////////////////////////////////////////////////////

writecmd(0x38); //function set

writecmd(0x0c); //display on,cursor off,blink off

writecmd(0x01); //clear display

writecmd(0x06); //entry mode, set increment

}

void ReturnHome(void) // Kembali ke posisi 0

{

writecmd(0x02);

delay(1500);

}

Dalam kode utama, fungsi cct_init ()disebut di awal. Fungsi ini

membuat semua port sama dengan nol. Setelah itu, LCD diinisialisasi dengan

menggunakan fungsi lcdinit (). Fungsi writedata ('H') menulis 'H'

Page 17: PURWARUPA KALKULATOR SEDERHANA

karakter pada layar LCD. Demikian pula, karakter lain ditulis di layar. Dengan

cara ini, "Hello World!" pesan ditampilkan pada LCD. Fungsi RETURNHOME ()

membuat kursor dari LCD untuk kembali ke lokasi 0, yang merupakan posisi kiri

atas pada layar LCD.

Fungsi writedata () digunakan untuk menulis karakter pada LCD.

Misalnya, writedata ('H'); menulis 'H' pada LCD. writecmd ()

function digunakan untuk menulis perintah ke LCD. Dan fungsi lcdinit

()menginisialisasi LCD dengan memberikan perintah menginisialisasi diperlukan

untuk mengaktifkan LCD di atas.

Hasil nya :

Gambar 15 Hasil Percobaan Listing tanpa inputan

Page 18: PURWARUPA KALKULATOR SEDERHANA

5.2 Rangkaian Interface Keypad

Gambar 16 Rangkaian Skematik Keypad

Rangkaian yang digunakan adalah sebuah interface keypad small

calculator, ketika kita tekan tombol apa saja pada keypad maka nilai yang

ditampilkan pada LCD.

Gambar 17 Hubungan port I/O mikrokontroler dengan kaki keypad

Pada gambar diatas terlihat dengan jelas, pada port 1 mikrokontroler

terhubung dengan kaki – kaki pada LCD.

Page 19: PURWARUPA KALKULATOR SEDERHANA

Adapun fungsi dari tiap kaki dari LCD adalah sebagai berikut :

Pin RowA-RowD : Berfungsi sebagai jalur bus data (memberikan data

pada baris di keypad)

Pin C1-C4 : Berfungsi sebagai jalur bus data (memberikan data pada

kolom di keypad)

Sebuah kristal 11,0592 MHz digunakan di sini. Kita dapat menggunakan

nilai kristal dari 3 sampai 24MHz dengan 8051. Seperti yang kita tahu bahwa

8051 kontroler mikro memiliki arsitektur yang menjalankan instruksi dalam 12

siklus CPU, maka kristal ini 11.0592MHz membuat ini berjalan pada 8051 0,92

MIPS (Million instruksi per detik).

Port 2 sedang digunakan untuk menulis data pada LCD. Juga, P3.7 pin

digunakan sebagai RS (Register Select untuk LCD) dan P3.6 pin digunakan

sebagai E (Aktifkan pin untuk LCD). Port 1 digunakan di sini untuk antarmuka

keypad. P1.0 sampai P1.3 pin yang digunakan untuk baris dan P1.4 sampai P1.7

digunakan untuk kolom keypad.

Gambar berikut ini menunjukkan tugas pin dalam kode. Anda dapat

dengan mudah mengganti pin apapun yang dibutuhkan oleh sirkuit Anda, hanya

dengan perubahan ini tugas pin. Sebagai contoh, untuk mengubah pin RS P3.7

dari pin ke pin P3.0 hanya mengubah "Sbit RS = P3 ^ 7," sejalan dengan "Sbit RS

= P3 ^ 0;".

Listing Program Interface Keypad :

#include<reg51.h>

//Function declarations

void cct_init(void);

void delay(int);

void lcdinit(void);

void writecmd(int);

void writedata(char);

Page 20: PURWARUPA KALKULATOR SEDERHANA

void Return(void);

char READ_SWITCHES(void);

char get_key(void);

//Pin description

/*

P2 is data bus

P3.7 is RS

P3.6 is E

P1.0 to P1.3 are keypad row outputs

P1.4 to P1.7 are keypad column inputs

*/

// Define Pins

sbit RowA = P1^0; //RowA

sbit RowB = P1^1; //RowB

sbit RowC = P1^2; //RowC

sbit RowD = P1^3; //RowD

sbit C1 = P1^4; //Column1

sbit C2 = P1^5; //Column2

sbit C3 = P1^6; //Column3

sbit C4 = P1^7; //Column4

sbit E = P3^6; //E pin for LCD

sbit RS = P3^7; //RS pin for LCD

// Main program

int main(void)

{

char key; // char tombol untuk menjaga catatan tombol

ditekan

cct_init(); // Membuat pin input dan output yang diperlukan

lcdinit(); // Menginisialisasi LCD

while(1)

{

key = get_key(); // mendapatkan tombol yang ditekan

writecmd(0x01); // Clear screen

writedata(key); // Echo tombol ditekan ke LCD

Page 21: PURWARUPA KALKULATOR SEDERHANA

}

}

void cct_init(void)

{

P0 = 0x00; //tidak digunakan

P1 = 0xf0; // digunakan untuk menghasilkan output dan

mengambil masukan dari Keypad

P2 = 0x00; //used as data port for LCD

P3 = 0x00; //used for RS and E

}

void delay(int a)

{

int i;

for(i=0;i<a;i++); //null statement

}

void writedata(char t)

{

RS = 1; // This is data

P2 = t; //Data transfer

E = 1; // => E = 1

delay(150);

E = 0; // => E = 0

delay(150);

}

void writecmd(int z)

{

RS = 0; // This is command

P2 = z; //Data transfer

E = 1; // => E = 1

delay(150);

E = 0; // => E = 0

delay(150);

}

void lcdinit(void)

{

///////////// Reset process from datasheet /////////

delay(15000);

writecmd(0x30);

delay(4500);

Page 22: PURWARUPA KALKULATOR SEDERHANA

writecmd(0x30);

delay(300);

writecmd(0x30);

delay(650);

/////////////////////////////////////////////////////

writecmd(0x38); //function set

writecmd(0x0c); //display on,cursor off,blink off

writecmd(0x01); //clear display

writecmd(0x06); //entry mode, set increment

}

void Return(void) //Return to 0 location on LCD

{

writecmd(0x02);

delay(1500);

}

char READ_SWITCHES(void)

{

RowA = 0; RowB = 1; RowC = 1; RowD = 1; //Test Row A

if (C1 == 0) { delay(10000); while (C1==0); return '7'; }

if (C2 == 0) { delay(10000); while (C2==0); return '8'; }

if (C3 == 0) { delay(10000); while (C3==0); return '9'; }

if (C4 == 0) { delay(10000); while (C4==0); return '/'; }

RowA = 1; RowB = 0; RowC = 1; RowD = 1; //Test Row B

if (C1 == 0) { delay(10000); while (C1==0); return '4'; }

if (C2 == 0) { delay(10000); while (C2==0); return '5'; }

if (C3 == 0) { delay(10000); while (C3==0); return '6'; }

if (C4 == 0) { delay(10000); while (C4==0); return 'x'; }

RowA = 1; RowB = 1; RowC = 0; RowD = 1; //Test Row C

if (C1 == 0) { delay(10000); while (C1==0); return '1'; }

if (C2 == 0) { delay(10000); while (C2==0); return '2'; }

if (C3 == 0) { delay(10000); while (C3==0); return '3'; }

if (C4 == 0) { delay(10000); while (C4==0); return '-'; }

Page 23: PURWARUPA KALKULATOR SEDERHANA

RowA = 1; RowB = 1; RowC = 1; RowD = 0; //Test Row D

if (C1 == 0) { delay(10000); while (C1==0); return 'C'; }

if (C2 == 0) { delay(10000); while (C2==0); return '0'; }

if (C3 == 0) { delay(10000); while (C3==0); return '='; }

if (C4 == 0) { delay(10000); while (C4==0); return '+'; }

return 'n'; // Berarti tidak ada tombol telah ditekan

}

char get_key(void) //mendapatkan tombol(masukan dari user)

{

char key = 'n'; // mengasumsikan bahwa tidak ada tombol

ditekan

while(key=='n') //tunggu sampai tombol ditekan

key = READ_SWITCHES(); //memindai tombol lagi

return key; //ketika tombol ditekan kemudian kembali

}

Cara mendeteksi tombol yang ditekan?

Ketika tombol 1 ditekan maka kawat RowC akan terhubung dengan kawat

C1 di dalam tombol. Demikian pula, ketika tombol ditekan maka 9 kawat RowA

akan terhubung dengan kawat C3. Perilaku ini berlaku untuk semua tombol. Lalu

pertanyaan selanjutnya adalah, bagaimana mendeteksi perilaku ini dalam kode

mikro-controller?

Kita bisa mendeteksi nilai kunci ditekan dalam mikrokontroler dengan

menggunakan "Scanning Algorithm Code". Algoritma ini ditulis dengan nama

fungsi 'READ_SWITCHES ()' dalam kode.

Dalam algoritma pemindaian (yaitu READ_SWITCHES () function), kita

menguji Row Sebuah kunci pertama dengan membuat kawat RowA sama dengan

nol dan membuat baris lainnya satu. Kemudian setiap kolom diperiksa jika sama

dengan nol. Kemudian RowB kawat dibuat nol, sementara membuat semua baris

Page 24: PURWARUPA KALKULATOR SEDERHANA

lain satu. Kemudian lagi setiap kolom diperiksa untuk mendeteksi jika ada kunci

RowB ditekan. Pola ini diulang untuk setiap baris. Jika tidak ada tombol yang

ditekan, maka nilai 'n' dikembalikan dari fungsi.

Misalnya, jika tombol 7 ditekan ketika kode ini sedang dieksekusi maka

C1 akan menjadi nol (Karena hubungan keypad baris yang sesuai dengan kawat

kolom). "if (C1 == 0)" Kondisi akan menjadi benar dan ada penundaan

kecil dari beberapa mikro detik setelah itu "while (C1 == 0);" Pernyataan

hadir. Pernyataan ini pada dasarnya membuat kontroler untuk menunggu sampai

tombol tidak lagi ditekan, untuk menghilangkan kemungkinan membaca salah

satu tombol yang ditekan berkali-kali. Setelah itu, nilai dari tombol (yaitu ''7

dalam kasus ini) dikembalikan dari fungsi.

Fungsi "READ_SWITCHES ()" pada dasarnya digunakan dalam fungsi

"get_key ()" (yang digunakan dalam fungsi utama). Fungsi ini juga

ditunjukkan pada listing di atas. Fungsi ini menunggu sampai tombol ditekan

(yaitu fungsi ini adalah fungsi memblokir). Ketika tombol ditekan maka nilai

tombol ditekan dikembalikan dari fungsi.

Sedangkan dalam fungsi utama, LCD diinisialisasi dan setelah kode yang

memasuki while (1) loop. Dalam lingkaran ini, fungsi get_key ()membaca

setiap nilai kunci ditekan dari keypad. Ketika tombol ditekan, maka nilai dari

kunci disimpan dalam variabel 'key' seperti yang ditunjukkan dalam kode di atas.

Setelah itu, layar LCD akan dihapus. Dan nilai kunci ini ditampilkan pada layar

menggunakan fungsi writedata () (yang menulis karakter yang diberikan

pada LCD).

Page 25: PURWARUPA KALKULATOR SEDERHANA

Hasilnya :

Gambar 18 Hasil dari penyelarasan keypad dengan LCD

Page 26: PURWARUPA KALKULATOR SEDERHANA

5.3 Rangkaian Kalkulator Sederhana

Gambar 19 Rangkaian Skematik Kalkulator Sederhana

Pada dasarnya rangkaian ini merupakan penggabungan dari antarmuka

LCD 8bit dengan keypad, dengan diberi perintah atau code agar dapat melakukan

operasi penjumlahan, pengurangan, pembagian maupun perkalian. Hal ini

memanfaatkan kelebihan dari mikroprosesor Atmel 89c51 yang mempunyai

kemampuan untuk melakukan operasi perkalian, pembagian dan Operasi Boolean.

Fitur dari Kalkulator Sederhana :

1. Dapat memberikan masukan satu digit dari 0 sampai 9.

2. Dapat menekan 'ON / C' tombol kapan saja untuk me-reset kalkulator.

3. 4 fungsi diimplementasikan yaitu perkalian selain itu, penjumlahan,

pengurangan dan pembagian.

4. Pesan kesalahan ditampilkan jika input yang salah terdeteksi. Misalnya,

jika kalkulator mengharapkan angka, tetapi tombol fungsi ditekan maka

pesan 'Masukan Salah' ditampilkan. Demikian pula, pesan 'Fungsi Salah'

ditampilkan jika kunci yang salah ditekan bukannya tombol fungsi.

Page 27: PURWARUPA KALKULATOR SEDERHANA

Listing Main Program :

// ***********************************************************

// Main program

//

int main(void)

{

char key; //key char untuk menjaga catatan tombol yang ditekan

int num1 = 0; //First number

char func = '+';// Fungsi yang harus dilakukan antara dua nomor

int num2 = 0; //Second number

cct_init(); // Membuat pin input dan output yang diperlukan

lcdinit(); //Inisialisasi LCD

while(1)

{

//mendapatkan angka pertama

key = get_key();

writecmd(0x01); //clear display

writedata(key); //Echo the key pressed to LCD

num1 = get_num(key); // mendapatkan nomor int dari nilai char, dan akan mengecek

untuk input salah atau nggak

if(num1!=Error) // jika input benar maka dilanjutkan, num1==error berarti masukan salah

{

//get function

key = get_key();

writedata(key); //Echo the key pressed to LCD

func = get_func(key); //mengecek fungsi yang sala

if(func!='e') // jika input benar maka

dilanjutkan, func=='e'

berarti masukan salah

{

//mendapatkan angka kedua

key = get_key();

writedata(key); //Echo the key pressed to LCD

num2 = get_num(key); // mendapatkan nomor int dari nilai

char, dan akan

mengecek untuk

Page 28: PURWARUPA KALKULATOR SEDERHANA

input salah atau

nggak

if(num2!=Error) // jika input benar maka dilanjutkan, num2==error

berarti masukan salah

{

//memberikan operasi yang akan dilakukan

key = get_key();

writedata(key);//Echo the key pressed to LCD

if(key == '=') //jika = maka akan di proses

{

switch(func) //switch on function

{

case '+': disp_num(num1+num2); break;

case '-': disp_num(num1-num2); break;

case 'x': disp_num(num1*num2); break;

case '/': disp_num(num1/num2); break;

}

}

else //tombol lainnya berarti masukan

kesalahan yang salah

{

if(key == 'C') //if clear screen is

pressed then clear

screen and reset

writecmd(0x01); //Clear Screen

else

DispError(0); //Display wrong input

error

}

}

}

}

}

}

Dalam kode utama, pertama-tama LCD diinisialisasi. Kemudian kode

menunggu untuk memasukan angka dari keypad. Setelah mendapatkan angka ini

Page 29: PURWARUPA KALKULATOR SEDERHANA

layar LCD dihapus. Dan jumlah ini akan ditampilkan pada LCD. Setelah itu, kode

menunggu tombol fungsi dari pengguna. Setelah mendapatkan tombol fungsi,

kode menunggu angka kedua dan kemudian tanda sama. Setelah mendapatkan

tanda sama, sesuai dengan fungsi yang diinginkan hasilnya dihitung dan

ditampilkan pada layar.

Hasilnya :

Gambar 20 Hasil Simulasi perkalian

Page 30: PURWARUPA KALKULATOR SEDERHANA

Gambar 20 Hasil Simulasi penjumlahan

Gambar 20 Hasil Simulasi pengurangan

Page 31: PURWARUPA KALKULATOR SEDERHANA

Gambar 20 Hasil Simulasi pembagian

Page 32: PURWARUPA KALKULATOR SEDERHANA

6. Kesimpulan

1. Perbedaan antara mikroprosesor dan mikrokontroler adalah sebagai

berikut :

a. Mikroprosesor : adalah bagian dari CPU dari sebuah computer,

tanpa memori tanpa I/O dan Peripheral. Contoh 8088 dan 80x86.

Untuk dapat bekerja mikroprosesor membutuhkan perangkat

pendukung berupa RAM, ROM, dan I/O.

b. Mikrokontroler atau yang kita kenal dengan Single Chip

mengkombinasikan CPU dengan memori dan I/O. Dengan

demikian suatu mikrokontroler tidak membutuhkan tambahan

RAM, ROM dan I/O.

2. Simulasi rangkaian elektronik dengan ISIS Proteus, dapat memberikan

gambaran tentang sistem rangkaian yang akan dibuat.

3. ISIS Proteus hanya dapat membaca file bertipe Hex dan Coff.

4. Mikrokontroler 89c51 memiliki osilator internal bagi sumber clock CPU.

5. Mikrokontroler Atmel memiliki kemampuan melaksanakan operasi

perkalian, pembagian dan Operasi Boolean

Page 33: PURWARUPA KALKULATOR SEDERHANA

DAFTAR PUSTAKA

1. Axelson, Jan. 2005. The Microcontroller Idea Book: Circuits Programs &

Applications Featuring the 8052-BASIC Single-Chip.Lakeview Research.

2. Chacha, Ir P. Insap Santosa, MSC, Bagaimana mendayagunakan sepasang

komputer, Andi Offset, 1995

3. Data Sheet. http\\:www.atmel.com

4. David Calcutt, Fred Cowan and Hassan Parchizadeh. 2004. 8051

Microcontrollers An Applications-Based Introduction. Elsevier's Science

and Technology Right Departement of Oxford.

5. Gadre, Dhananjay V. 2006. Programming And Customizing The Avr

Microcontroller

6. Moh. Ibnu Malik & Anistradi, Bereksprimen dengan Mikrokontroler 8031,

PT. ELEX MEDIA KOMPUTINDO, 1999

7. Myke Predko, Programing and Customizing the 8051 microcontroler,

McGraw-Hill, 1999

8. Paulus Andi Nalwan, teknik antarmuka dan pemrograman mikrokontroller

AT89C51, Elex Media Komputindo

9. Putra, Agfianto Eko. 2010. Tips dan Trik Mikrokontroler AT89 dan AVR

:Tingkat Pemula hingga Lanjut. Gavamedia. Yogyakarta.

10. Putra, Agfianto Eko. 2010. Belajar Mikrokontroler AT89C51/52/55 (Teori

dan Aplikasi). Gavamedia. Yogyakarta.

11. Sencer Yeralan, Ashutosh Ahluwalia, Programing and Interfacing the

8051 Microntroller, addison-Wesley Publishing Company, 1995