Digital Counter adalah sebuah pencacah berbasis digital yang dapat melakukan perhitungan counting down maupun counting up. Prinsip kerja digital counter hanyalah melakukan penambahan atau pengurangan nilai sehingga diperoleh nilai berikutnya. Program counting down akan bekerja mengurangi nilai, sedangkan counting up berfungsi menambah nilai satu persatu.
Oke untuk prinsip dasar perhitungan semacam itu mungkin tidak akan terlalu susah. Tapi bagaimana jika menerjemahkannya dalam bentuk program digital counter menggunakan mikrokontroler, misalnya AVR Atmega? Menggunakan sistem komputer tentu saja berbeda dengan hanya melakukan counting secara manual, apalagi jika kita menggunakan pemrograman perangkat keras seperti mikroprosessor dan mikrokontroler, tentu harus bisa menerjemahkan setiap step dengan detail. Misal bagaimana melakukan counting, mentransfer ke display dan harus diperhatikan pada saat terjadi limpahan carry agar nilai yang didapat tetap sesuai dengan perhitungan.
Program Decade Digital Counter Counter Up Down
Program decade counter berikut ini berfungsi melakukan pencacahan naik dari 0 ke 99, akan tetapi, dia bisa berubah menjadi counting down jika tombol pada PINA.0 ditekan. Counting down akan dimulai dari nilai terakhir angka yang tampil. Lalu jika tombol pada PINA.0 dilepas, program akan kembali melakukan counting up berdasar nilai terakhir.
#include <mega16.h> #include <delay.h> unsigned char bil[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; char puluh=0; unsigned char satu=0; //nilai awal =99 void tampil (void) { char i,j; for(i=0;i<10;i++) { for(j=0;j<50;j++) { PORTD=0x01; PORTC=bil[puluh] ; delay_us(200); PORTD=0x02; PORTC=bil[satu] ; delay_us(200); }} } void main(void) { DDRA=0x00; DDRC=0xff; DDRD=0xff; PORTC=0xc0; PORTD=0xff; delay_ms(2); while(1) { tampil(); if(PINA==0) { if(satu==0) { if(puluh==0) { satu=9; puluh=9; } else if(puluh>=1) { satu=9; puluh=puluh-1; } } else if(satu>=1) { satu=satu-1; } } else { if(satu==9) { if(puluh==9) { satu=0;puluh=0; } else if(puluh>=0) { satu=0; puluh=puluh+1; } } else if(satu>=0) { satu=satu+1; } } } }
butuh source code codevision + rangkaian ISIS proteus?
baca juga puluhan artikel lain tentang belajar mikrokontroler atmega gratis di anotherorion.com
makasih gan, tapi kok masih mulai di angka 99 ya, yg diganti sebelah mana ya?
Bagian deklarasi variabel satuan dan puluhan diganti dr 9 ke 0 mbak