Merhaba arkadaşlar,
PIC18F4620 için bir siteden LCD kütüphanesi indirdim.
//LCD Functions Developed by electroSome
/*
#define RS RB2
#define EN RB3
#define D4 RB4
#define D5 RB5
#define D6 RB6
#define D7 RB7
*/
void Lcd_Port(char a)
{
if(a & 1)
D4 = 1;
else
D4 = 0;
if(a & 2)
D5 = 1;
else
D5 = 0;
if(a & 4)
D6 = 1;
else
D6 = 0;
if(a & 8)
D7 = 1;
else
D7 = 0;
}
void Lcd_Cmd(char a)
{
RS = 0; // => RS = 0
Lcd_Port(a);
EN = 1; // => E = 1
__delay_ms(4);
EN = 0; // => E = 0
}
Lcd_Clear()
{
Lcd_Cmd(0);
Lcd_Cmd(1);
}
void Lcd_Set_Cursor(char a, char b)
{
char temp,z,y;
if(a == 1)
{
temp = 0x80 + b - 1;
z = temp>>4;
y = temp & 0x0F;
Lcd_Cmd(z);
Lcd_Cmd(y);
}
else if(a == 2)
{
temp = 0xC0 + b - 1;
z = temp>>4;
y = temp & 0x0F;
Lcd_Cmd(z);
Lcd_Cmd(y);
}
}
void Lcd_Init()
{
Lcd_Port(0x00);
__delay_ms(20);
Lcd_Cmd(0x03);
__delay_ms(5);
Lcd_Cmd(0x03);
__delay_ms(11);
Lcd_Cmd(0x03);
/////////////////////////////////////////////////////
Lcd_Cmd(0x02);
Lcd_Cmd(0x02);
Lcd_Cmd(0x08);
Lcd_Cmd(0x00);
Lcd_Cmd(0x0C);
Lcd_Cmd(0x00);
Lcd_Cmd(0x06);
}
void Lcd_Write_Char(char a)
{
char temp,y;
temp = a&0x0F;
y = a&0xF0;
RS = 1; // => RS = 1
Lcd_Port(y>>4); //Data transfer
EN = 1;
__delay_us(40);
EN = 0;
Lcd_Port(temp);
EN = 1;
__delay_us(40);
EN = 0;
}
void Lcd_Write_String(char *a)
{
int i;
for(i=0;a[i]!='\0';i++)
Lcd_Write_Char(a[i]);
}
void Lcd_Shift_Right()
{
Lcd_Cmd(0x01);
Lcd_Cmd(0x0C);
}
void Lcd_Shift_Left()
{
Lcd_Cmd(0x01);
Lcd_Cmd(0x08);
}
Kodda görüldüğü gibi LCD bağlantıları D portuna göre yapılmış. Bu kütüphane için LCD'yi D portuna bagladim.Burada sorun yok eyvallah. Fakat B portuna bağladım ve yukarıdaki bağlantılarda port değişikliği gereken yerleri değiştirdim fakat LCD'yi B portuna bağladığımda LCD de karakterleri göremiyorum. Acaba kod içerisindeki fonksiyonlara gönderilen adresler D portu için mi ayarlanmış parametreler o yüzden mi kütüphane doğru çalışmıyor bu konuda bilgilendirir misiniz? Ya da D portundan başka bir porta bağlamak istersem kütüphanede hangi değişikliği yapmam lazım?
En üstdeki " define "ları istedigin pine ayarlayabilirsin. Bu kütüphaneyi uzun zaman önce denemiştim. Şu anda hatırladığım kadarıyla dediğim gibi bütün define'leri ayarlaman lazım. Kolay gelsin.
Alternatif bir kütüphane ararsan https://github.com/gencmucitler/XC8-Kutuphane/tree/master/Lcd kullanabilirsin. Video anlatımı mevcut https://youtu.be/06N3_u4BzAs
Portları değiştirmek için header dosyasındaki defineları yeniden tanımlamalısın. Bu arada I2c lcd kütüphanesinide inceleyebilirsin.