Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Picproje Kütüphane (Library) => Konuyu başlatan: rojhatbilge - 18 Ekim 2009, 16:54:00

Başlık: CCS C karakter LCD kütüphanesi
Gönderen: rojhatbilge - 18 Ekim 2009, 16:54:00
Herkese merhabalar

Kendi yazdığım, içinde Türkçe karakterlerinde bulunduğu 2x16 LCD kütüphanesini yayınlıyorum.


#ifndef _BENIMLCD_C_
#define _BENIMLCD_C_

#ifdef  LCD_PORT_B
#define enable          pin_B3
#define rs_xxxx         pin_B2
#define X_LCD_DATA_X    output_B
#define X_LCD_TRIS_X    set_tris_B
#endif

#ifdef  LCD_PORT_C
#define enable          pin_C3
#define rs_xxxx         pin_C2
#define X_LCD_DATA_X    output_C
#define X_LCD_TRIS_X    set_tris_C
#endif

#ifdef  LCD_PORT_D
#define enable          pin_D3
#define rs_xxxx         pin_D2
#define X_LCD_DATA_X    output_D
#define X_LCD_TRIS_X    set_tris_D
#endif

#define SOL    0
#define SAG    1

/*#include komutuyla lcd bildirimi yapılmadan önce #define LCD_PORT_X şeklinde X yerine B, C, D portlarından hangisi yazılırsa LCD o porta bağlanır.*/
//ÖRNEK
// #define  LCD_PORT_C        //lcd PORTC'ye bağlandı. Pin sıralaması aşağıda.
// #include "benimlcd.c"            


//LCD'nin pic'e bağlanan pinleri
//LCD                PIC
//D7-------------->X7
//D6-------------->X6
//D5-------------->X5
//D4-------------->X4
//E---------------->X3
//RS-------------->X2


////////////////////////////////////////////////////////////////////////////////////////////////

/*Özel karakter tablosu (iki karakterlik boş yer var. Bu boş yerler iki karakter daha ekleneblir)*/
const char karakter[8][8] = {
      {0x0E, 0X11, 0X10, 0X10, 0X10, 0X11, 0X0E, 0X04},       /////Ç////
      {0X00, 0X00, 0X0E, 0X11, 0X10, 0X11, 0X0E, 0X04},      ////ç/////
      {0x0E, 0X11, 0X10, 0X0E, 0X01, 0X11, 0X0E, 0X04},     ////Ş////
      {0x00, 0X00, 0X0F, 0X10, 0X0E, 0X01, 0X1E, 0X04},    /////ş///
      {0X0A, 0X00, 0X11, 0X11, 0X11, 0X13, 0X0D, 0X00},   ////ü////
      {0X0A, 0X00, 0X0E, 0X11, 0X11, 0X11, 0X0E, 0X00},   ////ö/////
      {0X00, 0X00, 0X0C, 0X04, 0X04, 0X04, 0X0E, 0X00}   ////ı////
       };


//       FONKSIYONLAR
void lcd_komut_gonder(byte );// -->LCD'ye 8 bitlik komut gönderir.
void lcd_yaz(byte );/////////// -->LCD'ye 8 bitlik data gönderir.
void lcd_hazirla();///////////////// -->LCD'yi 2x16 olarak hazırlar.
void lcd_imlec_duz(); ////////////// -->İmleci düz_alt hale getirir.
void lcd_imlec_yak_sondur();//////// -->İmleci karakter boyu yanıp söner hale getirir.
void lcd_sil(); //////////////////// -->LCD'yi silip imleci 1. satır başına getirir.
void lcd_imlec_gotoxy(byte , byte );//--> İmleci istenilen koordinata getirir.
void lcd_imlec_gizle();//////////// -->İmleci kaldırır.
void lcd_satirbasi(byte);////////////  -->İmleci 1.satir, 1.sütuna tasir.
void lcd_karakter_sil(byte , byte, int8 x);// --> byte satır, byte sütun dan itibaren b karakter siler.
void lcd_ozel_karakter_yukle(void);         /* --> LCD RAM'ına Ç, ç, Ş, ş, ü, ö, ı karakterlerini yükler.lcd_hazirla(); fonksiyonundan önce kullanılmalıdır. */
void lcd_imlec_kaydir(int1 yon, int size);   /*--> İmleci yon parametresiyle verilen yöne, size parametresi adetinde kaydırır.                                             //SAG veya SOL şeklinde sembolik sabit olarak verilir. Bu sembolik sabitler bu kütüphanede tanımlıdır. */


