4 bit lcd de pic'in kalan 4 biti

Başlatan blacklogic, 01 Nisan 2013, 20:40:05

blacklogic

Merhaba arkadaşlar ben fırat devecinin kitabındaki lcd kütüphanesini kullanıyorum ve lcd yi picin 4 bitinden sürdüğümde kalan diğer 4 biti kullanamıyorum bunun sebebi nedir acaba ?
lcd.h
/*
* D4,D5,D6,D7 pinlerini kullanarak 4 bit iletisim kullanır.
* Cursor kapalıdır.
* RW kullanılmadığı için direk toprağa bağlanabilir.
* 2x16 LCD Kullanım Klavuzu
* lcd_init(); ile LCD'nin ilk ayarlarını yap
* lcd_clear(); ile LCD'yi sil
* lcd_yaz("deneme"); seklinde yazı yazdır.
* veri_yolla('F'); seklinde tek ascii kodu yazdır.
* lcd_gotoxy(1,13); seklinde LCD'nin istenilen yerine git.
* 
*/
#define rs RC0 //Pin tanımlamaları
#define rw RC1
#define e RC2
#define lcd_port PORTB
/* LCD'de kullanilan komutlarin tanimlamasi*/
#define Sil 1 // Ekrani temizler
#define BasaDon 2 // Imleci sol üst köseye getirir
#define SolaYaz 4 // Imlecin belirttigi adres azalarak gider
#define SagaYaz 6 // Imlecin belirttigi adres artarak gider
#define ImlecGizle 12 // Göstergeyi ac, kursor görünmesin
#define ImlecAltta 14 // Yanip sönen blok kursor
#define ImlecYanSon 15 // Yanip sönen blok kursor
#define ImlecGeri 16 // Kursoru bir karakter geri kaydır
#define KaydirSaga 24 // Göstergeyi bir karakter sağa kaydır
#define KaydirSola 28 // Göstergeyi bir karakter sola kaydır
#define EkraniKapat 8 // Göstergeyi kapat (veriler silinmez)
#define BirinciSatir 128 // LCD'nin ilk satir baslangıç adresi
// (DDRAM adres)
#define IkinciSatir 192 // Dkinci satirin baslangıç adresi
#define KarakUretAdres 64 // Karakter üreteci adresini belirle
// (CGRAM adres)
/* LCD'de Kullanilan Fonksiyon Seçimi */
#define CiftSatir8Bit 56 // 8 bit ara birim, 2 satir, 5*7 piksel
#define TekSatir8Bit 48 // 8 bit ara birim, 1 satir, 5*7 piksel
#define CiftSatir4Bit 40 // 4 bit ara birim, 2 satir, 5*7 piksel
#define TekSatir4Bit 32 // 4 bit ara birim, 1 satir, 5*7 piksel
extern void veri_yolla(unsigned char);
extern void lcd_clear(void);
extern void lcd_yaz(const char *s);
extern void lcd_gotoxy(unsigned char x, unsigned char y);
extern void lcd_init(void);
extern void lcd_komut(unsigned char c);


LCD.C
#include <pic.h>
#include "lcd.h" // lcd.h dosyası tanımlanıp, değerler alınıyor
#include "delay.h" // Gecikme fonksiyonu tanımlanıyor
void lcd_busy(void) // 500us bekleme
{
DelayUs(250);
DelayUs(250);
}
void lcd_komut(unsigned char c) // Komut gönderme fonksiyonu
{
rw=0; // LCD'ye yazma yapılacak
rs=0; // LCD'ye komut gönderilecek
e=1; // Düsen kenar tetikleme olduğu için E önce 1
lcd_port = ( c & 0xF0 ); // Yüksek değerlikli bitler gönderiliyor
e=0; // E, 0 yapılıyor
lcd_busy(); //Belirli süre bekleniyor
e=1; // E, 1 yapılıyor
lcd_port = ( (c & 0x0F)<<4 ); // Düsük değerlikli bitler gönderiliyor
e=0; // E, 0 yapılıyor
lcd_busy(); // Belirli bir süre bekleniyor
}
void veri_yolla(unsigned char c)
{
rw=0;
rs=1; // Komut yolladan tek farkı, RS'nin 1 olması
e=1;
lcd_port = ( c & 0xF0 );
e=0;
lcd_busy();
e=1;
lcd_port = ( (c & 0x0F)<<4 );
e=0;
lcd_busy();
}
void lcd_clear(void) // LCD siliniyor
{
lcd_komut(0x1);
DelayMs(2);
}
void lcd_yaz(const char * s) // LCD'ye string ifade gönderiliyor
{
lcd_busy();
while(*s)
veri_yolla(*s++);
}
void lcd_gotoxy(unsigned char x,unsigned char y) //LCD'nin belli
//bölgesine gidiliyor
{
if(x==1)
lcd_komut(0x80+((y-1)%16));
else
lcd_komut(0xC0+((y-1)%16));
}
void lcd_init() // LCD ilk yükleme ayarları yapılıyor
{
rs = 0;
e = 0;
rw = 0;
DelayMs(15);
e=1;
lcd_komut(0x02);
DelayMs(2);
lcd_komut(CiftSatir4Bit);
lcd_komut(SagaYaz);
lcd_komut(ImlecGizle);
lcd_clear();
lcd_komut(BirinciSatir);
}

kantirici

ilk dört bite, lcdye komut ve yazma yapılrken sürekli sıfır yükleniyor. lcd_komut ve veri_yolla fonks.larında maskeleme yaparak lcd_port'a yükleme yaparsanız kullanabilirsiniz.

MrDarK

Kendi lcd kütüphanenizi yazmanız gerekiyor yada arkadaşlar kendi kütüphanelerini eklerler buraya

mesaj birleştirme:: 01 Nisan 2013, 20:56:44

Kendi lcd kütüphanenizi yazmanız gerekiyor yada arkadaşlar kendi kütüphanelerini eklerler buraya
Picproje Eğitim Gönüllüleri ~ MrDarK