LCD ye türkçe karakterleri yazma

Başlatan zafzaf82, 18 Ağustos 2006, 01:29:33

zafzaf82

Merhaba

CCS de LCD ye türkçe ve özel karakterler nasıl yazdırılabilir. Pic Basic Pro için forumda anlatılmış ama bunu CCS de nasıl yapacağımı bir türlü anlayamadım. Yardımlarınızı bekliyorum....
Mikroişlemci bi araçtır, amaç değil.....

DumrulBey

Merhaba,

Dostum benzer soru daha önce soruldu. Benzer şekilde ama kısaca cevaplıyorum: Aynı!

Şaka yaptım, bu kadar kısa değildi...:)

Yani orada gönderdiğin karakter değerlerini yine göndereceksin. Tek farkı put_c() veya putc() komutunu kullanacaksın. Tabii grafik LCD'de durum farklı. Do you understand me?

Sevgiler, saygılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)

Ziya

Karakter lcd ekrandan bahsediyor sanıyorum. Özel karakter için lcd_symbol komutu ile 7 farklı (aslında 8 ama 0. yı c de kullanamıyorsunuz) karakter tasarlayabilirsiniz. Örneğin Ç harfini 1 de, ı harfini 2 de, ş harfini 3 te tanımladınız diyelim.

Yazdırma işlemi printf('%cal%c%ct%cr',1,2,3,2); şeklinde. Bu ekranda Çalıştır yazısını çıkartır. Ancak aynısını seri porta gönderemezsiniz. CCS'de bu şekildeki işlemleri derlemede bazen hata veriyor. Sebebini bilmiyorum. Ama genelde bu yöntem çalışıyor.

Başka tecrübesi olan varsa bilmek isterim. Önemli bir konu çünkü.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

PhD

Selam

Makaleler kısmına bakın.

Kolay gelsin.

NOT: Daha önce bende sormuştum. ;)
...hiç...

Ziya

Üstad, orada picbasic için yazılmış açıklamalar var. Arkadaş CCS için soruyor.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

PhD

Selam,

O zaman işte cevap arkadaşlar;

.:PicProje:.

Ben makaleyi mantığını anlaması için demiştim. :oops:

Kolay gelsin. :)
...hiç...

zafzaf82

teşekkürler aradığım da buydu

ayrıca aşağıdaki linklede istediğimiz karakteri elde edebiliriz.

http://www.btinternet.com/%7Ee2one/lcd/graphics_character_definer.htm
Mikroişlemci bi araçtır, amaç değil.....

zafzaf82

pardon bi sorum daha olcaktı LCD ile ilgili karakter oluşturuken neden 5x7 olarak oluşturuyoruz. LCD nin segmentleri 5x8 değilmi normalde. Yoksa LCD nin en alt satırının boş kalmasımı gerekiyor.
Mikroişlemci bi araçtır, amaç değil.....

Ziya

Alıntı yapılan: "zafzaf82"teşekkürler aradığım da buydu
lcd_symbol demiştim. Aradığınız o değilmiydi? Ya da neden işinizi görmedi? Hangi bakımdan isteğinizi karşılamadı? Zahmet edip helpinden baksaydınız bunları ve bir de örnek programı görürdünüz. Yardım istiyorsanız verilen yardımlara değer verin!

LCD_SYMBOL()
 

Syntax:
 lcd_symbol (symbol, b7_addr, b6_addr, b5_addr, b4_addr, b3_addr, b2_addr, b1_addr, b0_addr);

 
 
Parameters:
 symbol is a 8 bit constant.

bX_addr is a bit address representing the segment location to be used for bit X of symbol.

 
 
Returns:
 undefined

 
 
Function:
 Loads 8 bits into the segment data area for the LCD with each bit address specified.  If bit 7 in symbol is set the segment at B7_addr is set,  otherwise it is cleared.   The same is true of all other bits in symbol. The B7_addr is a bit address into the LCD RAM.  

 
 
Availability:
 This function is only available on devices with LCD drive hardware.

 
 
Requires
 Constants are defined in the devices .h file.

 
 
Examples:
 byte CONST DIGIT_MAP[10]=

{0X90,0XB7,0X19,0X36,0X54,0X50,0XB5,0X24};

 

 

#define DIGIT_1_CONFIG               

COM0+2,COM0+4,COM05,COM2+4,COM2+1,   

COM1+4,COM1+5

 

for(i=1; i<=9; ++i) {

   LCD_SYMBOL(DIGIT_MAP[i],DIGIT_1_CONFIG);

   delay_ms(1000);

}  

 
Example Files:
 ex_92lcd.c

Also See: 
 setup_lcd(), lcd_load()

Gördüğünüz gibi son sorduğunuz soruya da gerek kalmazdı !
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

zafzaf82

Alıntı Yap
lcd_symbol demiştim. Aradığınız o değilmiydi? Ya da neden işinizi görmedi? Hangi bakımdan isteğinizi karşılamadı? Zahmet edip helpinden baksaydınız bunları ve bir de örnek programı görürdünüz. Yardım istiyorsanız verilen yardımlara değer verin!
LCD_SYMBOL()
 

