Added custom fonts. Added triangle drawing function
Dependents: sc100016x4lcd REVO_Updated_Steering Driving_game Arkanoid_v1 ... more
Diff: KS0108.h
- Revision:
- 1:a368f2688222
- Parent:
- 0:135b9a0a816e
- Child:
- 2:03d27b3fce6e
--- a/KS0108.h Tue Jan 04 18:35:28 2011 +0000 +++ b/KS0108.h Wed Jan 05 00:01:45 2011 +0000 @@ -1,32 +1,54 @@ +/************************************************************************* +Copyright (c) 2010 Dimiter Kentri + +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 KS0108_H #define KS0108_H #define VERSION 1 #include "mbed.h" -#include "SystemFont5x7.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 +#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 1 -#define RIGHT 2 -#define BOTH 3 -#define NONE 4 +#define LEFT 1 +#define RIGHT 2 +#define BOTH 3 +#define NONE 4 // Colors -#define BLACK 0xFF -#define WHITE 0x00 +#define BLACK 0xFF +#define WHITE 0x00 //Screen dimensions -#define SCREEN_HEIGHT 64 -#define SCREEN_WIDTH 128 +#define SCREEN_HEIGHT 64 +#define SCREEN_WIDTH 128 /***********************************************************************************/ @@ -35,36 +57,27 @@ do\ {\ uint8_t t;\ - t=a;\ - a=b;\ - b=t;\ + t=a;\ + a=b;\ + b=t;\ } while(0) -/**************************************************************************************/ - -#define MAX_IMG_SIZE 128*64 - -typedef struct { - unsigned char imgarray[MAX_IMG_SIZE]; - unsigned int imgWidth; - unsigned int imgHeight; -}Image; /**************************************************************************************/ // 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 +#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 typedef struct { - unsigned int x; - unsigned int y; - unsigned int page; + unsigned int x; + unsigned int y; + unsigned int page; } LCDCoord; @@ -72,70 +85,340 @@ class KS0108 { - public: - // Constructor: - 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); - - void WriteInstruction(unsigned int Command,unsigned int side); - void WriteData(unsigned int data ,unsigned char side); - void WriteDataColPag(unsigned int page, unsigned int col, unsigned int data); - unsigned int ReadData(); - unsigned int ReadStatus(); - void SelectSide(unsigned char side); - void ClearScreen(); +public: + /*Constructor, initializes the lcd on the respective pins. + * + *@param pins + *@param databus + */ + + 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); + + /*Write instruction to the specific controller. + * + *@param Command command to send + *@param side controller side can be LEFT or RIGHT + *@return none + * + */ + void WriteInstruction(unsigned int Command,unsigned int side); + + /*Write data to the controller. + * + *@param data data to send + *@param side controller side can be LEFT or RIGHT + * + *@return none + */ + void WriteData(unsigned int data ,unsigned char side); + + /*Write data to the screen on specific page and column + * + *@param page page varies from0-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); + + + /*Read data from diplay + * + *@param none + *@return data + * + */ + unsigned int ReadData(); + + /*Read status of display , and check if it's busy + * + *@param none + *@return status status of display + * + */ + unsigned int ReadStatus(); + + /*Select controller + * + *@param side controller side can be LEFT or RIGHT + *@return none + * + */ + void SelectSide(unsigned char side); - //Graphic functions - void SetPixel( unsigned int x, unsigned int y, unsigned int color); + /*Clears display + * + *@param none + *@return none + * + */ + void ClearScreen(); + + /*******************************Graphic functions************************************************/ + + /*Set pixel to specific location on the screen. + *@param x page 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); + + + /*Draw a horizontal line + *@param Xaxis1 + *@param Xaxis2 + *@param Yaxis + *@param color can be BLACK or WHITE + *@return none + * + */ + void HLine(unsigned int Xaxis1, unsigned int Xaxis2 ,unsigned int Yaxis,unsigned int color); - void HLine(unsigned int Xaxis1, unsigned int Xaxis2 ,unsigned int Yaxis,unsigned int color); - void HLineShort(unsigned int Xaxis, unsigned int Yaxis,unsigned int width ,unsigned int color); - void VLine(unsigned int Xaxis, unsigned int Yaxis1 ,unsigned int Yaxis2,unsigned int color); - void VLineShort(unsigned int Xaxis,unsigned int Yaxis, unsigned int height ,unsigned int color); - void Line(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2, unsigned int color); - void SlantyLine(unsigned int lX1, unsigned int lY1, unsigned int lX2,unsigned int lY2,unsigned int color); - void DegreeLine(unsigned int x, int y,unsigned int degree,unsigned int inner_radius,unsigned int outer_radius, unsigned int color); + /*Draw a horizontal line + *@param Xaxis1 + *@param Xaxis2 + *@param Yaxis + *@param color can be BLACK or WHITE + *@return none + * + */ + void HLineShort(unsigned int Xaxis, unsigned int Yaxis,unsigned int width ,unsigned int color); + + /*Draw a vertical line + *@param Xaxis1 + *@param Xaxis2 + *@param Yaxis + *@param color can be BLACK or WHITE + *@return none + * + */ + void VLine(unsigned int Xaxis, unsigned int Yaxis1 ,unsigned int Yaxis2,unsigned int color); + + /*Draw a vertical line + *@param Xaxis1 + *@param Xaxis2 + *@param Yaxis + *@param color can be BLACK or WHITE + *@return none + * + */ + void VLineShort(unsigned int Xaxis,unsigned int Yaxis, unsigned int height ,unsigned int color); + + + /* + *Draws a 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 Line(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2, unsigned int color); - void FullRectangle(unsigned int Xaxis1, unsigned int Yaxis1, unsigned int Xaxis2 ,unsigned int Yaxis2,unsigned int color); - void EmptyRectangle(unsigned int Xaxis1,unsigned int Yaxis1, unsigned int Xaxis2,unsigned int Yaxis2,unsigned int color); - void RoundRectangle(unsigned int x, unsigned int y, unsigned int width, unsigned int height, unsigned int radius, unsigned int color); - - - void EmptyCircle(unsigned int CenterX, unsigned int CenterY, unsigned int Radius,unsigned int color); - void FullCircle(unsigned int CenterX, unsigned int CenterY, unsigned int Radius,unsigned int color); - void PlotEllipse(long CX, long CY, long XRadius,long YRadius, int color); - void Plot4EllipsePoints(long CX,long CY, long X, long Y, int color); - - void FullScreenBMP (unsigned char *PictureData); - - double dfloor( double value ); - - - // Font Functions - void Putc (int page, int col,unsigned char c); - void PutString(unsigned int x, unsigned int y,char* str); - void PrintFloat(float val, unsigned int x,unsigned int y); - void PrintInteger(int val,unsigned int x,unsigned int y); + /* + *Draws a slanty line . + *@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); + + /* + *Draws a line from x,y at given degree from inner_radius to outer_radius. + *@param Xaxis1 + *@param Xaxis2 + *@param Yaxis + *@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); + + /*Draw a filled reactangle + * + *@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); + + /*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); + + + /*Draw a rectangle with round corners + *@param Xaxis1 + *@param Yaxis1 + *@param Xaxis2 + *@param Yaxis2 + *@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 an empty circle centered a x,y with radius R and specific color. + *@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 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 + *@param CenterY + *@param Radius + *@param color + */ + void FullCircle(unsigned int CenterX, unsigned int CenterY, unsigned int Radius,unsigned int color); + + /* + *Draws an ellipse. + *@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 + * + * 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 CursorXY( unsigned int x, unsigned int y); - - - - private: - BusInOut DB; - DigitalOut RST; - DigitalOut DI; - DigitalOut RW; - DigitalOut E; - DigitalInOut CS2; - DigitalInOut CS1; + /* + *Helper function for drawing an ellipse. + *@param CX x coordinate of one side + *@param CY y coordinate of one side + *@param X x coordinate of other side + *@param Y y coordinate of other side + *@param color can be BLACK or WHITE + *@return none + * + * Portted the algorithm found at http://homepage.smc.edu/kennedy_john/belipse.pdf + * + */ + void Plot4EllipsePoints(long CX,long CY, long X, long Y, int color); + + /* + *Draws an image on screen. + *@param PictureData 128x64 image array + *@return none + * + * + */ + void FullScreenBMP (unsigned char *PictureData); + + /* + *Round a double + *@param double + *@return value + * + */ + double dfloor( double value ); + + + /* + *Print a char on the specified coordinates + *@param page row coordinate + *@param col y coordinate + *@param c character from systemfont + *@return none + * + * + */ + void Putc (int page, int col,unsigned char c); - unsigned int color; - - unsigned int FontColor; - unsigned int* Font; - LCDCoord Coord; + /* + *Print a string on the specified coordinates. + *@param x row coordinate + *@param y y coordinate + *@param str character string + *@return none + * + * + */ + void PutString(unsigned int x, unsigned int y,char* str); + + /* + *Print a float on the specified coordiantes. + *@param val float number + *@param x row coordinate + *@param y y coordinate + *@return none + * + * + */ + void PrintFloat(float val, unsigned int x,unsigned int y); + + /* + *Print an integer on th specified coordinates. + *@param val integer number + *@param x row coordinate + *@param y column coordinate + *@return none + * + */ + void PrintInteger(int val,unsigned int x,unsigned int y); + + /* + *Moves cursor to x,y. + *@param x x coordinate + *@param y y coordinate + *@return none + * + */ + void CursorXY( unsigned int x, unsigned int y); + + + +private: + BusInOut DB; + DigitalOut RST; + DigitalOut DI; + DigitalOut RW; + DigitalOut E; + DigitalInOut CS2; + DigitalInOut CS1; + + unsigned int color; + unsigned int* Font; + LCDCoord Coord; }; - + #endif