Elektrotekno.com Ana Sayfa || Programlanabilir Cihaz ve Elemanlar || Diğer Programlanabilir Elemanlar, Cihazlar


4 bit lcd + 8051 - yardım

Kayıt: 04 Oca 2007
Mesajlar: 372
Konum: İzmir
Offline
fuzzy
Tarih: 02 10 2008 19:50

Uzun süredir 8 bit karakter lcd kullanıyorum,ve bu kodları bir seferde yazmıştım.Bu sefer 4 bitlik mod deneyeyim dedim,işin içinden çıkamıyorum,ekranda karakter yok.
Lcd nin d0 dan d3 e kadar olan bitlerini şaseye direk bağladım.Nette bazı yazılarda açık bırakın diye bir not gördüm.
Elinde denenmiş 8051 asm kod olan varsa ve gönderirse sevinirim...

dizayn_serdar@yahoo.com


Reklamlar
Kayıt: 23 Mar 2007
Mesajlar: 139

Offline
onur_zafer
Tarih: 03 10 2008 01:27

istersen c ile yazılmış hadder dosyası var umarım işini görür.

Kod


/* 4x20 lcd   icin
 * filename : lcd.h
 * hardware : controller  -> at89c51rc2
 */

 /**** lcd pinleri ****/
 #define lcd_en p2_6  //lcdyi yetkilendirmek icin
 #define lcd_rs p2_7  //konut yada kod yapmak icin
 #define lcd_d7 p2_2  //lcd veri yolu pin tasarrufu için 4 bit kullandık
 #define lcd_d6 p2_3
 #define lcd_d5 p2_4
 #define lcd_d4 p2_5
 /*********************/
 //lcd_rw ucu 0'a bagli

 #define lcd_line_bir  0x80 // lcd ram adres 1. satir
 #define lcd_line_iki  0xc0 // lcd ram adres 2. satir
 #define lcd_line_uc   0x94 // lcd ram adres 3. satir
 #define lcd_line_dort 0xd4 // lcd ram adres 4. satir

/***************************************************
 * prototype(s)                                    *
 ***************************************************/
void lcd_delay(unsigned char ms);              // lcd gecikme
void lcd_yetkilendirme();                  // lcd yetkilendirme
void lcd_komut(unsigned char komut);          // lcd komut
void lcd_karakter_yaz(unsigned char ascii);      // lcd tek karakter yazma
void lcd_string_yaz(unsigned char *lcd_string); // lcd string yazma
void lcd_ilk_ayarlar();
void lcd_git_xy(unsigned char x,unsigned char y);

/***************************************************
 * sources                                         *
 ***************************************************/
//===================================================
void lcd_delay(unsigned char ms)
//===================================================
{
   unsigned int n;
   unsigned char i;
   for (n=0; n<ms; n++)
   {
      for (i=0; i<250; i++); /*  1 ms bekleme*/
   }
}

//===================================================
void lcd_yetkilendirme()
//===================================================
{
    lcd_en = 0; /* clear bit p2.4 */   //lcd yi bir kere yetki,lendirmek için
    lcd_delay(1);
    lcd_en = 1; /* set bit p2.4 */
}

//===================================================
void lcd_komut(unsigned char komut)   //lcdye komut gönder
//===================================================
{
   unsigned char nibble;
    lcd_rs = 0; /* clear bit p2.5 */
    nibble = (komut>>4) & 0x0f;  //ilk 4 bitini gönderdik
   lcd_d4 = nibble & 0x01;//pinlere tek tek gönderdik. buton tek seferde göndermediği için
   lcd_d5 = nibble>>1 & 0x01;
   lcd_d6 = nibble>>2 & 0x01;
   lcd_d7 = nibble>>3 & 0x01;
    lcd_yetkilendirme();
    nibble = komut & 0x0f;
   lcd_d4 = nibble & 0x01;
   lcd_d5 = nibble>>1 & 0x01;
   lcd_d6 = nibble>>2 & 0x01;
   lcd_d7 = nibble>>3 & 0x01;
    lcd_yetkilendirme();
    lcd_delay(1);
}
//===================================================
void lcd_karakter_yaz(unsigned char ascii)   //karakter gönderir. tek karakter
//===================================================
{   unsigned char nibble;
    lcd_rs = 1; /* set bit p2.5 *///veri gönderdiğin için 1 oldu.
    nibble = (ascii>>4) & 0x0f;//0x0f ile maskeliyor.
   lcd_d4 = nibble & 0x01;    //ilk biti gönder
   lcd_d5 = nibble>>1 & 0x01; //2. biti gönder
   lcd_d6 = nibble>>2 & 0x01; //3. biti gönder
   lcd_d7 = nibble>>3 & 0x01; //4. biti gönder
    lcd_yetkilendirme();
    nibble = ascii & 0x0f;
   lcd_d4 = nibble & 0x01;
   lcd_d5 = nibble>>1 & 0x01;
   lcd_d6 = nibble>>2 & 0x01;
   lcd_d7 = nibble>>3 & 0x01;
    lcd_yetkilendirme();
    lcd_delay(1);
}