void lcd_ozel_karakter_yukle(void) {
  int i = 0, j = 0x40, k = 0;
  lcd_hazirla();
 
  for(i = 0; i < 8; i++)
     for(k = 0; k < 8; k++) {
        lcd_komut_gonder(j++);
        lcd_yaz(karakter[i][k]);
     }
}


void lcd_komut_gonder(byte komut) {
  X_LCD_DATA_X(komut & 0xF0);
  delay_us(5);
  output_low(rs_xxxx);
  delay_us(5);
  output_high(enable);
  delay_us(2);
  output_low(enable);
  delay_ms(2);
 
  X_LCD_DATA_X(komut << 4);
  delay_us(5);
  output_low(rs_xxxx);
  delay_us(5);
  output_high(enable);
  delay_us(2);
  output_low(enable);
  delay_ms(2);
}
 
void lcd_yaz(byte komut) {
  switch(komut) {
     case 'Ç': komut = 0; break;
     case 'ç': komut = 1; break;
     case 'Ş': komut = 2; break;
     case 'ş': komut = 3; break;  
     case 'ü': komut = 4; break;
     case 'ö': komut = 5; break;
     case 'ı': komut = 6; break;
  }
  X_LCD_DATA_X(komut & 0xF0);
  delay_us(5);
  output_high(rs_xxxx);
  delay_us(5);
  output_high(enable);
  delay_us(2);
  output_low(enable);
  delay_ms(2);
 
  X_LCD_DATA_X(komut << 4);
  delay_us(5);
  output_high(rs_xxxx);
  delay_us(5);
  output_high(enable);
  delay_us(2);
  output_low(enable);
  delay_ms(2);
}

void lcd_imlec_gotoxy(byte satir, byte sutun) {
  if(satir == 1)
     lcd_komut_gonder(0x80 | (sutun-1));
  if(satir == 2)
     lcd_komut_gonder(0x80 | (0x40 + (sutun-1)));
}

void lcd_hazirla() {
  Set_tris_A(0b00000000);
 // output_low(RW);
  X_LCD_DATA_X(0x00);
  X_LCD_TRIS_X(0x03);
  lcd_komut_gonder(0x02);
  lcd_komut_gonder(0x28);
  lcd_komut_gonder(0x08);
  lcd_komut_gonder(0x0C);
  lcd_komut_gonder(0x06);
  lcd_komut_gonder(0x01);
  delay_ms(10);
}

void lcd_imlec_duz() {
  lcd_komut_gonder(0x0E);
}

void lcd_imlec_yak_sondur() {
  lcd_komut_gonder(0x0D);
}

void lcd_sil() {
  lcd_komut_gonder(0x01);
}

void lcd_imlec_gizle() {
  lcd_komut_gonder(0x0C);
}
 
void lcd_satirbasi(byte __a) {
  if(__a == 1)
     lcd_komut_gonder(0x02);
  if(__a == 2)
     lcd_komut_gonder(0xC0);
}

void lcd_karakter_sil(byte satir, byte sutun, int8 x) {
  if(satir == 1)
     lcd_komut_gonder(0x80 | (sutun-1));
  if(satir == 2)
     lcd_komut_gonder(0x80 | (0x40 + (sutun-1)));
  while(x--)
     lcd_yaz(" ");
}

void lcd_imlec_kaydir(int1 yon, int size)
{
  int8 komut = 0b00010000;
  int8 mask;
 
  if(yon == SAG)
     mask = 0X04;    
  else
     mask = 0x00;
 
  komut |= mask;
  while(size--)
     lcd_komut_gonder(komut);
}

#endif



Örnek kod;

#include <18f4680.h>
#use delay (clock = 10000000)

#fuses HS, PUT

#define LCD_PORT_D

#include "benimlcd.c"

void main(void)
{
  lcd_ozel_karakter_yukle();
  lcd_hazirla();  
 
  delay_ms(1000);  
 
  lcd_sil();
  lcd_imlec_gotoxy(1, 5);
  lcd_yaz('A');
 
  printf(lcd_yaz, "Deneme");
 
  lcd_imlec_duz();
 
  while(1);
}



Başlık: Ynt: CCS C karakter LCD kütüphanesi
Gönderen: zamzam23 - 08 Ekim 2010, 16:23:55
RW ucu kullanılmıyor sanırım. onu nasıl entegre edebiliriz koda?
Başlık: Ynt: CCS C karakter LCD kütüphanesi
Gönderen: engineer42 - 19 Şubat 2013, 20:01:17
bu kodları kullanan var mı?