Some of the functions can be adapted:
#define ACCEL_CS A0
#define ACCEL_SCK A1
#define ACCEL_DI A2
#define ACCEL_DO A3
#define SELECT_ACCEL() digitalWrite(ACCEL_CS, LOW)
#define UNSELECT_ACCEL() digitalWrite(ACCEL_CS, HIGH)
#define CLOCK_HIGH() digitalWrite(ACCEL_SCK, HIGH)
#define CLOCK_LOW() digitalWrite(ACCEL_SCK, LOW)
char adxl345_read(char register_address){
char read_address=0x80 | register_address;
char register_value=0;
CLOCK_HIGH();
SELECT_ACCEL(); //Lower CS pin.
for(int bit=7; bit>=0; bit--){
CLOCK_LOW();
digitalWrite(DI, read_address & (1<<bit));
delayMicroseconds(1);
CLOCK_HIGH();
delayMicroseconds(1);
}
for(int bit=7; bit>=0; bit--){
CLOCK_LOW();
delayMicroseconds(1);
CLOCK_HIGH();
delayMicroseconds(1);
register_value |= digitalRead(ADXL_DI)<<bit;
}
UNSELECT_ACCEL();
return register_value;
}