diff -r 01fec4ddad17 -r f4cbe008da72 lib/lcd-pcf8574.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/lcd-pcf8574.c Fri May 02 21:04:20 2014 +0200 @@ -0,0 +1,121 @@ +/* + * 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 . + *********************************************************************** + */ + +#include "../config.h" +#include "mbselib.h" + +//#include +//#include +//#include +//#include + +//#include +//#include + +//#include +//#include +//#include + +//#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 ; +}