//#================================================================================================= //# //#------------------------------------------------------------------------------------------------- void mOLED_scrolldiagRight(int start, int stop){ mOLED_SSD1306_cmd(SSD1306_SET_VERTICAL_SCROLL_AREA); mOLED_SSD1306_cmd(0X00); mOLED_SSD1306_cmd(SSD1306_LCDHEIGHT); mOLED_SSD1306_cmd(SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL); mOLED_SSD1306_cmd(0X00); mOLED_SSD1306_cmd(start); mOLED_SSD1306_cmd(0X00); mOLED_SSD1306_cmd(stop); mOLED_SSD1306_cmd(0X01); mOLED_SSD1306_cmd(SSD1306_ACTIVATE_SCROLL); }
//#================================================================================================= //# //#------------------------------------------------------------------------------------------------- void mOLED_startscrollright(int start, int stop){ mOLED_SSD1306_cmd(SSD1306_RIGHT_HORIZONTAL_SCROLL); mOLED_SSD1306_cmd(0X00); mOLED_SSD1306_cmd(start); mOLED_SSD1306_cmd(0X00); mOLED_SSD1306_cmd(stop); mOLED_SSD1306_cmd(0X01); mOLED_SSD1306_cmd(0XFF); mOLED_SSD1306_cmd(SSD1306_ACTIVATE_SCROLL); }
//#================================================================================================= //# //#------------------------------------------------------------------------------------------------- void mOLED_UnSet_Pixel(int x, int y) { mOLED_SSD1306_cmd(SSD1306_COLUMNADDR); mOLED_SSD1306_cmd(x); // Column start address (0 = reset) mOLED_SSD1306_cmd(x+1); // Column end address (127 = reset) mOLED_SSD1306_cmd(SSD1306_PAGEADDR); mOLED_SSD1306_cmd(y); // Page start address (0 = reset) mOLED_SSD1306_cmd(y+1); // Page end addres cs_high; //nop; dc_high; nop; cs_low; SPI1_Write_8(0); nop; cs_high; }
//#================================================================================================= //# //#------------------------------------------------------------------------------------------------- void mOLED_Refresh( void ) { unsigned int i; mOLED_SSD1306_cmd(SSD1306_COLUMNADDR); mOLED_SSD1306_cmd(0); // Column start address (0 = reset) mOLED_SSD1306_cmd(127); // Column end address (127 = reset) mOLED_SSD1306_cmd(SSD1306_PAGEADDR); mOLED_SSD1306_cmd(0); // Page start address (0 = reset) mOLED_SSD1306_cmd(3); // Page end addres for (i=0; i<512; i++) { cs_high; dc_high; nop; cs_low; SPI1_Write_8(mOLED_Screen_Mem[i]); nop; cs_high; } }
//#================================================================================================= //# //#------------------------------------------------------------------------------------------------- void mOLED_Clear(void) { unsigned short i; mOLED_SSD1306_cmd(SSD1306_COLUMNADDR); mOLED_SSD1306_cmd(0); // Column start address (0 = reset) mOLED_SSD1306_cmd(127); // Column end address (127 = reset) mOLED_SSD1306_cmd(SSD1306_PAGEADDR); mOLED_SSD1306_cmd(0); // Page start address (0 = reset) mOLED_SSD1306_cmd(3); // Page end addres for (i=0; i<(SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT/8); i++) { cs_high; dc_high; nop; nop; cs_low; SPI1_Write_8(0x00); mOLED_Screen_Mem[i] = 0; cs_high; } }
//#================================================================================================= //# //#------------------------------------------------------------------------------------------------- void mOLED_Init( void ) { _TRISA4 = 0; _TRISA0 = 0; _TRISB4 = 0; _TRISB1 = 0; SPI1_Init(); rst_high; // VDD (3.3V) goes high at start, lets just chill for a ms Delayms(10); rst_low; // wait 10ms Delayms(20); rst_high; // Init sequence for 128x32 OLED module mOLED_SSD1306_cmd(SSD1306_DISPLAYOFF); // 0xAE mOLED_SSD1306_cmd(SSD1306_SETDISPLAYCLOCKDIV); // 0xD5 mOLED_SSD1306_cmd(0x80); // the suggested ratio 0x80 mOLED_SSD1306_cmd(SSD1306_SETMULTIPLEX); // 0xA8 mOLED_SSD1306_cmd(0x1F); mOLED_SSD1306_cmd(SSD1306_SETDISPLAYOFFSET); // 0xD3 mOLED_SSD1306_cmd(0x0); // no offset mOLED_SSD1306_cmd(SSD1306_SETSTARTLINE | 0x0); // line #0 mOLED_SSD1306_cmd(SSD1306_CHARGEPUMP); // 0x8D //mOLED_SSD1306_cmd(0x10); //SSD1306_EXTERNALVCC 0x1 mOLED_SSD1306_cmd(0x14); //SSD1306_SWITCHCAPVCC 0x2 mOLED_SSD1306_cmd(SSD1306_MEMORYMODE); // 0x20 mOLED_SSD1306_cmd(0x00); // 0x0 act like ks0108 mOLED_SSD1306_cmd(SSD1306_SEGREMAP | 0x1); mOLED_SSD1306_cmd(SSD1306_COMSCANDEC); mOLED_SSD1306_cmd(SSD1306_SETCOMPINS); // 0xDA mOLED_SSD1306_cmd(0x02); mOLED_SSD1306_cmd(SSD1306_SETCONTRAST); // 0x81 mOLED_SSD1306_cmd(0x8F); mOLED_SSD1306_cmd(SSD1306_SETPRECHARGE); // 0xd9 //mOLED_SSD1306_cmd(0x22); //SSD1306_EXTERNALVCC 0x1 mOLED_SSD1306_cmd(0xF1); //SSD1306_SWITCHCAPVCC 0x2 mOLED_SSD1306_cmd(SSD1306_SETVCOMDETECT); // 0xDB mOLED_SSD1306_cmd(0x40); mOLED_SSD1306_cmd(SSD1306_DISPLAYALLON_RESUME); // 0xA4 mOLED_SSD1306_cmd(SSD1306_NORMALDISPLAY); // 0xA6 mOLED_SSD1306_cmd(SSD1306_DISPLAYON);//--turn on oled panel mOLED_Pen_Colour = 1; }