LCD ye türkçe karakterleri yazma

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

Ziya

Alıntı yapılan: "zafzaf82"benim yazdıgım kodda bu
[code]
#if defined(__PCM__)
#include <16F628A.h>

#FUSES NOWDT                    //No Watch Dog Timer
...
#use delay(clock=4000000,RESTART_WDT)
...
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};  //Ö
NOWDT tanımladıysanız delay rutinlerinde restart_wdt 'nin bir anlamı olmaz. Hatta delay rutininizin hassasiyetini de bozabilir belki.

Tanımladığınız dizilerin tamamı RAM bellekte. Ayrıca derleyici  ram belleğe bu karakterleri atmak için program alanında bir sürü kod üretecek. Bari const tanımlayın da dizi program alanında olsun.
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

Ziya bey ben kodları şu şekilde yazıp derliyorum. LCD_SYMBOL komutunda hata veriyor.

#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>

void trfont()
{
lcd_init();
   lcd_symbol( 0x00, 0x04, 0x0e, 0x0e, 0x0e, 0x0e, 0x1f, 0x04, 0x04 );//-- zil sekli
   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( 0x04, 0x04, 0x06, 0x05, 0x04, 0x0C, 0x1E, 0x0C, 0x00 ); // nota işareti
   lcd_symbol( 0x05, 0x0C, 0x08, 0x0B, 0x0A, 0x1A, 0x1A, 0x06, 0x06);// çift nota işareti  melodi ve müzik için
   lcd_symbol( 0x06, 0x04, 0x0E, 0x1F, 0x00, 0x06, 0x04, 0x0C, 0x0C); // çan ve nota işareti zil ve müzik için
   lcd_symbol( 0x06, 0x0e, 0x11, 0x10, 0x10, 0x10, 0x11, 0x0e, 0x0c); // -- Ç 
   lcd_symbol( 0x07, 0x04, 0x0e, 0x0e, 0x0e, 0x0e, 0x1f, 0x04, 0x04); //-- zil sekli

}

void main()
{

lcd_init();
trfont();
printf(LCD_PUTC,"%cal%c%ct%cr",6,1,2,1);
}
Mikroişlemci bi araçtır, amaç değil.....

PhD

Alıntı yapılan: "zafzaf82"Ziya bey ben kodları şu şekilde yazıp derliyorum. LCD_SYMBOL komutunda hata veriyor.

Selam,

Acaba CCS derleyicinizin versiyonu kaç? Belki eski versiyonunda LCD_SYMBOL komutu olmayabilir. Şu anda deneyemiyorum ama kodunuzda bir hata yok gibi.

Kolay gelsin.
...hiç...

zafzaf82

CCS 3.249 versiyonunu kullanıyorum. Bi türlü çalışmıyo bu program. Görünürde bi sorun yok ama hala LCD_SYMBOL komutunda hata veriyor.
Mikroişlemci bi araçtır, amaç değil.....

Ziya

lcd.c deriveri içerisinde olması lazımdı diye hatırlıyorum ama bulamadım. Gerçekten hata veriyor.

Size kaç kere söyledik öyle dandik bir derleyici kullanmayın diye. Adamlar eski versiyonda vermişti. Helpinde olup ta kendisi bulunmayan bir komut nasıl oluyor da EX_92LCD.C örneğinde hata vermeden derleniyor? Neyse boşverin. Hata pic kullanmakta. Geçin adam gibi arm7'ye. Emin olun sıfırdan öğrenirken picleri öğrenmekten daha kolay öğrenirsiniz.
void lcd_symbol(
   unsigned char x, unsigned char b0,unsigned char b1,unsigned char b2,
   unsigned char b3, unsigned char b4, unsigned char b5,
   unsigned char b6, unsigned char b7)
{
   lcd_send_byte( 0, 0x40 | ( x << 3 ) );
   lcd_send_byte( 1, b0 );
   lcd_send_byte( 1, b1 );
   lcd_send_byte( 1, b2 );
   lcd_send_byte( 1, b3 );
   lcd_send_byte( 1, b4 );
   lcd_send_byte( 1, b5 );
   lcd_send_byte( 1, b6 );
   lcd_send_byte( 1, b7 );
}

