Artikel ini merupakan artikel lanjutan dari artikel kami sebelumnya yang membahas tentang dasar pemograman seven segment. Kali ini kami akan menjelaskan salah satu aplikasi seven segment untuk 4 digit up down counter dengan scanning keypad. Bilangan counter di mulai dari NOL dan berakhir di angka 9999. Pergerakkan counter up/down di hitung berdasarkan penekanan tombol. Jika tombol UP di tekan, maka counter up dan jika tombol DOWN di tekan, maka counter down.
Untuk mengeset counter menjadi NOL, maka anda cukup menekan tombol RESET.
Interfacing
Gambar di bawah ini adalah interfacing 4 buah seven segment dengan microcontroller 89S51. Semua segment a s/d g beserta dp di hubungkan ke port 3 microcontroller 89S51, sedangkan on/off display di atur oleh transistor yang di fungsikan sebagai switch. Basis dari 4 transistor tersebut di hubungkan dengan port 1 bit 0 s/d bit 3 microcontroller dengan resistor 1K Ohm. Untuk Tombol UP, DOWN dan RESET dihubungkan ke port 2 bit 5 s/d bit 7.

Metode Pemograman.
Metode pemograman untuk 4 digit up down counter ini berdasarkan prinsip scanning. Artinya display on secara bergantian dengan delay waktu yang cepat, sehingga on dan off display tidak kelihatan dengan mata. Secara gamplangnya sebagai berikut.
1. Siapkan data atau code bilangan numerik untuk sevent segment pertama.
2. Kirim data tersebut ke port yang terhubung ke seven segment.
3. Switch on transistor yang di hubungkan ke VCC seven segment pertama.
4. Tunggu dalam waktu 500 mikro detik atau sampai dengan 1 mili detik.
5. Siapkan data atau code bilangan numerik untuk sevent segment kedua.
6. Kirim data tersebut ke port yang terhubung ke seven segment. Karena tiap segment a s/d g dari semua seven segment di hubungkan jadi satu, jadi kalau ada kesalahan dalam men-switch on transistor, maka data numerik yang di kirim akan salah alamat, seharusnya untuk seven segment 1, maka akan salah alamat ke seven segment yang lain.
7. Ulangi langkah 3 sampai dengan 4.
8. ulangi langkah 1 sampai dengan 4 untuk seven segment ke 3 dan ke 4 dengan proses kerjanya secara berurutan.
Pemograman
Dalam pemograman 4 digit up down counter yang kami design terdapat beberapa point penting, yaitu :
1. Pendeklarasian code-code
3. Fungsi scanning keypad
4. Fungsi counter up
5. Fungsi counter down
5. Fungsi matematik
Pendeklarasian Code-code
Dalam pendeklarasian code kali ini ada 2 point penting yang perlu di perhatiakan, yaitu pendeklarasian code bilangan numerik utuk seven segment dan yang lainnya adalah pendeklarasian code untuk men-switch on transistor. Contoh pendeklarasian code-code tersebut adalah :
Pendeklarasian code bilangan numerik
unsigned char segment[10]={0xC0,0x0F9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98} ;
Pendeklarasian code untuk men-switch on transistor.
unsigned char digit[4]={0xF7,0xFB,0xFD,0xFE};
Fungsi Scanning Keypad
Fungsi ini di gunakan untuk men-scanning keypad. Karena tomobol yang di gunakan hanya 3 tombol saja, maka fungsi tersebut hanya memuat ketiga tombol tersebut saja. Lihat contoh program berikut.
void keyscan()
{
if(PB_UP==0)
{
counter_up();
}
if(PB_DOWN==0)
{
counter_down();
}
if(PB_RST==0)
{
counter_reset();
}
}
Fungsi counter up
Fungsi ini di gunakan untuk mengecek apakah tombol UP di tekan, jika ia tunggu sampai dengan 15 mili detik. Jika tombol UP masih tetap di tekan, maka tunggu sampai tombol di lepas. Lihat contoh program berikut.
void counter up()
{
unsigned int i,j;
if(PB_UP==0) // Jika tombol UP di tekan, maka tunggu sampai 15 mili detik.
{
for(j=0;j<30;j++) // Looping untuk delay tombol UP selama di tekan.
{
for(i=0;i<4;i++)
{
P3=nilai[i]; // selama looping ini nilai counter tetap di tampilkan
P1=digit[i]; // selama looping juga scanning display tetap jalan
delay_500us(); //delay 500 mikro detik
}
}
if(PB_UP==0) // Jika PB Up masih tetap di tekan, maka tunngu sampai di lepas
{
while(!PB_UP) // looping untuk menunggu PB di lepas
{
for(i=0;i<4;i++)
{
P3=nilai[i]; // selama looping ini nilai counter tetap di tampilkan
P1=digit[i]; // selama looping juga scanning display tetap jalan
delay_500us(); //delay 500 mikro detik
}
}
counter++; //nilai counter bertambah 1 (Plus 1)
}
}
}
Fungsi counter down
Fungsi ini hampir sama dengan fungsi di atas, hanya saja perbedaannya nilai counternya berkurang 1.
Fungsi Matematik
Fungsi ini berisi formula matematik, untuk menghitung nilai counter pada saat tombol UP atau DOWN di tekan. Misalnya pada saat nilai counter mencapai 10 ke atas dan kurang dari 100. Formula matematik yang di buat harus bisa menentukan berapa nilai satuan, puluhan, ratusan dan ribuan dari nilai tersebut. Silahkan anda buat sendiri formula dan programnnya. biar otak anda terasah dan bisa menghasilkan karya sendiri.
Gambar 4 digit up down counter

