#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_RESET = P0^0; sbit LCD_MOSI = P0^4; sbit LCD_MISO = P0^5; sbit LCD_SCK = P0^1;//scl 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(); } } /************************************************************************** * * Just for SPI to write a byte to Lcd * ***************************************************************************/ void LCD_WriteByte(unsigned char byte) { unsigned char bit_ctr; for(bit_ctr=0;bit_ctr<8;bit_ctr++) // 输出8位 { LCD_SCK=0; LCD_MOSI=(byte&0x80); // MSB TO MOSI byte=(byte<<1); // shift next bit to MSB LCD_SCK=1; } } #define START_BYTE 0x70 #define SET_INDEX 0x00 #define READ_STATUS 0x01 #define WRITE_REG 0x02 #define READ_REG 0x03 void LCD_WriteRegIndex(unsigned int index) /* Select GRAM Reg */ { LCD_CS = 0; LCD_WriteByte(START_BYTE|SET_INDEX);//for register index // LCD_WriteByte(0); //lower byte first // LCD_WriteByte(index); LCD_WriteByte(index>>8); LCD_WriteByte(index&0xff); LCD_CS = 1; } /**************************************************************************** * * Write a byte to register index and the parameter to * the register * ****************************************************************************/ void LCD_WriteReg(unsigned int index,unsigned int val) { LCD_WriteRegIndex(index); LCD_CS = 0; LCD_WriteByte(START_BYTE|WRITE_REG); LCD_WriteByte(val>>8); LCD_WriteByte(val&0xff); LCD_CS = 1; } /**************************************************************************** * * command for Write data * *****************************************************************************/ void Lcd_Write_Start() { //#ifdef _SPI /*LCD_WriteReg(0x20,0x00); LCD_WriteReg(0x21,0x00);*/ LCD_WriteRegIndex(0x202); /* Select GRAM Reg */ // CS = 0; LCD_WriteByte(0x72);//START_BYTE|WRITE_REG } /**************************************************************************** * * Write one word to Lcd * *****************************************************************************/ void LCD_WriteData(unsigned int val,unsigned int k) { // unsigned char i,j; // Lcd_Write_Start(); LCD_CS = 0; LCD_WriteByte(0x72); LCD_WriteByte(val);//high byte // delay(100); LCD_WriteByte(k);// low byte LCD_CS = 1; } void Lcd_Write_End() { LCD_CS = 1; } void Lcd_Init() { LCD_RESET = 0; delay_ms(100); LCD_RESET = 1; delay_ms(200); //---------------st7793 LCD Setting--------------------------// LCD_WriteReg(0x400,0x6200); LCD_WriteReg(0x008,0x0808); // LCD_WriteReg(0x010,0x0010); LCD_WriteReg(0x300,0x0c0c);//GAMMA LCD_WriteReg(0x301,0xff13); LCD_WriteReg(0x302,0x0f0f); LCD_WriteReg(0x303,0x150b); LCD_WriteReg(0x304,0x1020); LCD_WriteReg(0x305,0x0a0b); LCD_WriteReg(0x306,0x0003); LCD_WriteReg(0x307,0x0d06); LCD_WriteReg(0x308,0x0504); LCD_WriteReg(0x309,0x1030); LCD_WriteReg(0x010,0x001b); //60Hz LCD_WriteReg(0x011,0x0101); LCD_WriteReg(0x012,0x0000); LCD_WriteReg(0x013,0x0001); LCD_WriteReg(0x100,0x0330);//BT,AP 0x0330 LCD_WriteReg(0x101,0x0247);//DC0,DC1,VC LCD_WriteReg(0x103,0x1000);//VDV //0x0f00 LCD_WriteReg(0x280,0xbf00);//VCM LCD_WriteReg(0x102,0xd1b0);//VRH,VCMR,PSON,PON delay_ms(120); LCD_WriteReg(0x001,0x0100); LCD_WriteReg(0x002,0x0100); LCD_WriteReg(0x003,0x1030); LCD_WriteReg(0x009,0x0001); LCD_WriteReg(0x0C,0x0000); //MCU interface LCD_WriteReg(0x090,0x8000); LCD_WriteReg(0x00f,0x0000); LCD_WriteReg(0x210,0x0000); LCD_WriteReg(0x211,0x00ef); LCD_WriteReg(0x212,0x0000); LCD_WriteReg(0x213,0x018f); LCD_WriteReg(0x500,0x0000); LCD_WriteReg(0x501,0x0000); LCD_WriteReg(0x502,0x005f); LCD_WriteReg(0x401,0x0001); LCD_WriteReg(0x404,0x0000); delay_ms(200); LCD_WriteReg(0x0007,0x0100); delay_ms(200); LCD_WriteReg(0x200,0x0000); LCD_WriteReg(0x201,0x0000); delay_ms(200); LCD_WriteRegIndex(0x0202); } void set_win_7793() { LCD_WriteReg(0x0210,0 ); LCD_WriteReg(0x0211, 0xEF); LCD_WriteReg(0x0212, 0x00); LCD_WriteReg(0x0213, 0x18F); //432=01AF,400=018F LCD_WriteRegIndex(0x0202); } void set_point_7793(unsigned int x,unsigned int y) { LCD_WriteReg(0x0200, x); LCD_WriteReg(0x0201, y); LCD_WriteRegIndex(0x0202); } void Lcd_test() { unsigned int i,j; for(i=0;i<400;i++) for(j=0;j<240;j++) { if(i>279)LCD_WriteData(0x00,0x00); else if(i>239)LCD_WriteData(0x00,0x1f); else if(i>199)LCD_WriteData(0x07,0xe0); else if(i>159)LCD_WriteData(0x07,0xff); else if(i>119)LCD_WriteData(0xf8,0x00); else if(i>79)LCD_WriteData(0xf8,0x1f); else if(i>39)LCD_WriteData(0xff,0xe0); else LCD_WriteData(0xff,0xff); } } void Lcd_test_black() { unsigned int i,j; for(i=0;i<400;i++) for(j=0;j<240;j++) LCD_WriteData(0x00,0x00); } void Lcd_test_white() { unsigned int i,j; for(i=0;i<400;i++) for(j=0;j<240;j++) LCD_WriteData(0xff,0xff); } void Lcd_test_red() { unsigned int i,j; for(i=0;i<400;i++) for(j=0;j<240;j++) LCD_WriteData(0xf8,0x00); } void Lcd_test_green() { unsigned int i,j; for(i=0;i<400;i++) for(j=0;j<240;j++) LCD_WriteData(0x07,0xe0); } void Lcd_test_blue() { unsigned int i,j; for(i=0;i<400;i++) for(j=0;j<240;j++) LCD_WriteData(0x00,0x1f); } void main() { // LCD_CS=0; Lcd_Init(); //while(1); // set_win_7793(); // set_point_7793(0,0); // Lcd_test(); while(1) { Lcd_test_red(); Lcd_test_black(); Lcd_test_white(); Lcd_test_green(); Lcd_test_blue(); Lcd_test(); } }