void SendLcd(unsigned char type, unsigned char dat) { byte i; LCD_DATA(type); // set up first bit as command or data LCD_CS(0); // Enable device CS LCD_CLK(0); // Pull Clock LOW LCD_CLK(1); // Pul Clock HIGH if(dat == 0x0){ // spi cannot transfer zero?? LCD_DATA(0); for(i=0; i<8; i++){ LCD_CLK(0); // Pull Clock LOW LCD_CLK(1); } } else{ SPCR |=0x50; // Enable Hardware SPI SPSR |= 0x1; SPDR = dat; // send data while(!(SPSR & 0x80)); // wait until send complete } SPCR &=~0x50; // Disable Hardware SPI, this releases the SPI pins // for general IO use. which is used to send the 1'st LCD_CS(1); // disable device CS // bit out }
/******************************************************************************* * Transfer 1 byte over the serial communication * * Parameter: byte: byte to be sent * * mode: OUT = transmit byte, IN = receive byte * * Return: byte read while sending * *******************************************************************************/ static unsigned char spi_tran_man (unsigned char byte, unsigned int mode) { unsigned char val = 0; int i; if (mode == OUT) { DAT_MODE (OUT); } else { DAT_MODE (IN); } for (i = 7; i >= 0; i--) { LCD_CLK(0); delay(1); if (mode == OUT) { LCD_DAT((byte & (1 << i)) != 0); } else { val |= (BUS_VAL() << i); } LCD_CLK(1); delay(1); } return (val); }
void LCD_Init(void) { LCD_CS(1); LCD_CLK(0); LCD_DATA(0); LCD_RESET(1); delay(50); LCD_RESET(0); delay(50); LCD_RESET(1); delay(50); LCD_CS(1); LCD_CLK(1); LCD_DATA(1); delay(10); SendLcd(LCDCommand,SWRESET); delay(10); SendLcd(LCDCommand,SLEEPOUT); // Sleepout // SendLcd(LCDCommand,INVON); // Invert display mode // SendLcd(LCDCommand,BSTRON); // BoostON SendLcd(LCDCommand,MADCTL); // memory access control SendLcd(LCDData,0xe0); SendLcd(LCDCommand,SETCON); // Set Contrast SendLcd(LCDData,0x40); delay(10); SendLcd(LCDCommand,DISPON); // Display On SendLcd(LCDCommand,COLMOD); // Set Color Mode SendLcd(LCDData,0x03); // 12bit per pixel SendLcd(LCDCommand,NOP); // Set Color Mode }
void SendLcd_color(unsigned char color){ LCD_DATA(LCDData); // set up first bit as command or data LCD_CLK(0); // Pull Clock LOW LCD_CLK(1); // Pul Clock HIGH LCD_CLK(0); SPCR |=0x50; // Enable Hardware SPI SPSR |=0x1; SPDR = color; // send data while(!(SPSR & 0x80)); // wait until send complete // disable device CS SPCR &=~0x50; // Disable Hardware SPI, this releases the SPI pins LCD_CLK(0); // for general IO use. which is used to send the 1'st // bit out }