Anda di halaman 1dari 12

APLIKASI LAMPU LED DENGAN MIKROKONTROLLER AT89S51 DENGAN C

Posted by iswanto Sering kali kita mendengar tentang komponen LED, yaitu sebutan untuk komponen yang dapat menyala. Tetapi apakah sebenarnya LED itu, LED adalah singkatan untuk Light Emitting Diode atau dalam bahasa indonesia berarti Dioda yang Memancarkan Cahaya. LED seperti dioda yang lain juga memiliki 2 kutub, Anoda atau Anode (A) dan Katoda atau Cathode (C), seperti yang terlihat pada gambar 3.1. Ketika ada arus listrik mengalir dari Anoda ke Katoda (A = + dan C = -), maka LED akan memancarkan cahaya. Namun ketika arus listrik dibalik (A = - dan C = +), maka LED akan mem-blok arus listrik seperti pada dioda yang lainnya. Untuk lebih jelas tentang mengakses led dengan mikrokontroler, klik disini

APLIKASI LAMPU LED DENGAN MIKROKONTROLLER


1. RANGKAIAN LAMPU LED
Rangkaian minimum untuk menghidupkan 8 LED melalui Port 0 ditunjukan pada Gambar 1. yang perlu diperhatikan adalah konfigurasi rangkaian LED yaitu Common Anode (CA) artinya untuk menghidupkan LED pada Port 3, port 3 harus dikirim atau diberi logika 0. Jika LED terhubung secara Common Katode, maka untuk menyalakan LED harus dikirim atau diberi logika 1, menyebabkan Port 0 menjadi masukan berimpedansi, sehingga tidak dapat menyalakan LED karena ordenya A.

V C C U 1 3 3 3 3 3 3 3 3 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 19 18 R S T 1 1 ,0 5 9 2 M H z C 3 10u C 30p C 6 30p C 7 R E S E T R S T D 3 1N 4002 A R 2 4K 7 31 9 P P P P P P P P P P P P P P P P 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 .0 .1 .2 .3 .4 .5 .6 .7 .0 .1 .2 .3 .4 .5 .6 .7 /A /A /A /A /A /A /A /A D D D D D D D D 0 1 2 3 4 5 6 7 P P 2 2 2 2 2 2 2 .0 /A 2 .1 /A .2 /A 1 .3 /A 1 .4 /A 1 .5 /A 1 .6 /A 1 .7 /A 1 8 9 0 1 2 3 4 5 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7

P P P P P P

P 3 .0 /R XD P 3 .1 /T XD P 3 .2 /IN T0 P 3 .3 /IN T1 P 3 .4 /T 0 P 3 .5 /T 1 P 3 .6 /W R P 3 .7 /R D A L E /P R O G P S E N

X1

V C C

XTA L1 XTA L2 E A /V P P R S T A T89S 51

30 29

Gambar 1.

Hasil pemasangan komponen-komponen

2. PEMROGRAMAN MENYALAKAN LED


Setelah rangkaian LED dibuat dan dihubungkan dengan port pararel mikrokontroller, maka sekarang saatnya Anda membuat program yang digunakan untuk menghidupkan LED tersebut. Program sebagai berikut ini

//Program LED 1. LED Menyala /* deklarasi register AT89c51 */ #include <at89x51.h> //jika menggunakan AT89C51 /* Program utama */ void main() { char a; a=0x000; while(1) {

} }

P0 = a;

//menyalakan Led semuanya

3. PEMROGRAMAN LED BERKEDIP


Setelah membuat dan menjalankan program menyalakan lampu LED, maka sekarang saatnya Anda membuat program kedua yang digunakan untuk

menghidupkan LED berkedip. Program sebagai berikut ini

//Program LED 2. LED Berkedip /*------deklarasi register AT89c51---------*/ #include <at89x51.h> //jika menggunakan AT89C51 /*---fungsi tunda 1 milidetik (kira-kira)--*/ void tunda1ms() { int i; for(i=0;i<150;i++); } /*--------fungsi tunda n milidetik--------*/ void tunda(int n) { int i; for (i=0; i<n;i++) tunda1ms(); } /*-------------Program utama-------------*/ void main() { char a; char b; a=0x000; b=0x0FF; while(1) { P0= a; //menyalakan Led semuanya tunda(500); //memanggil fungsi tunda P0= b; //mematikan semua Led tunda(500); //memanggil fungsi tunda } }

