Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: KS0108/KS0108.h
- Revision:
- 0:730586f57df2
diff -r 000000000000 -r 730586f57df2 KS0108/KS0108.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/KS0108/KS0108.h Thu Feb 02 03:20:45 2012 +0000
@@ -0,0 +1,540 @@
+#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 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);
+
+ /**
+ *@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