ks0713 SPI library. This library includes a small 5x5 ascii font and line function.

Revision:
1:408627d73aa8
Parent:
0:7b044b89e49c
diff -r 7b044b89e49c -r 408627d73aa8 ks0713_spi.cpp
--- a/ks0713_spi.cpp	Sun Feb 26 15:52:10 2012 +0000
+++ b/ks0713_spi.cpp	Sun Feb 26 16:01:29 2012 +0000
@@ -8,8 +8,7 @@
 }
 
 
-void KS0713_SPI::init()
-{
+void KS0713_SPI::init() {
     _cs1b=0;
     _rs  =0;
     _rstb=0;
@@ -19,204 +18,185 @@
 
 
     wait(0.015); // wait for power up (reset low term must be greater than 900[ns])
-    
+
     _rstb=1; // de-assert resetb
-    
-    
+
+
     writeCommand(0xA2); // LCD BIAS selection (1/65duty, 1/9bias)
     writeCommand(0xA1); // ADC selection (SEG128->SEG0)
     writeCommand(0xC0); // SHL selection (COM0->COM64)
     wait_ms(1);
 
-     /*Power control
-       Displaytech screen uses built-in power circuits
-       Switch on in order as specified in data sheet
-       wait 1ms between each command
-       1st - Voltage converter ON = 0x2C
-       2nd - Voltage regulator ON = 0x2E
-       3rd - Voltage follower  ON = 0x2F */
-     writeCommand(0x2C);  //0x2C = Voltage converter ON
-     wait_ms(1);
-     writeCommand(0x2E);  //0x2E = Voltage regulator ON
-     wait_ms(1);
-     writeCommand(0x2F);  //0x2F = Voltage follower ON
-     
-     
-     // Regulator Resistor Selection
-     /*Regulator resistor select
-      Sets the internal resistance ratio used in the internal voltage regulator
-      Refer to datasheet p.42
-      This works as a corse contrast control
-      0x20 = 1.9
-      0x21 = 2.19
-      0x22 = 2.55
-      0x23 = 3.02
-      0x24 = 3.61
-      0x25 = 4.35
-      0x26 = 5.29
-      0x27 = 6.48 */ 
-     writeCommand(0x23);
+    /*Power control
+      Displaytech screen uses built-in power circuits
+      Switch on in order as specified in data sheet
+      wait 1ms between each command
+      1st - Voltage converter ON = 0x2C
+      2nd - Voltage regulator ON = 0x2E
+      3rd - Voltage follower  ON = 0x2F */
+    writeCommand(0x2C);  //0x2C = Voltage converter ON
+    wait_ms(1);
+    writeCommand(0x2E);  //0x2E = Voltage regulator ON
+    wait_ms(1);
+    writeCommand(0x2F);  //0x2F = Voltage follower ON
+
 
-     /*Set reference voltage register
-      Used as a fine contrast control
-      0x81 = Enter voltage register set mode
-      0x00 to 0x3F = 0 to 63 */
-     writeCommand(0x81);  //0x81 = Enter voltage register set mode
-     writeCommand(0x20);  //0x20 = Set ref voltage to 20
-    
-     /*Initial display line
-      Specify DDRAM line for COM1
-      0x40 + display line */
-     writeCommand(0x40);  //Set initial line to 0
+    // Regulator Resistor Selection
+    /*Regulator resistor select
+     Sets the internal resistance ratio used in the internal voltage regulator
+     Refer to datasheet p.42
+     This works as a corse contrast control
+     0x20 = 1.9
+     0x21 = 2.19
+     0x22 = 2.55
+     0x23 = 3.02
+     0x24 = 3.61
+     0x25 = 4.35
+     0x26 = 5.29
+     0x27 = 6.48 */
+    writeCommand(0x23);
+
+    /*Set reference voltage register
+     Used as a fine contrast control
+     0x81 = Enter voltage register set mode
+     0x00 to 0x3F = 0 to 63 */
+    writeCommand(0x81);  //0x81 = Enter voltage register set mode
+    writeCommand(0x20);  //0x20 = Set ref voltage to 20
+
+    /*Initial display line
+     Specify DDRAM line for COM1
+     0x40 + display line */
+    writeCommand(0x40);  //Set initial line to 0
 
-     /*Set page address
-      Sets the initial page address to write to
-      0xB0 + page address 0 to 8 */
-     writeCommand(0xB0); //Initial page set to 0
-    
-     /*Set column address
-      Sets the initial column to write to
-      for LSB (b3-b0) 0x00 + first nibble
-      for MSB (b7-b4) 0x10 + second nibble 
-      0x00 to 0x83 = column 0 to 131 */
-     writeCommand(0x00);  //Sets LSB to 0
-     writeCommand(0x10);  //Sets MSB to 0  - column is now set to 0
-    
-     /*Reverse display
-      Selects either a normal display or a reverse display
-      0xA6 = normal
-      0xA7 = reverse */    
-     writeCommand(0xA6);  //Sets display to normal
-    
-     /*Set static indicator
-      Sets up a static indicator on the display
-      See datasheet p.42 
-      This is a 2 instruction cycle
-      0xAC = static indicator ON
-      0xAD = static indicator OFF 
-      Next instruction to set indicator type:
-      0x00 = OFF
-      0x01 = ON - 1 second blinking
-      0x02 = ON - 0.5 second blinking
-      0x03 = ON - always ON */
-     writeCommand(0xAD);  //Static indicator OFF
-     writeCommand(0x00);  //OFF - 0.5 second blinking
-    
-     /*Display ON/OFF
-      Switched the display to on or off
-      0xAE = Display OFF
-      0xAF = Display ON */
-     writeCommand(0xAF);
-     
-     clear();
-     update();
-     
+    /*Set page address
+     Sets the initial page address to write to
+     0xB0 + page address 0 to 8 */
+    writeCommand(0xB0); //Initial page set to 0
+
+    /*Set column address
+     Sets the initial column to write to
+     for LSB (b3-b0) 0x00 + first nibble
+     for MSB (b7-b4) 0x10 + second nibble
+     0x00 to 0x83 = column 0 to 131 */
+    writeCommand(0x00);  //Sets LSB to 0
+    writeCommand(0x10);  //Sets MSB to 0  - column is now set to 0
+
+    /*Reverse display
+     Selects either a normal display or a reverse display
+     0xA6 = normal
+     0xA7 = reverse */
+    writeCommand(0xA6);  //Sets display to normal
+
+    /*Set static indicator
+     Sets up a static indicator on the display
+     See datasheet p.42
+     This is a 2 instruction cycle
+     0xAC = static indicator ON
+     0xAD = static indicator OFF
+     Next instruction to set indicator type:
+     0x00 = OFF
+     0x01 = ON - 1 second blinking
+     0x02 = ON - 0.5 second blinking
+     0x03 = ON - always ON */
+    writeCommand(0xAD);  //Static indicator OFF
+    writeCommand(0x00);  //OFF - 0.5 second blinking
+
+    /*Display ON/OFF
+     Switched the display to on or off
+     0xAE = Display OFF
+     0xAF = Display ON */
+    writeCommand(0xAF);
+
+    clear();
+    update();
+
     _x=0;
     _y=0;
 }
 
-void KS0713_SPI::writeCommand(unsigned char data)
-{
+void KS0713_SPI::writeCommand(unsigned char data) {
     _cs1b=0;
     _rs  =0;
     wait_us(1); // setup 55[ns]
-    _spi.write(data);    
+    _spi.write(data);
     wait_us(1); // hold 180[ns]
     _cs1b=1;
 }
 
-void KS0713_SPI::writeData(unsigned char data)
-{
+void KS0713_SPI::writeData(unsigned char data) {
     _cs1b=0;
     _rs  =1;
     wait_us(1); // setup 55[ns]
-    _spi.write(data);    
+    _spi.write(data);
     wait_us(1); // hold 180[ns]
     _cs1b=1;
 }
 
-void KS0713_SPI::clear()
-{
-    for (int page=0;page<MBED_KS0713_SPI_HEIGHT/8;page++)
-    {
-        for (int column=0;column<MBED_KS0713_SPI_WIDTH;column++)
-        {
+void KS0713_SPI::clear() {
+    for (int page=0; page<MBED_KS0713_SPI_HEIGHT/8; page++) {
+        for (int column=0; column<MBED_KS0713_SPI_WIDTH; column++) {
             vram[column][page]=0x00;
-        }    
+        }
     }
 }
-void KS0713_SPI::fill()
-{
-    for (int page=0;page<MBED_KS0713_SPI_HEIGHT/8;page++)
-    {
-        for (int column=0;column<MBED_KS0713_SPI_WIDTH;column++)
-        {
+void KS0713_SPI::fill() {
+    for (int page=0; page<MBED_KS0713_SPI_HEIGHT/8; page++) {
+        for (int column=0; column<MBED_KS0713_SPI_WIDTH; column++) {
             vram[column][page]=0xFF;
-        }    
+        }
     }
 }
-void KS0713_SPI::update()
-{
-    for (int page=0;page<MBED_KS0713_SPI_HEIGHT/8;page++)
-    {
+void KS0713_SPI::update() {
+    for (int page=0; page<MBED_KS0713_SPI_HEIGHT/8; page++) {
         writeCommand(0xB0+page);
         writeCommand(0x10);
         writeCommand(0x00);
-        for (int column=0;column<100;column++)
-        {
+        for (int column=0; column<100; column++) {
             writeData(vram[column][page]);
-        }    
+        }
     }
 }
 
-void KS0713_SPI::locate(int x,int y)
-{
+void KS0713_SPI::locate(int x,int y) {
     _x=x;
     _y=y;
 }
 
-void KS0713_SPI::line(int x1, int y1, int x2, int y2)
-{
+void KS0713_SPI::line(int x1, int y1, int x2, int y2) {
     int dist_x;
     int dist_y;
     int calc_point;
 
-    if(x2>x1) {
+    if (x2>x1) {
         dist_x = x2-x1;
-    } else
-    {
+    } else {
         dist_x = x1-x2;
     }
-    if(y2>y1) {
+    if (y2>y1) {
         dist_y = y2-y1;
-    } else
-    {
+    } else {
         dist_y = y1-y2;
     }
-    
+
 
 
-    if(dist_x>dist_y) 
-    {    
+    if (dist_x>dist_y) {
         // x direction
-        if(x1>x2)
-        // step -1
+        if (x1>x2)
+            // step -1
         {
-            for (int x=x1;x>=x2;x--)
-            {
+            for (int x=x1; x>=x2; x--) {
                 if (x<0)
                     break;
                 calc_point = y1+ ( (y2-y1) * (x-x1) / (x2-x1) );
                 if (calc_point>=0 && calc_point<MBED_KS0713_SPI_HEIGHT)
-                     vram[x][(calc_point>>3)] |= ( 0x1 <<(calc_point&0x7));        
+                    vram[x][(calc_point>>3)] |= ( 0x1 <<(calc_point&0x7));
             }
-        }
-        else
-        // step ++
+        } else
+            // step ++
         {
             // point 1 -> point 2
-            for (int x=x1;x<=x2;x++)
-            {
+            for (int x=x1; x<=x2; x++) {
                 if (x>=MBED_KS0713_SPI_WIDTH)
                     break;
                 calc_point = y1+( (y2-y1) * (x-x1) / (x2-x1) );
@@ -225,68 +205,61 @@
             }
 
         }
-    }
-    else
-    {
+    } else {
         // y direction
-        if(y1>y2)
-        // step -1
+        if (y1>y2)
+            // step -1
         {
-            for (int y=y1;y>=y2;y--)
-            {
+            for (int y=y1; y>=y2; y--) {
                 if (y<0)
                     break;
                 calc_point = x1+( (x2-x1) * (y-y1) / (y2-y1) );
                 if (calc_point>=0 && calc_point<MBED_KS0713_SPI_WIDTH)
-                    vram[calc_point][y>>3] |= ( 0x1 <<(y&0x7));        
+                    vram[calc_point][y>>3] |= ( 0x1 <<(y&0x7));
             }
-        }
-        else
-        // step ++
+        } else
+            // step ++
         {
             // point 1 -> point 2
-            for (int y=y1;y<=y2;y++)
-            {
+            for (int y=y1; y<=y2; y++) {
                 if (y>=MBED_KS0713_SPI_HEIGHT)
                     break;
                 calc_point = x1+( (x2-x1) * (y-y1) / (y2-y1) );
                 if (calc_point>=0 && calc_point<MBED_KS0713_SPI_WIDTH)
-                    vram[calc_point][y>>3] |= ( 0x1 <<(y&0x7));        
+                    vram[calc_point][y>>3] |= ( 0x1 <<(y&0x7));
             }
         }
-    }    
+    }
 }
 
 
-int KS0713_SPI::_putc(int value)
-{
+int KS0713_SPI::_putc(int value) {
     unsigned char fontdata;
-    for(int cx=0;cx<5;cx++){
-        if( _x+cx>=MBED_KS0713_SPI_WIDTH ){
+    for (int cx=0; cx<5; cx++) {
+        if ( _x+cx>=MBED_KS0713_SPI_WIDTH ) {
             break;
         }
 
         fontdata = font5x5[value-' '][cx];
-        for (int cy=0;cy<5;cy++){
+        for (int cy=0; cy<5; cy++) {
             if (_y+cy>=MBED_KS0713_SPI_HEIGHT) {
                 break ;
             }
 
             if (fontdata & 0x1) {
-                vram[_x+cx][(_y+cy)>>3] |= ( 0x1 <<((_y+cy)&0x7));    
+                vram[_x+cx][(_y+cy)>>3] |= ( 0x1 <<((_y+cy)&0x7));
             } else {
-                vram[_x+cx][(_y+cy)>>3] &= ~( 0x1 <<((_y+cy)&0x7));    
-                
+                vram[_x+cx][(_y+cy)>>3] &= ~( 0x1 <<((_y+cy)&0x7));
+
             }
             fontdata=fontdata>>1;
         }
     }
-    
+
     _x+=6;
     return value;
 }
 
-int KS0713_SPI::_getc()
-{
+int KS0713_SPI::_getc() {
     return -1;
 }