//===================================================
void lcd_string_yaz(unsigned char *lcd_string)
//===================================================
{
   while (*lcd_string)
   {
      lcd_karakter_yaz(*lcd_string++);
   }
}

void lcd_ilk_ayarlar()
{
    lcd_en = 1;
    lcd_rs = 0;   
    lcd_komut(0x33);
    lcd_komut(0x32);
    lcd_komut(0x28);
    lcd_komut(0x0c);
    lcd_komut(0x06);
    lcd_komut(0x01); /* clear */
    lcd_delay(256);
}

//===================================================
void lcd_git_xy(unsigned char x, unsigned char y)   //lcdye istediğimiz yere veri yazmamızı sağlar. satir ve sütün olarak
//x ,y=sutun,satir
//===================================================
{
int adres;  //ramdeki adresi tutar

   switch( y )
   {
   case 1:
   adres = lcd_line_bir;
   break;
   case 2:
   adres = lcd_line_iki;
   break;
   case 3:
   adres = lcd_line_uc;
   break;
   case 4:
   adres = lcd_line_dort;
   break;
   }

   adres += x-1;    
   lcd_komut(adres); //lcdye veri gönderiyor
}

Başa dön
Kayıt: 12 Nis 2008
Mesajlar: 901
Konum: İzmir
Offline
esb72
Tarih: 03 10 2008 10:54

re: 4 bit lcd + 8051


fuzzy yazmış
Uzun süredir 8 bit karakter lcd kullanıyorum,ve bu kodları bir seferde yazmıştım.Bu sefer 4 bitlik mod deneyeyim dedim,işin içinden çıkamıyorum,ekranda karakter yok.
Lcd nin d0 dan d3 e kadar olan bitlerini şaseye direk bağladım.Nette bazı yazılarda açık bırakın diye bir not gördüm.
Elinde denenmiş 8051 asm kod olan varsa ve gönderirse sevinirim...

dizayn_serdar@yahoo.com


selam Fuzzy,
8051 den anlamam ama LCD nin D0-D3 pinlerini boştada bıraksan sorun çıkmaz.PIC yazılımı asm ile yaptığım yıllarda 4 bit için asmde swap komutunu kullandığımı hatırlıyorum.daha sonra "b11110000" ile and'leyerek porta datayı aktarıyordum. Enable ve R/S bitini ise daha sonra sırayla düzenliyordum.sorunun yazılımdan olduğunu düşünmende fayda var.bir diğer etken.minmum rise/fall time sınırlarını zorlamadığına emin olmanda fayda var. bir diğer uyarım 4 bit haberleşmede iki parça halinde yolladığın data aralarında enable 1-0 yapmayı unutmamalısın. başlangıçta ard arda yollanan init komutlarını tekrar gözden geçirip kodun en azından o kısmını buraya yapıştırabilirmisin?
Kolay gelsin
Başa dön
Kayıt: 09 Ekm 2009
Mesajlar: 6

Offline
baykal
Tarih: 27 03 2012 18:09

Yukarıda yazılanlara ilaveten lcd nin şartlamasında da problem yaşıyor olabilirsin.Nitekim aynı problemi bende yaşamıştım .8 bit haberleşmeyi yapıyorken 4 bit haberleşmeyi beceremiyordum.Denemelerim sonucu şans eseri lcd 4 bit şartlamasında extradan bir 20h daha yükleyip çalıştırmıştım.Üzerinden baya zaman geçtiği için tam emin olmamakla berbaber sana buna dikkat etmeni söyleyebilirm.Kesin çözüm programın kendisini incelemen progrm gayet basit ve anlaşılır.Swapf komutu kullanarak kısaltabilirsin.Linki yolluyorum
http://www.elektrotekno.com/about57684.html
Başa dön



4 bit lcd + 8051 - yardım


Benzer Konular
- Kou Statik anahtarlama Sınav Soruları Yardım!!
- Assembly- TMR0 kesmesi ile ilgili yardım
- Asansör Fotosel, Boy Fotosel PCB yardım

- proje yardım

- Arkadaşlar çok acil yardım lütfen !!!
- HVDC' - acil yardım
- mono bass anfisi hakkında yardım
- Yardım isteği - SCADA kaydetme sorunu
- autocad 2010 elektrik tesisat projesi keşif ozeti icin yardım

- Autocad tesisat çizimi yardım!

- GPRS modem ve veri yollama yardım

Sitemize üyelik ve içeriğin indirilmesi tamamen ücretsizdir. Sitemizde paylaşılan tüm dokümanlar (Tezler, makaleler, ders notları, sınav soru cevaplar, projeler) paylaşımcıların bireysel çalışmaları olup telif hakları kendilerine aittir ya da açık bir şekilde kamusal alana yerleştirilmiş dokümanların birer kopyalarıdır. Kişilerin bireysel çalışmalarını sitemizde yüklemesinde, sitemizde paylaşıma teşvik eden puanlama sisteminin de etkisi büyüktür. Bunlara rağmen hala size ait olan ve burada bulunmasına izin vermediğiniz dokümanlar varsa iletişim bölümünden yöneticilere bildirmeniz durumunda derhal silineceklerdir.
Powered by phpBB | Translated by phpBB Turkiye | Ads by Google Adsense | Design by Crazy Bat based
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72