C Programlama diliyle şamatalar

Başlatan z, 23 Ekim 2011, 15:32:04

Mucit23


AsHeS

Alıntı yapılan: Mucit23 - 19 Mart 2013, 10:07:14
Hocam yaptım birşeyler hem oldu hemde oldu.

Bu iş için şöyle bir fonksiyon yazdım.

void GLCD_Point(unsigned int x, unsigned int y, unsigned int size)
{
	int pointx=0, pointy=0;
	int angle, temp; 
	for(temp=1;temp<size+1;temp++)
	{
	  for(angle=0;angle<360;angle++)
	  {                                   
	  		pointx = x + (temp * cos((pi * angle)/180));
	      pointy = y + (temp * sin((pi * angle)/180));
		    GLCD_PutPixel(pointx,pointy);
    }
  }

}

Mucit23 hocam  bu kodun yavaş çalışması normaldir koruma önlemi almamışsınız yani temp=r ,angle=açı olmak üzere  temp*cos((pi * angle)/180)  sayısı birden çok kere aynı sayıyı gösterir mesela 3.75 ve 3.80 çıktı diyelim bunları direkt 3 e yuvarlar ve aynı bite 2 kez nokta atar hatta bu ara değerler çokça önünüze çıkar dolayısıyla bir önceki değerle karşılaştırma yaparak çizerseniz daha hızlı çalışırdı ama siz zaten çözdüğünüz için affınıza sığınarak bir not olarak buraya düşeyim dedim :)

Mucit23

Arkadaşlar merhaba.

Keilde yani c++ da Round komutunu nasıl kullanırım. Float bir değişkenim var. virgülden sonraki kısmı yok edip integer bir değişkene atmak istiyorum. Yani yuvarlama yapacağım..

muhittin_kaplan

#453
resim.h içerisinde bulunan font1, font2, font3 gibi array sabitlerim mevcut. bu bilgileri ben

avl=font1[*s-32]; ile alıp avl nin içerisine atıyorum.

buradaki font1 i nasıl olurda parametreye bağlarım ?

örneklemek istersem

fonksiyon(falan, filan, char fontName)
{
......falan filan....
......kod mod.....

avl=fontName[*s-32];

}

nasıl yaparım ?

fatih6761

Alıntı yapılan: muhittin_kaplan - 28 Mart 2013, 20:15:34
resim.h içerisinde bulunan font1, font2, font3 gibi array sabitlerim mevcut. bu bilgileri ben

avl=font1[*s-32]; ile alıp avl nin içerisine atıyorum.

buradaki font1 i nasıl olurda parametreye bağlarım ?

örneklemek istersem

fonksiyon(falan, filan, char fontName)
{
......falan filan....
......kod mod.....

avl=fontName[*s-32];

}

nasıl yaparım ?
Hocam parametre olarak pointer'ı (işaretçiyi) atın. Zaten fontName[*s-32] gibi bir kullanım için fontName 'in dizi ya da işaretçi olması gerekir.

muhittin_kaplan

fonksiyon(falan, filan, char *fontName)
{
......falan filan....
......kod mod.....

avl=fontName[*s-32];

}

şeklinde mi

muhittin_kaplan

