Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

PCF8574 ile LCD Sürme Yardım

Başlatan fatal16, 24 Aralık 2014, 01:24:42

fatal16

PCF8574 ile Lcd süren olduysa yardımcı olabilirler mi?

Birçok siteden alıp denediğim kütüphaneleri çalıştıramadım.
Daha önceden kullanmış arkadaşlar kullandıkları kütüphaneleri paylaşırsa sıkıntı çözülecek gibi (:

Yardımlarınız için teşekkürler.


necati

[email]entegreterbiyecisi@yahoo.com[/email]

necati

#2
#include <18F25k22.H>
#fuses intrc_io,NOWDT,PUT,NOBROWNOUT,NOLVP
#use delay(internal=16M)
#use i2c(Master,Fast=100000, sda=PIN_C4, scl=PIN_C3,force_sw) //100khz 
#include "i2c_Flex_LCD.c"  

void main() {  
int i=0; 
/*
Jp3 Jp2 Jp1  pcf8574
A2 A1 A0  Hex
L L L  0x40
L L H  0x42
L H L  0x44
L H H  0x46
H L L  0x48
H L H  0x4A
H H L  0x4C
H H H  0x4E------
*/
lcd_init(0x4E,16,2);
lcd_backlight_led(ON); //Enciende la luz de Fondo
  
while (TRUE) { 
  lcd_clear();  //Limpia el LCD

  // Envio de Strings al LCD usando la función printf
  printf(lcd_putc, "\entegreterbiyecisi"); 
  delay_ms(1000); 
  printf(lcd_putc, "\n@yahoo.com    "); 
  delay_ms(1000); 
  printf(lcd_putc, "\npcf8574        "); 
  delay_ms(1000); 
  printf(lcd_putc, "\n    NECATi    "); 
  delay_ms(1000); 

  printf(lcd_putc, "\fKIYLIOGLU      "); 
  delay_ms(1000); 
  printf(lcd_putc, "\n- PIC          "); 
  delay_ms(1000); 
  printf(lcd_putc, "\n- CCSC        "); 
  delay_ms(1000); 
  printf(lcd_putc, "\n- PiCPROJE    "); 
  delay_ms(1000); 

  // Limpia el LCD 
  printf(lcd_putc, "\f"); 
  delay_ms(500); 

  //Función: lcd_gotoxy()
  //Si colocan un gotoxy mayor al del LCD usado, la propia función
  //internamente coloca los límites correctos. A modo de ejemplo
  //coloquemos las esquinas correspondientes a un LCD 20x4 y la función
  //Loa adaptará si se usa un LCD 16x2

  lcd_gotoxy(3, 1);        
  printf(lcd_putc, "Numeros en");    
  lcd_gotoxy(4, 2);        
  printf(lcd_putc, "Esquinas"); 
  delay_ms(500); 
  lcd_gotoxy(1, 1);        
  printf(lcd_putc, "1"); 
  delay_ms(500); 
  lcd_gotoxy(20, 1);        
  printf(lcd_putc, "2"); 
  delay_ms(500); 
  lcd_gotoxy(20, 4);        
  printf(lcd_putc, "3"); 
  delay_ms(500); 
  lcd_gotoxy(1, 4);        
  printf(lcd_putc, "4");    
  delay_ms(2000); 
  

  // Prueba de la función de borrado Backspace
  printf(lcd_putc, "\f ¡Suscribete!\n"); 
  printf(lcd_putc,  "Activa: CAMPANA"); 
  delay_ms(2000); 

  // Ultima columna y fila  2
  //Borro la fila 2 con back space
  lcd_gotoxy(20, 2);        

  // Backspace over 2nd line. 
  for(i = 0; i < lcd_total_columns; i++) 
      { 
      printf(lcd_putc," \b\b"); 
      delay_ms(100); 
      } 

  printf(lcd_putc,  " es GRATIS!!!!!!");  
  delay_ms(3000); 

//Apaga Luz de Fondo 
        lcd_backlight_led(OFF); 
        printf(LCD_PUTC,"\fLCD BackLight\n    OFF      "); 
        delay_ms(3000); 

//Enciende Luz de Fondo
        lcd_backlight_led(ON); 
        printf(LCD_PUTC,"\fLCD BackLight\n    ON      ");  
        delay_ms(3000); 

  }    
} 


//i2c_Flex_LCD.c
//----------------------------------------------------------------------------- 
// Title:        i2c_Flex_LCD 
// Description:  Driver for common LCD with 1/2/3 or 4 rows by 1...20 columns 
//                using PCF8574T interface board with I2C protocol. 
// Date:          Nov-2013 
// Ver.Rev.:      1.1 
// Author:        Hugo Silva (sergio-hugo@bol.com.br) #Based on the routines of 
//                "20X4_LCD_I2C_DRIVER.h" from Pumrin S. and "lcd4_i2c.c" from XP8100 
//----------------------------------------------------------------------------- 
// 
// lcd_init() Must be called before any other function. 
// 
// lcd_putc(c) Will display c on the next position of the LCD. 
//  
//    \f Clear LCD display 
//    \n Set write position on next lcd line 
//    \b LCD backspace 
//    lcd_gotoxy(x,y) Set write position on LCD (upper left is 1,1) 
// 
// lcd_backlight_led(ON)/lcd_backlight_led(OFF) = Turn ON/OFF LCD Backlight LED 
// 
//----------------------------------------------------------------------------- 
// LCD pins D0-D3 are not used. 
//----------------------------------------------------------------------------- 
// 
// Comment  : Control of a compatible LCD (1...4 rows by 1...4 columns) from 
//              a bus I2C with an EXPANDER of I/O with connection I2C. 
//              The tests of these routines have been programmed using the IC 
//              Phillips PCF8574T. I've used 4 bits mode programming. 
//              The 8 bits mode programming is possible if you use 2 x PCF8574T. 
//              RW Pin is not being used. 
// 
// As defined in the following structure the pin connection is as follows: 
// 
//  PCF8574P    LCD 
//  ========    ====== 
//    P0        RS 
//    P1        RW    (Not used!) 
//    P2        Enable  
//    P3        Led Backlight 
//    P4        D4 
//    P5        D5 
//    P6        D6 
//    P7        D7 
// 
//  The SCL and SDA pins should be pull-up resistor as shown below: 
// 
//            +5v 
//              | 
//              < 
//              > 1K5        
//              <          
//To PIC        |          To i2c slave 
//pin xx ------------------ SDA pin  
//(SDA)                      
//              +5v 
//              | 
//              < 
//              > 1K5        
//              <          
//To PIC        |          To i2c slave 
//pin xx ------------------ SCL pin  
//(SCL) 
// 
//To PIC                    To i2c slave 
//Vss pin ----------------- Vss or ground pin  
//                | 
//              ----- 
//              ---  Ground 
//                -  
//  
// THIS DOCUMENT IS PROVIDED TO THE USER "AS IS" 
//----------------------------------------------------------------------------- 
byte LCD_ADDR ;//            0x4E        //I2C slave address for LCD module 
byte lcd_total_rows ;//      2          //Number of rows: 1,2,3 or 4 
byte lcd_total_columns ;//    16          //Number of columns: 1...20  

#define RS                    0b00000001  //P0 - PCF8574T Pin connected to RS 
#define RW                    0b00000010  //P1 - PCF8574T Pin connected to RW 
#define ENABLE                0b00000100  //P2 - PCF8574T Pin connected to EN 
#define LCD_BACKLIGHT        0b00001000  //P3 - PCF8574T Pin connected to BACKLIGHT LED 

#define addr_row_one          0x00        //LCD RAM address for row 1 
#define addr_row_two          0x40        //LCD RAM address for row 2 
#define addr_row_three        0x14        //LCD RAM address for row 3 
#define addr_row_four        0x54        //LCD RAM address for row 4 

#define ON                    1 
#define OFF                  0 
#define NOT                  ~ 
#define data_shifted          data<<4 
int8 new_row_request=1, BACKLIGHT_LED=LCD_BACKLIGHT; 

void lcd_backlight_led(byte bl) 
{  
      If (bl) BACKLIGHT_LED=LCD_BACKLIGHT; else BACKLIGHT_LED=OFF; 
} 

void i2c_send_nibble(byte data, byte type) 
{    
  switch (type) 
  {      
      case 0 :      
      i2c_write(data_shifted | BACKLIGHT_LED); 
      delay_cycles(1); 
      i2c_write(data_shifted | ENABLE | BACKLIGHT_LED ); 
      delay_us(2); 
      i2c_write(data_shifted & NOT ENABLE | BACKLIGHT_LED); 
      break; 
      
      case 1 : 
      i2c_write(data_shifted | RS | BACKLIGHT_LED); 
      delay_cycles(1); 
      i2c_write(data_shifted | RS | ENABLE | BACKLIGHT_LED ); 
      delay_us(2); 
      i2c_write(data_shifted | RS | BACKLIGHT_LED); 
      break; 
  } 
} 
    
void lcd_send_byte(byte data, byte type) 
  { 
        i2c_start(); 
        i2c_write(LCD_ADDR); 
        i2c_send_nibble(data >> 4 , type); 
        i2c_send_nibble(data & 0xf , type); 
        i2c_stop();        
  } 

void lcd_clear() 
{  
        lcd_send_byte(0x01,0); 
        delay_ms(2); 
        new_row_request=1; 
} 

void lcd_init(byte ADDR, byte col, byte row) 
{ 
  byte i;
  byte CONST lcd_type=2;  // 0=5x7, 1=5x10, 2=2 lines 
  byte CONST LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6}; // These bytes need to be sent to the LCD to start it up.
  
  LCD_ADDR =ADDR;//            0x4E        //I2C slave address for LCD module 
  lcd_total_rows =row;//      2          //Number of rows: 1,2,3 or 4 
  lcd_total_columns= col ;
  disable_interrupts(GLOBAL); 
  delay_ms(50); //LCD power up delay 
    
  i2c_start(); 
  i2c_write(LCD_ADDR); 
      i2c_send_nibble(0x00,0); 
      delay_ms(15); 
    
  for (i=1;i<=3;++i)    
  { 
      i2c_send_nibble(0x03,0); 
      delay_ms(5); 
  }    
      i2c_send_nibble(0x02,0); 
      delay_ms(5); 
  i2c_stop(); 
    
  for (i=0;i<=3;++i) { 
  lcd_send_byte(LCD_INIT_STRING[i],0); 
  delay_ms(5); 
  } 
  lcd_clear();  //Clear Display 
  enable_interrupts(GLOBAL); 
} 

