void SendChar(unsigned char data) { IdleI2C(); StartI2C(); IdleI2C(); putcI2C(OLED_address); //send address IdleI2C(); putcI2C(0x40); //send data incomming IdleI2C(); putcI2C(data); IdleI2C(); // WriteI2C(0x40); //WriteI2C(data); StopI2C(); }
void sendcommand(unsigned char com) { IdleI2C(); StartI2C(); IdleI2C(); putcI2C(OLED_address); //send address IdleI2C(); putcI2C(0x80); //send data incomming IdleI2C(); putcI2C(com); IdleI2C(); //WriteI2C(0x80); //WriteI2C(com); StopI2C(); }
signed char putsI2C( unsigned char *wrptr ) { unsigned char temp; while ( *wrptr ) // transmit data until null character { if ( (SSPCON&0x0F)==0x0B ) // if Master I2C in firmware,then execute the following { temp = putcI2C ( *wrptr ); if (temp ) return ( temp ); // return with write collision error // if ( putcI2C ( *wrptr ) ) // write 1 byte // { // return ( -3 ); // return with write collision error // } // IdleI2C(); // test for idle condition // if ( SSPCON2bits.ACKSTAT ) // test received ack bit state // { // return ( -2 ); // bus device responded with NOT ACK // } // terminate putsI2C() function } else // else Slave transmitter { PIR1bits.SSPIF = 0; // reset SSPIF bit SSPBUF = *wrptr; // load SSPBUF with new data SSPCONbits.CKP = 1; // release clock line while ( !PIR1bits.SSPIF ); // wait until ninth clock pulse received if ( ( SSPCONbits.CKP ) && ( !SSPSTATbits.BF ) )// if R/W=0 and BF=0, NOT ACK was received { return ( -2 ); // terminate PutsI2C() function } } wrptr ++; // increment pointer } // continue data writes until null character return ( 0 ); }