#include "stc12c5a60s2.h" #include #define RED 0XF800 //红色 #define GREEN 0X07E0 //绿色 #define BLUE 0X001F //蓝色 #define WHITE 0XFFFF //白色 #define DATA_H P2 #define DATA_L P0 sbit LCD_CS = P0^3; sbit LCD_CD = P0^2; sbit LCD_RESET = P0^0; sbit LCD_MOSI = P0^4; sbit LCD_MISO = P0^5; sbit LCD_SCK = P0^1; void Delay1ms() //@12.000MHz { unsigned char i, j; i = 12; j = 169; do { while (--j); } while (--i); } void delay_ms(unsigned int ms) { while(ms--) { Delay1ms(); } } unsigned char SPI_RW(unsigned char byte) { unsigned char bit_ctr; for(bit_ctr=0;bit_ctr<8;bit_ctr++) // 输出8位 { LCD_SCK=0;LCD_SCK=0; LCD_MOSI=(byte&0x80); // MSB TO MOSI byte=(byte<<1); // shift next bit to MSB LCD_SCK=1; byte|=LCD_MISO; // capture current MISO bit } return byte; } void LCD_CD_DATA(unsigned char val) { LCD_CS=0; LCD_CD=1; SPI_RW(val); LCD_CS=1; } void LCD_CD_REG(unsigned char reg) { LCD_CS=0; LCD_CD=0; SPI_RW(reg); LCD_CS=1; } void LCD_Init() { P0=0; P2=0; LCD_RESET=0; delay_ms(10); LCD_RESET=1; delay_ms(120); LCD_CD_REG(0x11); //Sleep out delay_ms(120); //delay 120ms //------------------------------------ST7735S Frame Rate-----------------------------------------// LCD_CD_REG(0xB1); LCD_CD_DATA(0x05); LCD_CD_DATA(0x3C);//08 LCD_CD_DATA(0x3C);//05 LCD_CD_REG(0xB2); LCD_CD_DATA(0x05); LCD_CD_DATA(0x3C); LCD_CD_DATA(0x3C); LCD_CD_REG(0xB3); LCD_CD_DATA(0x05); LCD_CD_DATA(0x3C); LCD_CD_DATA(0x3C); LCD_CD_DATA(0x05); LCD_CD_DATA(0x3C); LCD_CD_DATA(0x3C); //------------------------------------End ST7735S Frame Rate-----------------------------------------// LCD_CD_REG(0xB4); //Dot inversion LCD_CD_DATA(0x03); //------------------------------------ST7735S Power Sequence-----------------------------------------// LCD_CD_REG(0xC0); LCD_CD_DATA(0x28); LCD_CD_DATA(0x08); LCD_CD_DATA(0x04); LCD_CD_REG(0xC1); LCD_CD_DATA(0XC0); LCD_CD_REG(0xC2); LCD_CD_DATA(0x0D); LCD_CD_DATA(0x00); LCD_CD_REG(0xC3); LCD_CD_DATA(0x8D); LCD_CD_DATA(0x2A); LCD_CD_REG(0xC4); LCD_CD_DATA(0x8D); LCD_CD_DATA(0xEE); //---------------------------------End ST7735S Power Sequence-------------------------------------// LCD_CD_REG(0xC5); //VCOM LCD_CD_DATA(0x13); LCD_CD_REG(0x36); //MX, MY, RGB mode LCD_CD_DATA(0xc8); //------------------------------------ST7735S Gamma Sequence-----------------------------------------// LCD_CD_REG(0xE0); LCD_CD_DATA(0x04); LCD_CD_DATA(0x22); LCD_CD_DATA(0x07); LCD_CD_DATA(0x0A); LCD_CD_DATA(0x2E); LCD_CD_DATA(0x30); LCD_CD_DATA(0x25); LCD_CD_DATA(0x2A); LCD_CD_DATA(0x28); LCD_CD_DATA(0x26); LCD_CD_DATA(0x2E); LCD_CD_DATA(0x3A); LCD_CD_DATA(0x00); LCD_CD_DATA(0x01); LCD_CD_DATA(0x03); LCD_CD_DATA(0x13); LCD_CD_REG(0xE1); LCD_CD_DATA(0x04); LCD_CD_DATA(0x16); LCD_CD_DATA(0x06); LCD_CD_DATA(0x0D); LCD_CD_DATA(0x2D); LCD_CD_DATA(0x26); LCD_CD_DATA(0x23); LCD_CD_DATA(0x27); LCD_CD_DATA(0x27); LCD_CD_DATA(0x25); LCD_CD_DATA(0x2D); LCD_CD_DATA(0x3B); LCD_CD_DATA(0x00); LCD_CD_DATA(0x01); LCD_CD_DATA(0x04); LCD_CD_DATA(0x13); //------------------------------------End ST7735S Gamma Sequence-----------------------------------------// LCD_CD_REG(0x3A); //65k mode LCD_CD_DATA(0x05); LCD_CD_REG(0x29); //Display on } void LCD_SetArea(unsigned int stx,unsigned int sty,unsigned int endx,unsigned int endy) { LCD_CD_REG(0x2A); LCD_CD_DATA(stx>>8); LCD_CD_DATA(stx&0xff); LCD_CD_DATA(endx>>8); LCD_CD_DATA(endx&0xff); LCD_CD_REG(0x2B); LCD_CD_DATA(sty>>8); LCD_CD_DATA(sty&0xff); LCD_CD_DATA(endy>>8); LCD_CD_DATA(endy&0xff); } void LcdWirteColorData(unsigned int color) { LCD_CS=0; LCD_CD=1; SPI_RW(color>>8); SPI_RW(color); LCD_CS=1; } void LCD_Clear1(unsigned int color) { unsigned int i,j; // LCD_SetArea(0,0,129,130); LCD_CD_REG(0x2A); LCD_CD_DATA(0); LCD_CD_DATA(0); LCD_CD_DATA(0); LCD_CD_DATA(175); LCD_CD_REG(0x2B); LCD_CD_DATA(0); LCD_CD_DATA(0); LCD_CD_DATA(0); LCD_CD_DATA(219); LCD_CD_REG(0x2C); for(i=0;i<176;i++) { for(j=0;j<220;j++) { LcdWirteColorData(color); } } } void LCD_Clear(unsigned int color) { unsigned int i,j; // LCD_SetArea(0,0,129,130); LCD_CD_REG(0x2A); LCD_CD_DATA(0); LCD_CD_DATA(0); LCD_CD_DATA(0); LCD_CD_DATA(175); LCD_CD_REG(0x2B); LCD_CD_DATA(0); LCD_CD_DATA(0); LCD_CD_DATA(0); LCD_CD_DATA(219); LCD_CD_REG(0x2C); for(i=0;i<176;i++) { for(j=0;j<220;j++) { LcdWirteColorData(color); } // delay_ms(2000); } } void main() { LCD_Init(); while(1) { LCD_Clear1(0xffff); LCD_Clear(RED); LCD_Clear(GREEN); LCD_Clear(BLUE); while(1); } }