xsLIB: LCD Kütüphanesi

Başlatan sigmoid, 04 Mayıs 2014, 20:34:34

sigmoid



XC8 derleyici için derlemiş olduğum HD44780 LCD kütüphanesi dosyalarıdır. Kütüphane ile LCD'ye 8bit veya 4 bit modda erişilebilinir. İsteğe bağlı olarak rw pini toprağa veya PIC'e bağlanabilir. Özel karakter ekleme ve lcdden veri okuma fonksiyonları da mevcuttur.

xsLCD.h
/*******************************************************************************
 * Kütüphane : xsLCD                                                           *
 * Yazar     : sigmoid                                                         *
 * Web       : http://www.hayaldefteri.net                                     *
 * Tarih     : 01 Mayıs 2014                                                   *
 * Versiyon  : 0.1                                                             *
 *                                                                             *
 * HD44780 karakter LCD kütüphanesi                                            *
 ******************************************************************************/

/*      Standart LCD ayak bağlantıları
1: Gnd  2: Vcc  3: Vee - Kontras ayağı
4: RS   5: RW   6: E
7: D0   8: D1   9: D2   10: D3  11: D4  12: D5  13: D6  14: D7
15: Backlight Vcc       16: Backlight Gnd                                     */

//PIC'in çalışma frekansı
#ifndef _XTAL_FREQ
    #define _XTAL_FREQ 4000000
#endif

//#define LCDBIT8    //lcd ekrana 8bit mi erişilecek
#define LCDBIT4    //yoksa 4 bit mi?

//#define LCDustpin     //4bit erişilecekse hangi pinler kullanılacak
#define LCDaltpin


//RW pini PIC'e mi yoksa Toprağa mı bağlı
#define lcd_rw_aktif

//printf fonksiyonu lcd'ye yazacak mı?
#define lcdprintf_aktif

// kullanılacak lcd ayaklar?
#define lcd_data	PORTD
#define lcd_tris	TRISD
#define lcd_rs          PORTAbits.RA0
#define lcd_tris_rs     TRISAbits.TRISA0
#define lcd_rw          PORTAbits.RA1
#define lcd_tris_rw     TRISAbits.TRISA1
#define lcd_e           PORTAbits.RA2
#define lcd_tris_e      TRISAbits.TRISA2

//fonksiyon prototipleri
void lcd_baslat(void);
void lcd_git(char satir, char sutun);
void lcd_mesajyaz(char satir, char sutun, const char *mesaj);
void lcd_mesajyaz_cp(const char *mesaj);
#ifdef lcd_rw_aktif
    void lcd_mesgulmu(void);
    char lcd_harfoku(void);
#endif
void lcd_harfyaz(char harf);
void lcd_ozelkarakter(char karakterno,char patern[8]);
void lcd_komut(char komut);
void lcd_sil(void);
void lcd_satirbasi(void);
void lcd_kursor_ac(void);
void lcd_kursor_kapat(void);
void lcd_display_ac(void);
void lcd_display_kapat(void);
void lcd_blink_ac(void);
void lcd_blink_kapat(void);
void lcd_sola_kaydir(void);
void lcd_saga_kaydir(void);
void lcd_satir1(void);
void lcd_satir2(void);
void lcd_satir3(void);
void lcd_satir4(void);
#ifdef lcdprintf_aktif
void putch(unsigned char byte);
#endif


xsLCD.c
/*******************************************************************************
 * Kütüphane     : xsLCD                                                       *
 * Yazar         : sigmoid                                                     *
 * Web           : http://www.hayaldefteri.net                                 *
 * Başlangıç     : 01 Mayıs 2014                                               *
 * Son Düzenleme : 04 Mayıs 2014                                               *
 * Versiyon      : 0.1                                                         *
 *                                                                             *
 * HD44780 karakter LCD kütüphanesi (4bit ve 8 bit modlu)                      *
 ******************************************************************************/
#include <xc.h>
#include "xsLCD.h"

//Değişkenler
char display_kursor_blink;  //display,kursor ve blink aç kapat komutları için.