Download File Hex
Jika anda masih kesulitan membuat program sendiri, anda bisa download file Hex dari 4 digit up down counter dengan interfacing seperti pada gambat di atas. Maaf source code untuk 4 digit up down counter ini tidak kami publikasikan.
Similar articles















Comments
konsepnya seperti kalkulator yang pakai seven segment jaman dulu…jadi 3 seven segment dipakai untuk menampilkan angka sampai ratusan yang diinput menggunakan keypad…sedangka n seven segment yang satu lagi bisa dirubah angkanya dari 1-9 tanpa mengubah tampilan 3 seven segmen yang sebelumnya…
saya sudah bisa menampilkan angka pada 3 seven segment tapi angkanya selalu sama dan berubah saat saya menekan angka yang lain pada keypad…sedangka n saat berpindah pada seven segment yang sendirian tadi, ketiga angka pada 3 segment tadi menjadi hilang / 0… sedangkan seharusnya angka yang sudah diinput pada 3 seven segment tadi tetap tersimpan dan ditampilkan…
contohnya untuk menampilkan angka 423 maka saat menekan keypad 4 maka angka tampil di seven segment ke 3, saat menekan keypad 2 maka hasil keluar pada seven segment ke 3, sedangkan angka 4 tadi berpindah pada seven segment ke 2. dan saat menekan keypad 3 maka angka tampil di seven segment ke 3, sedangkan angka 2 tadi berpindah pada seven segment ke 2 dan angka 4 berpindah pada seven segment pertama…
kemudian setelah selesai menginput ketiga angka tersebut, saya menekan satu tombol dan berpindah pada sevent segment yang sendirian… jadi saat saya menekan tombol 1-9 maka hasilnya hanya keluar pada seven segment yang sendirian tersebut…
setelah itu saya menekan satu tombol lagi dan semuanya mereset kembali…
mohon bantuannya, karena saya sudah mencobanya dan sampai sekarang belum menemukan caranya…terimak asih…
ini listing program yang sudah saya buat:
Chip type : ATmega8535
Program type : Application
AVR Core Clock frequency: 12,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 128
#include
#include
#include
#include
#define baris1 PIND.4
#define baris2 PIND.5
#define baris3 PIND.6
#define baris4 PIND.7
char ratusan, puluhan, satuan;
unsigned char nilai;
// Declare your global variables here
unsigned char scan_keypad()
{
//scan kolom 1
PORTD=0b11111110;
{if(!baris1){nilai='1';}};
{if(!baris2){ni lai='4';}};
{if(!baris3){nilai='7';}};
{if(!baris4){ni lai='*';}};
//scan kolom 2
PORTD=0b11111101;
{if(!baris1){nilai='2';}};
{if(!baris2){ni lai='5';}};
{if(!baris3){nilai='8';}};
{if(!baris4){ni lai='0';}};
//scan kolom 3
PORTD=0b11111011;
{if(!baris1){nilai='3';}};
{if(!baris2){ni lai='6';}};
{if(!baris3){nilai='9';}};
{if(!baris4){ni lai='_';}};
return nilai;
}
void NO_LAGU()
{
if(scan_keypad( )!='*'){
ratusan=puluhan;
puluhan=satuan;
satuan=nilai;
};
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTA=0x00;
DDRA=0xFF;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x0F;
DDRB=0x0F;
// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
// State7=1 State6=1 State5=1 State4=1 State3=P State2=P State1=P State0=P
PORTD=0xFF;
DDRD=0x0F;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
ulang_pass:
while(scan_keyp ad()!='*')
{
NO_LAGU();
PORTA=satuan;
PORTB=0b11111011;//menyalakan satuan
delay_ms(3);
PORTA=puluhan;
PORTB=0b11111101;//menyalakan puluhan
delay_ms(5);
PORTA=ratusan;
PORTB=0b11111110;//menyalakan ratusan
delay_ms(7);
};
while(scan_keyp ad()!='_')
{
PORTC=nilai;
PORTB.3=0;//menyalakan digit4
};
PORTB.3=1;//mematikan digit4
ratusan=puluhan=satuan=nilai;
PORTB=1;
goto ulang_pass;
}
yang gede.
yg itu kurang jelas....
Tengkyu somat
I was looking for an up/down counter with reset. And this is the one I was looking for. Thanks a lot. But I could not found the complete schematic diagram of it. Could you please send the complet schematic diagram to my e-mail? jinesh1977
Thanks in advance
Alpha
RSS feed for comments to this post