• Tidak ada hasil yang ditemukan

Laporan Tugas Akhir Kuliah Mikrokontrole

N/A
N/A
Protected

Academic year: 2018

Membagikan "Laporan Tugas Akhir Kuliah Mikrokontrole"

Copied!
16
0
0

Teks penuh

(1)

Laporan Tugas Akhir Kuliah Mikrokontroler tahun 2013

Tik-Tik [D]eVolution

Disusun oleh :

KELOMPOK SATRIA BAJA HITAM

Salahuddin Muhammad

(11/316882/PA/14002)

Arif Abdul Aziz

(10/300541/PA/13297)

Muhammad Iqbal

(

10/297579/PA/13020)

Program Studi Elektronika dan Instumentasi

Jurusan Ilmu Komputer dan Elektronika

Fakultas Matematika dan Ilmu Pengetahuan Alam

Universitas Gadjah Mada

Yogyakarta

(2)

A.

Ringkasan Topik

Tik-Tik [D]eVolution adalah suatu permainan sederhana yang menuntut

keterampilan pemain untuk merespon dengan perintah yang ditunjukkan pada LCD

Graphic. Perintah tersebut adalah menekan tombol pada Keypad Matrix sesuai dengan

tanda panah yang muncul pada layar. Pemain akan diberikan jeda waktu pada saat

keluarnya tanda panah untuk menekan tombol pada Keypad Matrix. Pada jeda waktu

tersebut tombol yang pertama kali ditekanlah yang akan dilihat apakah pemain menekan

tombol dengan benar atau tidak. Pemain diberi batas maksimal menekan tombol dengan

salah sebanyak lima kali. Sehingga setelah pemain salah menekan tombol sebanyak lima

kali maka permainan akan berhenti.

Sistem permainan ini adalah survival, maksudnya tidak ada batasan waktu kapan

permainan akan berhenti. Yang membuat permainan berhenti adalah ketika pemain telah

melakukan lima kali kesalahan. Pada saat permainan dimulai, tanda panah yang muncul

pada LCD Graphic mempunyai jeda yang cukup lama. Akan tetapi semakin lama pemain

berhasil menekan tombol dengan benar, maka jeda pergantian tanda panah akan semakin

cepat.

Sistem penilaian akan dilakukan ketika pemain berhasil menekan tombol dengan

benar. Nilai tersebut akan dicatat pada 7segment yang terdapat pada learning board.

Untuk setiap nilai yang benar bernilai satu poin. Tidak ada pengurangan nilai ketika

pemain salah menekan tobol. Yang membedakan apakah pemain menekan tombol

dengan benar atau tidak adalah bunyi yang dihasilkan oleh Buzzer. Dengan demikian

pemain pemain akan tahu kapan dia berhasil menekan tombol dengan benar dan kapan

pemain salah menekan tombol.

B.

Rangakaian Mikrokontroler

(3)

Pada proyek tugas ini, digunakan berbagai macam perangkat yang sudah terdapat pada

learning board NUVOTON NUC 140. Perangkat yang digunakan adalah :

1.

LCD graphic

: sebagai penampil/display utama pada permainan. LCD graphic

akan menampilkan gambar anak panah dengan berbagai macam arah, yang di tampilkan

secara bergantian dalam waktu tertentu. Serta menampilkan jumlah toleransi kesalahan

sebanyak 5 bintang yang akan berkurang satu per satu ketika pemain melakukan

kesalahan dalam bermain. LCD akan menampilkan tiga kondisi permainan saat

berlangsung, yaitu: BENAR, SALAH, dan WAKTU HABIS.

2.

Seven segment

: sebagai penampil score / jumlah kebenaran.

3.

Tombol keypad

: sebagai inputan utama pada permainan. Keypad yang di gunakan

antara lain nomor 2 untuk mewakili panah atas, nomor 4 mewakili panah kiri, nomor 5

mewakili tengah dengan symbol plus, nomor 6 mewakili panah kanan, dan nomor 8

mewakili panah bawah.

4.

Buzzer

: sebagai penanda saat tombol yang ditekan, benar atau salah.

Apabila benar akan ada tanda sebanyak 1 kali, dan apabila salah atau waktu habis maka

akan ada tanda sebanyak 3 kali.

Proses kerja nya adalah, mikrokontroler akan menampilkan melalui LCD, berbagai

