Class library for a Topway LM6029ACW graphics LCD.

Revision:
0:79ef6ebe51ae
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LM6029ACW.h	Mon Feb 08 14:53:03 2016 +0000
@@ -0,0 +1,176 @@
+/* LM6029ACW Library v1.0
+ * Copyright (c) 2016 Grant Phillips
+ * grant.phillips@nmmu.ac.za
+ *
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+ 
+#ifndef LM6029ACW_H
+#define LM6029ACW_H
+ 
+#include "mbed.h"
+
+#define lcd_delayx      0.000001    //delay for writing and reading from lcd - 1us
+#define lcd_init_delay  0.001       //delay when initializing the lcd - 1ms
+
+/** Class library for a Topway LM6029ACW graphics LCD.
+ *
+ * Example:
+ * @code
+ * #include "mbed.h"
+ * #include "LM6029ACW.h"
+ * 
+ * LM6029ACW lcd(PD_7, PE_2, PD_6, PD_3, PD_2, PC_15, PC_14, PC_13, PC_11, PC_9, PC_8, PC_6, PC_2);
+ * //            CS1   RES   RS    WR    RD    DB7    DB6    DB5    DB4    DB3   DB2   DB1   DB0
+ * 
+ * DigitalOut backlight(PB_7);
+ * 
+ * int main() { 
+ *     backlight = 0;                      //turn on the lcd's backlight
+ *     while(1) {
+ *         lcd.GotoXY(4, 3);               //move cursor to row, col
+ *         lcd.ClrScr(0);                  //clear all the pixels on the display
+ *         lcd.PutStr("Hello World!", 1);  //print text in black pixels
+ *         wait(2.0);
+ *         
+ *         lcd.GotoXY(4, 3);               //move cursor to row, col
+ *         lcd.ClrScr(1);                  //fill all the pixels on the display
+ *         lcd.PutStr("Hello World!", 0);  //print text in clear pixels
+ *         wait(2.0);
+ *     } 
+ * }
+ * @endcode
+ */
+ 
+class LM6029ACW {
+  public:
+    /** Create a LM6029ACW object for a graphics LCD connected to the specified pins. 
+    * @param CS1 Chip Select pin used to connect to LM6029ACW's CS1 pin
+    * @param RES Reset pin used to connect to LM6029ACW's RES pin
+    * @param RS Register Select pin used to connect to LM6029ACW's RS pin
+    * @param WR Write pin used to connect to LM6029ACW's WR pin
+    * @param RD Read pin used to connect to LM6029ACW's RD pin
+    * @param DB7-DB0 Data Bus pin useds to connect to LM6029ACW's DB7 - DB0 pins
+    */
+    LM6029ACW(PinName CS1, PinName RES, PinName RS, PinName WR, PinName RD, PinName DB7, PinName DB6, PinName DB5, PinName DB4, PinName DB3, PinName DB2, PinName DB1, PinName DB0);
+    
+    /** Clears the lcd by clearing or filling all the pixels. 
+    * @param color Bit value; clear pixels(0) or fill pixels(1)
+    */
+    void ClrScr(unsigned char color);
+    
+    /** Puts the lcd in power save mode - display off. 
+    */
+    void PowerSave(void);
+    
+    /** Puts the lcd in normal power mode - display on. 
+    */
+    void PowerActive(void);
+    
+    /** Draws a pixel on the lcd at the specified xy position. 
+    * @param x x position (0 - 127)
+    * @param y y position (0 - 63)
+    * @param color mode of the pixel; cleared(0), filled(1), or toggle(2)
+    */
+    void DrawPixel(unsigned char x, unsigned char y, unsigned char color);
+    
+    /** Draws a line on the lcd from x1,y1 to x2,y2. 
+    * @param x1 x1 position (0 - 127)
+    * @param y1 y1 position (0 - 63)
+    * @param x2 x2 position (0 - 127)
+    * @param y2 y2 position (0 - 63)
+    * @param color mode of the pixel; cleared(0), filled(1), or toggle(2)
+    */
+    void DrawLine(int x1, int y1, int x2, int y2, unsigned int color);
+    
+    /** Draws a circle on the lcd at x,y with the option to fill it.  
+    * @param x x position (0 - 127)
+    * @param y y position (0 - 63)
+    * @param radius radius of the circle (0 - 127)
+    * @param fill circle must be filled (=1) or not filled (=0)
+    * @param color mode of the pixel; cleared(0), filled(1)
+    */
+    void DrawCircle(unsigned char x, unsigned char y, unsigned char radius, unsigned char fill, unsigned char color);
+    
+    /** Changes the position on the lcd of the current character cursor from where the next characters will be printed.
+    * @param x column position (0 - 20)
+    * @param y row position (0 - 7)
+    */
+    void GotoXY(unsigned char x, unsigned char y);
+    
+    /** Prints a string on the lcd at the current character cursor position.
+    * @param str string (char array) to print
+    * @param color mode of the characters in the string; normal(1), inverted(0)
+    */
+    void PutStr(char *str, unsigned char color);
+    
+    /** Prints a character on the lcd at the current character cursor position.
+    * @param c character to print
+    * @param color mode of the character; normal(1), inverted(0)
+    */
+    void PutChar(unsigned char c, unsigned char color);
+    
+    
+  private:
+    DigitalOut CS1pin, RESpin, RSpin, WRpin, RDpin;
+    BusOut DATApins;
+    unsigned char DisplayRAM[128][8];
+    unsigned char character_x, character_y;
+    
+        
+    /* Creates a delay which is simply a code loop which is independent from any hardware timers.
+    * @param del 16-bit value to represent the delay cycles
+    */
+    void Delay(unsigned int del);
+    
+    /* Writes a COMMAND to the LM6029ACW lcd module.
+    * @param cmd The byte of command to write to the lcd
+    */
+    void WriteCommand(unsigned char cmd);
+
+    /* Writes DATA to the LM6029ACW lcd module.
+    * @param dat The byte of data to write to the lcd
+    */
+    void WriteData(unsigned char dat);
+    
+    /* Set the display RAM page address.
+    * @param Page 4-bit value representing the page address (0 - 7)
+    */
+    void SetPage(unsigned char Page);
+    
+    /* Set the column address counter.
+    * @param Page Byte value representing the column (0 - 127)
+    */
+    void SetColumn(unsigned char Col);
+    
+    /** Initializes the LM6029ACW lcd module. 
+    */
+    void Init(void);
+    
+    /* Used by LM6029ACW_DrawChar only updates the column and page numbers..
+    */
+    void WriteCharCol(unsigned char v, unsigned char x, unsigned char page, unsigned char color);
+    
+    /* Used by LM6029ACW_PutChar() only and draws the specified character at byte level using a set font.
+    */
+    void DrawChar(unsigned char c, unsigned char x, unsigned char page, unsigned char color);
+};
+ 
+#endif
\ No newline at end of file