/*******************************************************************************
*  LCD ekranı çalıştırır. İlk önce bu fonksiyon çalıştırılmalıdır.             *
*******************************************************************************/
#ifdef LCDBIT8
void lcd_baslat(void)
{
    char _i;
	lcd_tris=0x00; //lcd'nin bağlandığı pinler çıkış
        lcd_tris_rs=0;
        lcd_tris_e=0;
#ifdef lcd_rw_aktif
        lcd_tris_rw=0;
#endif
	__delay_ms(20);
	lcd_rs=0;
#ifdef lcd_rw_aktif
	lcd_rw=0;
#endif
	lcd_e=0;

        lcd_data=0x38;	//8 bit mod
        lcd_e=1;
        __delay_us(1);
        lcd_e=0;
        __delay_us(1);
        __delay_ms(5);

	__delay_us(40);
        lcd_komut(0x0C);  //display on
        display_kursor_blink=0x0C;
	__delay_us(40);
        lcd_komut(0x06);  //cursor ileri
	__delay_ms(2);
}
#endif

#ifdef LCDBIT4
void lcd_baslat(void)
{
    	#ifdef LCDustpin
		lcd_tris= lcd_tris & 0x0f;  	
        #endif
        #ifdef LCDaltpin
		lcd_tris=lcd_tris & 0xf0;
	#endif
	
        lcd_tris_e=0;
        lcd_tris_rs=0;
    #ifdef lcd_rw_aktif
            lcd_tris_rw=0;
            lcd_rw=0;
    #endif

        __delay_ms(20);
        lcd_rs=0;
	lcd_e=0;
	#ifdef LCDustpin
		lcd_data=0x20 | (lcd_data & 0x0f);	//4 bit mod
        #endif
        #ifdef LCDaltpin
		lcd_data=0x02 | (lcd_data &0xf0);	//4 bit mod
	#endif
	lcd_e=1;
	__delay_us(1);
	lcd_e=0;
	__delay_ms(5);
        lcd_komut(0x28);
	__delay_us(40);
        lcd_komut(0x0C);  //display on
	__delay_us(40);
        lcd_komut(0x06);  //cursor ileri
	__delay_ms(2);
}
#endif

/*******************************************************************************
* İstenilen pozisyona gider.                                                   *
* Örnek: lcd_git(2,5);                                                         *
*******************************************************************************/
void lcd_git(char satir, char sutun)
{
	char temp;
	switch(satir)
	{
		case 1:
			temp=sutun-1+ 0x80;
			break;
		case 2:
			temp= sutun-1+0xc0;
			break;
		case 3:
			temp= (sutun-1+0x94);
			break;
		case 4:
			temp= (sutun-1+0xd4);
			break;
	}
	lcd_komut(temp);
	__delay_us(100);
}

/*******************************************************************************
* İstenilen poziyonda ekrana yazı yazar.                                       *
* Örnek : lcd_mesajyaz(1,4,"Deneme");                                          *
*******************************************************************************/
void lcd_mesajyaz(char satir, char sutun, const char *mesaj)
{
    lcd_git(satir,sutun);
    do
    {
        lcd_harfyaz(*mesaj++);
    }while(*mesaj);
}

/*******************************************************************************
* Lcd ekrana en son kaldığı pozisyondan itibaren yazı yazar.                   *
* Örnek : lcd_mesajyaz_cp("deneme");                                           *
*******************************************************************************/
void lcd_mesajyaz_cp(const char *mesaj)
{
    do
    {
        lcd_harfyaz(*mesaj++);
    }while(*mesaj);
}

/*******************************************************************************
* Lcd meşgul olduğu sürece bu fonksiyon içinde bekler..                        *
* Lcd_komut ve lcd_harfyaz fonksiyonları bu fonksiyonu kullanır.               *
*******************************************************************************/
#ifdef lcd_rw_aktif

#ifdef LCDBIT8
void lcd_mesgulmu(void)
{
	char temp;
	lcd_rs=0;
	lcd_rw=1;
	lcd_tris=0xff;
	do
	{
		__delay_us(1);
		lcd_e=1;
		__delay_us(1);
		lcd_e=0;
		temp=lcd_data & 0x80;
	}while(temp);
	lcd_tris=0x00;
}
#endif

#ifdef LCDBIT4
void lcd_mesgulmu(void)
{
	char temp,temp2;
	lcd_rs=0;
	lcd_rw=1;
	#ifdef LCDustpin
		lcd_tris=0xf0 | lcd_tris;
        #endif
        #ifdef LCDaltpin
		lcd_tris=0x0f | lcd_tris;
	#endif
	do
	{
		__delay_us(1);
		lcd_e=1;
		__delay_us(1);
		lcd_e=0;	//high byte oku
		#ifdef LCDustpin
			temp=lcd_data & 0x80;
                #endif
                #ifdef LCDaltpin
			temp=lcd_data & 0x08;
		#endif
		__delay_us(1);
		lcd_e=1;
		__delay_us(1);
		lcd_e=0;	//low byte oku, ama herhangi bir değişkene kaydetmeye gerek yok.
	}while(temp);
	#ifdef LCDustpin
		lcd_tris=lcd_tris & 0x0f;
        #endif
        #ifdef LCDaltpin
		lcd_tris=lcd_tris & 0xf0;
	#endif
}
#endif

