Seri porttan gönderilen verilerle grafik çizmeye yararan program.
usart_plot.c
//////////////////////////////////////////////////////////
// //
// YAxisText Y ekseni etiketi. //
// XAxisText X ekseni etiketi. //
// Title Grafik başlığı. //
// XAxis, YAxis değerleri ekran görüntüsünde max //
// eksen uzunluklarını belirtir. //
// Hazırlanan kütüphanede giriş datasi int tipi //
// değişken katarı olmak zorunda. Diğer tip veriler //
// için kod modifiye edilebilir. //
// Kod Hi-Tech derleyicisinde test edildi. //
// Grafiğin anlaşılır olması için seri port monitöründe //
// seçilen font Courier New olmalıdır. //
// Örnek; //
// UsartPlot(int_data,"V-t Grafigi","V","t"); //
// //
///////////////////// Mihri-2009 /////////////////////////
#define YAxis 32 //Y eksen uzunluğu
#define XAxis 64 //X eksen uzunluğu
#define Grid 1 //1 Grid olsun, 0 Grid olmasın
#define FillLine 1 //1 grafik noktalarının altını çizgiyle doldurur
#define Sign 'M' //Grafiği oluşturan işaret
void UsartPlot(int Data1[],const char *Title,const char *XAxisText,const char *YAxisText); // prototip tanımlama
void UsartPlot(int Data1[],const char *Title,const char *XAxisText,const char *YAxisText)
{
int PosYAxis;
int NegYAxis;
int MaxVal=0;
int MinVal=0;
int ScaledNegData;
int ScaledPosData;
float Scale;
for(int i=0;i<XAxis;i++) //Girilen data dizisinde Max ve min değerleri bul
{
if(Data1[i]>MaxVal)
MaxVal=Data1[i];
if(Data1[i]<MinVal)
MinVal=Data1[i];
}
Scale=((float)(MaxVal-MinVal))/YAxis; //Çizim ölçeğini hesapla
if(Scale<1)
Scale=1;
PosYAxis=(int)((float)MaxVal/Scale)+2; //Max pozitif y eksenini hesapla
NegYAxis=(int)((float)MinVal/Scale)-3; //Min negatif y eksenini hesapla
printf("\n\r//---------- USART PLOT V1.0 ----------//");
printf("\n\r > Title : %s",Title);
printf("\n\r > Max %s =%4d",YAxisText,MaxVal);
printf("\n\r > Min %s =%4d",YAxisText,MinVal);
printf("\n\r > Scale =1/%d",(int)Scale);
printf("\n\r//-------- DESIGNED BY MIHRI %c --------//\n\r",169);
for(int y=PosYAxis;y>NegYAxis;y--) //Y eksenini tara
{
if((y==PosYAxis)) //Y ekseninin başına etiketi yaz
printf("\n\r +Y=%s",YAxisText);
for(int x=0;x<XAxis;x++) //X eksenini tara
{
if(x==0) //Y eksen değerlerini hesapla ve yaz
printf("\n\r%+5d|",(int)(Scale*y));
ScaledNegData=(int)((float)Data1[x]/Scale-0.9);
ScaledPosData=(int)((float)Data1[x]/Scale+0.9);
if(y==0) // Y=0 ekseninde 0'a eşit olan noktalara işaret yaz
{ // 0'a eşit olmayan yerlere çizgi çek
if((0==ScaledPosData)&&(0==ScaledNegData))
printf("%c",Sign);
else
printf("-");
if(x==(XAxis-1)) //X ekseninin etiketini yaz
printf("-> X=%s",XAxisText);
}
else if((y>0)&&(y==ScaledPosData)) //Y'nin 0'dan büyük değerleri için
printf("%c",Sign); //X'e karşılık gelen noktalara çizim işareti yaz
else if((y<0)&&(y==ScaledNegData)) //Y'nin 0'dan küçük değerleri için
printf("%c",Sign); //X'e karşılık gelen noktalara çixim işareti yaz
else //(X,Y) kordinatlarına denk gelen data değeri yoksa diğer işlemleri uygula
{
#if (FillLine==1) //İşaret noktasının altı çizgi ile doldurulsun
if((y>0)&&(y<ScaledPosData))
printf("|");
else if((y<0)&&(y>ScaledNegData))
printf("|");
else // İşaret noktası ve altındaki çizgiler hariç çizim alanı
{
#if(Grid==1) //Çizim alanında grid olsun
printf(".");
#else
printf(" ");
#endif
}
#else // İşaret noktasının altı çizgi ile doldurulmasın
#if(Grid==1) //Çizim alanında grid olsun
printf(".");
#else
printf(" ");
#endif
#endif
}
}
if(y==-1) //X eksen uzunluğunu yaz
{
printf(" X Lenght=%d",XAxis);
}
if(y==(NegYAxis+1)) //Y ekseni negatif değer etiketini yaz
printf("\n\r -Y=%s",YAxisText);
}
printf("\n\r");
}
Örnek çıktı.
//---------- USART PLOT V1.0 ----------//
> Title : Giris Sinyali Grafigi
> Max Volt = 128
> Min Volt =-128
> Scale =1/8
//-------- DESIGNED BY MIHRI © --------//
+Y=Volt
+144|................................................................
+136|................................................................
+128|.......MMM.............................MMM......................
+120|......M|||M...........................M|||M.....................
+112|.....M|||||M.........................M|||||M....................
+104|.....|||||||.........................|||||||....................
+96|....M|||||||M.......................M|||||||M...................
+88|....|||||||||.......................|||||||||...................
+80|....|||||||||.......................|||||||||...................
+72|...M|||||||||M.....................M|||||||||M..................
+64|...|||||||||||.....................|||||||||||..................
+56|...|||||||||||....................M|||||||||||..................
+48|..M|||||||||||M...................||||||||||||M.................
+40|..|||||||||||||...................|||||||||||||.................
+32|..|||||||||||||...................|||||||||||||.................
+24|.M|||||||||||||M.................M|||||||||||||M................
+16|.|||||||||||||||.................|||||||||||||||................
+8|.|||||||||||||||.................|||||||||||||||................
+0|M---------------M---------------M---------------M----------------> X=Zaman
-8|.................|||||||||||||||.................||||||||||||||| X Lenght=64
-16|.................|||||||||||||||.................|||||||||||||||
-24|.................M|||||||||||||M.................M|||||||||||||M
-32|..................|||||||||||||...................|||||||||||||.
-40|..................|||||||||||||...................|||||||||||||.
-48|..................M|||||||||||M...................||||||||||||M.
-56|...................|||||||||||....................M|||||||||||..
-64|...................|||||||||||.....................|||||||||||..
-72|...................M|||||||||M.....................M|||||||||M..
-80|....................|||||||||.......................|||||||||...
-88|....................|||||||||.......................|||||||||...
-96|....................M|||||||M.......................M|||||||M...
-104|.....................|||||||.........................|||||||....
-112|.....................M|||||M.........................M|||||M....
-120|......................M|||M...........................M|||M.....
-128|.......................MMM.............................MMM......
-136|................................................................
-144|................................................................
-Y=Volt
//---------- USART PLOT V1.0 ----------//
> Title : FFT Katsayilarinin Gercel Kismi
> Max k*Cos(Faz) = 31
> Min k*Cos(Faz) = -13
> Scale =1/1
//-------- DESIGNED BY MIHRI © --------//
+Y=k*Cos(Faz)
+33|................................................................
+31|..............................................................M.
+30|..............................................................|.
+28|..............................................................|.
+27|..............................................................|.
+26|..M...........................................................|.
+24|..|...........................................................|.
+23|..|...........................................................|.
+22|..|...........................................................|.
+20|..|...........................................................|.
+19|..|...........................................................|.
+17|..|...........................................................|.
+16|..|...........................................................|.
+15|..|...........................................................|.
+13|..|...........................................................|.
+12|..|...........................................................|.
+11|..|...........................................................|.
+9|..|...........................................................|.
+8|..|.......................................................M...|.
+6|..|.......................................................|...|.
+5|..|...M...................................................|...|.
+4|..|...|...................................................|...|.
+2|..|...|..........M...M...........................M...M....|...|.
+1|..|...|....M...M.|.M.|...M............M...MM...M.|.M.|...M|...|.
+0|M---M--MM---MM--M---M-MMM-M-MM--M---M--MM---MM--M---M--MM---MM---> X=Faz
-1|.|.M.|...M|...|...|........M..|M.||M.|...M....|...|...|....M...M X Lenght=64
-2|.M...M....|...|...|...........|..M|..M........|...|...|.........
-4|..........|...|...|...........|...|...........|...M...|.........
-5|..........|...|...|...........|...|...........|.......|.........
-6|..........|...M...|...........|...|...........|.......M.........
-8|..........|.......|...........|...|...........|.................
-9|..........M.......|...........|...|...........|.................
-11|..................M...........|...M...........|.................
-12|..............................|...............M.................
-13|..............................M.................................
-15|................................................................
-Y=k*Cos(Faz)
//---------- USART PLOT V1.0 ----------//
> Title : FFT Katsayilarinin Sanal Kismi
> Max k*Sin(Faz) =4052
> Min k*Sin(Faz) =-4050
> Scale =1/253
//-------- DESIGNED BY MIHRI © --------//
+Y=k*Sin(Faz)
+4557|................................................................
+4304|................................................................
+4051|..............................................................M.
+3797|..............................................................|.
+3544|..............................................................|.
+3291|..............................................................|.
+3038|..............................................................|.
+2785|..............................................................|.
+2531|..............................................................|.
+2278|..............................................................|.
+2025|..............................................................|.
+1772|..............................................................|.
+1519|..............................................................|.
+1265|..............................................................|.
+1012|..............................................................|.
+759|..............................................................|.
+506|..............................................................|.
+253|..............................................................|.
+0|MM-MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM-M-> X=Faz
-253|..|............................................................. X Lenght=64
-506|..|.............................................................
-759|..|.............................................................
-1012|..|.............................................................
-1265|..|.............................................................
-1519|..|.............................................................
-1772|..|.............................................................
-2025|..|.............................................................
-2278|..|.............................................................
-2531|..|.............................................................
-2785|..|.............................................................
-3038|..|.............................................................
-3291|..|.............................................................
-3544|..|.............................................................
-3797|..|.............................................................
-4051|..M.............................................................
-4304|................................................................
-Y=k*Sin(Faz)
//---------- USART PLOT V1.0 ----------//
> Title : FFT Katsayilari
> Max Genlik = 126
> Min Genlik = 0
> Scale =1/3
//-------- DESIGNED BY MIHRI © --------//
+Y=Genlik
+133|................................................................
+129|................................................................
+126|..M...........................................................M.
+122|..|...........................................................|.
+118|..|...........................................................|.
+114|..|...........................................................|.
+110|..|...........................................................|.
+106|..|...........................................................|.
+102|..|...........................................................|.
+98|..|...........................................................|.
+94|..|...........................................................|.
+90|..|...........................................................|.
+86|..|...........................................................|.
+82|..|...........................................................|.
+78|..|...........................................................|.
+74|..|...........................................................|.
+70|..|...........................................................|.
+66|..|...........................................................|.
+63|..|...........................................................|.
+59|..|...........................................................|.
+55|..|...........................................................|.
+51|..|...........................................................|.
+47|..|...........................................................|.
+43|..|...........................................................|.
+39|..|...........................................................|.
+35|..|...........................................................|.
+31|..|...........................................................|.
+27|..|...........................................................|.
+23|..|...........................................................|.
+19|..|...........................................................|.
+15|..|...........................................................|.
+11|..|...........................................................|.
+7|..|...........................................................|.
+3|..|...........................................................|.
+0|MM-MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM-M-> X=Faz
-3|................................................................ X Lenght=64
-7|................................................................
-Y=Genlik
[/font]
cok güzel paylasim tesekürler fakat sorum bu kod glcd icin değilmi? c den pek anlamam o yüzden soruyorum
glcd için değil. Seri porttan bilgisayara gönderiyor, sizde hyperterminal gibi bir programda sonuçları görebilirsiniz.
birkaç kod değişikliği ile glcdye de uyarlanabilinir.