Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

glcd'e resim basma sorunu

Başlatan f628, 17 Aralık 2012, 22:26:28

f628

iyi akşamlar arkadaşlar;

glcd'e resim basmaya çalışıyorum lakin ccs'de yazılmış hiç bir örnek bulamadım nedense örneklerin bir çoğu proton dilinde yazılmış. elinde örnek olan varsa linkini verebilir mi acaba???

skara1214

serdar çiçeğin ccs c kitabını al orada yeteri kadar örnek mevcut
Herkes ölür ama herkes gerçekten yaşamaz

eistain_54

/////////////////////////////////////////////////////////////////////////
////                           EX_GLCD.C                             ////
////                                                                 ////
//// This example program demonstrates the use of a graphic LCD.     ////
//// A reading is taken by the analog to digital converter and       ////
//// displayed on the LCD. A bar shows the current reading relative  ////
//// to the minimum and maximum values. If the reading is greater    ////
//// than 4 volts, a warning message is displayed. A clock timer     ////
//// demonstrates the use of the circle and line functions and shows ////
//// that the program is active.                                     ////
////                                                                 ////
/////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,2003 Custom Computer Services         ////
//// This source code may only be used by licensed users of the CCS  ////
//// C compiler.  This source code may only be distributed to other  ////
//// licensed users of the CCS C compiler.  No other use,            ////
//// reproduction or distribution is permitted without written       ////
//// permission.  Derivative programs created using this software    ////
//// in object code form are not restricted in any way.              ////
/////////////////////////////////////////////////////////////////////////

#if defined(__PCM__)
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)

#elif defined(__PCH__)
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#define FAST_GLCD    // Try commenting this out to see the differences
#endif

#include <HDM64GS12.c>
#include <graphics.c>
#include <math.h>

void displayVoltage(int adc) {
   char voltage[9];
   sprintf(voltage, "%f", (float)adc * .01960784); // Converts adc to text
   voltage[4] = '\0';                              // Limit shown digits to 3
   glcd_rect(45, 18, 69, 25, YES, OFF);            // Clear the old voltage
   glcd_text57(45, 18, voltage, 1, ON);            // Write the new voltage
}

void main() {
   int1  warn = FALSE;
   int8  adc = 0, adc_old = 0;
   char  voltText[] = "Volts", warning[] = "Warning";
   float theta = 0;

   setup_adc_ports(RA0_ANALOG);
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(0);

   glcd_init(ON);                               // Must initialize the LCD
   glcd_rect(1, 5, 126, 15, NO, ON);            // Outline the bar
   glcd_text57(70, 18, voltText, 1, ON);        // Display "Volts"
   glcd_circle(30, 47, 10, NO, ON);             // Draw the clock circle

   for(;;) {
      adc = read_adc();                         // Read a value from the ADC
      displayVoltage(adc);                      // Display the reading
      adc = (adc > 249) ? 249 : adc;            // Keep the value 249 or less

      if(adc != adc_old) {
         glcd_rect(adc/2+1, 6, adc_old/2+1, 14, YES, OFF);  // Clears the old bar
         glcd_rect(1, 6, adc/2+1, 14, YES, ON);             // Draws a new bar
         adc_old = adc;                                     // Set old value to new

         if(adc > 200 && !warn) {                  // Check if over 4 volts
            glcd_rect(45, 38, 124, 55, YES, ON);   // Draw a filled black rectangle
            glcd_text57(47, 40, warning, 2, OFF);  // Write "Warning" on the LCD
            warn = TRUE; }
         else if(adc <=200 && warn) {
            glcd_rect(45, 37, 125, 55, YES, OFF);  // Draw a filled white rectangle
            warn = FALSE; }
      }

      // The following 3 lines make the clock hand spin around
      glcd_line(30, 47, 30+(int)(8*sin(theta)+.5), 47-(int)(8*cos(theta)+.5), OFF);
      theta = (theta > 5.9) ? 0 : (theta += .3);
      glcd_line(30, 47, 30+(int)(8*sin(theta)+.5), 47-(int)(8*cos(theta)+.5), ON);

      #ifdef FAST_GLCD
      glcd_update();
      #else
      delay_ms(100);    // Reduces flicker by allowing pixels to be on
                        // much longer than off
      #endif
   }
}