void LCD_position( unsigned char x )
{  lcd_send_byte( 0, 0b10000000 + x  );
}

void LCD_line1 ()
{  lcd_send_byte( 0, 0b10000000 );
}

void LCD_line2 ()
{  lcd_send_byte( 0, 0b10101000 );
}
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

CCS kadar içinde hata barındıran bi derleyici görmedim. Oysa ki başlangıçta çok basit ve kullanışlı gelmişti. Ama kullandıkça programın yani daha karmaşık işleri yapmaya başkadıkça programın çok basit yerlerde bile saçmaladıgını gördüm.
Gerçektende artık pic i ve CCS yi bırakma zamanı geldi galiba....

Yardımlarınız için çok teşekkürler....
Mikroişlemci bi araçtır, amaç değil.....

Ziya

Bir önceki mesajımda verdiğim lcd_symbol alt programı eski versiyondan kalmış. Kullanabilirsiniz.
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

Saol Ziya bey kullandım ve sonunda çalıştı. Ama bu haliyle

#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)
#include <LCD.C>

void lcd_symbol(
   unsigned char x, unsigned char b0,unsigned char b1,unsigned char b2,
   unsigned char b3, unsigned char b4, unsigned char b5,
   unsigned char b6, unsigned char b7)
{
   lcd_send_byte( 0,( 0x40 | ( x << 3 ) ));
   lcd_putc( b0 );
   lcd_putc( b1 );
   lcd_putc( b2 );
   lcd_putc( b3 );
   lcd_putc( b4 );
   lcd_putc( b5 );
   lcd_putc( b6 );
   lcd_putc( b7 );
}


void main()
{

lcd_init();

   lcd_symbol( 0x00, 0x04, 0x0e, 0x0e, 0x0e, 0x0e, 0x1f, 0x04, 0x04 );//-- zil sekli
   lcd_symbol( 0x01, 32, 32, 32, 36, 36, 36, 36, 32 );//-- ı
   lcd_symbol( 0x02, 0x00, 0x00, 0x0e, 0x10, 0x0e, 0x01, 0x1e, 0x0c );//-- ş
   lcd_symbol( 0x03, 0x0a, 0x00, 0x11, 0x11, 0x11, 0x13, 0x0d, 0x00 );//-- ü
   lcd_symbol( 0x04, 0x04, 0x06, 0x05, 0x04, 0x0C, 0x1E, 0x0C, 0x00 ); // nota işareti
   lcd_symbol( 0x05, 0x0C, 0x08, 0x0B, 0x0A, 0x1A, 0x1A, 0x06, 0x06 );// çift nota işareti  melodi ve müzik için
   lcd_symbol( 0x06, 0x04, 0x0E, 0x1F, 0x00, 0x06, 0x04, 0x0C, 0x0C ); // çan ve nota işareti zil ve müzik için
   lcd_symbol( 0x06, 0x0e, 0x11, 0x10, 0x10, 0x10, 0x11, 0x0e, 0x0c ); // -- Ç
   lcd_symbol( 0x07, 0x04, 0x0e, 0x0e, 0x0e, 0x0e, 0x1f, 0x04, 0x04 ); //-- zil sekli

lcd_gotoxy(1,1);
printf(LCD_PUTC,"%cal%c%ct%cr",6,1,2,1);



}


sonunda Çalıştır yazdı LCD de :)
Mikroişlemci bi araçtır, amaç değil.....

Ziya

Tebrik ederim :D İstersen fontları eeprom alanına atabilirsin. Verdiğim örnekte eepromdan okuyup, lcd'ye gönderen bir bölüm vardı. Onu kullanabilirsin. Bu şekilde program alanından kazanırsın.

Kolay gelsin.
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