xeye_ atsu
/
SPIOLEDaitendo
spioled.h
- Committer:
- lynxeyed_atsu
- Date:
- 2011-01-21
- Revision:
- 0:2c787ad08fad
File content as of revision 0:2c787ad08fad:
// 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