Arm İlk Denemem(LCD)

Başlatan NaMcHo, 07 Mart 2011, 14:24:08

NaMcHo

Main.c
#include <LPC213x.h>
#include "LCD216_benim.h"

void delay(unsigned int delay)
{
   while(delay--);
}
int main(void)
{
   PINSEL0=0x00000000;   //P0'IN 0-15 PINLERI GPIO OLARAK AYARLANDI(BUNU AYARLAMAK ZORUNDA değilIZ NORMALDE GPIO OLARAK AYARLI.)
   IODIR0=0x000000FF;   //ILK 8 BIT CIKIS
   IOCLR0=0x000000FF;   //ILK 8 BIT TEMIZLENIYOR P0'DA.

   lcd_init();
   for(;;)
   {
      cursor(1,5);
      lcd_write("NaMcHo!");
      cursor(2,4);
      lcd_write("THE GOSU!");
   }
}   


LCD.C
#include <LPC213x.h>
#include "LCD216_benim.h"

void lcd_send_command(unsigned char command)
{
   IOCLR0=0x00000001;                    //RS LOW YAPILIYOR.(P0'IN 0.BITI SIFIRLANIYOR.)
   IOSET0=0x00000002;                  //E  HIGH YAPILIYOR(P0'IN 1.BITI HIGH YAPILIYOR)
   IOSET0=(command & 0x000000f0);         //KOMUT BILGISININ ONCE YUKSEK DEGERLIKLI 4 BITI GONDERILIYOR(GONDERDIGIMIZ BILGI 8BITLIK.)
   IOCLR0=0x00000002;                     //E  LOW YAPILIYOR(P0'IN 1.BITI)
   delay(872);                           //3MS LIK GECIKME
   IOCLR0=0x000000F0;                  //P0'IN 3,4,5,6,7 BITLERI TEMIZLENIYOR.BUNLAR LCD NIN D4,D5,D6,D7 BACAKLARINA GIDIYOR
                                 //VE BUNLARI TEMIZLEMIZIN NEDENI 4BITLIK ILETISIM YAPICAGIMIZ ICIN IOSET0=(command & 0x000000f0); BURDAKI
                                 //KOMUTTAN SONRA 4,5,6,7 CI BACAKLARA YAZILAN BILGI ORDA KALIR VE ARDIDAN YAZILACAK OLAN DUSUK DEGERLIKLI 4 BITIN DEGERLERIYLE
                                 //KARISIR VE YANLIS KOMUTLAR GONDERILMIS OLUR LCD MIZE VE CALISMAZ.                     

   IOSET0=2;
   IOSET0=((command & 0x0000000f)<<4);      //BURADA DUSUK DEGERLIKLI 4 BIT GONDERILIYOR LCDYE.
   IOCLR0=2;
   delay(872);
   IOCLR0=0x000000F0;                  //YINE BURDA LCD YE BILGIYI GONDERDIKDEN SONRA SIFIRLIYORUZ PORT CIKISLARINI(LCD'YE GIDEN PINLERI.)
                                 //AYNI OLAYI LCD'YE KARAKTER YAZDIRACAK ZAMANDA YAPMALIYIZ.
}
void lcd_send_data(unsigned char data)
{
   IOSET0=0x00000003;
   IOSET0=(data & 0x000000f0);
   IOCLR0=0x00000002;
   delay(872);
   IOCLR0=0x000000F0;

   IOSET0=0x00000002;
   IOSET0=((data & 0x0000000f)<<4);
   IOCLR0=0x00000002;
   delay(872);
   IOCLR0=0x000000F0;
}
void lcd_write(const unsigned char string[])
{
    unsigned char x=0;
    while(string[x]!='\0')
    {
       delay(872);
      lcd_send_data(string[x]);
      x++;
    }
}
void cursor(unsigned char satir , unsigned char sutun)
{
   if(satir==1)
   {
      lcd_send_command(0x00000080 +(sutun-1));
   }
   else if(satir==2)
   {
      lcd_send_command(0x000000C0 + (sutun-1));
   }
}
void lcd_init(void)
{
   lcd_send_command(0x00000002);
   lcd_send_command(0x00000028);
   lcd_send_command(0x00000006);
   lcd_send_command(0x00000008);
   lcd_send_command(0x0000000C);
   lcd_send_command(0x00000001);
   delay(872);
}
void lcd_clear(void)
{
   lcd_send_command(0x00000001);
   delay(872);
}


LCD.h
extern void lcd_send_command(unsigned char command);
extern void lcd_send_data(unsigned char data);
extern void lcd_write(const unsigned char string[]);
extern void cursor(unsigned char satir , unsigned char sutun);
extern void lcd_init(void);
extern void lcd_clear(void);


Dosyalar:http://hotfile.com/dl/109120638/3737474/LCD_DENEME_2.rar.html

burakoz1989

merhaba hocam bişi sormak istiyorum lcd yi hangi pinlere bağladımızı nerde belirtiyosun bir türlü anlamadım bu neye göre kara veriliyor picde biz seciyorduk şu portu kullan şu bitten itibaren başla diye armda nası yapıyoruz bunu yardımcı olabilirmisiniz lpc1769 kiti var elimde teşekkürler

NaMcHo

Alıntı yapılan: burakoz1989 - 08 Temmuz 2011, 22:51:48
merhaba hocam bişi sormak istiyorum lcd yi hangi pinlere bağladımızı nerde belirtiyosun bir türlü anlamadım bu neye göre kara veriliyor picde biz seciyorduk şu portu kullan şu bitten itibaren başla diye armda nası yapıyoruz bunu yardımcı olabilirmisiniz lpc1769 kiti var elimde teşekkürler
Merhabalar,

Belirtmiyorum, o an aklımdan hangi port geçerse o porta verileri yolluyorum
Genel bir örnek olcak ama şöyle söyliyim,PORT0'ın 8 adet çıkışı olsun PORT0.7,PORT0.6,PORT0.5,PORT0.4  bunlar LCD'nin data uçlarına gidiyor olsun
(4 bitlik iletişim yapcağımızı farz ederek )
PORT0.0 E ucu olsun, örneğin lcd'ye x=0x65(0b0110 0101) verisini göndericeksem PORT0.0=1 (E set ediliyor) daha sonra PORT0=(0xF0 & (x<<4)) ile ilk 4 bitlik datayı yolluyorum yani 0101 lik kısım,daha sonra E'yi 0'a çekip araya biraz delay koyuyorum daha sonra E'yi set edip ,
PORT0=(0xF0 & x) ile x'in yüksek değerlikli 4 biti yolluyorum yani 0110 kısımı...

burakoz1989

teşekkürler hocam çok yararlı oldu :)