Syntax:
 lcd_symbol (symbol, b7_addr, b6_addr, b5_addr, b4_addr, b3_addr, b2_addr, b1_addr, b0_addr);

 
 
Parameters:
 symbol is a 8 bit constant.

bX_addr is a bit address representing the segment location to be used for bit X of symbol.

 
 
Returns:
 undefined

 
 
Function:
 Loads 8 bits into the segment data area for the LCD with each bit address specified.  If bit 7 in symbol is set the segment at B7_addr is set,  otherwise it is cleared.   The same is true of all other bits in symbol. The B7_addr is a bit address into the LCD RAM. 

 
 
Availability:
 This function is only available on devices with LCD drive hardware.

 
 
Requires
 Constants are defined in the devices .h file.

 
 
Examples:
 byte CONST DIGIT_MAP[10]=

{0X90,0XB7,0X19,0X36,0X54,0X50,0XB5,0X24};

 

 

#define DIGIT_1_CONFIG               

COM0+2,COM0+4,COM05,COM2+4,COM2+1,   

COM1+4,COM1+5

 

for(i=1; i<=9; ++i) {

   LCD_SYMBOL(DIGIT_MAP[i],DIGIT_1_CONFIG);

   delay_ms(1000);

} 

 
Example Files:
 ex_92lcd.c

Also See:
 setup_lcd(), lcd_load()

Gördüğünüz gibi son sorduğunuz soruya da gerek kalmazdı !

dediğiniz koda bende bakma zahmetinde bulundum.
Ama o kodu derlerseniz, kodun hatalı oldugunu sizde görebilirsiniz sanırım...
Mikroişlemci bi araçtır, amaç değil.....

Ziya

Alıntı yapılan: "zafzaf82"...dediğiniz koda bende bakma zahmetinde bulundum.
Ama o kodu derlerseniz, kodun hatalı oldugunu sizde görebilirsiniz sanırım...
Şimdi bu yazdığınız yazı üzerine o kodu açtım ve derledim. Hatasız derledi.
CCS PCM C Compiler, Version 3.222, 16465               18-Ağu-06 22:20

               Filename: C:\Program Files\PICC\Examples\EX_92LCD.LST

               ROM used: 585 words (14%)
                         Largest free fragment is 2048
               RAM used: 10 (6%) at main() level
                         19 (11%) worst case
               Stack:    3 locations

İkinci söylemek istediğim şey, helpten baktığınız lcd_symbol açıklaması zaten herşeyi anlatıyor. Yani o komut lcd ekrana 8 tane istediğiniz şekli girebilmeniz için yazılmış. Nesini beğenmediniz de gidip aynı işi görmek için kırk dereden su getiren kod için aradığım bu dediniz anlayamadım doğrusu.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

zafzaf82

benim yazdıgım kodda bu

#if defined(__PCM__)
#include <16F628A.h>

#FUSES NOWDT                 	//No Watch Dog Timer
#FUSES INTRC                 	//Internal RC Osc
#FUSES NOPUT                 	//No Power Up Timer
#FUSES NOPROTECT             	//Code not protected from reading
#FUSES NOBROWNOUT            	//No brownout reset
#FUSES NOMCLR                	//Master Clear pin used for I/O
#FUSES NOLVP                 	//No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD               	//No EE protection


#use delay(clock=4000000,RESTART_WDT)
#include <LCD.C>

int i;
char karakter1[8]={0x00,0x00,0x0e,0x10,0x10,0x11,0x0e,0x04};  //ç
char karakter2[8]={0x00,0x00,0x0e,0x10,0x0e,0x01,0x1e,0x04};  //ş
char karakter3[8]={0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x00};  //ı
char karakter4[8]={0x04,0x0e,0x04,0x04,0x04,0x04,0x0e,0x00};  //İ
char karakter5[8]={0x0e,0x00,0x0f,0x11,0x11,0x0f,0x01,0x0f};  //ğ
char karakter6[8]={0x0f,0x10,0x10,0x0e,0x01,0x01,0x1e,0x04};  //Ş 
char karakter7[8]={0x0e,0x00,0x0f,0x11,0x11,0x0f,0x01,0x0f};  //ğ
char karakter8[8]={0x0a,0x00,0x0e,0x11,0x11,0x11,0x11,0x0e};  //Ö



