APLIKASI

Minggu, 07 April 2013

Array 3 Dimensi Pada Codevision Avr


Array? Apaan sih array itu, 
ARRAY bukan "ALLAY", kecuali untuk orang cadel.. hehhehehe.
Array adalah himpunan elemen (variable) dengan tipe yang sama dan disimpan secara berurutan dalam memory yang ditandai dengan memberikan index pada suatu nama variable. Contohnya, kita dapat menyimpan 5 nilai dengan tipe int tanpa harus mendeklarasikan 5 identifier variabel yang berbeda. Perhatikan contoh dibawah ini  :

Inisialisasi Array
Int uangJajan [5]={ 100,200,300,400,500 };
Dan nilai array tergantung dari indeksnya

uangJajan [0] nilainya 100
uangJajan [1] nilainya 200
uangJajan [2] nilainya 300
uangJajan [3] nilainya 400
uangJajan [4] nilainya 100

coba tanpa array..
Int uangJajan_0 = 100
Int uangJajan_1 = 200
Int uangJajan_2 = 300
Int uangJajan_3 = 400
Int uangJajan_4 = 500

5 kali inisialisasi,,
kalo pusing sama teori langsung kita praktekkan saja. Agar dari praktek menjadi Teori….

Ok saya contohkan array 3 dimensi untuk menampilkan nilai di 7 segment, lah kok 7 segment saja pakai array 3 dimensi?? Siapa tau ada dosen yang memberikan tugas seperti ini, lumayan lah tinggal copas..

7 segment? Sudah tau kan 7 segment itu apa? Kalau belum silakan cari referensinya di mbah google.
 
Gambar d atas keterangan pin dari 7 segment.
Dan saya buat data Tabel untuk menyalakan 7 segment.


 
Jadi pada saat kita menulis PORTC=0x66, maka 7 segment akan membentuk angka “4”
Lewat simulasi proteus perhatikan gambar di bawah ini..!!


Berikut listing progam di Codevision Avr

1:  #include <mega16.h>   
2:  #include <delay.h>  
3:  //tabel untuk 7 segment  
4:  unsigned char s_segment [10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7D, 0x07, 0x7F,0x6f};  
5:  unsigned char data[1][2][10];  
6:  int ayam;  
7:  int bebek;  
8:  const int delay=500;  
9:  void main(void)  
10:  {  
11:  // inisialisasi port  
12:  DDRC=255;  
13:  for (ayam=0;ayam<10;ayam++){  
14:  data[0][0][ayam]=s_segment[ayam];  
15:  }  // akhir for  
16:  bebek=9;  
17:  for (ayam=0;ayam<10;ayam++){  
18:  data[0][1][ayam]=s_segment[bebek];  
19:  bebek--;  
20:  }  // akhir for  
21:  PORTC= data[0][0][9];  
22:  while (1)  
23:  {  
24:  for (ayam=0;ayam<10;ayam++){  
25:  PORTC=data[0][0][ayam];  
26:  delay_ms(delay);  
27:  } // akhir for  
28:  for (ayam=0;ayam<10;ayam++){  
29:  PORTC=data[0][1][ayam];  
30:  delay_ms(delay);  
31:  }   // akhir for  
32:  };  // akhir while(1)  
33:  };  // akhir void  

Penjelasan progam
 
Kita buat table untuk 7 segmentnya
unsigned char s_segment [10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7D, 0x07, 0x7F,0x6f};

s_segment[0]=0x3f angka 0
s_segment[1]=0x06 angka 1
.................
s_segment[9]=0x6f  angka 9

kita buat array 3 dimensi(siap2 pusing)
unsigned data[1][2][10];

berarti ada data[0] [0 dan 1][0  s/d 9 ]
selanjutnya kita pindahkan data table 7 segment untuk menghitung maju ke array

 for (ayam=0;ayam<10;ayam++){  
 data[0][0][ayam]=s_segment[ayam];  
 }  // akhir for  
 
Data[0][0][ayam]= data[0][0][ayam]=s_segment[ayam], berarti jika nillai ayam=0, maka pada saat mengeksekusi data[0][0][ayam] nilainya adalah 0x3f (s_segment[0]),
Jika nilai ayam=1
data[0][0][ayam] nilainya adalah 0x06 (s_segment[1])
Begitu juga seterusnya selama nilai variable ayam kurang dari 10.
selanjutnya kita pindahkan data table 7 segment untuk menghitung mundur ke array

 bebek=9;  
 for (ayam=0;ayam<10;ayam++){  
 data[0][1][ayam]=s_segment[bebek];  
 bebek--;  
 }  // akhir for  

data[0][1][ayam]=s_segment[bebek], sama seperti diatas, bedanya ada variable bebek.. coba perhatikan lagi di depan layar computer anda (Konsentrasi….!!!!!!!!).
nilai bebek = 9
berarti jika nilai ayam = 0, maka data[0][1][ayam]= 0x6f (s_segment[9])
bebek --, nilai bebek = bebek-1, berarti nilai bebek sekarang adalah 8..


jika nilai ayam = 1, maka data[0][1][ayam]= 0x7f (s_segment[8])
dst selama nilai variabel ayam kurang dari 10..

sekarang berarti ada 2 data
pertama data 7 segment untuk menghitung maju pada data[0][0] dan kedua data 7 segment untuk menghitung mundur data[0][1] .

Lah kok Cuma 2 tanda [], sebelumnya kan ada 3 tanda [],, silakan anda cari materi array 3 dimensi bahasa C di mbah goggle… pasti di jawab kok sama mbah google, kalo ga di jawab, coba cek koneksi internet anda.. hehehhe

Mari kita tampilkan data arraynya untuk menghitung maju pada 7 segment


 for (ayam=0;ayam<10;ayam++){  
 PORTC=data[0][0][ayam];  
 delay_ms(delay);  
 } // akhir for  
 Jika nilai ayam =0 maka nilai PORTC adalah indeks ke 0 dari data [0][0] nilainya adalah 0x3f  
 Dst selama nilai variabel array kurang dari 10.  
 tampilkan data arraynya untuk menghitung mundur pada 7 segment.  
 for (ayam=0;ayam<10;ayam++){  
 PORTC=data[0][1][ayam];  
 delay_ms(delay);  
 }   // akhir for  
 Sama seperti sebelumnya tapi datanya bebeda. jika nilai = 0, maka nilai dari PORTC=0x6f..  
 dst sampai nilai ayam <10  


Selesai
Kenapa saya menulis variabelnya ayam/ bebek? kadang pemula seperti saya agak sulit memahami sebuah variabel. Misalakan int a? apakah harus a? tidak, anda dapat mengganti a dengan apa saja sesuai dengan peraturan Bahasa C,, buat lah koding itu menyenangkan….bahkan “LUCU”
Satu lagi 7 segment yang saya gunakan tipe katoda, jadi kalau ingin menggunakan tipe anoda.. silakan ganti data arraynya.. atau pusing di progam? Tambahkan saja gerbang not (7404) pada output mikro… tinggal pilih ngakalin di software atau hardware??


Download di sini contoh progam dan simulasinya..
password zip : cintakupadamutakakanpernahpadam





1 komentar :

Anonim mengatakan...

mantap bikin pusing klo yang belum ngerti, padahal kalo cuma satu baris segmen tidak perlu pake array 3d....