macam gambar anak panah dengan berbagai macam arah yang di tampilkan secara bergantian

pada waktu tertentu. Saat salah satu panah keluar, maka pemain akan menekan tombol keypad

sesuai dengan anak panah yang di tekan olehnya. Bila tombol yang di tekan sesuai dengan arah

dari anak panah, maka mikrokontroler akan mengontrol seven segment untuk menambahkan

score dan menyalakan buzzer sebagai tanda jika tombol yang ditekan benar. Tatapi, bila tombol

yang ditekan salah, maka mikrokontroler akan memberikan tanda salah dengan buzzer, serta

menambah kesalahan. Jika jumlah kesalahan yang dilakukan mencapai 5 kali. Maka

mikrokontroler menghentkan permainan dan permainan selesai.

NUVOTON NUC 140

Mikrokontroler ( ARM

CORTEX M0)

Keypad Matrix

(4)

C.

FLowChart

TIDAK

YA

TIDAK

YA

mulai

LCD

menampilkan

gambar panah

Keypad matrik

di tekan

tombol yang

ditekan sesuai

dengan yang di

tampilkan pada

LCD

Score bertambah

Kesalahan

bertambah

Jumlah

kesalahan 5

(5)

D.

Listing dan Penjelasan

#include "NUC1xx.h" #include "DrvSYS.h" #include "DrvGPIO.h" #include "LCD_Driver.h" #include "ScanKey.h" #include "Seven_Segment.h"

int j, k;

int i, angka, sat, pul, rat, rib; int angka1, sat1, pul1, rat1, rib1; int waktu = 300;

int a = 0; int nilai; int life = 5; unsigned char temp;

void panah_kanan(void) {

for(j=85; j>=55; j--) {

SetPACA(4,j); WriteData(255); }

SetPACA(5,62); WriteData(255); SetPACA(5,61); WriteData(127); SetPACA(5,60); WriteData(63); SetPACA(5,59); WriteData(31); SetPACA(5,58); WriteData(15); SetPACA(5,57); WriteData(7); SetPACA(5,56); WriteData(3); SetPACA(5,55); WriteData(1);

SetPACA(3,62); WriteData(255); SetPACA(3,61); WriteData(254); SetPACA(3,60); WriteData(252); SetPACA(3,59); WriteData(248);

Program ini menggunakan

library NUC1xxx.h,

DrvSYS.h, dan DrvGPIO.h

sebagai dasar.

LCD_Driver.h sebagai

library untuk mengakses

LCD. Scankey.h berfung

sebagai library untuk

mengakses keypad.

Seven_segment.h sebagai

library untuk mengakses 7

segment.

Terdapat 5 buah fungsi

yaitu panah atas, kanan,

kiri, bawah , dan tengah .

Masing-masing fungsi

tersebut menggambarkan

anak panah sesuai dengan

arahnya masing-masing,

dengan cara membuat

titik-titik pada setiap

kordinat di LCD grafik

sehingga membentuk

gambar arah panah dan

plus. Digunakan fungsi

SetPACA () sebagai

penentu koordinat pada

LCD dan fungsi WriteData

() yang berfungsi

(6)

SetPACA(3,58); WriteData(240); SetPACA(3,57); WriteData(224); SetPACA(3,56); WriteData(192); SetPACA(3,55); WriteData(128);

SetPACA(4,54); WriteData(255); SetPACA(4,53); WriteData(126); SetPACA(4,52); WriteData(60); SetPACA(4,51); WriteData(24);

}

void panah_kiri(void) {

for(j=81; j>=51; j--) {

SetPACA(4,j); WriteData(255); }

SetPACA(5,74); WriteData(255); SetPACA(5,75); WriteData(127); SetPACA(5,76); WriteData(63); SetPACA(5,77); WriteData(31); SetPACA(5,78); WriteData(15); SetPACA(5,79); WriteData(7); SetPACA(5,80); WriteData(3); SetPACA(5,81); WriteData(1);

(7)

SetPACA(3,79); WriteData(224); SetPACA(3,80); WriteData(192); SetPACA(3,81); WriteData(128);

SetPACA(4,82); WriteData(255); SetPACA(4,83); WriteData(126); SetPACA(4,84); WriteData(60); SetPACA(4,85); WriteData(24);

}