font1[][32]{{1,2,3,4,5},{10,11,12,13}}
font2[][16]{{A,B,C,D,E},{Z,X,Y,T}}
font3[][8]{{#, $,&,,(,)},{H,K,M,L}}

fonksiyon(falan, filan, char fontName)
{
......falan filan....
......kod mod.....

avl=fontName[*s-32];

}

ne yaptıysam beceremedim. parametre olarak adresi de gönderdim. ama yukardaki fonksiyonla olmayacak gibi.

z

Alıntı yapılan: M_B - 25 Ekim 2011, 00:07:42
Hocam return() yazmanın bize ne tur bir avantajı olurki. Benim duşuncem hiç bir faydası olmayacağı yonunde.

Program ana donguye (main) girdimi daha cıkmayacaktır. cıksa bile gittiği yerden geri donecektir. Tabi gittiği yerde kısır donguye girmediyse.

Bayağı bir eski mesaj ama cevapsız kalmış galiba.

int main()  fonksiyonunun geri dönüşü int tanımlandığı için programın sonunu return(xxx) gibi bir komutla sonlandırmak, main satırından hiç çıkılmayacak olsa bile önemlidir. (En azından derlemede warning mesajı oluşumunu engeller.)

Öte yandan main fonksiyonunu çağıran startup kodun içine bir kaç satır ekleyip eğer main satırından istem dışı çıkıldı ise bunun farkına varıp kontrolu elinizde tutabilirsiniz.

C nispeden düşük seviyeli bir dildir. Stackdan kafanıza göre bir şeyler çekmenizin yolu açıktır. Stack pointer üzerinde yanlış manuplasyon yapıldığında mainden çıkabilirsiniz ve programınız crash olur.

Main rutininden çıkışta hata kodu göndermek özellikle işletim sistemi yada kontrol mekanizmaları üzerinde koşturulan platformlarda kullanılan bir yöntemdir.

Emin değilim ama C de adamlar manin fonksiyonuna int değerle geri dönüşü şart koştularda mainden çıkıldığında koşacak bir standart isimde bir fonksiyon da
isteğe bağlı kullanılıyor olabilir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

Hocalarım swicth case kullanmadan

Alıntı Yapconst unsigned char font1[][12]={ //8x10
   {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // <Space>
   {0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00}, // !
   {0x00,0x28,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // "
   {0x00,0x00,0x28,0x28,0xFC,0x28,0x50,0xFC,0x50,0x50,0x00,0x00}, // #
.......
.......
const unsigned char font2[][16]={//8x16
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
{0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00},/*"!",1*/
{0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/
{0x00,0x00,0x00,0x00,0x36,0x36,0x7F,0x36,0x36,0x36,0x7F,0x36,0x36,0x00,0x00,0x00},/*"#",3*/
........
.........
const unsigned char font3[][32] ={ //16*16 pixel
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, //  <Space>
{0x00,0x00,0x00,0x00,0x07,0x00,0x0F,0x80,0x0F,0x80,0x0F,0x80,0x0F,0x80,0x0F,0x80,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x00,0x00}, // !
{0x00,0x00,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x06,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // "

gibi tablolardan "benim seçimime" göre nasıl bilgi alırım ?
Kullandığım fonksiyon aşağıda, string i parametre olarak gönderemedim. (Bilgisayardan alışkanlık ya), adresini göndermeye çalıştım beceremedim
paramatreye bağlı olacak bir yapı kurmam gerek.

Alıntı Yapvoid LCD_write_String(unsigned char startX, unsigned int startY, unsigned char *s,unsigned int color,unsigned int xcolor)
{
  unsigned char avl,i,n;

   LCD_CS(0);

while (*s)
  {

    LCD_Set_Window(startX,startY,startX+7,startY+15); // DEĞİŞİCEK
    LCD_WR_REG8(0x22);

   for(i=0;i<16;i++)       //DEĞİŞECEK
  {
   avl=font2[*s-32];   //DEĞİŞECEK

    for(n=0;n<8;n++)
      {

       if(avl & 0x80) LCD_WR_DATA16(color);
        else LCD_WR_DATA16(xcolor);

       avl<<=1;

       }
   }

     startX=startX+13;//DEĞİŞECEK
     s++;
  }
  LCD_CS(1);
}

z

#459
@Kaplan

Aşağıdaki örneğe bakabilirsin.

const unsigned char Data[]={1,2,3};

void SystemInit()
{
          
}

unsigned char fonk(const unsigned char *d)
{
    d++;               // Laf olsun diye adımladık
    return(*d);      // Bu adımdaki değeri okuduk  
}

int main()
{
volatile unsigned char a;
          
     a=fonk(Data); 
}

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

M_B

Alıntı yapılan: muhittin_kaplan - 29 Mart 2013, 14:58:04
Hocalarım swicth case kullanmadan

gibi tablolardan "benim seçimime" göre nasıl bilgi alırım ?
Kullandığım fonksiyon aşağıda, string i parametre olarak gönderemedim. (Bilgisayardan alışkanlık ya), adresini göndermeye çalıştım beceremedim
paramatreye bağlı olacak bir yapı kurmam gerek.
muhittin hocam;
bu işlemi ne icin kullanacaksınız ?
Aslında ne yapmak istediginizi anlamadığım için soruyorum.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

muhittin_kaplan

font değişimi için hocam. parametre verecegim.

fonksiyon(x,y,"HelloWrd", Font1) gibi.

swic le uğraşmayayım dedim olay daha başka yerlere gitti.

M_B

#462
Dogru tahmin etmişim.
Hocam
stm322xg_eval_lcd.c ve  stm322xg_eval_lcd.h kutuphanelerini incelediniz mi ?
Ornek kullanımı aşağıda.
fontu değiştirmek icin
LCD_SetFont(&Font12x12); fonksiyonunu cagıracaksınız.

LCD_SetFont(&Font12x12);
LCD_SetTextColor(LCD_COLOR_GREEN);
	LCD_SetBackColor(LCD_COLOR_BLACK); 
  	LCD_DisplayStringLine(LINE(1), (uint8_t *)MESSAGE1);

LCD_SetFont(&Font8x12);
	LCD_SetTextColor(LCD_COLOR_BLACK);	 
	LCD_DisplayStringLine(135,"          Versiyon: v1.0.1   ");


mesaj birleştirme:: 30 Mart 2013, 15:36:07

+ hocam onları incelerken fonts.c ve fonts.h da inceleyin. Orda tanımlanmış yapılar var.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

z

Alıntı Yap
gibi tablolardan "benim seçimime" göre nasıl bilgi alırım ?
Kullandığım fonksiyon aşağıda, string i parametre olarak gönderemedim. (Bilgisayardan alışkanlık ya), adresini göndermeye çalıştım beceremedim
paramatreye bağlı olacak bir yapı kurmam gerek.

Stringin adresini fonksiyona nasıl göndereceğini ve fonksiyonda da bu adresdeki stringin bileşenlerine pointer üzerinden nasıl ulaşacağının yolunu göstermiştik halbuki. 

Fonksiyona fontun adresini yollayacaksın.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

Niye kiziyon ki.
Pointer i biliyorum. Fonksiyona da parametre olarak gonderiyorum. Ama tablo cift olunca yapamadim.