xsLIB: LCD Kütüphanesi

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

sigmoid

04 Mayıs 2014, 23:34:34 Son düzenlenme: 05 Mayıs 2014, 18:38:33 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 satirchar sutun);
void lcd_mesajyaz(char satirchar 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_trislcd_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 satirchar sutun)
{
	
char temp;
	
switch(
satir)
	
{
	
	
case 
1:
	
	
	
temp=sutun-10x80;
	
	
	
break;
	
	
case 
2:
	
	
	
tempsutun-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 satirchar 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)<<;
	
#endif
        
lcd_e=0;
	
__delay_us(1);

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

        
tempharf1 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;
    
temp0x40 | (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 argcchar** 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 argcchar** 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.com/    (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

15 Kasım 2014, 01:09:05 #4 Son düzenlenme: 15 Kasım 2014, 01:37:17 Extreme
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

15 Kasım 2014, 01:38:31 #6 Son düzenlenme: 15 Kasım 2014, 02:11:27 Extreme
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

16 Kasım 2014, 15:48:23 #8 Son düzenlenme: 16 Kasım 2014, 22:35:41 Extreme
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

20 Aralık 2019, 17:37:20 #10 Son düzenlenme: 27 Aralık 2019, 15:28:49 mehmet
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?

Yasal Uyarı: Picproje.org sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.Knın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur. Picproje.org hakkında yapılacak tüm hukuksal şikayetleri İletişim sayfamızdan bize bildirdikten en geç 3 (üç) iş günü içerisinde ilgili kanunlar ve yönetmelikler çerçevesinde tarafımızca incelenerek gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.