lib/lcd-pcf8574.c

changeset 16
f4cbe008da72
child 18
3f4823083b9d
--- /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 <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