Dalam hal menganalisa suatu rangkaian Seven Segment Counter dan Running Led With LCD ini, kami akan menerangkan bagaimana cara kerja alat ini secara blok diagram dan secara detail serta menganalisa listing program dari alat ini. Rangkaian Seven Segment Counter dan Running Led With LCD ini didasari dengan teori yaitu jika push ON pada PortC.1 di tekan maka led pada Port A akan melakukan Running Led dari PortA.0 - PortA.7 dan kembali ke PortA.0. Kemudian jika push ON pada PortC.0 di tekan maka seven segment pada Port B akan melakukan Counter-UP dari 0-9.
Aktivator pada rangkaian Seven Segment Counter and Running Led With LCD ini untuk mengaktifkan catu daya pada alat. Sumber tegangan yang digunakan adalah +12V dan ground yang diubah tegangannya menjadi 5V dengan menggunakan IC Regulator yang berada pada minsys ATMEGA8535.
Dalam memproses dan mengolah 2 input dari saklar counter up dan saklar counter down diperlukan sebuah input yaitu berupa ATMEGA8535. Pada rangkaian running led akan masuk melalui PORTA , Seven Segment akan masuk melalui PORTB, dan kemudian LCD akan masuk melalui PORTC.
Pada rangkaian ini untuk memproses suatu Seven Segment and Running Led diperlukan mikrokontroler ATMEGA8535 yang berfungsi sebagai kontrol pusat.
Output akan tampil pada LCD, LED dan seven segment. LCD di PORTA akan menerima perintah dari mikrokontroler untuk menampilkan karakter. LED menerima perintah dari mikrokontroler dalam bentuk biner, dan seven segment akan menampilkan angka.
#include <mega8535.h>
// Memasukkan
library mega8535.h
#include <delay.h> // Memasukkan
library delay.h
#include <lcd.h> // Memasukkan
library lcd
#asm // Menyisipkan
bahasa assembly
.equ __lcd_port=0x15 // Memberi nilai
0x15 pada __lcd_port, PORTC
#endasm // Selesai
menyisipkan bahasa assembly
int n,i; // Deklarasi
variable n dan I memiliki data integer
void
sevenseg(){ // Subrutin
sevenseg, digunakan untuk memberikan nilai pada seven segment yang terhubung pada
PORTB
if(n==0){PORTB=0xc0;} // Jika n=0
maka nilai PORTB=0xc0
if (n==1){PORTB=0xf9;} // Jika n=1
maka nilai PORTB=0xf9
if (n==2){PORTB=0xa4;} // Jika n=2
maka nilai PORTB=0xa4
if (n==3){PORTB=0xb0;} // Jika n=3 maka nilai PORTB=0xb0
if (n==4){PORTB=0x99;} // Jika n=4 maka nilai PORTB=0x99
if (n==5){PORTB=0x92;} // Jika n=5 maka nilai PORTB=0x92
if (n==6){PORTB=0x82;} // Jika n=6 maka nilai PORTB=0x82
if (n==7){PORTB=0xf8;} // Jika n=7 maka nilai PORTB=0xf8
if (n==8){PORTB=0x80;} // Jika n=8 maka nilai PORTB=0x80
if (n==9){PORTB=0x90;}} // Jika n=9 maka nilai PORTB=0x90
void
running_led(){ // Subrutin running_led, digunakan untuk memberikan nilai
pada seven segment yang terhubung pada PORTA
if(n==0){PORTA=0xff;} // Jika n=0
maka nilai PORTA=0xff
if(n==1){PORTA=0xfe;} // Jika n=1
maka nilai PORTA=0xfe
if(n==2){PORTA=0xfd;} // Jika n=2
maka nilai PORTA=0xfd
if(n==3){PORTA=0xfb;} // Jika n=3
maka nilai PORTA=0xfb
if(n==4){PORTA=0xf7;} // Jika n=4
maka nilai PORTA=0xf7
if(n==5){PORTA=0xef;} // Jika n=5
maka nilai PORTA=0xef
if(n==6){PORTA=0xdf;} // Jika n=6
maka nilai PORTA=0xdf
if(n==7){PORTA=0xbf;} // Jika n=7
maka nilai PORTA=0xbf
if(n==8){PORTA=0x7f;} // Jika n=8
maka nilai PORTA=0x7f
if(n==9){PORTA=0x00;}} // Jika n=9
maka nilai PORTA=0x00
void
lcd_counter_up(){ // Subrutin lcd_counter_up, digunakan untuk memberikan
nilai pada LCD yang terhubung pada PORTC
lcd_gotoxy(0,0); // Meletakkan kursor pada baris 0 kolom 0
lcd_putsf("====COUNTER===="); // Kirim
data”===COUNTER===” ke LCD
lcd_gotoxy(0,1); // Meletakkan kursor pada baris 1 kolom 0
lcd_putsf("====UP====");} // Kirim data”=====UP=====” ke LCD
void
lcd_counter_down(){ // Subrutin lcd counter down, digunakan untuk memberikan
nilai pada LCD di PORTC
lcd_gotoxy(0,0); // Meletakkan kursor pada baris 0 kolom 0
lcd_putsf("====COUNTER===="); // Kirim
data”===COUNTER===” ke LCD
lcd_gotoxy(0,1); // Meletakkan kursor pada baris 1 kolom 0
lcd_putsf("====DOWN====");} // Kirim
data”=====DOWN=====” ke LCD
void main(void){ // Merupakan bagian utama dari program
DDRB=0xFF; // Set register DDRB=0xFF, ini untuk membuat PORTB sebagai
output
PORTA=0xFF; // Memberi nilai pada PORTA=0xFF
DDRA=0xFF; // Set register DDRA=0xFF, ini untuk membuat PORTA sebagai
output
PORTD=0x0FF; // Memberi nilai pada PORTA=0xFF
DDRD=0x00; // Set register DDRD=0x00, ini untuk membuat PORTD sebagai
input
n=0; // Memberi nilai variable n bernilai 0
lcd_init(16); // Inisialisasi bahwa menggunakan LCD 16 kolom
lcd_gotoxy(0,0); // Letakkan kursor LCD ke kolom 0 baris 0
lcd_putsf("====COUNTER===="); // Tampilkan
=====COUNTER===== pada LCD
PORTB=0xC0; // Memberi nilai PORTB=0xC0, ini membuat seven segment
menampilkan angka 0
while (1){ // Program didalam while akan terus berulang tanpa batas
if (PIND.2==0){{ // Jika PIND.2
bernilai 0( saklar counter up ditekan)
delay_ms(1000); // Buat delay selama 1000 mili
detik
while
(PIND.2==0); // Cek apakah PIND.2 sudah
ditekan( sudah ditekan dan sesaat kemudian dilepas), jalankan program while
if(n<9){ // Jika nilai
variable n lebih kecil dari 9
i=0; // Memberi nilai variable i
bernilai 0
while(i<9){ // Ulangi program dalam while, selama nilai variable i bernilai
kurang dari 9
n=n+1; // Nilai variable n ditambah 1
hasilnya disimpan kembali ke variable n
sevenseg(); // Panggil subrutin sevenseg()
lcd_counter_up(); // Panggil subrutin lcd_counter_up
running_led(); // Panggil subrutin running led()
i++; // Nilai variable I ditambah 1
delay_ms(1000);}}}} // Buat delay selama 1000 mili
detik
if (PIND.3==0){ // Jika PIND.3
bernilai 0( saklar counter up ditekan)
lcd_counter_down(); // Panggil lcd_counter_down()
running_led(); // Panggil subrutin running led()
PORTB=0x90;PORTA=0x00;delay_ms(1000);
PORTB=0x80;PORTA=0x7f;delay_ms(1000);
PORTB=0xf8;PORTA=0xbf;delay_ms(1000);
PORTB=0x82;PORTA=0xdf;delay_ms(1000);
PORTB=0x92;PORTA=0xef;delay_ms(1000); // Memberi
nilai pada PORTB
PORTB=0x99;PORTA=0xf7;delay_ms(1000); // dan buat delay 1000 milidetik
PORTB=0xb0;PORTA=0xfb;delay_ms(1000);
PORTB=0xa4;PORTA=0xfd;delay_ms(1000);
PORTB=0xf9;PORTA=0xfe;delay_ms(1000);
PORTB=0xc0;PORTA=0xff;delay_ms(1000);