kütüphaneleri ile pıc'in farklı portları da kullanıla bilir.
MALΖEME LİSTESİ:
1-7805
2-4MHz kristal
3-2adet 22pf
4-100nf
5-4k7
6-2x16 LCD
7-16F877
1-7805
2-4MHz kristal
3-2adet 22pf
4-100nf
5-4k7
6-2x16 LCD
7-16F877
8-10K pot
DEVRE ŞEMASI:
CCSC KODU:
#include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları
#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
#include <benim_LCD.c> // benim_LCD.c dosyası programa ekleniyor
/********* ANA PROGRAM FONKSİYONU********/
void main ( )
{
setup_psp(PSP_DISABLED); // PSP birimi devre dışı
setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
setup_adc(ADC_OFF); // ADC birimi devre dışı
setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı
lcd_hazirla(); // LCD başlangıç ayarları yaptırılıyor
while(1) // Sonsuz döngü
{
imlec(1,1); // İmlec 1.satır 1.sütunda
printf(lcd_veri,"Kendi LCD Dosya"); // LCD'ye veri yazdırılıyor
delay_ms(1000);
imlec(2,4); // İmlec 2.satır 4.sütunda
printf(lcd_veri,"Denememiz"); // LCD'ye veri yazdırılıyor
delay_ms(1000);
lcd_komut(0x01); // LCD sıfırlanıyor
lcd_komut(0x0E); // İmleç alt çizgi modunda
imlec(1,6); // İmlec 1.satır 6.sütunda
printf(lcd_veri,"C"); delay_ms(1000);
printf(lcd_veri,"C"); delay_ms(1000);
printf(lcd_veri,"S"); delay_ms(1000);
printf(lcd_veri," C"); delay_ms(1000);
lcd_komut(0x01); // LCD sıfırlanıyor
}
}
LCD KÜTÜPHANESİ:
//////////////////////////////////////////////////////////////
// benim_LCD.c //
// Bu LCD sürücü dosyası 2x16 HD44780 uyumlu LCD’ler //
// için yazılmıştır. LCD’ye sadece yazma yapılacağı için //
// R/W ucu şaseye bağlanmalıdır. LCD bağlantısı aşağıdadır. //
//////////////////////////////////////////////////////////////
// RB0 -> LCD’nin D4 ucuna
// RB1 -> LCD’nin D5 ucuna
// RB2 -> LCD’nin D6 ucuna
// RB3 -> LCD’nin D7 ucuna
// RB4 -> LCD’nin RS ucuna
// RB5 -> LCD’nin E ucuna
// R/W ucu direkt şaseye bağlanacak
#define e pin_b5 // LCD'nin E ucu RB5 pinine bağlı
#define rs pin_b4 // LCD'nin RS ucu RB4 pinine bağlı
//****** LCD'ye Komut Gönderme Fonksiyonu **********
void lcd_komut(byte komut)
{
output_b(komut>>4); // Komutun yüksek değerli 4 bitini gönder
output_low(rs); // LCD komut almak için ayarlandı
delay_cycles(1); // 1 komut saykılı bekle
output_high(e); // E ucu lojik-1'den lojik-0'a çekiliyor
delay_cycles(1); // 1 komut saykılı bekle
output_low(e);
delay_ms(2); // 2 msn gecikme veriliyor
output_b(komut&0x0F); // Komutun düşük değerli 4 bitini gönder
output_low(rs); // LCD veri almak için ayarlandı
delay_cycles(1); // 1 komut saykılı bekle
output_high(e); // E ucu lojik-1'den lojik-0'a çekiliyor
delay_cycles(1); // 1 komut saykılı bekle
output_low(e);
delay_ms(2); // 2 msn gecikme veriliyor
}
//******* LCD'ye Veri Gönderme Fonksiyonu **********
void lcd_veri(byte veri)
{
output_b(veri>>4); // Verinin yüksek değerli 4 bitini gönder
output_high(rs); // LCD veri almak için ayarlandı
delay_cycles(1); // 1 komut saykılı bekle
output_high(e); // E ucu lojik-1'den lojik-0'a çekiliyor
delay_cycles(1); // 1 komut saykılı bekle
output_low(e);
delay_ms(2); // 2 msn gecikme veriliyor
output_b(veri&0x0F); // Verinin düşük değerli 4 bitini gönder
output_high(rs); // LCD veri almak için ayarlandı
delay_cycles(1); // 1 komut saykılı bekle
output_high(e); // E ucu lojik-1'den lojik-0'a çekiliyor
delay_cycles(1); // 1 komut saykılı bekle
output_low(e);
delay_ms(2); // 2 msn gecikme veriliyor
}
//******* LCD'de İmlec Konumlandırma Fonksiyonu ********
void imlec(byte satir, byte sutun)
{
if (satir==1) // Eğer satır değişkeni "1" ise
lcd_komut(0x80|(sutun-1));
if (satir==2) // Eğer satır değişkeni "2" ise
lcd_komut(0x80|(0x40+(sutun-1)));
}
//********* LCD Başlangıç Ayarları Fonksiyonu ******
void lcd_hazirla()
{
int i=0;
output_low(rs); // RS ucu lojik-0
output_low(e); // E ucu lojik-0
delay_ms(30); // LCD enerjlendiğinde LCD'nin hazır olması için beklenen süre
for(i=0;i<=3;i++) // LCD'ye 3 kez 0x03 komutu gönderiliyor
{
lcd_komut(0x03);
delay_ms(5); // 5msn gecikme veriliyor
}
lcd_komut(0x02); // LCD'ye 4 bit iletişim komutu gönderiliyor
lcd_komut(0x28); // 4 bit iletişim, 2 satır, 5x8 dot matris seçildi
lcd_komut(0x08); // Display Kapalı
lcd_komut(0x0C); // Display açık,imleç alt çizgi ve yanıp sönme yok
lcd_komut(0x06); // Her veri yazıldığında imleç bir sağa gitsin
lcd_komut(0x01); // Display sil. İmleç 1.satır 1.sütunda
}
NOT: LCD kütüphane dosyasının adı benim_LCD olarak mutlaka yazılmalıdır.
Hiç yorum yok:
Yorum Gönder