Anda di halaman 1dari 4

Membuat traffic light dengan codevision

AVR(4)
traffic light dengan codevision AVR yang ke empat, dimana kita akan membuat traffic
light dengan countdown timer untuk masing2 bangjo, jadi total ada 4 bangjo, dengan 8
seven segment dimana setiap bangjo memiliki 2 seven segment, satu untuk counter ketika
lampu hijau, satu untuk counter ketika berhenti atau lampu merah.

Untuk keperluan ini, lagi2 kita kekurangan output ATMega untuk kendali seven segment,
maka salah satu cara menyiasatinya lagi2 kita bisa memparalelkan seven segmentnya, 8
input seven segment kita percayakan pada PORTA untuk mengeluarkan output nilainya,
sedangkan PORTB kita gunakan sebagai kendali seven segment, jadi kita masih punya
2 PORT untuk kendali traffic lightnya, PORTC kita gunakan sebagai kendali traffic light 1
– 2, dan PORTD kita gunakan untuk mengendalikan traffic light 3 – 4.

pada prinsipnya ketika lampu 1 hijau, sisanya harus merah, dan tiap lampu merah memiliki
nilai waktu yang berbeda2, sehingga pada saat gilirannya tiap lampu merah akan habis
di angka nol sebelum berubah ke warna hijau.

Di sini jika sebuah lampu hijau, maka lampu setelahnya memiliki nilai counter yang sama,
lampu ketiga memiliki nilai counter + 3, dan lampu terakhir memiliki nilai counter + 6.
Kemudian setelah lampu kedua menyala hijau maka nilai lampu ketiga sudah sama
dengan nilai counter 2, lampu keempat bernilai counter + 3 dan lampu pertama diset
dengan nilai counter + 6. Dan pada saat nilai lampu hijau 0 otomatis dia berubah ke warna
kuning, sebenarnya bisa saja kita membuat pada saat nilai 0 tetap hijau baru kemudian
baru warna kuning, tapi hehehe programnya ntar tambah panjang 😀 tapi monggo klo mau
ditambahkan sendiri biar terkesan lebih valid.
bahasa C dan compiler Codevision AVR sebagai berikut.

#include <mega16.h>
#include <delay.h>

// Declare your global variables here


unsigned int bj1;
unsigned char lp1;
unsigned char
bil[11]={0x00,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void main(void)
{

//this code was taken from http://anotherorion.com

DDRA=DDRB=DDRC=DDRD=255;
PORTA=PORTB=PORTC=PORTD=0;
while (1)
{
PORTC=0x41;
PORTD=0x44;
for(lp1=3;lp1>0;lp1--)
{
delay_ms(1);

for(bj1=0;bj1<10;bj1++)
{
PORTB=0x09;
PORTA=bil[lp1];
delay_ms(10);
PORTB=0x20;
PORTA=bil[lp1+3];
delay_ms(10);
PORTB=0x80;
PORTA=bil[lp1+6];
delay_ms(10);
if(lp1==1)
{
PORTC=0x42;
PORTD=0x44;
PORTB=0x04;
PORTA=0xff;
delay_ms(10);
}
}
}

PORTC=0x14;
for(lp1=3;lp1>0;lp1--)
{
delay_ms(1);
for(bj1=0;bj1<10;bj1++)
{
PORTB=0x24;
PORTA=bil[lp1];
delay_ms(10);
PORTB=0x80;
PORTA=bil[lp1+3];
delay_ms(10);
PORTB=0x02;
PORTA=bil[lp1+6];
delay_ms(10);
if(lp1==1)
{
PORTC=0x24;
PORTD=0x44;
PORTB=0x04;
PORTA=0xff;
delay_ms(10);
}
}
}
PORTC=0x44;
PORTD=0x41;
for(lp1=3;lp1>0;lp1--)
{
delay_ms(1);

for(bj1=0;bj1<10;bj1++)
{
PORTB=0x90;
PORTA=bil[lp1];
delay_ms(10);
PORTB=0x02;
PORTA=bil[lp1+3];
delay_ms(10);
PORTB=0x08;
PORTA=bil[lp1+6];
delay_ms(10);
if(lp1==1)
{
PORTD=0x42;
PORTB=0x04;
PORTA=0xff;
delay_ms(10);
}
}
}
PORTD=0x14;
for(lp1=3;lp1>0;lp1--)
{
delay_ms(1);

for(bj1=0;bj1<10;bj1++)
{
PORTB=0x42;
PORTA=bil[lp1];
delay_ms(10);
PORTB=0x08;
PORTA=bil[lp1+3];
delay_ms(10);
PORTB=0x20;
PORTA=bil[lp1+6];
delay_ms(10);
if(lp1==1)
{
PORTD=0x24;
PORTB=0x04;
PORTA=0xff;
delay_ms(10);
}
}
}

};
}
Nah, setelah ini anda bisa mengembangkan sendiri rangkaian traffic lightnya, mungkin
setiap bangjo punya counter puluhan bahkan ratusan seperti di jalan2 protokol, siapa
tahu malah bisa bikin program untuk memprogram bangjo semacam ini

Anda mungkin juga menyukai