Toplam 5 adet sonuctan sayfa basi 1 ile 5 arasi kadar sonuc gösteriliyor
  1. #1
    forum üyesi
    Üyelik tarihi
    Mart.2008
    Mesajlar
    50

    Standart CCS için flexy lcd driver

    Arkadaşlar aşağıya verdiğim kodları notepad'e yapıştırıp flex_lcd.c olarak C:\Program Files\PICC\Drivers kaydedin. Bu 2x16 lcd driver'ı sayesinde Pic'inizin istediğiniz bacağını lcd'nin istediğiniz bacağına bağlayabilirsiniz
    Not:Lcd yazma vs komutlar aynıdır.
    Kod:
    #define LCD_DB4   PIN_c5  
    #define LCD_DB5   PIN_c4  
    #define LCD_DB6   PIN_d3  
    #define LCD_DB7   PIN_d2  
    
    #define LCD_E     PIN_c6  
    #define LCD_RS    PIN_d4  
    #define LCD_RW    PIN_c7  
    
    
    
    #define LCD_CGRAM_ADDR 0x40           // Set the CGRAM address 
    #define LCD_DDRAM_ADDR 0x80           
    #define USE_LCD_RW   1
    
    //========================================
    
    #define lcd_type 2        
    #define lcd_line_two 0x40 
    
    #define LCD_CHAR_1 0x01 
    #define LCD_CHAR_2 0x02 
    #define LCD_CHAR_3 0x03 
    #define LCD_CHAR_4 0x04 
    #define LCD_CHAR_5 0x05 
    #define LCD_CHAR_6 0x06 
    #define LCD_CHAR_7 0x07 
    #define LCD_CHAR_8 0x08 
    
    int8 const LCD_INIT_STRING[4] =
    {
     0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
     0xc,                    // Display on
     1,                      // Clear display
     6                       // Increment cursor
     };
    
    
    //-------------------------------------
    void lcd_send_nibble(int8 nibble)
    {
     output_bit(LCD_DB4, !!(nibble & 1));
     output_bit(LCD_DB5, !!(nibble & 2));
     output_bit(LCD_DB6, !!(nibble & 4));
     output_bit(LCD_DB7, !!(nibble & 8));
    
     delay_cycles(1);
     output_high(LCD_E);
     delay_us(2);
     output_low(LCD_E);
    }
    
    
    #ifdef USE_LCD_RW
    int8 lcd_read_nibble(void)
    {
    int8 retval;
    #bit retval_0 = retval.0
    #bit retval_1 = retval.1
    #bit retval_2 = retval.2
    #bit retval_3 = retval.3
    
    retval = 0;
    
    output_high(LCD_E);
    delay_cycles(1);
    
    retval_0 = input(LCD_DB4);
    retval_1 = input(LCD_DB5);
    retval_2 = input(LCD_DB6);
    retval_3 = input(LCD_DB7);
    
    output_low(LCD_E);
    
    return(retval);
    }
    #endif
    
    //---------------------------------------
    
    #ifdef USE_LCD_RW
    int8 lcd_read_byte(void)
    {
    int8 low;
    int8 high;
    
    output_high(LCD_RW);
    delay_cycles(1);
    
    high = lcd_read_nibble();
    
    low = lcd_read_nibble();
    
    return( (high<<4) | low);
    }
    #endif
    
    //----------------------------------------
    void lcd_send_byte(int8 address, int8 n)
    {
    output_low(LCD_RS);
    
    #ifdef USE_LCD_RW
    while(bit_test(lcd_read_byte(),7)) ;
    #else
    delay_us(60);
    #endif
    
    if(address)
       output_high(LCD_RS);
    else
       output_low(LCD_RS);
    
     delay_cycles(1);
    
    #ifdef USE_LCD_RW
    output_low(LCD_RW);
    delay_cycles(1);
    #endif
    
    output_low(LCD_E);
    
    lcd_send_nibble(n >> 4);
    lcd_send_nibble(n & 0xf);
    }
    
    void lcd_setcursor_vb(short visible, short blink) {
      lcd_send_byte(0, 0xC|(visible<<1)|blink);
    }
    
    //----------------------------
    void lcd_init(void)
    {
    int8 i;
    
    output_low(LCD_RS);
    
    #ifdef USE_LCD_RW
    output_low(LCD_RW);
    #endif
    
    output_low(LCD_E);
    
    delay_ms(15);
    
    for(i=0 ;i < 3; i++)
       {
        lcd_send_nibble(0x03);
        delay_ms(5);
       }
    
    lcd_send_nibble(0x02);
    
    for(i=0; i < sizeof(LCD_INIT_STRING); i++)
       {
        lcd_send_byte(0, LCD_INIT_STRING[i]);
    
        #ifndef USE_LCD_RW
        delay_ms(5);
        #endif
       }
    
    }
    
    //----------------------------
    
    void lcd_gotoxy(int8 x, int8 y)
    {
    int8 address;
    
    if(y != 1)
       address = lcd_line_two;
    else
       address=0;
    
    address += x-1;
    lcd_send_byte(0, 0x80 | address);
    }
    
    //-----------------------------
    void lcd_putc(char c)
    {
     switch(c)
       {
        case '\f':
          lcd_send_byte(0,1);
          delay_ms(2);
          break;
    
        case '\n':
           lcd_gotoxy(1,2);
           break;
    
        case '\b':
           lcd_send_byte(0,0x10);
           break;
        default:
           lcd_send_byte(1,c);
           break;
       }
    }
    
    //------------------------------
    #ifdef USE_LCD_RW
    char lcd_getc(int8 x, int8 y)
    {
    char value;
    
    lcd_gotoxy(x,y);
    
    while(bit_test(lcd_read_byte(),7));
    
    output_high(LCD_RS);
    value = lcd_read_byte();
    output_low(lcd_RS);
    
    return(value);
    }
    #endif
    Konu aliveli tarafından (26.Nisan.2008 Saat 23:17 ) değiştirilmiştir.

  2. #2
    Yasaklı üye
    Üyelik tarihi
    Şubat.2008
    Mesajlar
    36

    Standart Ce: CCS için flexy lcd driver

    çok iyi,başarılar kardeşim...

  3. #3
    forum üyesi
    Üyelik tarihi
    Temmuz.2008
    Mesajlar
    2

    Standart Cevap: CCS için flexy lcd driver

    Elimdeki test kartının aşağıdaki şekilde 2x16 lcd için bağlantıları yapılmış
    http://img77.imageshack.us/my.php?image=tara0001li7.jpg

    flex_lcd. c de ki kodları lcd mi çalıştırabilmek için nasıl değiştirebilirim lütfen yardım edin

  4. #4
    forum üyesi
    Üyelik tarihi
    Mart.2008
    Mesajlar
    50

    Standart Cevap: CCS için flexy lcd driver

    dostum verdiğin şemada lcd 8 bit olarak kullanılmış
    verilen driver 4 bitle lcd kontrol etmek için

  5. #5
    forum üyesi
    Üyelik tarihi
    Temmuz.2008
    Mesajlar
    2

    Standart Cevap: CCS için flexy lcd driver

    kardeş bu kod düzenlenmezmi peki

 

 

