xeye_ atsu
/
SPIOLEDaitendo
Diff: spioled.h
- Revision:
- 0:2c787ad08fad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/spioled.h Fri Jan 21 08:37:01 2011 +0000 @@ -0,0 +1,206 @@ +// ALO-095BWNN-J9 test program +// See also "http://www.aitendo.co.jp/product/2099" + + +#ifndef __SPIOLED_H__ +#define __SPIOLED_H__ + +#include "mbed.h" +#include "small_font.h" + +class SPIOLED { +private: + DigitalOut CS, RES, DC; + SPI spi; // mosi, miso, sclk + + #define Dis_X_MAX 96-1 // Max X axial direction in screen + #define Dis_Y_MAX 64-1 // Max Y axial direction in screen + #define X_Witch 8 // character's width + #define Y_Witch 8 // character's height + + unsigned int Char_Color; //character's color + unsigned int BGround_Color; + + + + void Init(void){ + spi.format(8,0); // nazo + spi.frequency(25000000); // modify later + + // reset + wait_ms(200); + RES = 0; //Reset active + wait_ms(200); + RES = 1; + + + // initialize sequence + RegWrite(0xae); //OLED display OFF + + //Row Address + RegWrite(0x75); /* Set Row Address */ + RegWrite(0x00); /* Start = 0 */ + RegWrite(0x3f); /* End = 63 */ + RegWrite(0x15); /* Set Column Address */ + RegWrite(0x00); /* Start = 0 */ + RegWrite(0x5F); /* End = 96 */ + + //Contrast + RegWrite(0xa0); //Set remap & data format 0111 0000 + RegWrite(0x74); + RegWrite(0xa1); //set display star row RAM + RegWrite(0x00); + RegWrite(0xa2); //set dispaly offset + RegWrite(0x00); + RegWrite(0xa4); //Set Display Mode + RegWrite(0xa8); //Set Multiplex Ratio + RegWrite(0x3f); + RegWrite(0xad); //Set Master Configuration + RegWrite(0x8f); //(External VCC Supply Selected) + RegWrite(0xB0); //Set Power Saving Mode + RegWrite(0x1a); + RegWrite(0xB1); //Set Phase 1 & 2 Period Adjustment + RegWrite(0x74); + RegWrite(0xb3); //Set Display Clock Divide Ratio / Oscillator Frequency + RegWrite(0xd0); + RegWrite(0x8A); //Set Second Pre-charge Speed of Color A + RegWrite(0x81); + RegWrite(0x8B); //Set Second Pre-charge Speed of Color B + RegWrite(0x82); + RegWrite(0x8C); //Set Second Pre-charge Speed of Color C + RegWrite(0x83); + RegWrite(0xBB); //Set Pre-charge Level + RegWrite(0x3e); + RegWrite(0xBE); //Set VCOMH + RegWrite(0x3e); + RegWrite(0x87); //Set Master Current Control + RegWrite(0x0f); + RegWrite(0x81); //Set Contrast Control for Color gAh + RegWrite(0x80); + RegWrite(0x82); //Set Contrast Control for Color gBh + RegWrite(0x80); + RegWrite(0x83); //Set Contrast Control for Color gCh + RegWrite(0x80); + RegWrite(0xaf); //display ON + + } +public: + // constructor + SPIOLED(PinName cs_pin, PinName rst_pin, PinName a0_pin, PinName mosi_pin, PinName miso_pin, PinName sclk_pin) + : CS(cs_pin), RES(rst_pin), DC(a0_pin), spi(mosi_pin, miso_pin, sclk_pin) { + + Init(); + } + + + + + void RegWrite(unsigned char Command) + { + DC = 0; // Command + CS = 0; // CS active(toggle OLED) + spi.write(Command); + CS = 1; + } + + + + void DataWrite(unsigned char c){ + DC = 1; // DATA + CS = 0; // CS active(toggle OLED) + spi.write(c); + CS = 1; + } + + void DataWrite_to(unsigned int Dat) + { + DataWrite((unsigned char)((Dat >> 8)& 0x00ff)); + DataWrite((unsigned char)(Dat & 0x00ff)); + } + + + + + void Draw_Dot(unsigned char x,unsigned char y,unsigned int Color) + { + RegWrite(0x15); + RegWrite(x); + RegWrite(x); + RegWrite(0x75); + RegWrite(y); + RegWrite(y); + DataWrite_to(Color); + DataWrite_to(Color); + } + + void Full_Screen(unsigned int Dot) + { + unsigned char i,j; + BGround_Color = Dot; + for(i=0;i<=64;i++) + { + for(j=0;j<96;j++) + { + Draw_Dot(j,i,Dot); + // DataWrite_to(Dot); + } + } + } + + void ChangeFontColor(unsigned int color) + { + Char_Color = color; + } + + void PutChar(unsigned char x,unsigned char y,unsigned int a) + { + int i,j; + unsigned char Temp=0; + j = 0; + i = 0; + //if(a < 32)a=32; + for(i=0; i<X_Witch; i++) + { + Temp = FontLookup[a][i]; + for(j=Y_Witch;j!=0;j--){ + if((Temp & 0x80)==0x80){ + Draw_Dot(x+i,y+j,Char_Color); + }else{ + Draw_Dot(x+i,y+j,BGround_Color); + } + Temp = Temp << 1; + } + } + + + } + +void PutChar_ABC(unsigned char x,unsigned char y,unsigned int a) + { + int i,j; + unsigned char Temp=0; + j = 0; + i = 0; + for(i=0; i<5; i++) + { + if(a < 32)a=32; + Temp = FontLookup_ABC[a-32][i]; + for(j=Y_Witch;j!=0;j--){ + if((Temp & 0x80)==0x80){ + Draw_Dot(x+i,y+j,Char_Color); + }else{ + Draw_Dot(x+i,y+j,BGround_Color); + } + Temp = Temp << 1; + } + } + + + } + + + +}; + + +#endif \ No newline at end of file