#else
void lcd_mesgulmu(void)
{
    __delay_us(100);   //bekle.
}
#endif

/*******************************************************************************
* Lcd ekrana tek bir harf yazar.                                               *
* Örnek : lcd_harfyaz('A');                                                    *
*******************************************************************************/
#ifdef LCDBIT8
void lcd_harfyaz(char harf)
{
	lcd_mesgulmu();
	lcd_rs=1;
#ifdef lcd_rw_aktif
	lcd_rw=0;
#endif
	lcd_data=harf;
	lcd_e=1;
	__delay_us(1);
	lcd_e=0;
	__delay_us(200);
}
#endif

#ifdef LCDBIT4
void lcd_harfyaz(char harf)
{
	lcd_mesgulmu();
	lcd_rs=1;
        #ifdef lcd_rw_aktif
            lcd_rw=0;
        #endif
	#ifdef LCDustpin
		lcd_data = (lcd_data & 0x0f) | (harf & 0xf0);	//high verisini gönder.
        #endif
        #ifdef LCDaltpin
		lcd_data = (lcd_data & 0xf0) | (harf >>4);
	#endif
	lcd_e=1;
	__delay_us(1);
	lcd_e=0;
	__delay_us(200);
        #ifdef LCDustpin
		lcd_data = (lcd_data & 0x0f) | (harf << 4);  //low verisini gönder.
	#endif
        #ifdef LCDaltpin
		lcd_data = (lcd_data & 0xf0) | (harf & 0x0f);
	#endif
	lcd_e=1;
        __delay_us(1);
	lcd_e=0;
	__delay_us(200);
}
#endif

/*******************************************************************************
* Lcd ekrandan tek bir harf okur                                               *
*******************************************************************************/
#ifdef lcd_rw_aktif

#ifdef LCDBIT8
char lcd_harfoku(void)
{
    char temp;
    lcd_mesgulmu();
    lcd_rs=1;
    lcd_rw=1;

    lcd_tris=0xff;
    lcd_e=1;
    __delay_us(1);
    temp=lcd_data;
    lcd_e=0;
    __delay_us(1);    
    lcd_tris=0x00;
    return temp;
}
#endif

#ifdef LCDBIT4
//task: yazılacak
char lcd_harfoku(void)
{
    char temp,harf1,harf2;

   	lcd_mesgulmu();
	#ifdef LCDustpin
		lcd_tris=0xf0 | lcd_tris;
        #endif
        #ifdef LCDaltpin
		lcd_tris=0x0f | lcd_tris;
	#endif

	lcd_rs=1;
        lcd_rw=1;

        lcd_e=1;
	__delay_us(1);
	#ifdef LCDustpin
		harf1 = (lcd_data & 0xf0);	//high verisini al.
        #endif
        #ifdef LCDaltpin
		harf1 = (lcd_data & 0x0f)<<4 ;
	#endif
        lcd_e=0;
	__delay_us(1);

	lcd_e=1;
        __delay_us(1);
        #ifdef LCDustpin
		harf2=(lcd_data & 0xf0)>>4 ;  //low verisini al.
	#endif
        #ifdef LCDaltpin
		harf2=(lcd_data & 0x0f);
	#endif
        lcd_e=0;
	__delay_us(1);

        temp= harf1 | harf2; //üst ve alt veriyi birleştir.

	#ifdef LCDustpin
		lcd_tris=lcd_tris & 0x0f;
        #endif
        #ifdef LCDaltpin
		lcd_tris=lcd_tris & 0xf0;
	#endif
                return temp;
}
#endif

#endif

/*******************************************************************************
* Lcd komutlarını gönderir.                                                    *
*******************************************************************************/
#ifdef LCDBIT8
void lcd_komut(char komut)
{
	lcd_mesgulmu();
	lcd_rs=0;
#ifdef lcd_rw_aktif
	lcd_rw=0;
#endif
	lcd_data=komut;
	lcd_e=1;
	__delay_us(1);
	lcd_e=0;
	__delay_ms(5);
}
#endif

