#define DATAOUT 11 //MOSI
#define DATAIN 12 //MISO - not used, but part of builtin SPI
#define SPICLOCK 13 //sck
#define SLAVESELECT 10 //ss
int A=0x38; // To be assigned later in code but for not simply an invert of starting placeholders
int B=0x38; // To be assigned later in code but for not simply an invert of starting placeholders
int C=0x3E; // To be assigned later in code but for not simply an invert of starting placeholders
int D=0x73; // To be assigned later in code but for not simply an invert of starting placeholders
char spi_transfer(volatile char data)
{
SPDR = data; // Start the transmission
while (!(SPSR & (1<<SPIF))) // Wait the end of the transmission
{ }
return SPDR; // return the received byte
}
void setup(){ //setup code
byte clr;
pinMode(DATAOUT, OUTPUT); // Pin 11 is output
pinMode(DATAIN, INPUT); // Pin 12 is in input
pinMode(SPICLOCK, OUTPUT); //Pin 13, clock, is output
pinMode(SLAVESELECT, OUTPUT); // Pin 10 is output
digitalWrite(SLAVESELECT, LOW); //disable device by setting LOW, enable by making HIGH
// SPCR = 01010010
//SPIE interrupt disabled,SPE spi enabled,DORD msb 1st,MSTR master,CPOL clk low when idle,CPHA sample on falling edge of clk,system clock/64
SPCR = (1<<SPE)|(1<<MSTR)|(1<<CPHA);
clr=SPSR; clr=SPDR; delay(10); //clear any junk that may have found its way into the registry
write_lcd_numbers(0b1110011,0b0111110,0b0111000,0b0111000); //says pull 0x73, 0x3E, 0x38, 0x38
delay (1500);
}
//code to display digits
void write_lcd_numbers(int digit1, int digit2, int digit3, int digit4){
spi_transfer(digit1); // Thousands Digit
spi_transfer(digit2); // Hundreds Digit
spi_transfer(digit3); // Tens Digit
spi_transfer(digit4); // Ones Digit
digitalWrite(SLAVESELECT, HIGH); // start slave device listening
delay (10); //wait just because I saw it in lots of others code will try later without the delay
digitalWrite(SLAVESELECT, LOW);//release chip, signal end transfer
}
void loop(){
//insert code here to interact with digit 1,2...
write_lcd_numbers(A,B,C,D);
}