lib/lcd-pcf8574.c

Fri, 02 May 2014 21:04:20 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Fri, 02 May 2014 21:04:20 +0200
changeset 16
f4cbe008da72
child 18
3f4823083b9d
permissions
-rw-r--r--

Version 0.0.2. Added LCD display using wiringPi library. The display is connected via a LCM1602 IIC board.

/*
 * lcd-pcf8574.c:
 *	Text-based LCD driver library code
 *	This is designed to drive the HD44780U LCD display connected via
 *	a "LCM1602 IIC  A0 A1 A2" board with a PCF8574 I2C controller.
 *
 * Copyright (c) 2012-2013 Gordon Henderson.
 * Copyright (c) 2014 Michiel Broek.
 ***********************************************************************
 *
 *    mbsePi is free software: you can redistribute it and/or modify
 *    it under the terms of the GNU Lesser General Public License as published by
 *    the Free Software Foundation, either version 3 of the License, or
 *    (at your option) any later version.
 *
 *    mbsePi is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU Lesser General Public License for more details.
 *
 *    You should have received a copy of the GNU Lesser General Public License
 *    along with wiringPi.  If not, see <http://www.gnu.org/licenses/>.
 ***********************************************************************
 */

#include "../config.h"
#include "mbselib.h"

//#include <stdio.h>
//#include <stdlib.h>
//#include <unistd.h>
//#include <stdint.h>

//#include <string.h>
//#include <time.h>

//#include <wiringPi.h>
//#include <pcf8574.h>
//#include <lcd.h>

//#ifndef	TRUE
//#  define	TRUE	(1==1)
//#  define	FALSE	(1==2)
//#endif


// Defines for the pcf8574 Pi LCD interface board

//#define	AF_BASE		100

//#define AF_RS		(AF_BASE + 0)
//#define AF_RW		(AF_BASE + 1)
//#define AF_E		(AF_BASE + 2)
//#define AF_BACKLIGHT	(AF_BASE + 3)

//#define	AF_DB4		(AF_BASE + 4)
//#define	AF_DB5		(AF_BASE + 5)
//#define	AF_DB6		(AF_BASE + 6)
//#define	AF_DB7		(AF_BASE + 7)


// User-Defined character test

// Global lcd handle:

int lcdHandle;


/*
 * setBacklight:
 *********************************************************************************
 */

void setBacklight (int value)
{
  pinMode (AF_BACKLIGHT, OUTPUT) ;
  digitalWrite (AF_BACKLIGHT, (value & 1)) ;
}



/*
 * initLCD:
 *********************************************************************************
 */

int initLCD (int cols, int rows)
{
  if (!((rows == 1) || (rows == 2) || (rows == 4)))
  {
    fprintf (stderr, "rows must be 1, 2 or 4\n") ;
    return EXIT_FAILURE ;
  }

  if (!((cols == 16) || (cols == 20)))
  {
    fprintf (stderr, "cols must be 16 or 20\n") ;
    return EXIT_FAILURE ;
  }

  wiringPiSetupSys () ;
  pcf8574Setup (AF_BASE, 0x27) ;

  setBacklight (1) ;

  pinMode (AF_RW, OUTPUT) ;
  digitalWrite (AF_RW, LOW) ;        // Not used with wiringPi - always in write mode

  // The other control pins are initialised with lcdInit ()

  lcdHandle = lcdInit (rows, cols, 4, AF_RS, AF_E, AF_DB4, AF_DB5, AF_DB6, AF_DB7, 0, 0, 0, 0) ;

  if (lcdHandle < 0)
  {
    fprintf (stderr, "lcdInit failed\n") ;
    return -1 ;
  }

  lcdClear (lcdHandle) ;
  return 0 ;
}

mercurial