CCS benim_lcd

Başlatan omereliusuk, 11 Mart 2011, 00:20:18

omereliusuk

serdar çiçek'in benim_lcd.c den alındı ve düzenlendi.


#define LCD_D4_PIN    PIN_a0
#define LCD_D5_PIN    PIN_b1
#define LCD_D6_PIN    PIN_c2
#define LCD_D7_PIN    PIN_d3

#define LCD_EN_PIN      pin_e1 // LCD'nin E ucu RB5 pinine bağlı
#define LCD_RS_PIN     pin_a5 // LCD'nin LCD_RS_PIN ucu RB4 pinine bağlı


#INCLUDE <benim_lcd.C>
şeklinde yazılacak.
mavi olarak gösterilen metinleri değiştirerek tabi bunları önce tris yazmacından çıkış olarak kabul edeceksiniz. lcd nin bağlantılarını istediğiniz şekilde değiştirebilirsiniz.
aşağıdaki kodları benim_lcd.c olarak ccs driver klasörüne kaydediniz. ve yukarıdaki kodları ccs e yazınız.



//////////////////////////////////////////////////////////////
//                    benim_LCD.c                           // 
// Bu LCD sürücü dosyası [color=red]4x20[/color] 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. //
//////////////////////////////////////////////////////////////

#ifndef LCD_EN_PIN
#define LCD_EN_PIN   	pin_a4 // LCD'nin E ucu RB5 pinine bağlı
#endif
#ifndef LCD_rs_PIN
#define LCD_RS_PIN  	pin_a5 // LCD'nin LCD_RS_PIN ucu RB4 pinine bağlı
#endif
#ifndef LCD_d4_PIN
#define LCD_D4_PIN 	PIN_a0
#endif
#ifndef LCD_d5_PIN
#define LCD_D5_PIN 	PIN_a1
#endif
#ifndef LCD_d6_PIN
#define LCD_D6_PIN 	PIN_a2
#endif
#ifndef LCD_d7_PIN
#define LCD_D7_PIN 	PIN_a3
#endif
/*  deneme amaçlı yazılmıştır.
#define LCD_D4_PIN 	PIN_a0
#define LCD_D5_PIN 	PIN_a1
#define LCD_D6_PIN 	PIN_a2
#define LCD_D7_PIN 	PIN_a3

#define LCD_EN_PIN   	pin_a4 // LCD'nin E ucu RB5 pinine bağlı
#define LCD_RS_PIN  	pin_a5 // LCD'nin LCD_RS_PIN ucu RB4 pinine bağlı*/

//****** LCD'ye Komut Gönderme Fonksiyonu **********
void lcd_komut(byte komut)
{  
   
/*  output_bit(LCD_D7_PIN,komut>>7);
  output_bit(LCD_D6_PIN,(komut<<1)>>7);
  output_bit(LCD_D5_PIN,(komut<<2)>>7);
  output_bit(LCD_D4_PIN,(komut<<3)>>7);*/


output_bit(LCD_D7_PIN,bit_test(komut,7));
output_bit(LCD_D6_PIN,bit_test(komut,6));
output_bit(LCD_D5_PIN,bit_test(komut,5));
output_bit(LCD_D4_PIN,bit_test(komut,4));

   //output_a(komut>>4);   // Komutun yüksek değerli 4 bitini gönder


   output_low(LCD_RS_PIN);       // LCD komut almak için ayarlandı
   delay_cycles(1);      // 1 komut saykılı bekle   
   output_high(LCD_EN_PIN);       // E ucu lojik-1'den lojik-0'a çekiliyor
   delay_cycles(1);      // 1 komut saykılı bekle
   output_low(LCD_EN_PIN);
   delay_ms(2);          // 2 msn gecikme veriliyor

 /*  output_a(komut&0x0F); // Komutun düşük değerli 4 bitini gönder
   output_bit(LCD_D7_PIN,(komut<<4)>>7) ;
   output_bit(LCD_D6_PIN,(komut<<5)>>7);
   output_bit(LCD_D5_PIN,(komut<<6)>>7);
   output_bit(LCD_D4_PIN,(komut<<7)>>7);*/
output_bit(LCD_D7_PIN,bit_test(komut,3)) ;
output_bit(LCD_D6_PIN,bit_test(komut,2));
output_bit(LCD_D5_PIN,bit_test(komut,1));
output_bit(LCD_D4_PIN,bit_test(komut,0));
   output_low(LCD_RS_PIN);      // LCD veri almak için ayarlandı  
   delay_cycles(1);      // 1 komut saykılı bekle      
   output_high(LCD_EN_PIN);       // E ucu lojik-1'den lojik-0'a çekiliyor
   delay_cycles(1);      // 1 komut saykılı bekle
   output_low(LCD_EN_PIN);
   delay_ms(2);          // 2 msn gecikme veriliyor
}

//******* LCD'ye Veri Gönderme Fonksiyonu **********
void lcd_putc(byte veri)
{ 
/*       output_bit(LCD_D7_PIN,veri>>7) ;
       output_bit(LCD_D6_PIN,(veri<<1)>>7);
       output_bit(LCD_D5_PIN,(veri<<2)>>7);
       output_bit(LCD_D4_PIN,(veri<<3)>>7); */

output_bit(LCD_D7_PIN,bit_test(veri,7)) ;
output_bit(LCD_D6_PIN,bit_test(veri,6));
output_bit(LCD_D5_PIN,bit_test(veri,5));
output_bit(LCD_D4_PIN,bit_test(veri,4));
  // output_a(veri>>4);    // Verinin yüksek değerli 4 bitini gönder
   output_high(LCD_RS_PIN);      // LCD veri almak için ayarlandı
   delay_cycles(1);      // 1 komut saykılı bekle    
   output_high(LCD_EN_PIN);       // E ucu lojik-1'den lojik-0'a çekiliyor
   delay_cycles(1);      // 1 komut saykılı bekle
   output_low(LCD_EN_PIN);
   delay_ms(2);          // 2 msn gecikme veriliyor
output_bit(LCD_D7_PIN,bit_test(veri,3)) ;
output_bit(LCD_D6_PIN,bit_test(veri,2));
output_bit(LCD_D5_PIN,bit_test(veri,1));
output_bit(LCD_D4_PIN,bit_test(veri,0));
/*
output_bit(LCD_D7_PIN,(veri<<4)>>7) ;
output_bit(LCD_D6_PIN,(veri<<5)>>7);
output_bit(LCD_D5_PIN,(veri<<6)>>7);
output_bit(LCD_D4_PIN,(veri<<7)>>7);
   //output_a(veri&0x0F); // Verinin düşük değerli 4 bitini gönder                         */
   output_high(LCD_RS_PIN);      // LCD veri almak için ayarlandı
   delay_cycles(1);      // 1 komut saykılı bekle    
   output_high(LCD_EN_PIN);      // E ucu lojik-1'den lojik-0'a çekiliyor
   delay_cycles(1);     // 1 komut saykılı bekle
   output_low(LCD_EN_PIN);
   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(0xc0+(sutun-1));
   if (satir==3)      // Eğer satır değişkeni "3" ise
            lcd_komut(0x94+(sutun-1));
   if (satir==4)      // Eğer satır değişkeni "2" ise
            lcd_komut(0xd4+(sutun-1));
}

//********* LCD Başlangıç Ayarları Fonksiyonu ******
void lcd_hazirla()
{
   int i=0;
   output_low(LCD_RS_PIN); // LCD_RS_PIN ucu lojik-0
   output_low(LCD_EN_PIN);  // 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
}