PCD8544 Driver for an LCD with an PCD8544 controller (e.g. Nokia 3310, 3390)

Dependents:   PCD8544_LCD

Revision:
0:358e68b0535a
Child:
1:9948e71af151
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pcd8544_drv.hpp	Sun Jan 02 11:50:35 2011 +0000
@@ -0,0 +1,132 @@
+/**
+ * @file pcd8544_drv.hpp
+ * PCD8544 Driver for an LCD with an PCD8544 controller.
+ * Note: Text mode supported only.
+ *
+ * Created on: 12/31/2010 at 19:48
+ * @author: CarlosFTM
+ */
+
+#include "mbed.h"
+#include "ascii_table.hpp"
+
+/* Number of pixels on the LCD */
+#define MAX_PIX_X  (84)
+#define MAX_PIX_Y  (48)
+
+/* Size of a caracter displayed on the LCD */
+#define CHAR_PIX_X (6)
+#define CHAR_PIX_Y (8)
+
+/* Maximum number of character displayed on the LCD*/
+#define MAX_CHAR_X (MAX_PIX_X / CHAR_PIX_X)
+#define MAX_CHAR_Y (MAX_PIX_Y / CHAR_PIX_Y)
+
+/* Timming constants*/
+#define TICK        (1) // Clock pulse width in useg
+#define RESET_TICKS (8) // number of ticks for reset
+
+/* Digital output assignament*/
+#define pin_sclk    (p21)
+#define pin_mosi    (p22)
+#define pin_dc      (p23)
+#define pin_sce     (p24)
+#define pin_reset   (p25)
+
+/* Digital output logicla level*/
+#define HIGH (1)
+#define LOW  (0)
+
+/* Display control command */
+#define DISPLAY_BLANK (0x08)
+#define NORMAL_MODE   (0x0C)
+#define ALL_SEG_ON    (0x09)
+#define INVERSE_MODE  (0x0D)
+
+#define SET_ADDRES_X  (0x80)
+#define SET_ADDRES_Y  (0x40)
+
+
+/** Creates an interface to the PCD8544 LCD controller
+ *
+ */
+class pcd8544
+{
+  private:
+    DigitalOut _sclk;
+    DigitalOut _mosi;
+    DigitalOut _dc;
+    DigitalOut _sce;
+    DigitalOut _reset;
+    /** Sends a raw byte to the LCD controller
+    *
+    * @param byte to send, boolean to indicate if it is a coomand (Command = TRUE / Data = FALSE).
+    */
+    void sendByte(char byte, bool command);
+    
+    /** Generates a clock tick
+    *
+    * @param pulse width in useg
+    */
+    inline void clockTick(unsigned short useg);
+
+  public:
+  
+    /** Creates an interface to the LCD
+    *
+    * @param PinName for SCLK
+    * @param PinName for MOSI
+    * @param PinName for DC
+    * @param PinName for SCE
+    * @param PinName for RESET
+    */
+    pcd8544(PinName pin_sclk, PinName pin_mosi, PinName pin_dc, PinName pin_sce, PinName pin_reset);
+
+    /** Writes data into the LCD controller
+    *
+    * @param data to be transmited in byte
+    */
+    void writeData(char data);
+
+    /** Writes a command into the LCD controller
+    *
+    * @param command in byte
+    */
+    void writeCmd(char cmd);
+
+    /** Writes a character into the LCD controller
+    *
+    * @param Character to be written in byte
+    */
+    void writeChar(char character);
+
+    /** Writes a string into LCD
+    *
+    * @param pointer to a character string
+    */
+    void writeString(char* character);
+
+    /** Reset the LCD
+    *
+    * @param none
+    */
+    void resetLCD(void);
+
+    /** Initialize the LCD
+    *
+    * @param none
+    */
+    void initLCD(void);
+
+    /** Clear the LCD screen
+    *
+    * @param none
+    */
+    void clearLCD(void);
+
+    /** Set the cursor to a specific position
+    *
+    * @param X and Y position in characters
+    */
+    void setCursorXY(char x, char y);
+};
\ No newline at end of file