Mengendalikan LED matriks sebenarnya hampir sama dengan mengendalikan seven segment. Bedanya adalah bahwa pada seven segment lampu-lampu disusun menjadi 7 ruas yang bisa membentuk angka-angka. Sedangkan pada LED matriks lampu-lampu disusun menjadi matriks yang bisa diacu dengan kolom dan baris. Kolom-kolom pada LED matriks bisa disamakan dengan digit-digit pada seven segment. Sedangkan baris-baris pada LED matriks bisa disamakan dengan lampu a hingga lampu g ditambah lampu titik pada seven segment. Dengan demikian antara seven segment dengan LED matriks pada dasarnya adalah sama, terutama jika jumlah barisnya hanya ada delapan.
Terus bagaimana cara menampilkan gambar pada LED matriks? Pada dasarnya ya sama dengan menampilkan angka-angka pada seven segment. Jika Anda telah terbiasa dengan cara menampilkan data pada seven segment dengan menggunakan buffer display seperti yang dilakukan pada pembahasan tentang seven segment pada buku
Mudah dan Menyenagkan Belajar Mikrokontroler, dimana untuk menampilkan data pada seven segment yang harus kita lakukan hanyalah mengisi buffer-buffer display, maka untuk menampilkan gambar pada LED matriks, yang perlu kita lakukan juga hanyalah mengisikan data pada buffer-buffer display yang bersangkutan.
Pada gambar di atas, ukuran LED matriks yang kita gunakan adalah 8 baris x 32 kolom. Ukuran ini setara dengan seven segment dengan jumlah digit sebanyak 32 digit. Dengan demikian pada dasarnya kita membutuhkan buffer display sebanyak 32 byte. Lampu-lampu pada baris paling atas kita hubungkan dengan bit 0 dari port dan berturut-turut lampu pada beris di bawahnya dengan bit 1, bit 2, dan seterusnya hingga bit 7. Untuk membuat sebuah lampu pada baris tertentu menyala, maka yang kita perlukan hanya mengisi bit yang berkorelasi dengannya dengan 0 atau 1 tergantung konfigurasi matriks yang kita gunakan, aktif rendah atau aktif tinggi. Untuk memudahkan pemahaman, biasanya kita menggunakan aktif tinggi sehingga untuk menyalakan lampu pada baris paling atas maka kita harus membuat bit 0 bernilai 1.
Sebagai contoh, perhatikan logo di bawah ini. Logo tersebut berukuran 32 x 32. Oleh karena itu logo tersebut tidak mungkin ditampilkan pada LED matriks dengan ukuran 32 x 8 sekaligus. Untuk menampilkannya, kita harus membagi logo tersebut menjadi empat bagian. Setelah itu kita harus menampilkan keempat bagian tersebut satu-persatu.
Di sebelah kiri logo terdapat angka dari 0 hingga 7 dan berulang hingga empat kali. Sedangkan di atas logo terdapat angka 0 hingga 31. Angka-angka tersebut akan menunjukkan pada kita bagaimana menampilkan bagian-bagian logo tersebut pada LED matriks. Angka di atas logo menunjukkan indeks dari buffer, sedangkan angka disebelah kiri logo menunjukkan posisi bit. Dengan demikian, untuk menampilkan bagian pertama dari logo (bagian paling atas), maka buffer[0] harus diisi dengan data 11111111b, buffer[1]=00000001b, buffer[2]=00000001b, dan seterusnya.
01234567890123456789012345678901
0. 1. 2. 3.
0 ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©
1 © ©
2 © ©©©© ©©©© ©
3 © ©©©©©© ©©©©©© ©
4 © ©©©©©©©© ©©©©©©©© ©
5 © ©©©© ©© ©© ©©©© ©
6 © ©©© ©© ©© ©©© ©
7 © ©©© ©© ©© ©©© ©
0 © ©©© ©© ©© ©©© ©
1 © ©© ©© ©© ©© ©
2 © ©©© ©© ©
3 © ©© ©© ©
4 © ©©©©©©©©©©©©© ©©©©©©©©©©©©© ©
5 © ©©©©©©©©©©©©© ©©©©©©©©©©©©© ©
6 © ©© ©© ©
7 © ©© ©©© ©
0 © ©© ©© ©© ©© ©
1 © ©©© ©© ©© ©©© ©
2 © ©©© ©© ©© ©©© ©
3 © ©©© ©© ©© ©©© ©
4 © ©©©© ©© ©© ©©©© ©
5 © ©©©©©©©© ©©©©©©©© ©
6 © ©©©©©© ©©©©©© ©
7 © ©©©© ©©©© ©
0 © ©
1 © ©©© © © ©© © © © ©©©© ©
2 © © © © © © ©© © © © ©
3 © © ©©©© ©©©© © © © ©©© ©
4 © © © © © © © ©© © ©
5 © ©©© © © © © © © ©©©© ©
6 © ©
7 ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©
Gambar Logo.
Untuk bisa mengisikan data-data tersebut ke buffer dengan mudah, maka kita bisa membuat tabel data gambar. Teknik ini mirip dengan cara yang dilakukan untuk menampilkan variasi nyala LED pada percobaan LED berjalan 5 dari buku
Mudah dan Menyenangkan Belajar Mikrokontroler atau pada artikel
Simulasi LED. Setiap tabel gambar memiliki ukuran yang sama dengan ukuran buffer. Dan untuk kasus logo di atas, kita membutuhkan empat buah tabel gambar yang ukurannya adalah 32 byte.
Seperti pada percobaan LED berjalan tersebut, pekerjaan menyusun tabel adalah pekerjaan yang membosankan dan membutuhkan ketelitian. Akan tetapi Anda tidak perlu berkecil hati jika ingin membuat tabel untuk gambar-gambar yang besar dan rumit karena Anda bisa menggunakan bantuan program
ImgTable.exe. Program tersebut akan membantu Anda untuk mengubah gambar dengan format bmp menjadi tabel yang bisa kita gunakan pada program baik menggunakan format M51 ataupun menggunakan format sdcc. Jadi untuk mendapatkan tabel gambarnya, Anda cukup membuat gambar menggunakan MSPaint, kemudian lakukan konversi menggunakan ImgTable.exe.
ImgTable.exe dapat melakukan konversi dari file bmp dengan format monochrome hingga format 24bit. akan tetapi karena tabel tersebut akan digunakan untuk menyalakan LED yang tentu saja setara dengan format monochrome, maka format 24bit pun akan diubah terlebih dahulu oleh ImgTable.exe menjadi format monochrome. Oleh karena itu lebih baik jika Anda menyimpan gambar yang Anda buat dengan format monochrome untuk menghemat ukuran file.
Aturan yang diterapkan oleh ImgTable adalah bahwa pixel-pixel yang berwarna hitam akan diubah menjadi bit-bit 1, sedangkan pixel-pixel berwarna putih menjadi bit-bit 0. Untuk warna-warna selain hitam dan putih, maka terlebih dahulu akan dijumlahkan ketiga unsur warna dasarnya, kemudian dibagi dengan tiga. Setelah itu, jika nilainya lebih dekat ke hitam akan diartikan sebagai hitam, dan jika lebih dekat dengan putih akan diartiken dengan putih.
Urut-urutan pembuatan tabelnya dalah dari kiri ke kanan dan dari atas ke bawah. Dari atas ke bawah artinya setiap delapan pixel kebawah akan diambil sebagai satu byte. Sebagai contoh, gambar dengan ukuran 32 x 32, maka akan dibuat empat buah tabel dengan ukuran 32 byte. Tabel pertama menyimpan data dari koordinat (0,0) hingga (31,7) dengan aturan pixel pada kiri atas adalah (0,0) dan pixel di kanan bawah adalah (31,31). Tabel kedua adalah (0,8) hingga (31,15). Demikian seterusnya.
Pada contoh tersebut semua tabel menyimpan seluruh data gambar dengan tepat karena ukuran tinggi gambar merupakan kelipatan delapan. Jika ukuran gambar bukan merupakan kelipatan delapan, maka tabel terakhir akan memiliki bit-bit sisa. Sebagai contoh jika ukuran gambar adalah 32 (lebar) x 33 (tinggi), maka jumlah tabel adalah lima tabel dengan ukuran 32 byte. Dan tabel terakhir hanya bit 0 saja yang terpakai. Sedangkan bit 1 hingga bit 7 akan diisi dengan 0.
Kembali ke LED matriks, kita harus menampilkan keempat bagian logo satu-persatu. Akan tetapi jika kita menampilkannya secara bergantian, maka bentuk logo tidak akan terlihat dengan jelas. Kita hanya akan melihat gambar-gambar tak lengkap yang muncul bergantian. Oleh karena itu kita harus menampilkannya secara bergeser ke atas atau ke bawah. Akan tetapi tabel yang telah kita buat adalah tabel yang berisi data blok-blok gambar. Jadi kita tidak bisa mengambil data gambar dari koordinat (0,1) hingga (31,8) secara langsung. Untuk itu kita membutuhkan sebuah buffer lagi dengan ukuran yang sama dengan buffer pertama. Jika buffer pertama kita sebut dengan buffer display, maka buffer kedua kita sebut dengan buffer hiden karena buffer ini memang bukan untuk menampilkan data ke LED matriks. Buffer ini hanya kita gunakan sebagai bantuan dalam memanipulasi data tampilan.
Dalam kasus kita hendak melakukan penggeseran gambar ke atas, maka kita bisa menggambarkan seolah-olah susunan buffer adalah seperti berikut:
01245...
abcde...
Angka=buffer display, huruf=buffer hiden.
Pertama kali kita mengisi buffer display dengan data 0, sehingga semua LED akan padam. Kemudian kita menempatkan tabel gambar blok pertama pada buffer hiden. Setelah itu lakukan pergeseran bit antara a dengan 0, b dengan 1, c dengan 2, dan seterusnya. Lakukan pergeseran ini hingga delapan kali, yang artinya semua bagian blok gambar telah berada pada buffer display. Dan sebelum melakukan pergeseran yang kesembilan, kita harus menempatkan blok gambar yang kedua ke buffer hiden. Dan langkah selanjutnya merupakan perulangan dari langkah sebelumnya.
Untuk lebih jelasnya, Anda bisa melihat pada
listing program untuk demo di atas yang ditulis dalam format M51 maupun c. Pada listing tersebut terdapat konstanta DelayTime yang dapat Anda ganti untuk mengubah kecepatan gerak gambar.
Untuk mencoba pada simulator, maka Anda harus mengatur link port agar Port0 dan Port1 sama-sama me
link secara message ke MXLED.exe dengan message berupa WM_USER dan lParam untuk Port0 adalah 2 dan lParam untuk Port1 adalah 1. Anda juga harus mengatur konfigurasi MXLED agar berukuran 8 x 32 landscape.
Selamat Mencoba dan jangan ragu untuk bertanya jika ada yang kurang jelas. Semoga bermanfaat.