void lcd_gotoxy( byte x, byte y) 
{ 
byte row,column,row_addr,lcd_address; 
static char data; 

  if (y>lcd_total_rows) row=lcd_total_rows; else row=y; 
  
  switch(row) 
  { 
      case 1:  row_addr=addr_row_one;    break; 
      case 2:  row_addr=addr_row_two;    break; 
      case 3:  row_addr=addr_row_three;  break; 
      case 4:  row_addr=addr_row_four;    break; 
      default: row_addr=addr_row_one;    break;  
  }  
    
  if (x>lcd_total_columns) column=lcd_total_columns; else column=x;  
  lcd_address=(row_addr+(column-1)); 
  lcd_send_byte(0x80|lcd_address,0); 
} 

//Display the character on LCD screen. 
void LCD_PUTC(char in_data) 
{    
  switch(in_data) 
  {  
    case '\f': lcd_clear();                      break;                
      
    case '\n': 
    new_row_request++; 
    if (new_row_request>lcd_total_rows) new_row_request=1; 
    lcd_gotoxy(1, new_row_request); 
    break; 
                  
    case '\b': lcd_send_byte(0x10,0);            break; 
        
    default: lcd_send_byte(in_data,1);            break;      
      
  } 
}

devre kurdum calıstı
[email]entegreterbiyecisi@yahoo.com[/email]