Fork of KS0108 by
Diff: KS0108.h
- Revision:
- 0:14a7c22dfbe8
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/KS0108.h Mon Jun 18 16:46:41 2012 +0000 @@ -0,0 +1,546 @@ +#ifndef KS0108_H +#define KS0108_H + +#define VERSION 2.0 + +#include <mbed.h> +#include "SystemFont5x7.h" + +/************************************************************************************/ +// Commands +#define LCD_ON 0x3F +#define LCD_OFF 0x3E +#define LCD_SET_ADD 0x40 +#define LCD_SET_PAGE 0xB8 +#define LCD_DISP_START 0xC0 + +//Controller directives +#define LEFT 0 +#define RIGHT 1 +#define BOTH 3 +#define NONE 4 + +// Colors +#define BLACK 0xFF +#define WHITE 0x00 + +//Screen dimensions +#define SCREEN_HEIGHT 64 +#define SCREEN_WIDTH 128 +#define CHIP_WIDTH 64 + +/***********************************************************************************/ +//helper functions + +#define absDiff(x,y) ((x>y) ? (x-y) : (y-x)) +#define swap(a,b) \ +do\ +{\ +uint8_t t;\ + t=a;\ + a=b;\ + b=t;\ +} while(0) + +/**************************************************************************************/ + +// Font Indices +#define FONT_LENGTH 0 +#define FONT_FIXED_WIDTH 2 +#define FONT_HEIGHT 3 +#define FONT_FIRST_CHAR 4 +#define FONT_CHAR_COUNT 5 +#define FONT_WIDTH_TABLE 6 + + +/*************************Callback function definietion for fonts *********************/ +typedef unsigned int (*FontCallback)(unsigned int*); + +/*************************Callback function for reading font array*********************/ +static unsigned int ReadData(unsigned int* ptr) { + return *ptr; +} + +/*************************************************************************************/ +#define MAX_IMG_SIZE 128*64 + +typedef struct { + unsigned int imgWidth; + unsigned int imgHeight; + unsigned char imgarray[MAX_IMG_SIZE]; +}Image; + + +typedef struct { + unsigned int x; + unsigned int y; + unsigned int page; +} LCDCoord; + + +/****************************************************************************************/ + + + +class KS0108 { +public: + + /** + *@brief Constructor, initializes the lcd on the respective pins. + *@param control pins RST,DI,RW,E,CS2,CS1 + *@param databus DB0-DB7 data pins + *@return none + */ + + KS0108 (PinName _RST,PinName _DI, PinName _RW, PinName _E, PinName _CS1, PinName _CS2, PinName DB0, PinName DB1, PinName DB2, PinName DB3, PinName DB4, PinName DB5, PinName DB6, PinName DB7); + + /** + *@brief Write instruction to the specific controller. + *@param Command command to send to the controller + *@param side controller side can be LEFT or RIGHT + *@return none + * + */ + void WriteInstruction(unsigned int Command,unsigned int side); + + /** + *@brief Write data byte to the controller. + *@param data data send to the controller chip + *@param side selected controller can be LEFT or RIGHT + *@return none + * + */ + void WriteData(unsigned int data ,unsigned char side); + + + /** + *@brief Write data byte to the controller (overloaded function). + * + *@param data data send to the controller chip + *@return none + */ + void WriteData(unsigned int data); + + /** + *@brief Write data byte to the screen on specific page and column + *@param page page varies from 0-7 for each side + *@param col col varies from 0-64 for each side + *@param data info to be written on given coordinates + *@return none + * + */ + void WriteDataColPag(unsigned int page, unsigned int col, unsigned int data); + + /** + *@brief Read data from display + *@param none + *@return none + * + */ + unsigned int ReadData(); + + /** + *@brief Read status of display , and check if it's busy + *@param none + *@return status status of display + * + */ + unsigned int ReadStatus(); + + /** + *@brief Select controller chip + * + *@param side controller side can be LEFT or RIGHT + *@return none + * + */ + void SelectSide(unsigned char side); + + + /** + *@brief Set cursor to specified coordinates + * + *@param x row + *@param y column + *@return none + */ + void GotoXY(unsigned int x, unsigned int y); + + + /** + *@brief Clears display + * + *@param none + *@return none + * + */ + void ClearScreen(); + + + /** + *@brief Turn on display + * + *@param none + *@return none + * + */ + void TurnOn(); + + + /** + *@brief Turn Off display + * + *@param none + *@return none + * + */ + void TurnOff(); + + /*******************************Graphic functions************************************************/ + + /** + *@brief Set pixel to specific location on the screen. + *@param x coordinate varies from 0-128 + *@param y col varies from 0-64 + *@param color color of pixel, can be BLACK or WHITE + *@return none + * + */ + void SetPixel( unsigned int x, unsigned int y, unsigned int color); + + + /** + *@brief Draws a line from x1,y1 to x2,y1 + *@param Xaxis1 x coordinate of one side + *@param Xaxis2 x coordinate of one side + *@param Yaxis y coordinate both points + *@param color can be BLACK or WHITE + *@return none + * + */ + void HLine(unsigned int Xaxis1, unsigned int Xaxis2 ,unsigned int Yaxis,unsigned int color); + + /** + *@brief Draw a horizontal line + *@param Xaxis1 + *@param Xaxis2 + *@param width + *@param color can be BLACK or WHITE + *@return none + * + */ + void HLineShort(unsigned int Xaxis, unsigned int Yaxis,unsigned int width ,unsigned int color); + + /** + *@brief Draws a vertical line + *@param Xaxis + *@param Yaxis1 + *@param Yaxis2 + *@param color can be BLACK or WHITE + *@return none + * + */ + void VLine(unsigned int Xaxis, unsigned int Yaxis1 ,unsigned int Yaxis2,unsigned int color); + + /** + *@brief Draw a vertical line of a given width starting from X, Y + *@param Xaxis + *@param Yaxis + *@param height Height of line + *@param color can be BLACK or WHITE + *@return none + * + */ + void VLineShort(unsigned int Xaxis,unsigned int Yaxis, unsigned int height ,unsigned int color); + + + /** + *@brief Draws a line from x1,y1 to x2,y2. + *@param x1 x coordinate of one side + *@param y1 y coordinate of one side + *@param x2 x coordinate of other side + *@param y2 y coordinate of other side + *@param color can be BLACK or WHITE + *@return none + * + */ + void Line(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2, unsigned int color); + + + /** + *@brief Draws a slanty line from x1,y1 to x2,y2 + *@param lX1 x coordinate of one side + *@param lY1 y coordinate of one side + *@param lX2 x coordinate of other side + *@param lY2 y coordinate of other side + *@param color can be BLACK or WHITE + *@return none + * + */ + void SlantyLine(unsigned int lX1, unsigned int lY1, unsigned int lX2,unsigned int lY2,unsigned int color); + + /** + *@brief Draws a line from x,y at given degree from inner_radius to outer_radius. + *@param x + *@param y + *@param inner_radius + *@param outer_radius + *@param color can be BLACK or WHITE + *@return none + * + */ + void DegreeLine(unsigned int x, int y,unsigned int degree,unsigned int inner_radius,unsigned int outer_radius, unsigned int color); + + /** + *@brief Draw a filled rectangle + * + *@param Xaxis1 + *@param Yaxis1 + *@param Xaxis2 + *@param Yaxis2 + *@param color can be BLACK or WHITE + *@return none + * + */ + void FullRectangle(unsigned int Xaxis1, unsigned int Yaxis1, unsigned int Xaxis2 ,unsigned int Yaxis2,unsigned int color); + + /** + Added by Ann + Draws a filled rectangle from right to left (instead of left to right) + **/ + void ReverseFullRectangle(unsigned int Xaxis1, unsigned int Yaxis1, unsigned int Xaxis2 ,unsigned int Yaxis2,unsigned int color); + + /** + *@brief Draw an empty rectangle + *@param Xaxis1 + *@param Yaxis1 + *@param Xaxis2 + *@param Yaxis2 + *@param color can be BLACK or WHITE + *@return none + * + */ + void EmptyRectangle(unsigned int Xaxis1,unsigned int Yaxis1, unsigned int Xaxis2,unsigned int Yaxis2,unsigned int color); + + + /** + *@brief Draw a rectangle with round corners + *@param Xaxis1 x-coordinate of the top left point + *@param Yaxis1 y-coordinate of the top left point + *@param width rectangle width + *@param height rectangle height + *@param radius radius of the edges + *@param color can be BLACK or WHITE + *@return none + * + */ + void RoundRectangle(unsigned int x, unsigned int y, unsigned int width, unsigned int height, unsigned int radius, unsigned int color); + + + /** + *Draws a triangle . + *@param + *@param + *@param + *@param + *@return none + * + */ + + void Triangle ( int topx, int topy, int rightx, int righty); + + + /** + *Draws a right angle triangle . + *@param + *@param + *@param + *@param + *@return none + * + */ + void RightTriangle ( int topx, int topy, int rightx, int righty); + + + /** + *Draws an empty circle centered a x,y with radius R and specific color. + *@param CenterX center x coordinate + *@param CenterY center y coordinate + *@param Radius circle radius + *@param color Color can be BLACK or WHITE + *@return none + * + */ + void EmptyCircle(unsigned int CenterX, unsigned int CenterY, unsigned int Radius,unsigned int color); + + /** + * Circle fill Code is merely a modification of the midpoint + * circle algorithem which is an adaption of Bresenham's line algorithm + * http://en.wikipedia.org/wiki/Midpoint_circle_algorithm + * http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm + * Adapted from arduino lib + * + *@param CenterX center x coordinate + *@param CenterY center y coordinate + *@param Radius circle radius + *@param color Color can be BLACK or WHITE + */ + void FullCircle(unsigned int CenterX, unsigned int CenterY, unsigned int Radius,unsigned int color); + + /** + *Draws an ellipse. + *@param CX x coordinate of one side + *@param CY y coordinate of one side + *@param XRadius x coordinate of other side + *@param YRadius y coordinate of other side + *@param color can be BLACK or WHITE + *@return none + * + * Ported the algorithm found at http://homepage.smc.edu/kennedy_john/belipse.pdf + * + */ + void PlotEllipse(long CX, long CY, long XRadius,long YRadius, int color); + void Plot4EllipsePoints(long CX,long CY, long X, long Y, int color); + + + /** + *@brief Round a double + *@param double + *@return value + * + */ + double dfloor( double value ); + + + /*****************************Bitmaps *****************************************************************/ + + /** + *@brief Draws an image on screen. + *@param PictureData 128x64 image array + *@return none + * + * + */ + void FullScreenBMP (unsigned char *ImageData); + + /** + *@brief Draw a 1-bit bitmap + * + *@param image struct containing img size and array + *@param x x-coordinate + *@param y y-coordinate + *@param color can be BLACK or WHITE + *@return none + */ + void DrawBitmap(const unsigned int * bitmap, unsigned int x, unsigned int y, unsigned int color); + + /** + *@brief Static function , mplemented to read an array + *@param ptr data array + *@return none + */ + unsigned int ReadArrayData(const unsigned int* ptr); + + + /*************************************Font functions **************************************/ + + /** + *@brief Print a character on specified coordinates + * + *@param page row + *@param col column + *@param c integer value + *@return none + */ + void Putchar (int page, int col,unsigned char c); + + /** + *@brief Print a string on specified coordinates + * + *@param str char array + *@param x row + *@param y column + *@return none + */ + void PutString(unsigned int x, unsigned int y,char* str); + + /** + *@brief Print a float on specified coordinates + * + *@param val float value + *@param x row + *@param y column + *@return none + */ + void PrintFloat(float val, unsigned int x,unsigned int y); + + /** + *@brief Print an integer on specified coordinates + * + *@param val integer value + *@param x row + *@param y column + *@return none + */ + void PrintInteger(int val,unsigned int x,unsigned int y); + + + /** + *@brief Select a specific font + * + *@param font font array + *@param color font color , can be BLACK or WHITE + *@param callback function pointer to load font + *@return none + */ + void SelectFont(unsigned int* font,unsigned int color, FontCallback callback); + + + /** + *@brief Print a character + * + *@param c char + *@return none + */ + int PrintChar(char c); + + + /** + *@brief Print a character string + * + *@param str char string + *@return none + */ + void PrintString(char* str); + + + /** + *@brief Print a number + * + *@param n number + *@return none + */ + void PrintNumber(long n); + + +private: + BusInOut DB; + DigitalOut RST; + DigitalOut DI; + DigitalOut RW; + DigitalOut E; + DigitalInOut CS2; + DigitalInOut CS1; + bool Inverted; + + LCDCoord Coord; + FontCallback FontRead ; + unsigned int FontColor; + unsigned int* Font; + unsigned int color; + + +}; + + +#endif