#ifdef LCDBIT4
void lcd_komut(char komut)
{
	lcd_mesgulmu();
	lcd_rs=0;
        #ifdef lcd_rw_aktif
            lcd_rw=0;
        #endif
	#ifdef LCDustpin
		lcd_data = (lcd_data & 0x0f) | (komut & 0xf0);	//high verisini gönder.
	#endif
        #ifdef LCDaltpin
		lcd_data = (lcd_data & 0xf0) | (komut >>4);
	#endif
	lcd_e=1;
	__delay_us(1);
	lcd_e=0;
	__delay_ms(5);
	#ifdef LCDustpin
		lcd_data = (lcd_data & 0x0f) | (komut << 4);  //low verisini gönder.
        #endif
        #ifdef LCDaltpin
		lcd_data = (lcd_data & 0xf0) | (komut & 0x0f);
	#endif
	lcd_e=1;
	__delay_us(1);
	lcd_e=0;
	__delay_ms(5);
}
#endif

/*******************************************************************************
* Lcd ekranda özel karakter oluşturur.                                         *
*******************************************************************************/
void lcd_ozelkarakter(char karakterno,char patern[8])
{
    char temp,i;
    temp= 0x40 | (karakterno<<3);
    lcd_komut(temp);

    for(i=0;i<8;i++)
    {
        lcd_harfyaz(patern[i]);
    }
    lcd_satirbasi();
}

/*******************************************************************************
* Lcdyi siler.                                                                 *
* Örnek : lcd_sil();                                                           *
*******************************************************************************/
void lcd_sil(void)
{
	lcd_komut(0x01);
}

/*******************************************************************************
* 1. sat?r 1. sutuna gider                                                     *
*******************************************************************************/
void lcd_satirbasi(void)
{
	lcd_komut(0x02);
}


/*******************************************************************************
* Kursörü aktif yapar                                                          *
*******************************************************************************/
void lcd_kursor_ac(void)
{
        display_kursor_blink|=0x02;
	lcd_komut(display_kursor_blink);
}

/*******************************************************************************
* Kürsörü kapatır.                                                             *
*******************************************************************************/
void lcd_kursor_kapat(void)
{
    display_kursor_blink&=0xfd;
    lcd_komut(display_kursor_blink);
}

/*******************************************************************************
* LCD Displayi açar.                                                           *
*******************************************************************************/
void lcd_display_ac(void)
{
    display_kursor_blink|=0x04;
    lcd_komut(display_kursor_blink);

}

/*******************************************************************************
* LCD Displayi kapatır.                                                        *
*******************************************************************************/
void lcd_display_kapat(void)
{
    display_kursor_blink&=0xfb;
    lcd_komut(display_kursor_blink);
}

/*******************************************************************************
* Kürsör ekranda yanıp söner                                                   *
*******************************************************************************/
void lcd_blink_ac(void)
{
    display_kursor_blink|=0x01;
    lcd_komut(display_kursor_blink);
}

/*******************************************************************************
* Kürsörün ekranda yanıp sönme özelliğini kapatır.                             *
*******************************************************************************/
void lcd_blink_kapat(void)
{
    display_kursor_blink&=0xfe;
    lcd_komut(display_kursor_blink);
}

/*******************************************************************************
* LCD ekranı sola kaydırır.                                                    *
*******************************************************************************/
void lcd_sola_kaydir(void)
{
    lcd_komut(0x18);
}

/*******************************************************************************
* LCD ekranı sağa kaydırır.                                                    *
*******************************************************************************/
void lcd_saga_kaydir(void)
{
    lcd_komut(0x1C);
}

/*******************************************************************************
* 1. satır 1. sutuna gider                                                     *
*******************************************************************************/
void lcd_satir1(void)
{
	lcd_komut(0x80);
}

/*******************************************************************************
* 2. satır 1. sutuna gider                                                     *
*******************************************************************************/
void lcd_satir2(void)
{
	lcd_komut(0xc0);
}

/*******************************************************************************
* 3. satır 1. sutuna gider                                                     *
*******************************************************************************/
void lcd_satir3(void)
{
	lcd_komut(0x94);
}

/*******************************************************************************
* 4. satır 1. sutuna gider                                                     *
*******************************************************************************/
void lcd_satir4(void)
{
	lcd_komut(0xd4);
}