4. PEMROGRAMAN LED FLIP FLOP 1


Setelah membuat dan menjalankan program menyalakan lampu LED

berkedip, maka sekarang saatnya Anda membuat program ketiga yang digunakan untuk menghidupkan LED flip-flop 1. Program sebagai berikut ini

//Program LED 3 LED Flip-Flop /*----------deklarasi register AT89c51---------*/ #include <at89x51.h> /*----fungsi tunda 1 milidetik (kira-kira)----*/ void tunda() { _asm mov r0, #0x0f5 01$: mov r1, #0x0ff 02$: mov r2, #0 djnz r1, 02$ djnz r0, 01$ _endasm; } /*--------------Program utama-----------------*/ void main() { char a; char b; a=0x00f; b=0x0f0; while(1) { P0= a; //menyalakan Led port0 - port3 yang tunda(); //memanggil fungsi tunda P0= b; //menyalakan Led port4 - port7 yang tunda(); //memanggil fungsi tunda } }

5. PEMROGRAMAN LED FLIP FLOP 2


Setelah membuat dan menjalankan program menyalakan lampu LED flip-flop pada pemrograman flip-flop 1, maka sekarang saatnya Anda membuat program keempat yang digunakan untuk menghidupkan LED flip-flop 2. Program LED flip-flop 2 ini berbeda dengan LED flip-flop 1. Program ini akan menyalakan LED flip-flop genap dan ganjil pada port 0 Program sebagai berikut ini

//Program LED 4 Flip-Flop genap dan ganjil /* deklarasi register AT89c51 */ #include <at89x51.h> /*-----------------fungsi tunda-----------------*/ void tunda() { _asm mov r0, #0x0f5 01$: mov r1, #0x0ff 02$: mov r2, #0 djnz r1, 02$ djnz r0, 01$ _endasm; } /*--------------Program utama-------------------*/ void main() { char a; char b; a=0x55; b=0xAA; while(1) { P0= a; tunda(); P0= b; tunda(); } }

//menyalakan mati //memanggil //menyalakan mati //memanggil

Led port genap yang lain fungsi tunda Led port ganjil yang lain fungsi tunda

6. PEMROGRAMAN LED BERJALAN KEKANAN


Setelah membuat dan menjalankan program menyalakan lampu LED flip-flop, maka sekarang saatnya Anda membuat program yang digunakan untuk

menghidupkan LED berjalan kanan. Program LED berjalan kekanan ini dijalankan pada hardware nyala led berlogika tinggi atau logika 1. jika menggunakan logika rendah maka LED bukan menyala tetapi akan mati. Program LED berjalan kekanan menggunakan operasi geser kanan. Operasi geser kiri akan menggeser bit-bit kekanan sehingga bit 0 akan berpindah ke bit 1 dan bit 1 akan berpindah ke bit 2 dan seterusnya. Program sebagai berikut ini

//Program LED 6 LED berjalan Kekanan /* deklarasi register AT89c51 */ #include <at89x51.h> /* fungsi tunda 1 */ /*------------------------------------------*/ /* fungsi tunda 1 milidetik (kira-kira) */ /*------------------------------------------*/ void tunda1ms() { int i; for(i=0;i<150;i++); } /*--------------------------------------------*/ /* fungsi tunda n milidetik */ /*--------------------------------------------*/ void tunda(int n) { int i; for (i=0; i<n;i++) tunda1ms(); } /* Program utama void main() { volatile unsigned char a=0x01; while(1) { */

} }

a=((a>>7) | (a<<1)); //putar ke kanan 1 bit, bit ke 0 akan tunda(1000); //sehingga efeknya seperti LED berjalan P0=a; // mengisi bit ke 7 dst

7. PEMROGRAMAN LED BERJALAN KEKIRI


Setelah membuat dan menjalankan program menyalakan lampu LEDberjalan kekanan, maka sekarang saatnya Anda membuat program yang digunakan untuk menghidupkan LED berjalan kekiri. Program LED berjalan kekanan menggunakan operasi geser kiri. Operasi geser kiri akan menggeser bit-bit kekanan sehingga bit 7 akan berpindah ke bit 6 dan bit 6 akan berpindah ke bit 5 dan seterusnya. Program sebagai berikut ini