void main() {

lcd_init();



  lcd_send_byte(0,0x40); //ilk karekter hafızanın adresi
  for (i=0;i<=8;++i)
  {
  lcd_putc(karakter1[i]);
  }

  lcd_send_byte(0,0x48); //2. karekter hafızanın adresi
  for (i=0;i<=8;++i)
  {
  lcd_putc(karakter2[i]);
  }

  lcd_send_byte(0,0x50); //3. karekter hafızanın adresi
  for (i=0;i<=8;++i)
  {
  lcd_putc(karakter3[i]);
  }

  lcd_send_byte(0,0x58); //4. karekter hafızanın adresi
  for (i=0;i<=8;++i)
  {
  lcd_putc(karakter4[i]);
  }

  lcd_send_byte(0,0x60); //5. karekter hafızanın adresi
  for (i=0;i<=8;++i)
  {
  lcd_putc(karakter5[i]);
  }

  lcd_send_byte(0,0x68); //6. karekter hafızanın adresi
  for (i=0;i<=8;++i)
  {
  lcd_putc(karakter6[i]);
  }

  lcd_send_byte(0,0x70); //7. karekter hafızanın adresi
  for (i=0;i<=8;++i)
  {
  lcd_putc(karakter7[i]);
  }

  lcd_send_byte(0,0x78); //8. karekter hafızanın adresi
  for (i=0;i<=8;++i)
  {
  lcd_putc(karakter8[i]);
  }

      for(;;)
      {
      delay_ms(100);
         lcd_gotoxy(1,1);
         lcd_putc(0);
         lcd_putc(1);
         lcd_putc(2);
         lcd_putc(3);
         lcd_putc(4);
         lcd_putc(5);
         lcd_putc(6);
         lcd_putc(7);
      }
}
Mikroişlemci bi araçtır, amaç değil.....

zafzaf82

Ziya bey yukarıdaki programın yaptıgı işi LCD_SYMBOL komutu ile nasıl yapabiliriz. Ben hala bu LCD_SYMBOL komutunu anlayabilimiş değilim.
Mikroişlemci bi araçtır, amaç değil.....

PhD

Selam arkadaşlar,

Buradaki LCD_SYMBOL de anlatılan COM1,COM2 gibi şeyler ne demek istiyor bende anlayamadım. Ayrıca bu LCD nasıl bir LCD yani sanki SEVEN SEGMENT LCD gibi duruyor.

Bence arkadaşlar tartışmayalım, bildiklerimizi detaylı anlatarak herkese bir şeyler öğretelim. ;)

Ben size verdiğim linkteki bilgiyi kullanıyordum ama @Ziya arkadaşım dediğiniz yöntem daha basit gibi eğer biraz detaylı anlatırsanız bu hammallıktan kurtulabiliriz.

Kolay gelsin.
...hiç...

Ziya

// Türkçe fontlar LCD hafızasına yerleştiriliyor.

void trfont()
{
 byte x, y, data;

 for(x=0;x<8;x++)
   {
    lcd_send_byte( 0, 0x40 | ( x << 3 ) );
    for(y=0;y<8;y++)
      {
       data = read_eeprom (104 + x * 8 + y);
       lcd_send_byte( 1, data );
      }
   }


/*
   lcd_symbol( //-- zil sekli
      0x00 ,
      0x04, 0x0e, 0x0e, 0x0e, 0x0e, 0x1f, 0x04, 0x04);
   lcd_symbol( //-- ı
      0x01 ,
      0x00, 0x00, 0x0c, 0x04, 0x04, 0x04, 0x0e, 0x00);
   lcd_symbol( //-- ş
      0x02 ,
      0x00, 0x00, 0x0e, 0x10, 0x0e, 0x01, 0x1e, 0x0c);
   lcd_symbol( //-- ü
      0x03 ,
      0x0a, 0x00, 0x11, 0x11, 0x11, 0x13, 0x0d, 0x00);
   lcd_symbol( // nota işareti
      0x04 ,
      0x04, 0x06, 0x05, 0x04, 0x0C, 0x1E, 0x0C, 0x00);
   lcd_symbol( // çift nota işareti  melodi ve müzik için
      0x05,
      0x0C, 0x08, 0x0B, 0x0A, 0x1A, 0x1A, 0x06, 0x06); */
/*   lcd_symbol( // çan ve nota işareti zil ve müzik için
      0x06,
      0x04, 0x0E, 0x1F, 0x00,
      0x06, 0x04, 0x0C, 0x0C);*/
/*   lcd_symbol( // -- Ç
      0x06 ,
      0x0e, 0x11, 0x10, 0x10, 0x10, 0x11, 0x0e, 0x0c);
   lcd_symbol( //-- zil sekli
      0x07 ,
      0x04, 0x0e, 0x0e, 0x0e, 0x0e, 0x1f, 0x04, 0x04);*/
}
Bu program fontları eepromdan okuyup 2x16 lcd ekrana aktarıyor. eepromdan okutmak istemezseniz döngülü kısımları /*...*/ arasına alın. /*...*/ arasındaki lcd_symbol(...) tanımlarını /* ... */ arasından çıkartın.

Kullanımı konusunda eksik yazmışım. Şöyle olacak:
printf(LCD_PUTC,"%cal%c%ct%cr",6,1,2,1);  Bu ekranda Çalıştır yazısını çıkartır.

sıfır nolu karakter C de string sonu anlamına geldiği için 0 nolu alanda tanımlanan karakteri kullanamıyorsunuz.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey