ks0713 SPI library. This library includes a small 5x5 ascii font and line function.
Revision 1:408627d73aa8, committed 2012-02-26
- Comitter:
- muraguchi
- Date:
- Sun Feb 26 16:01:29 2012 +0000
- Parent:
- 0:7b044b89e49c
- Commit message:
- Updated
Changed in this revision
diff -r 7b044b89e49c -r 408627d73aa8 font5x5.h --- a/font5x5.h Sun Feb 26 15:52:10 2012 +0000 +++ b/font5x5.h Sun Feb 26 16:01:29 2012 +0000 @@ -3,17 +3,16 @@ * * Created: 2012/02/05 1:50:12 * Author: muraguchi - */ + */ #ifndef FONT5X5_H_ #define FONT5X5_H_ -const unsigned char font5x5[95][5]= -{ - {0x00,0x00,0x00,0x00,0x00}, // 0x20 ' ' +const unsigned char font5x5[95][5]= { + {0x00,0x00,0x00,0x00,0x00}, // 0x20 ' ' {0x00,0x00,0x17,0x00,0x00}, // 0x21 '!' - {0x00,0x02,0x00,0x02,0x00}, // 0x22 '"' + {0x00,0x02,0x00,0x02,0x00}, // 0x22 '"' {0x0A,0x1F,0x0A,0x1F,0x0A}, // 0x23 '#' {0x17,0x15,0x1F,0x15,0x1D}, // 0x24 '$' {0x11,0x08,0x04,0x02,0x11}, // 0x25 '%' @@ -22,7 +21,7 @@ {0x00,0x0E,0x11,0x00,0x00}, // 0x28 '(' {0x00,0x00,0x11,0x0E,0x00}, // 0x29 ')' {0x11,0x0A,0x1F,0x0A,0x11}, // 0x2A '*' - {0x04,0x04,0x1F,0x04,0x04}, // 0x2B '+' + {0x04,0x04,0x1F,0x04,0x04}, // 0x2B '+' {0x00,0x00,0x10,0x10,0x00}, // 0x2C ',' {0x04,0x04,0x04,0x04,0x04}, // 0x2D '-' {0x00,0x00,0x10,0x00,0x00}, // 0x2E '.' @@ -32,7 +31,7 @@ {0x12,0x11,0x19,0x15,0x12}, // 0x32 '2' {0x0A,0x11,0x15,0x15,0x0A}, // 0x33 '3' {0x0C,0x0A,0x09,0x1F,0x08}, // 0x34 '4' - {0x17,0x15,0x15,0x15,0x1D}, // 0x35 '5' + {0x17,0x15,0x15,0x15,0x1D}, // 0x35 '5' {0x0E,0x15,0x15,0x15,0x08}, // 0x36 '6' {0x01,0x01,0x19,0x05,0x03}, // 0x37 '7' {0x0A,0x15,0x15,0x15,0x0A}, // 0x38 '8' @@ -110,4 +109,4 @@ #endif /* FONT5X5_H_ */ - +
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; }
diff -r 7b044b89e49c -r 408627d73aa8 ks0713_spi.h --- a/ks0713_spi.h Sun Feb 26 15:52:10 2012 +0000 +++ b/ks0713_spi.h Sun Feb 26 16:01:29 2012 +0000 @@ -41,7 +41,7 @@ KS0713_SPI(PinName mosi, PinName sclk, PinName cs1b, PinName rs, PinName rstb); void init(); void clear(); - void fill(); + void fill(); void update(); void locate(int x, int y); void line(int x1, int y1, int x2, int y2); @@ -51,17 +51,17 @@ DigitalOut _rs; DigitalOut _rstb; int _x,_y; - + - void writeCommand(unsigned char); - void writeData(unsigned char); + void writeCommand(unsigned char); + void writeData(unsigned char); unsigned char vram[MBED_KS0713_SPI_WIDTH][MBED_KS0713_SPI_HEIGHT/8]; protected: virtual int _putc(int value); virtual int _getc(); - + };