Blok diagram
Blok diagram sistem yang dibangun sebagai berikut
Software
Start
Buat Index
1
Text
Buat Index
2
Scroll
Tampilkan 3
karakter ke
dot matrix
End
Adapun untuk memberikan efek scroll, maka dibuat array yang akan
dipanggil dengan index yang increment sehingga karakter yang
muncul di led dot matrix tampil secara bergeser.
Rangkaian Skematik
Source Code
#include <mega8535.h>
#include <delay.h>
#include <stdio.h>
#include <string.h>
int a,i,n,k,l,y,x,c,z;
int n_font=96; //STATIS
int jumlah_urutan;
int flag=0;
char data;
char font_index[96]={'~','-
>','<-','{','|','}','[','"\"',']','^','_','`','"','!','#','$','%','&','
(',')','*','+',',','-','.','/','0','1','2','3','4','5','6','7','8','9',
':',';','<','=','>','?','@','
','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','
R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i',
'j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char index_text[]={''};
void tampilkan(void);
void buat_index_scroll(void);
void cek_scroll(void);
void tampilkan_index_text(void);
void buat_index_text(void);
void cek_index_text(void);
void konsole(void);
void tampilkan_greeting1(void);
void tampilkan_greeting2(void);
void tampilkan_dot_matrix(void);
void main(void)
{
// USART 9600
UCSRA=0x00;
UCSRB=0xD8;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;
buat_index_text();
buat_index_scroll();
while(1)
{
delay_ms(50);
data=UDR;
delay_ms(50);
if(data=='m')
{
konsole();
}
tampilkan_greeting1();
tampilkan_greeting2();
tampilkan_dot_matrix();
};
}
void buat_index_text(void)
{
for (i=0; i < n_text;i++)
{
//printf("\n\r");
for (j=0;j<n_font;j++)
{
//printf(" %c",text[i]);
//printf("->%c",font_index[j]);
if(text[i]==font_index[j])
{
//printf(" Match"); // cek karakter yg match
index_text[i]=j;
}
}
}
void tampilkan(void)
{
for (n=0;n<60;n++)
{
printf("%u",font[n]); // Unsigned dalam desimal
printf("->%u",&font[n]); // Unsigned dalam desimal
/*
p=&font[n];
printf("P:%u",p); // Unsigned dalam desimal
printf("\n\r");
delay_ms(100);
*/
}
}
void buat_index_scroll(void)
{
for (i=0;i<n_text;i++)
{
a=(int)index_text[i]*6;
for(n=0;n<6;n++) // 6 Kolom
{
jumlah_urutan=a+n;
scroll[z]=font[jumlah_urutan];
z++;
}
}
}
void cek_scroll(void)
{
for (i=0;i<z;i++)
{
printf("-%x",scroll[i]); // Unsigned dalam desimal
}
}
void konsole(void)
{
printf("\n\r\n\r");
printf("Pilih menu:"); // Jumlah pulsa
printf("\n\r");
printf("[1].Lihat Text"); // Jumlah pulsa
printf("\n\r");
printf("[2].Ganti Text"); // Jumlah pulsa
printf("\n\r");
printf("[3].Hapus Text"); // Jumlah pulsa
printf("\n\r");
while(1)
{
while(UCSRA.7)
{
data=UDR;
delay_ms(50);
if((flag==0)&& (data=='1'))
{
printf("\n\r");
printf("Isi Text:");
for(j=0; j< n_text; j++)
{
printf("%c",text[j]);
}
}
if((flag==0) &&(data=='2'))
{
printf("\n\r");
printf("Masukan Text:");
flag=1;
}
if((flag==0)&&(data=='3'))
{
n_text=0;
j=0;
printf("\n\r");
printf("Text telah dihapus:");
flag=0;
}
if(data==0x1b)
{
printf("\n\r");
printf("Data telah tersimpan");
flag=0;
}
};
};
void tampilkan_dot_matrix(void)
{
for(l=0; l<(n_text*6); l++) // jumlah karakter yg mau tampil
{
y=l*1; //y=faktor geser
x=0;
while(x<4) //speed
{
x=x+1; //scroll
// Generate clock
PORTA.1=0; //Clock
PORTA.2=1; //Latch
PORTA.1=1; //Clock
PORTA.2=0; //Latch
delay_us(100);
} //end looping for shift register
if(l==(n_text*6))
{
l=0;
}
} //end for
}
void tampilkan_greeting1(void)
{
z=0;
while(z<80) //speed
{
z=z+1;
for(i=0;i<81;i++) // i=jumlah kolom dot matrix
{
c=i-1;
PORTC=~font_greeting1[c];
if(i==0)
PORTA.0=0;
else
PORTA.0=1;
// Generate clock
PORTA.1=0; //Clock
PORTA.2=1; //Latch
PORTA.1=1; //Clock
PORTA.2=0; //Latch
delay_us(100);
} //end looping for shift register
void tampilkan_greeting2(void)
{
z=0;
while(z<80) //speed
{
z=z+1;
for(i=0;i<81;i++) // i=jumlah kolom dot matrix
{
c=i-1;
PORTC=font_greeting2[c];
if(i==0)
PORTA.0=0;
else
PORTA.0=1;
// Generate clock
PORTA.1=0; //Clock
PORTA.2=1; //Latch
PORTA.1=1; //Clock
PORTA.2=0; //Latch
delay_us(100);
} //end looping for shift register
Penulis