Fork of Dimiter program. "Wait" commands adjusted and added Arial 10 font.
Fork of KS0108 by
Diff: KS0108.cpp
- Revision:
- 1:a368f2688222
- Parent:
- 0:135b9a0a816e
- Child:
- 2:03d27b3fce6e
diff -r 135b9a0a816e -r a368f2688222 KS0108.cpp --- a/KS0108.cpp Tue Jan 04 18:35:28 2011 +0000 +++ b/KS0108.cpp Wed Jan 05 00:01:45 2011 +0000 @@ -1,11 +1,28 @@ -#include "KS0108.h" -#include <math.h> +/************************************************************************* +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. -/*Constructor, initializes the lcd on the respective pins. - * - *@param pins - *@param databus - */ +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. +*******************************************************************************/ + +#include "KS0108.h" + + KS0108::KS0108 (PinName _RST,PinName _DI, PinName _RW, PinName _E, PinName _CS2, PinName _CS1, PinName DB0, PinName DB1, PinName DB2, PinName DB3, PinName DB4, PinName DB5, PinName DB6, PinName DB7) : DB(DB0,DB1,DB2,DB3,DB4,DB5,DB6,DB7),RST (_RST),DI(_DI), RW(_RW), E(_E), CS2(_CS2), CS1(_CS1) { @@ -20,13 +37,7 @@ } -/*Write instruction to the specific controller. - * - *@param Command command to send - *@param side controller side can be LEFT or RIGHT - *@return none - * - */ + void KS0108::WriteInstruction(unsigned int Command,unsigned int side){ E.write(0); DI.write(0); @@ -42,13 +53,7 @@ E.write(0); } -/*Write data to the controller. - * - *@param data data to send - *@param side controller side can be LEFT or RIGHT - * - *@return none - */ + void KS0108::WriteData(unsigned int data,unsigned char side){ E.write(0); DI.write(1); @@ -64,14 +69,7 @@ E = 0; } -/*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 KS0108::WriteDataColPag(unsigned int page, unsigned int col, unsigned int data){ SelectSide(NONE); @@ -95,12 +93,7 @@ SelectSide(NONE); } -/*Read data from diplay - * - *@param none - *@return data - * - */ + unsigned int KS0108::ReadData(){ unsigned int data; DB.input(); @@ -118,12 +111,7 @@ return data; } -/*Read status of display , and check if it's busy - * - *@param none - *@return status status of display - * - */ + unsigned int KS0108::ReadStatus(){ unsigned int status; DB.input(); @@ -142,12 +130,7 @@ return status; } -/*Read status of display - * - *@param side controller side can be LEFT or RIGHT - *@return none - * - */ + void KS0108::SelectSide(unsigned char side){ if(side==LEFT) {CS1.write(1);CS2.write(0);} @@ -159,12 +142,7 @@ {CS1.write(0);CS2.write(0);} } -/*Clears display - * - *@param none - *@return none - * - */ + void KS0108::ClearScreen(){ for (int col=0;col<128;col++) { for (int page=0;page<8;page++) @@ -177,14 +155,7 @@ /*******************************************************************************************/ - -/*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 KS0108::SetPixel(unsigned int x, unsigned int y, unsigned int color){ unsigned int position; @@ -221,16 +192,7 @@ } -/*Draw a filled reactangle - * - *@param Xaxis1 - *@param Yaxis1 - *@param Xaxis2 - *@param Yaxis2 - *@param color can be BLACK or WHITE - *@return none - * - */ + void KS0108::FullRectangle(unsigned int Xaxis1, unsigned int Yaxis1, unsigned int Xaxis2 ,unsigned int Yaxis2,unsigned int color){ for(unsigned int i=Xaxis1;i<=Xaxis2;i++){ @@ -240,15 +202,7 @@ } } -/*Draw an empty rectangle - *@param Xaxis1 - *@param Yaxis1 - *@param Xaxis2 - *@param Yaxis2 - *@param color can be BLACK or WHITE - *@return none - * - */ + void KS0108::EmptyRectangle(unsigned int Xaxis1,unsigned int Yaxis1, unsigned int Xaxis2,unsigned int Yaxis2,unsigned int color){ unsigned int CurrentValue; @@ -267,15 +221,7 @@ } } -/*Draw a rectangle with round corners - *@param Xaxis1 - *@param Yaxis1 - *@param Xaxis2 - *@param Yaxis2 - *@param color can be BLACK or WHITE - *@return none - * - */ + void KS0108::RoundRectangle(unsigned int x, unsigned int y, unsigned int width, unsigned int height, unsigned int radius, unsigned int color) { int tSwitch, x1 = 0, y1 = radius; tSwitch = 3 - 2 * radius; @@ -308,66 +254,30 @@ VLineShort(x+width, y+radius,height-(2*radius), color); // right } -/*Draw a horizontal line - *@param Xaxis1 - *@param Xaxis2 - *@param Yaxis - *@param color can be BLACK or WHITE - *@return none - * - */ + void KS0108::HLine(unsigned int Xaxis1, unsigned int Xaxis2 ,unsigned int Yaxis,unsigned int color){ FullRectangle(Xaxis1,Yaxis,Xaxis2,Yaxis,color); } -/*Draw a horizontal line - *@param Xaxis1 - *@param Xaxis2 - *@param Yaxis - *@param color can be BLACK or WHITE - *@return none - * - */ + void KS0108::HLineShort(unsigned int Xaxis, unsigned int Yaxis,unsigned int width ,unsigned int color){ FullRectangle(Xaxis,Yaxis,Xaxis+width,Yaxis,color); } -/*Draw a horizontal line - *@param Xaxis1 - *@param Xaxis2 - *@param Yaxis - *@param color can be BLACK or WHITE - *@return none - * - */ + void KS0108::VLine(unsigned int Xaxis, unsigned int Yaxis1 ,unsigned int Yaxis2,unsigned int color){ FullRectangle(Xaxis,Yaxis1,Xaxis,Yaxis2,color); } -/*Draw a horizontal line - *@param Xaxis1 - *@param Xaxis2 - *@param Yaxis - *@param color can be BLACK or WHITE - *@return none - * - */ + void KS0108::VLineShort(unsigned int Xaxis,unsigned int Yaxis, unsigned int height ,unsigned int color){ FullRectangle(Xaxis,Yaxis,Xaxis,Yaxis+height,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 KS0108::DegreeLine(unsigned int x, int y,unsigned int degree,unsigned int inner_radius,unsigned int outer_radius, unsigned int color){ int fx,fy,tx,ty; fx = x + dfloor(inner_radius * sin(degree * 3.14 / 180)); @@ -377,12 +287,7 @@ SlantyLine(fx,fy,tx,ty,color); } -/* - *Round a double - *@param double - *@return value - * - */ + double KS0108::dfloor( double value ) { if (value < 0.0) @@ -392,16 +297,7 @@ } -/* - *Draws a line from x,y at given degree from inner_radius to outer_radius. - *@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 KS0108::SlantyLine(unsigned int lX1, unsigned int lY1, unsigned int lX2,unsigned int lY2,unsigned int color){ long lError, lDeltaX, lDeltaY, lYStep, bSteep; @@ -475,16 +371,7 @@ } -/* - *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 KS0108::Line(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2, unsigned int color){ unsigned int deltax, deltay, x,y, steep; int lerror, ystep; @@ -517,16 +404,7 @@ } } -/* - *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 KS0108::EmptyCircle(unsigned int CenterX, unsigned int CenterY, unsigned int Radius,unsigned int color){ unsigned int y=0, x=0, d = 0; int part; @@ -554,18 +432,7 @@ } -/* - * 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 KS0108::FullCircle(unsigned int CenterX, unsigned int CenterY, unsigned int Radius,unsigned int color){ int f = 1 - Radius; @@ -603,18 +470,7 @@ } -/* - *Draws a line from x,y at given degree from inner_radius to outer_radius. - *@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 KS0108::PlotEllipse(long CX, long CY, long XRadius,long YRadius, int color) { @@ -673,18 +529,7 @@ } -/* - *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 KS0108::Plot4EllipsePoints(long CX,long CY, long X, long Y, int color){ SetPixel(CX+X, CY+Y, color); //{point in quadrant 1} SetPixel(CX-X, CY+Y, color); //{point in quadrant 2} @@ -694,13 +539,7 @@ /***********************************************************************************/ -/* - *Draws an image on screen. - *@param PictureData 128x64 image array - *@return none - * - * - */ + void KS0108::FullScreenBMP (unsigned char *PictureData){ unsigned int Page=0; unsigned int Column=0; @@ -726,13 +565,7 @@ /******************************************************************************************/ -/* - *Moves cursor to x,y. - *@param x x coordinate - *@param y y coordinate - *@return none - * - */ + void KS0108::CursorXY(unsigned int x, unsigned int y){ if( (x > SCREEN_WIDTH-1) || (y > SCREEN_HEIGHT-1) ) // exit if coordinates are not legal return; @@ -748,15 +581,7 @@ } } -/* - *Print a char on the specified coordinates - *@param page row coordinate - *@param col y coordinate - *@param c character from systemfont - *@return none - * - * - */ + void KS0108::Putc (int page, int col,unsigned char c) { if (c>31 && c<127){ for(int i=0;i<5;i++){ @@ -766,15 +591,7 @@ } -/* - *Print a string on the specified coordinates. - *@param x row coordinate - *@param y y coordinate - *@param str character string - *@return none - * - * - */ + void KS0108::PutString(unsigned int x, unsigned int y,char* str){ while(*str != 0){ @@ -787,15 +604,6 @@ -/* - *Print a float on the specified coordiantes. - *@param val float number - *@param x row coordinate - *@param y y coordinate - *@return none - * - * - */ void KS0108::PrintFloat(float val, unsigned int x,unsigned int y){ char buf[20] = {}; // prints up to 20 digits sprintf(buf,"%f",val); @@ -803,20 +611,9 @@ } -/* - *Print an integer on th specified coordinates. - *@param val integer number - *@param x row coordinate - *@param y column coordinate - *@return none - * - */ + void KS0108::PrintInteger(int val,unsigned int x,unsigned int y){ char buf[20] = {}; // prints up to 20 digits sprintf(buf,"%d",val); PutString(x,y,buf); } - - - -