Tiap orang logika berfikirnya pasti berbeda - beda, sesuai kreatifitas masing-masing, jadi kalo programnya tidak sama dengan yang lain, ya.. itu bukan masalah. Yang penting masalah terselesaikan..
Lanjut.. Mari kita belajar penggunaan prosedur.
Contoh:
#include <mega16.h>
#include <delay.h>
int i; // ini variable i dgn type data integer.
unsigned char nyala[9]= {0b00000000,0b00000001,
0b00000010,0b00000100,
0b00001000,0b00010000,
0b00100000,0b01000000,0b10000000};
void led_jalan(){
for(i=0;i<9;i++){ // ulangi i=0 sd i-8
PORTC=nyala[i];
// PORTC = data "nyala" ke "i"
delay_ms(500);
};
};
void main(void)
{
// komentar lama sudah di hapus,tidak usah tanya lagi.
DDRC=0xff;
while (1){
led_jalan();
}
}
Hayo.. apanya yang berubah???.. silahkan di pahami.
Terakhir kita modifikasi supaya bisa berubah arah nyala lednya jika tombol di pencet. Kita gunakan tombol yang ada di PINB.0 dan PINB.1 . Tombol terhubung dengan ground, artinya jika tombol PINB.0 di tekan makan PINB.0 berlogika 0. Jika tidak di tekan PINB.0 tidak berlogika apa-apa (mengambang). Supaya ketika tidak di tekan berlogika 1. Maka kita perlu mengaktifkan resistor pull-up internal.
Contoh:
#include <mega16.h>
#include<delay.h>
int i,jalan; // variable i dan jalan dgn type data integer.
unsigned char nyala[9]= {0b00000000,0b00000001,
0b00000010,0b00000100,
0b00001000,0b00010000,
0b00100000,0b01000000,0b10000000};
void led_jalan(unsigned char arah){
for(i=0;i<9;i++){ // ulangi i=0 sd i-8
if (arah == 0){ // jika nilai arah =0;
PORTC=nyala[i];
// PORTC = data "nyala" ke "i"
}else{ // jika nilai bukan =0;
PORTC=nyala[8-i];
// PORTC = data "nyala" ke "8 dikurangi i"
}
delay_ms(500);
if (PINB.0==0 || PINB.1==0){
// jika tombol di PINB.0 atau PINB.1 ditekan
break; // keluar dari for.
}
}
};
void main(void)
{
DDRC=0xff;
DDRB=0b11111000; // PORTB.0 - PORTB.3 sbg input
PORTB=0b00000111; // aktifkan resistor pull-up internal
jalan=0; // variable jalan awalnya bernilai 0
while (1){
if (PINB.0==0){ // jika tombol di PINB.0 ditekan
jalan=0; // variable jalan diberi nilai 0
}
if (PINB.1==0){ // jika tombol PINB.1 ditekan
jalan=1; // variable jalan diberi nilai 1
}
if (jalan==0){ // jika variable jalan = 0
led_jalan(0);
// panggil prosedur led_jalan(nilai arah = 0);
}else if(jalan==1){
led_jalan(1);
// panggil prosedur led_jalan(nilai arah = 1);
};
};
};