void main(void) { int i; // initialize the device SYSTEM_Initialize(); OLED_Initialize(); while (1) { OLED_PutPicture( logo); __delay_ms( 2000); OLED_Command( SSD1306_INVERTDISPLAY); __delay_ms( 2000); OLED_Command( SSD1306_NORMALDISPLAY); __delay_ms( 2000); for( i=0xAF; i>0x00; i--){ OLED_SetContrast( i); __delay_ms( 20); } for( i=0x00; i<0xAF; i++){ OLED_SetContrast( i); __delay_ms( 20); } } }
static void OLED_SendComm(int com) { char i; OLED_Command(); OLED_SelectDSPL(); /* for (i=16;i>0;i--) { if(com&0x8000) P5OUT|=MOSI; else P5OUT&=~MOSI; P5OUT^=UCLK; com=com<<1; P5OUT^=UCLK; } */ OLED_sendByte(com >> 8); OLED_sendByte(com); /* __DeselectDSPL(); __SelectDSPL(); */ OLED_DeselectDSPL(); }
void OLED_SetContrast(uint8_t temp) { OLED_Command(SSD1306_SETCONTRAST); OLED_Command(temp); // contrast step 1 to 256 }
void OLED_SetColumn(uint8_t add) { add += 32; OLED_Command((SSD1306_SETHIGHCOLUMN | (add >> 4))); // SET_HIGH_COLUMN OLED_Command((0x0f & add)); // SET LOW_COLUMN }
void OLED_SetRow(uint8_t add) { add = 0xB0 | add; OLED_Command(add); }
void OLED_Initialize(void) { OLED_RST_LAT = 0; __delay_ms(1000); OLED_RST_LAT = 1; __delay_ms(1000); OLED_Command(SSD1306_DISPLAYOFF); //0xAE Set OLED Display Off OLED_Command(SSD1306_SETDISPLAYCLOCKDIV); //0xD5 Set Display Clock Divide Ratio/Oscillator Frequency OLED_Command(0x80); OLED_Command(SSD1306_SETMULTIPLEX); //0xA8 Set Multiplex Ratio OLED_Command(39); OLED_Command(SSD1306_SETSEGMENTREMAP); //0xA1 Set Segment Remap Inv OLED_Command(SSD1306_COMSCANDEC); //0xC8 Set COM Output Scan Inv OLED_Command(SSD1306_SETDISPLAYOFFSET); //0xD3 Set Display Offset OLED_Command(0x00); OLED_Command(SSD1306_CHARGEPUMP); //0x8D Set Charge Pump OLED_Command(0x14); //0x14 Enable Charge Pump OLED_Command(SSD1306_SETSTARTLINE); //0x40 Set Display Start Line OLED_Command(SSD1306_SETCOMPINS); //0xDA Set COM Pins Hardware Configuration OLED_Command(0x12); OLED_Command(SSD1306_SETCONTRAST); //0x81 Set Contrast Control OLED_Command(0xAF); OLED_Command(SSD1306_SETPRECHARGE); //0xD9 Set Pre-Charge Period OLED_Command(0x25); OLED_Command(SSD1306_SETVCOMDETECT); //0xDB Set VCOMH Deselect Level OLED_Command(0x20); OLED_Command(SSD1306_DISPLAYALLON_RESUME); //0xA4 Set Entire Display On/Off OLED_Command(SSD1306_NORMALDISPLAY); //0xA6 Set Normal/Inverse Display OLED_Command(SSD1306_DISPLAYON); //0xAF Set OLED Display On } // OLED_Initialize