/* * clear_screen - clear screen 'cause lcm command * may result in other side effect * so clear screen manual. * @return : status */ int clear_screen(void) { /* * lcm clear is OK */ return lcm_clear(); }
void lcm_init() { bcm2835_spi_begin(); bcm2835_spi_setBitOrder(BCM2835_SPI_BIT_ORDER_MSBFIRST); bcm2835_spi_setDataMode(BCM2835_SPI_MODE3); bcm2835_spi_setClockDivider(BCM2835_SPI_CLOCK_DIVIDER_64); /* 64=250ns=4MHz | works up to 16 | unstable 8 | unusable 4 */ bcm2835_spi_chipSelect(BCM2835_SPI_CS_NONE); bcm2835_gpio_fsel(A0, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel(RST, BCM2835_GPIO_FSEL_OUTP); bcm2835_delayMicroseconds(1); // Reset bcm2835_gpio_write(RST, LOW); bcm2835_delayMicroseconds(10); bcm2835_gpio_write(RST, HIGH); lcm_set_command(); bcm2835_spi_transfer(0xAE); // turn off the screen bcm2835_spi_transfer(0xD5); // set display clock divide ratio/oscillator frequency bcm2835_spi_transfer(0x80); // suggested ratio: 0x80 bcm2835_spi_transfer(0xA8); // set multiplex bcm2835_spi_transfer(0x3F); // height: 64 bcm2835_spi_transfer(0xD3); // set display offset bcm2835_spi_transfer(0x00); // offset: 0 bcm2835_spi_transfer(0x40 | 0x0); // set start line bcm2835_spi_transfer(0x8D); // set charge pump bcm2835_spi_transfer(0x14); // charge pump: disable bcm2835_spi_transfer(0x20); // set memory mode bcm2835_spi_transfer(0x00); // mode: 0 bcm2835_spi_transfer(0xA0 | 0x1); // set seg/column mapping bcm2835_spi_transfer(0xC8); // set com/row scan direction bcm2835_spi_transfer(0xDA); // set com pins hardware configuration bcm2835_spi_transfer(0x12); // compins: 0x12 bcm2835_spi_transfer(0x81); // set contrast control register bcm2835_spi_transfer(0xCF); // brightness: 0xCF bcm2835_spi_transfer(0xD9); // set pre-charge period bcm2835_spi_transfer(0xF1); // pre-charge: 15 clocks / discharge: 1 clock bcm2835_spi_transfer(0XDB); // set vcom detect bcm2835_spi_transfer(0x40); // vcom deselect level: 0x40 bcm2835_spi_transfer(0xA4); // disable entire display bcm2835_spi_transfer(0xA6); // disable inverse display (normal display) bcm2835_spi_transfer(0xAF); // turn on the screen lcm_clear(); }