Konu Bilgileri

Bu Konuya Gözatan Kullanıcılar

Şu anda 1 kullanıcı bu konuyu görüntülüyor. (0 kayıtlı ve 1 misafir)

Benzer Konular

  1. 2000 Adet Elektronik Şema
    Konu Sahibi elektrobilim Forum GENEL ELEKTRONİK-ELEKTRİK
    Cevap: 30
    Son Mesaj : 3 Gün önce, 16:26
  2. 8051 mikroişlemci
    Konu Sahibi eshgi Forum INTEL
    Cevap: 8
    Son Mesaj : 13.Kasım.2011, 01:03
  3. Anakart (Mainboard) Hakkında Detaylı bilgi
    Konu Sahibi uNdéb@H Forum PC
    Cevap: 2
    Son Mesaj : 15.Ocak.2009, 15:31
  4. M.K.ATATÜRK'ün sözlerinden seçmeler Geniş arşiv
    Konu Sahibi uNdéb@H Forum ANSİKLOPEDİ
    Cevap: 16
    Son Mesaj : 21.Ekim.2007, 14:31

Yetkileriniz

  • Konu Acma Yetkiniz Yok
  • Cevap Yazma Yetkiniz Yok
  • Eklenti Yükleme Yetkiniz Yok
  • Mesajınızı Değiştirme Yetkiniz Yok
  •