void panah_atas(void) {

for(k=3;k<=5;k++) {

for(j=71; j>=64; j--) {

SetPACA(k,j); WriteData(255); }

}

SetPACA(2,71); WriteData(128); SetPACA(2,70); WriteData(192); SetPACA(2,69); WriteData(224); SetPACA(2,68); WriteData(240); SetPACA(2,67); WriteData(240); SetPACA(2,66); WriteData(224); SetPACA(2,65); WriteData(192); SetPACA(2,64); WriteData(128);

(8)

SetPACA(3,76); WriteData(240); SetPACA(3,77); WriteData(224); SetPACA(3,78); WriteData(192); SetPACA(3,79); WriteData(128);

SetPACA(3,63); WriteData(255); SetPACA(3,62); WriteData(254); SetPACA(3,61); WriteData(252); SetPACA(3,60); WriteData(248); SetPACA(3,59); WriteData(240); SetPACA(3,58); WriteData(224); SetPACA(3,57); WriteData(192); SetPACA(3,56); WriteData(128);

}

void panah_bawah(void) {

for(k=3;k<=5;k++) {

for(j=71; j>=64; j--) {

SetPACA(k,j); WriteData(255); }

}

(9)

SetPACA(5,63); WriteData(255); SetPACA(5,62); WriteData(127); SetPACA(5,61); WriteData(63); SetPACA(5,60); WriteData(31); SetPACA(5,59); WriteData(15); SetPACA(5,58); WriteData(7); SetPACA(5,57); WriteData(3); SetPACA(5,56); WriteData(1);

SetPACA(6,71); WriteData(1); SetPACA(6,70); WriteData(3); SetPACA(6,69); WriteData(7); SetPACA(6,68); WriteData(15); SetPACA(6,67); WriteData(15); SetPACA(6,66); WriteData(7); SetPACA(6,65); WriteData(3); SetPACA(6,64); WriteData(1);

}