/*******************************************************************************
* printf fonksiyonu için                                                       *
*******************************************************************************/
#ifdef lcdprintf_aktif
void putch(unsigned char byte)
{
	lcd_harfyaz(byte);
}
#endif




xsLCD.h içerisindeki tanımlamaların açıklamaları:
#define LCDBIT4
veya
#define LCDBIT8
tanımlamları ile LCD ye kaç bir veri yolu ile erişeceğimizi seçiyoruz.

Eğer 4bit modunda erişilecekse
#define LCDustpin
veya
#define LCDaltpin
tanımlamaları ile portun altpinleri mi yoksa üst pinlerinin mi kullanılacağı belirtilir.

#define lcd_rw_aktif
ile rw pini PIC tarafından kontrol edileceği anlamına gelir. Eğer rw pinini toprağa bağlayacaksak bu satır silinmeli veya // ile yorumlanmalıdır.

#define lcdprintf_aktif
ile printf fonksiyonunun LCD ekrana yazması sağlanır.

#define lcd_data   PORTD
#define lcd_tris   TRISD
#define lcd_rs          PORTAbits.RA0
#define lcd_tris_rs     TRISAbits.TRISA0
#define lcd_rw          PORTAbits.RA1
#define lcd_tris_rw     TRISAbits.TRISA1
#define lcd_e           PORTAbits.RA2
#define lcd_tris_e      TRISAbits.TRISA2

satırları ile lcdnin bağlandığı portlar belirtilir. Artık lcdyi kullanmak için gerekli ayarlamalar tamamlanmıştır.

LCD Fonksiyonları:
lcd_baslat(); Lcd'yi kullanmak için ilk olarak bu fonksiyon çalıştırılmalıdır.

void lcd_mesajyaz(char satir, char sutun, const char *mesaj); İstenilen satır ve sütuna yazı yazmamızı sağlayan fonksiyondur. Örnek: lcd_mesajyaz(1,1,"Deneme");

void lcd_mesajyaz_cp(const char *mesaj); LCD ekrana en son kaldığı yerden itibaren yazı yazar. Örnek: lcd_mesajyaz_cp("selam");

void lcd_git(char satir, char sutun); istenilen sütun ve satıra imlecin gitmesini sağlar. Örnek: lcd_git(2,5);

void lcd_sil(void); LCD ekranı siler. Örnek: lcd_sil();

void lcd_satirbasi(void); İmleç lcd ekranın 1.sütun 1.satırına gider.

void lcd_satir1(void);
void lcd_satir2(void);
void lcd_satir3(void);
void lcd_satir4(void);
istenilen satıra gitmek için kullanılır.

void lcd_harfyaz(char harf); LCD ekrana tek bir harf yazar. Örnek: lcd_harfyaz('A');

char lcd_harfoku(void); İmleçin olduğu yerden bir harf okur. Örnek: harf=lcd_harfoku();

void lcd_ozelkarakter(char karakterno,char patern[8]); lcd ekrana 8 adet özel karakter oluşturabiliriz. Yukarı sağa sola ok işareti, kalp sembolü gibi. Bu fonksiyonun kullanımı ile ilgili bir örnek yapacağım.

void lcd_kursor_ac(void); Kürsörü açar.

void lcd_kursor_kapat(void); Kürsörü kapatır.

void lcd_display_ac(void); LCD ekranı açar.

void lcd_display_kapat(void); LCD ekranı tamamen kapatır.

void lcd_blink_ac(void); İmleçin yanıp sönmesini sağlar.

void lcd_blink_kapat(void); İmlecin yanıp sönme özelliğini iptal eder.

void lcd_sola_kaydir(void); Ekranı bir karakter sola kaydırır.

void lcd_saga_kaydir(void); Ekranı bir karakter sağa kaydırır.




Örnek Çalışmalar:
1.Merhaba PicProje



main.c
/*******************************************************************************
 * File:   main.c                                                              *
 * Author: sigmoid                                                             *
 *                                                                             *
 * xsLCD kütüphanesi test programı                                             *
 ******************************************************************************/

#include <stdio.h>
#include <stdlib.h>

#include <xc.h>

#define _XTAL_FREQ 4000000

#include "xsLCD.h"

 // CONFIG
#pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable bit (PWRT enabled)
#pragma config BOREN = OFF      // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

void main(int argc, char** argv) {

    ADCON1=0x07;
    lcd_baslat();
    lcd_sil();
    lcd_mesajyaz(1,1,"Merhaba");
    lcd_mesajyaz(2,5,"PicProje");
    while(1);
}