Example klasörünüzde var.Oradan glcd.c dosyasına erişebilir ve fonksiyonları inceleyebilirsiniz.İyi çalşmalar.
<edit: graphics.c imiş.
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!


f628

teşekkürler arkadaşlar serdar çiçeğin kitabına bakmıştım zaten lakin orada resim basmayı anlatmıyor ne yazık ki daha ziyade çubuk çizme, bar çizme, çember çizme tarzı örnekler mevcut.

ex glcd dosyasına da göz attım ama onda da resim basmaktan ziyade yine çubuk çember çizme işlemlerini gösteriyor.

acaba elinde ekrana resim basılan bir örnek olan yok mu arkadaşlar??

Okan AKÇA

resimleri cevirerek kullanırsanız kücük bir kodla istediginiz resmi ekrana basarsanız kodununz basit olur

f628

hocam resimleri hex'e çevirdim ama nedense çok büyük boyutlu dosyalar elime geçti(10.bin satır civarında) sanırım yanlış yaptım, yine de uğraşır bir şekilde yaparım onu  lakin asıl sorun glcd'e bu kodları nasıl göndereceğim?

bilgi verebilir misin acaba?

muhittin_kaplan

önce şunu sorayım CCS de glcd ye Byte bilgi (char) gönderebiliyormusunuz ?
     

f628

evet hocam.

çizgi çember çizme işlemlerini yaptım, byte de gönderebiliyorum. lakin resmi aktaramıyorum.

Okan AKÇA

int8 const Font20 [128] =
     (0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, 0x00, 0x00,
      0x10, 0x74, 0x1C, 0x17, 0x74, 0x1C, 0x17, 0x04, 0x42, 0x25, 0x12, 0x08, 0x24, 0x52, 0x21, 0x00,
      0x60, 0x56, 0x49, 0x4E, 0x30, 0x30, 0x40, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00,
      0x00, 0x00, 0x3E, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x3E, 0x00, 0x00, 0x00,
      0x00, 0x22, 0x14, 0x7F, 0x14, 0x22, 0x00, 0x00, 0x08, 0x08, 0x08, 0x7F, 0x08, 0x08, 0x08, 0x00,
      0x00, 0x00, 0x80, 0x60, 0x20, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
      0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00);





For (j = 0; j <8; j + +)
        (GLCD_Cmnd ((0b10111000) | row); / * page address of x * /
           gLCD_Cmnd (i); / * column address * /
           gLCD_Data (pat [j]); / * pattern data * /
           col + +; i + +;
        if (col == 61) (i = 0; gCS2 ();)
        )



f628

#10
hocam programı inceledim fakat yapamadım :( örneğin col değişkeni ne işe yarıyor?? neden sıfırlıyoruz?? biraz daha açabilir misiniz acaba?

mesaj birleştirme:: 18 Aralık 2012, 22:45:16



mesaj birleştirme:: 18 Aralık 2012, 22:50:16

hocam kendimce şu şekilde bir program yazdım;

For (y=0; y<8;y++){
         For(x=0; x<128;x++){

             a = metin[ (y*128)+x];
     

****

lakin a bilgisini glcdnin y-x konumuna atamıyorum(byte bilgisi gönderimi kitapta var sanmıştım lakin yokmuş)

acaba a'yı göndersem çalışır mı??

şimdiden teşekkürler....

f628

arkadaşlar yardım edebilecek birisi yok mu acaba?

Okan AKÇA

daha once yaptıgım çalışma vardı bi bakayım.

muhittin_kaplan

sözde koddur sendchar CCS de nedir bilemem.

for (Satır=1;Satır<9;Satır++)
{
   for (Sutun=1;Sutun<129;Sutun++)
   {
        GLCD_SendChar(OfsetAdres+Sutun)*Satır //OFSET ADRESS RESİM DOSYASININ BAŞLANGIÇ ETİKETİDİR.
   }
}


f628

#14
ben de 3-4 gündür onu arıyorum muhittin hocam  ve nedense hiç bir yerde denk gelemedim.

yine de teşekkürler en azından kafamda ki algoritma daha iyi şekillendi.

cyclone hocam eğer yaptığınız çalışmayı bulabilirseniz  minnettar olacağım.