I have found over the years that except in speed-critical or multi-master applications, it's actually easier to bit-bang an I2C master than to try to use the I2C facilities built into many chips.
Note that if a device uses clock stretching, any time you release SCK, you must wait for it to actually go high. For simplicity, such delays are omitted from the following descriptions, but should be included if appropriate in your "release_SCK()" routine.
To start an I2C transaction, release SCK (if it isn't already) and, if the data line is low, assert SCK (drive it low), release SDA (if it isn't already), and release the SCK. Repeat this process up to nine times until SDA is high. If SDA is still low after nine repetitions, the bus is unusable.
To output each byte (including the address byte), assert SDA, and then for each bit repeat the sequence (assert SCK; set SDA high or low to match next bit of data; release SCK) eight times. After the last bit, assert SCK, release SDA, and release SCK. If SDA is low, a slave is acknowledging; if SDA is high, no slave is acknowledging and the transaction should be aborted.
When all output is complete, assert SCK, then SDA, and then release SCK, then SDA.
To input each byte, assert SDA, then release SCK if it isn't already (it will be for the first byte, but not others). Then reassert SCK, release SDA, and repeat the sequence (release SCK, read data bit, assert SCK) eight times. Note that at the end of this sequence, unlike when outputting a byte, SCK will be left asserted.
When all input is complete, release SDA (it should already already be released) and SCK.
Note that because the clock is left asserted after inputting each byte, it's not necessary to specify whether the byte should be ack'ed or nak'ed. If you read another byte, the last byte read will be nak'ed. If you terminate the read, it will be nak'ed.
Start; send address; write one byte, finish
SCK - -__-__-__-__-__-__-__-__-__-- -__-__-__-__-__-__-__-__-__--- -__--
SDA(M) - __777666555444333222111___--- --777666555444333222111000---- --__-
SDA(S) - -------------------------??AA A------------------------??AAA A----
Start; send address; read two bytes; finish
SCK - -__-__-__-__-__-__-__-__-__--- -__--_--_--_--_--_--_--_--__ -__--_--_--_--_--_--_--_--__ _-
SDA(M) - __777666555444333222111------- __-------------------------- __-------------------------- --
SDA(S) - -------------------------??AAA A??77?66?55?44?33?22?11?00?? -??77?66?55?44?33?22?11?00?? ?-
The PIC may have been told to 'raise its shields' or may have been programmed to not respond to the programmer clock or oscillator control network. These problems are usually recoverable by following a suitable path. A circuit diagram of your target application may be useful.
Without looking at your specific PIC:
You may have code protection set.
The device should be able to be erased with code protection set.
You may have selected a clock type that the programmer does not support.
Worst case if it is not seeing your programmer clock or crystal you may have to uses ICSP with the PIC in a breadboard and supply a clock source or crystal or resonator or RC network or whatever that allows the PIC to run so it can listen to the programmer well enough to find its way home.
There is a small chance that it has been damaged in the process and is irrecoverable. Be sure to use adequate anti-static precautions and correct operating voltages, insert and remove with power off, ensure that no signal levels exceed absolute maximum values.
Best Answer
I doubt you'll be able to compile the libraries (meant for Visual Studio from what I can tell) in MPLAB - the targets are insanely different (desktop PC vs PIC microcontroller). It seems to me that the directions they gave you with the libraries are meant to be followed if you want to use the chip with your desktop PC. I doubt you'll be able to modify the libraries to allow them to compile and run with the PIC. Instead, you should examine the code and try to re-implement it on your own for the PIC. The code can give you an idea of what to do but you won't be saving yourself any time trying to use it directly.