//Program LED 6 LED Berputar kekiri /* deklarasi register AT89c51 */ #include <at89x51.h> /* fungsi tunda 1 */

/*------------------------------------------*/ /* fungsi tunda 1 milidetik (kira-kira) */ /*------------------------------------------*/ void tunda1ms() { int i; for(i=0;i<150;i++); } /*--------------------------------------------*/ /* fungsi tunda n milidetik */ /*--------------------------------------------*/ void tunda(int n) { int i; for (i=0; i<n;i++) tunda1ms(); } /* Program utama */

void main() { volatile unsigned char a=0x01; while(1) { a=((a<<7) | (a>>1)); //putar ke kanan 1 bit, bit ke 0 akan tunda(1000); //sehingga efeknya seperti LED berjalan P0=a; // mengisi bit ke 7 dst } }

8. PEMROGRAMAN MENGHIDUPKAN LED KE KIRI


Setelah membuat dan menjalankan program menyalakan LED ke kiri, maka sekarang saatnya Anda membuat program yang digunakan untuk menghidupkan LED ke kiri. Program menghidupkan LED dari kiri ke kanan menggunakan operasi pernyataan geser kanan. Program sebagai berikut ini

//Program LED 7 menyalakan LED ke kiri /* deklarasi register AT89c51 */ #include <at89x51.h> /*--------------------------------------------*/ /* fungsi tunda 1 milidetik (kira-kira)*/ /*--------------------------------------------*/ void tunda(int n) { _asm mov r0, #0x0f5 01$: mov r1, #0x0ff 02$: mov r2, #0 djnz r1, 02$ djnz r0, 01$ _endasm; } /*----------------------------------------------*/ /* Program utama */ /*----------------------------------------------*/ void main()

{ char a; char k; while(1) { a=0x07F; for (k=0;k<9;k++) { P0=a; tunda(); a=a>>1; } } }

//mengeluarkan data LED satu persatu //sehingga efeknya seperti LED berjalan

9. PEMROGRAMAN MENGHIDUPKAN LED KE KANAN


Setelah membuat dan menjalankan program menyalakan LED ke kiri, maka sekarang saatnya Anda membuat program yang digunakan untuk menghidupkan LED ke kanan Program menghidupkan LED ke kanan menggunakan operasi pernyataan geser kiri. Program sebagai berikut ini
// Program LED 8 LED Berjalan kiri ke kanan /* deklarasi register AT89c51 */ #include <at89x51.h> /* fungsi tunda 1 milidetik (kira-kira) */ /*------------------------------------------*/ void tunda1ms() { int i; for(i=0;i<150;i++); } /* fungsi tunda n milidetik */ /*--------------------------------------------*/ void tunda(int n) { int i; for (i=0; i<n;i++) tunda1ms();

} /*----------------------------------------------*/ /* Program utama */ /*----------------------------------------------*/ void main() { char a; char k; while(1) { a=0x0FE; for (k=0;k<9;k++) { P0=a; //mengeluarkan data LED satu persatu tunda(100); //sehingga efeknya seperti LED berjalan a=a<<1; } } }

10. PEMROGRAMAN LED BERJALAN BOLAK-BALIK


Setelah membuat dan menjalankan program menyalakan lampu LED berjalan menyala kekiri, maka sekarang saatnya Anda membuat program ketuga yang digunakan untuk menghidupkan LED bolak balik. Program LED bolak balik menggunakan operasi pernyataan geser kanan dan geser kiri. Program sebagai berikut ini

//Program LED 10 LED ping-pong /* deklarasi register AT89c51 */ #include<at89x51.h> void tunda() { _asm mov r0, #0x0f5 01$: mov r1, #0x0ff 02$: mov r2, #0 djnz r1, 02$ djnz r0, 01$ _endasm; } void jalankiri(unsigned int n)

unsigned char i=0, a=0x01; P1 = 0; while(n) { for(i=0;i<7;i++) { a=((a>>7) | (a<<1)); tunda(); P0=a; } n--; }

} void jalankanan(unsigned int n) { unsigned char i=0, a=0x80; P1 = 0; while(n) { for(i=0;i<7;i++) { a=((a<<7) | (a>>1)); tunda(); P0=a; } n--; } } /* Program utama void main() { iswanto: jalankiri(1); jalankanan(1); goto iswanto; }

*/