void OLED12864::setPos(int x, int y) { x+=2; txCmd(0xb0 + y); txCmd(((x&0xf0)>>4)| 0x10); txCmd((x&0x0f)); }
void OLED12864::fillPattern(unsigned char pattern) { unsigned char y,x; for(y=0;y<SCREEN_PIXEL_HEIGHT/8;y++) { txCmd(0xb0 | y); txCmd(0x01); txCmd(0x10); for(x=0;x<SCREEN_PIXEL_WIDTH;x++) { txData(pattern); } } }
void FstopComms::respondWrite() { if(!checkcheck()) return; unsigned int addr=getAddr(); char len=cmd[PKT_LEN]; if(len < 1 || len > PKT_MAXREQ || addr < EEPROM_MIN_WRITE || addr+len > EEPROM_MAX_WRITE){ nak(BAD_WRITE); return; } // copy from buffer to EEPROM char bp=PKT_SHORTHDR; for(char i=0;i<len;++i){ EEPROM.write(addr++, cmd[bp++]); } cmd[PKT_CMD]=COM_WRITEACK; buflen=PKT_SHORTHDR; // recompute checksum, send without data txCmd(); }
void FstopComms::respondRead() { if(!checkcheck()) return; unsigned int addr=getAddr(); char len=cmd[PKT_LEN]; if(len < 1 || len > PKT_MAXREQ || addr < EEPROM_MIN_READ || addr+len > EEPROM_MAX_READ){ nak(BAD_READ); return; } // read from EEPROM into buffer cmd[PKT_CMD]=COM_READACK; for(char i=0;i<len;++i){ cmd[i+PKT_SHORTHDR]=EEPROM.read(addr++); } buflen=len+PKT_SHORTHDR; // append checksum and send. txCmd(); }
void OLED12864::init() { // set pin mode... pinMode(OLED_SPI_CS, OUTPUT); pinMode(OLED_SPI_CLK, OUTPUT); pinMode(OLED_SPI_MOSI, OUTPUT); digitalWrite(OLED_SPI_CLK, 1); digitalWrite(OLED_SPI_MOSI, 1); digitalWrite(OLED_SPI_CS, 1); digitalWrite(OLED_SPI_CS, 0); pinMode(OLED_CMD, OUTPUT); digitalWrite(OLED_CMD, 1); delay(1); digitalWrite(OLED_SPI_CLK,1); //OLED_RST_Clr(); delay(500); //OLED_RST_Set(); txCmd(0xAE);//--turn off oled panel txCmd(0x02);//---set low column address txCmd(0x10);//---set high column address txCmd(0x40);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F) txCmd(0xB0);//--set contrast control register txCmd(0x81); // Set SEG Output Current Brightness txCmd(0xFF);//--Set SEG/Column Mapping 0xa0???? 0xa1?? txCmd(0xA1);//Set COM/Row Scan Direction 0xc0???? 0xc8?? txCmd(0xA6);//--set normal display txCmd(0xA8);//--set multiplex ratio(1 to 64) txCmd(0x3F);//--1/64 duty txCmd(0xAD);//-set display offset Shift Mapping RAM Counter (0x00~0x3F) txCmd(0x8B);//-not offset txCmd(0x33);//--set display clock divide ratio/oscillator frequency txCmd(0xC8);//--set divide ratio, Set Clock as 100 Frames/Sec txCmd(0xD3);//--set pre-charge period txCmd(0x00);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock txCmd(0xD5);//--set com pins hardware configuration txCmd(0x80); txCmd(0xD9);//--set vcomh txCmd(0x1F);//Set VCOM Deselect Level txCmd(0xDA);//-Set Page Addressing Mode (0x00/0x01/0x02) txCmd(0x12);// txCmd(0xDB);//--set Charge Pump enable/disable txCmd(0x40);//--set(0x10) disable txCmd(0xAF);//--turn on oled panel clear(); setPos(0,0); }