void panah_tengah(void) {

for(j=83; j>=53; j--) {

SetPACA(4,j); WriteData(255); }

for(k=3;k<=5;k++) {

for(j=71; j>=64; j--) {

SetPACA(k,j); WriteData(255); }

(10)

void kanan(void) {

clr_all_pannal(); panah_kanan(); score(); nyawa();

for(i=0;i<=waktu;i++) {

temp=Scankey(); if (temp==6)

{

print_lcd(3,"BENAR"); close_seven_segment(); buzzer_benar();

DrvSYS_Delay(2000000); a++;

random(); }

if ((temp==2)||(temp==4)||(temp==5)||(temp==8)) {

print_lcd(3," SALAH");

close_seven_segment(); buzzer_salah();

DrvSYS_Delay(2000000); life--;

random(); }

score(); }

waktu_habis(); }

void kiri(void) {

clr_all_pannal(); panah_kiri(); score(); nyawa();

for(i=0;i<=waktu;i++) {

temp=Scankey(); if (temp==4)

{

print_lcd(3,"BENAR"); close_seven_segment(); buzzer_benar();

DrvSYS_Delay(2000000); a++;

random(); }

if ((temp==2)||(temp==6)||(temp==5)||(temp==8)) {

print_lcd(3," SALAH");

Terdapat 5 buah fungsi

selanjutnya yaitu: kanan(),

kiri(), atas(), bawah(), dan

tengah().

Fungsi kanan() memanggil

fungsi panah_kanan()

untuk menampilkan

gambar panah kanan.

Memanggil fungsi score()

untuk menampilkan score

pada seven segment.

Memanggil fungsi nyawa()

untuk menampikan

jumlah toleransi

kesalahan pada LCD. Pada

fungsin ini menggunakan

perula ga for ya g

berulang selama waktu

tertentu yang semakin

lama semakin cepat.

Didalam perulangan ini

terdapat dua kondisi yaitu

jika tombol yang di tekan

adalah tombol 6 maka

fungsi akan menampilkan

kata BENAR pada LCD lalu

menjalankan fungi

buzzer_benar(),

mengincrement nilai dari

variable a lalu ke bali

ke fungsi random().

Kondisi yang kedua ada

bila yang di tekan tombol

selain angka 6 maka

fungsi akan menampilkan

kata SALAH pada LCD lalu

menjalankan fungsi

buzzer_salah(),

(11)

close_seven_segment(); buzzer_salah();

DrvSYS_Delay(2000000); life--;

random(); }

score(); }

waktu_habis(); }

void atas(void) {

clr_all_pannal(); panah_atas(); score(); nyawa();

for(i=0;i<=waktu;i++) {

temp=Scankey(); if (temp==2)

{

print_lcd(3,"BENAR"); close_seven_segment(); buzzer_benar();

DrvSYS_Delay(2000000); a++;

random(); }

if ((temp==6)||(temp==4)||(temp==5)||(temp==8)) {

print_lcd(3," SALAH");

close_seven_segment(); buzzer_salah();

DrvSYS_Delay(2000000); life--;

random(); }

score(); }

waktu_habis(); }

void bawah(void) {

clr_all_pannal(); panah_bawah(); score(); nyawa();

for(i=0;i<=waktu;i++) {

(12)

{

print_lcd(3,"BENAR"); close_seven_segment(); buzzer_benar();

DrvSYS_Delay(2000000); a++;

random(); }

if ((temp==2)||(temp==4)||(temp==5)||(temp==6)) {

print_lcd(3," SALAH");

close_seven_segment(); buzzer_salah();

DrvSYS_Delay(2000000); life--;

random(); }

score(); }

waktu_habis(); }

void tengah(void) {

clr_all_pannal(); panah_tengah(); score();

nyawa();

for(i=0;i<=waktu;i++) {

temp=Scankey(); if (temp==5)

{

print_lcd(3,"BENAR"); close_seven_segment(); buzzer_benar();

DrvSYS_Delay(2000000); a++;

random(); }

if ((temp==2)||(temp==4)||(temp==8)||(temp==6)) {

print_lcd(3," SALAH");

close_seven_segment(); buzzer_salah();

DrvSYS_Delay(2000000); life--;

random(); }

score(); }

(13)

void nyawa(void) {

if(life == 5)print_lcd(0,"LIFE : *****"); if(life == 4)print_lcd(0,"LIFE : **** "); if(life == 3)print_lcd(0,"LIFE : *** "); angka=angka/10; pul = angka%10; angka=angka/10; rat = angka%10; angka=angka/10; rib = angka%10; sat1 = angka1%10; angka1=angka1/10; pul1 = angka1%10; angka1=angka1/10; rat1 = angka1%10; angka1=angka1/10; rib1 = angka1%10;

close_seven_segment(); show_seven_segment(0,sat1); DrvSYS_Delay(1000);

Fungsi nyawa() akan

menampilkan gambar

bi ta g * pada LCD

sesuai dengan jumlah

variable life ya g

tersisa. Bila jumlah

variable life = 0 aka

akan menjalankan fungsi

mati();

Fungsi random() akan

melakukan perandoman

bedasarkan Waktu

tempuh dari mulai panah

muncul sampai tombol

tertekan. Waktu tempuh

yang di perlukan akan

menentukan gambar

panah selanjutnya yang

akan tampil. Sehingga

perbedaan waktu tempuh

yang di perlukan akan

merandom arah panah

yang berbeda-beda. Pada

fungsi ini durasi dari

pemucunculan arah

panah akan di kurangi

sebanyak 5 setiap

putaran, dan di berikan

batas waktu minimal yaitu

sebesar 50.

Fungsi score() akan

menampilkan nilai dari

jumlah benar (variable a)

yang di tampilkan pada 4

buah seven segment yang

masing-masing mewakili

satuan, puluhan, ratusan,

ribuan. Untuk

memudahkan penampilan

score pada seven segment

di gunakan library

(14)

close_seven_segment(); show_seven_segment(1,pul1); DrvSYS_Delay(1000);

close_seven_segment(); show_seven_segment(2,rat1); DrvSYS_Delay(1000);

close_seven_segment(); show_seven_segment(3,rib1); DrvSYS_Delay(1000);

}

void mati(void) {

clr_all_pannal(); while(1)

{

score();

print_lcd(1," GAME OVER"); }

}

void waktu_habis(void) {

clr_all_pannal(); close_seven_segment();

print_lcd(1, " WAKTU HABIS "); buzzer_salah();

life--;

DrvSYS_Delay(2000000); score();

nyawa(); }

void buzzer_benar(void) {

DrvGPIO_ClrBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_SetBit(E_GPB,11); }

void buzzer_salah(void) {

DrvGPIO_ClrBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_SetBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_ClrBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_SetBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_ClrBit(E_GPB,11); DrvSYS_Delay(100000); DrvGPIO_SetBit(E_GPB,11); DrvSYS_Delay(100000);

Fungsi mati() di panggil

saat variable life = 0

sehingga membuat

permainan berakhir.

Fungsi ini akan menahan

proses dari program

dengan menggunakan

perulangan while(1), dan

menampilkan tulisan

GAME OVER dan

menjalankan fungsi

score().

Fungsi waktu_habis() akan

menampilkan tulisan pada

LCD WAKTU HABI“ lalu

menjalankan fungsi

buzzer_salah()

mendecrement variable

life e jala ka fu gsi

score() dan nyawa().

Fungsi buzzer_benar()

akan menghidupkan

buzzer selama 100000 us

lalu mematikannya.

(15)

}

void pembuka(void) {

print_lcd(1, " TIK TIK "); print_lcd(2, " [D]evolution");

DrvSYS_Delay(2500000); DrvSYS_Delay(2500000); DrvSYS_Delay(2500000); clr_all_pannal();

print_lcd(0, " TUGAS AKHIR "); print_lcd(1, " MIKROKONTROLER"); print_lcd(2, " BY : KESATRIA"); print_lcd(3, " BAJA HITAM");

DrvSYS_Delay(2500000); DrvSYS_Delay(2500000); clr_all_pannal();

print_lcd(1, "STARTING ON..."); print_lcd(2, " 5");

DrvSYS_Delay(2500000); print_lcd(2, " 4"); DrvSYS_Delay(2500000); print_lcd(2, " 3"); DrvSYS_Delay(2500000); print_lcd(2, " 2"); DrvSYS_Delay(2500000); print_lcd(2, " 1"); DrvSYS_Delay(2500000); clr_all_pannal();

print_lcd(1, " GO...!!! "); DrvSYS_Delay(2500000);

}

int main(void) {

/* Unlock the protected registers */

UNLOCKREG();

/* Enable the 12MHz oscillator oscillation */

DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1);

/* Waiting for 12M Xtal stalble */

//SysTimerDelay(5000);

DrvSYS_Delay(5000);

/* HCLK clock source. 0: external 12MHz; 4:internal 22MHz RC oscillator */

DrvSYS_SelectHCLKSource(0);

/*lock the protected registers */

LOCKREG();

Fungsi pembuka() akan

menampilkan kata-kata

pembuka pada game dan

melakukan counting down

dari 5 sampai 1 untuk

memulai permainan.

(16)

DrvSYS_SetClockDivider(E_SYS_HCLK_DIV, 0); /* HCLK clock frequency = HCLK clock source / (HCLK_N + 1) */

Initial_pannel(); //call initial pannel function

clr_all_pannal();

DrvGPIO_ClrBit(E_GPD,14);

OpenKeyPad();

while(1) {

pembuka(); random(); }

Gambar

gambar panah
gambar panah kanan.

Referensi

Dokumen terkait

Mengingat masih sedikitnya senyawa kumarin dari kulit batang tumbuhan kecapi yang dilaporkan maka dalam penelitian ini dilakukan isolasi senyawa kumarin serta uji

Desain simbol garis pada peta skematik Trans Jogja ini menggunakan variabel visual berupa warna karena lebih mudah untuk digunakan dalam membedakan jalur yang satu dengan

Terdapat banyak kesalahan dalam pengujian data uji, dari analisa peneliti kesalahan disebabkan karena dalam pengambilan data kurang mendapatkan hasil dan bentuk

Dengan melihat kebijakan kepemilikan asing yang meluas dan dikawatirkan membahayakan perbankan nasional, maka Bank Indonesia pada tahap berikutnya menerbitkan kebijakan

Insitusi tempat penulis bekerja adalah berasal dari 25 kementerian dan institusi penelitian, serta 42 dari perguruantinggi negeri / swasta, dan 4 perguruan tinggi luar

Berdasarkan hasil penelitian, dimana bentuk komunikasi interpersonal antara Koordinator dan anggota pengelola RPTRA Kelurahan Galur dalam rangka meningkatkan kinerja

Berdasarkan pengujian hipotesis selisih skor rata-rata pengetahuan di kelas eksperimen dan kelas kontrol diketahui bahwa tidak terdapat pengaruh penyuluhan NAPZA metode

Untuk pegawai non-darurat : Tidak boleh melakukan tindakan yang menyangkut risiko pribadi atau tanpa pelatihan yang sesuai.. Jaga agar personil yang tidak berkepentingan dan