2. Özel Karakter Tanımlama:



/*******************************************************************************
 * File:   main.c                                                              *
 * Author: sigmoid                                                             *
 *                                                                             *
 * xsLCD kütüphanesi test programı                                             *
 ******************************************************************************/

#include <stdio.h>
#include <stdlib.h>

#include <xc.h>

#define _XTAL_FREQ 4000000

#include "xsLCD.h"

 // CONFIG
#pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable bit (PWRT enabled)
#pragma config BOREN = OFF      // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)


char kalp[8]={
0b00000,
0b01010,
0b10101,
0b10001,
0b01010,
0b00100,
0b00000,
0b00000,
};

void main(int argc, char** argv) {

    ADCON1=0x07;
    lcd_baslat();
    lcd_sil();

    lcd_ozelkarakter(0,kalp);   //kalp sembolü lcd ekrana çizilir.

    lcd_mesajyaz(2,5,"PicProje");
    lcd_git(2,3);
    lcd_harfyaz(0); // kalp sembölünü çiz.

    while(1);
}


ISIS Devre


Proje dosyası: http://www.hayaldefteri.net/images/picproje/xsLCD.X.rar

Extreme

teşekkürler

aynı komutlar 4x20 içinde kullanılabilir mi ?

X-Fi

Hocam güzel çalışma olmuş xsLIB deki xs in bir anlamı varmı yoksa kendiniz mi türettiniz.

@Extreme gördüğüm kadarıyla 4x20 destekliyor.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

sigmoid

Mplabx, xc8 deki x harfi ve sigmod in s harfi birleştrip kendimce oluşturduğum bir ek sadece. 4x20 ile protesuda denemeler yaptım. Ama gerçek hayatta test etme fırsatım olmadı. İyi çalışmalar.

Extreme

#4
Hocam merhaba çalışmanızın denemesini yapıyorum. gayet güzel çalışıyor.

4x20 lerdede çalışması çok güzel bir özellik.

data bacakları flexy olarak değiştirebiliyormuyuz bu yazılımda ben inceledim bulamadım ?

Sadece sizin tanımladığınız varsayılan pinleri mi kullanabiliyoruz.

sigmoid

xsLCD.h dosyasındaki define tanınlamaları ile istediğiniz databacaklarını kullanabilirsiniz.

Extreme

#6
Hocam tekrar söylüyorum çalışmanız çok verimli.
Ben yaptığınız projenin ne oranda flexible olduğuna bakıyorum.

RS,RW,EN için değişebiliyor evet fakat D portlarına gelmiyor.(D 4 pin data kullanılmışsa)

data bacaklarını alt ve üst olarak ayırmışsınız. bu ayrımda var
fakat karışık olarak kullanabilirmiyiz ?

d1 > a4
d2 > b3
gibi.

sigmoid

#define lcd_data   PORTD
#define lcd_tris   TRISD

tanımlamaları ile hangi port ile  LCD'nin data  hattını kontrol edeceğimizi belirleyebiliriz. İstersek bunu portb ile istersek portc ilede yapabilirsiniz. LCD ye 4bit modda erişiyorsanız

//#define LCDustpin     //4bit erişilecekse hangi pinler kullanılacak
#define LCDaltpin

tanımlamaları ile data hattının alt 4 biti mi (D0,D1,D2,D3)  yoksa üst dört biti (D4,D5,D6,D7) ile mi erişileceği belirlenir .

Extreme

#8
Teşekkürler emeğinize sağlık.

sigmoid

Youtube kanalımda lcd kullanımını anlattığım bir video yükledim.
https://youtu.be/06N3_u4BzAs

Asıl haber ise, Arduino projelerinde pratik olduğu için sevdiğim I2C seri lcdleri niçin pic ilede kullanmayalım diye düşündüm. yukarıdaki lcd fonksiyonunu biraz modifikasyonla I2C lcd yi kullanabilecek şekle getirdim.

I2C Lcd kullanımı ile ilgili videom da : https://youtu.be/jUf-ghgjjlg

Tüm kodlara github sitesinden ulaşabilirsiniz. www.github.com/gencmucitler

İnşallah herkes için faydalı olur.

b160918008

#10
Ben de mcc ikonu olmadığı için mcc ayarını yapamıyorum ve .c uzantılı yerde
#include "mcc_generated_files/mcc.h"
hata veriyor.
Bunu nasıl düzeltebilirim?