View
984
Download
6
Category
Preview:
Citation preview
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
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
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
Gambar 1 Blok Diagram Mikrokontroler
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
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))
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
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.
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.
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
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
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
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.
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
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);
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'
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
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.
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);
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
}
}
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);
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 '-'; }
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
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).
Hasilnya :
Gambar 18 Hasil dari penyelarasan keypad dengan LCD
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.
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
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
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
Gambar 20 Hasil Simulasi penjumlahan
Gambar 20 Hasil Simulasi pengurangan
Gambar 20 Hasil Simulasi pembagian
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
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
Recommended