static void LCD_open_cmd(__u32 sel) { __u32 id; LCD_delay(60000); __inf("LCD_BOOT: wait to power on!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); LCD_CPU_AUTO_FLUSH(0,0); __inf("LCD_BOOT: disable auto mode for setting!!!!!!!!!!!!!!!!\n"); LCD_delay(600); //LCD_CPU_RD(0x0000,&id); __inf("LCD_BOOT: id to read back is %x\n",id); //setting panel lcd_cpu_cmdset(); __inf("LCD_BOOT: lcd_cpu_cmdset!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); //command to send data LCD_CPU_WR_INDEX(0,0x0202); __inf("LCD_BOOT: LCD_CPU_WR_INDEX!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); LCD_CPU_AUTO_FLUSH(0,1); __inf("LCD_BOOT: LCD_CPU_AUTO_FLUSH !!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); }
static void LCD_Rst(void) { GPIO_ResetBits(GPIOD, GPIO_Pin_13); LCD_delay(10); GPIO_SetBits(GPIOD, GPIO_Pin_13 ); LCD_delay(10); }
void lcd_cpu_cmdset() { LCD_CPU_WR(0, 0x0000, 0x0000); // 同步 LCD_CPU_WR(0, 0x0000, 0x0000); // 同步 LCD_CPU_WR(0, 0x0000, 0x0000); // 同步 LCD_CPU_WR(0, 0x0000, 0x0000); // 同步L LCD_delay(60000); //10ms LCD_CPU_WR(0, 0x0400, 0x6200); //GS=1H0,NL=6H31=>line number=400,SCN=6H00 LCD_CPU_WR(0, 0x0008, 0x0404); //set bp=8lines and fp=8lines, //gamma setting LCD_CPU_WR(0, 0x0300, 0x0C00); //gamma LCD_CPU_WR(0, 0x0301, 0x5A0B); LCD_CPU_WR(0, 0x0302, 0x0906); LCD_CPU_WR(0, 0x0303, 0x1017); LCD_CPU_WR(0, 0x0304, 0x2300); LCD_CPU_WR(0, 0x0305, 0x1700); LCD_CPU_WR(0, 0x0306, 0x6309); LCD_CPU_WR(0, 0x0307, 0x0C09); LCD_CPU_WR(0, 0x0308, 0x100C); LCD_CPU_WR(0, 0x0309, 0x2232); LCD_CPU_WR(0, 0x0010, 0x0010); // DIVI=2H0=>internal clock =1OSC, RTNI=5H16=>clock cycles per line=22clocks LCD_CPU_WR(0, 0x0011, 0x0101); // NOWI=3H1=>no-overlap period=1 internal clock, STDI=3H1=>source output delay time=1 internal clock LCD_CPU_WR(0, 0x0012, 0x0000); // VEQWI=3H0=>VCOM equalize period=0 internal clock, VEQWI=3H0=>Source equalize period=0 internal clock LCD_CPU_WR(0, 0x0013, 0x0001); // MCPI=3H1=>VCOM alternating timing=1 internal clock // POWER CONTROL LCD_CPU_WR(0, 0x0100, 0x0330); //AP=2H3=>electricity amp=1, BT=3H3=>SETUP FACTOR //0730 LCD_CPU_WR(0, 0x0101, 0x0247); //DC1=3H2=>setup2 frequency=line frequency/4 //0117 LCD_CPU_WR(0, 0x0103, 0x0f00); //VDV=5HA=>VCOM amplitude=VREG1OUT*9 //0700 LCD_CPU_WR(0, 0x0280, 0x6800); //VCM=7H40=>VCOMH voltage=VREG1OUT*0.748 // 4d00 LCD_CPU_WR(0, 0x0102, 0xc1B0); //VRH,VCMR,PSON,PON//c1b0 LCD_delay(60000); //10ms // 以下是DISPLAY 模式设置 LCD_CPU_WR(0, 0x0001, 0x0100); //set scan mode,SM=0,SS=1 LCD_CPU_WR(0, 0x0002, 0x0100); //set line inversion or frame inversion:=line inversion,BC=1//0100 LCD_CPU_WR(0, 0x0003, 0x50A8); //set entry mode:BGR=1,ORG=0,ID=2H2,AM=1 LCD_CPU_WR(0, 0x0009, 0x0001); //PTS=0,PTV=0 LCD_CPU_WR(0, 0x000b, 0x0000); LCD_CPU_WR(0, 0x000C, 0x0000); LCD_CPU_WR(0, 0x0090, 0x8000); //external if LCD_CPU_WR(0, 0x000F, 0x0000); //set windows LCD_CPU_WR(0, 0x0210, 0x0000); // LCD_CPU_WR(0, 0x0211, 0x00EF); LCD_CPU_WR(0, 0x0212, 0x0000); LCD_CPU_WR(0, 0x0213, 0x018F); //432=1AF, 400=18F LCD_CPU_WR(0, 0x0500, 0x0000); //Partial Display control LCD_CPU_WR(0, 0x0501, 0x0000); //Partial Display control LCD_CPU_WR(0, 0x0502, 0x005F); LCD_CPU_WR(0, 0x0401, 0x0001); //NDL=0,VLE=0,REV=1 LCD_CPU_WR(0, 0x0404, 0x0000); //VL=9H0 LCD_delay(60000); //10ms //DISPLAY ON LCD_CPU_WR(0,0x0007, 0x0100); //DISPLAY ON!!!!!PTDE=0,BASEE=1 LCD_delay(60000); //10ms LCD_CPU_WR(0,0x0200,0x0000); //INT GRAM address LCD_CPU_WR(0,0x0201, 0x0000); //INT GRAM address //LCD_CPU_WR(0,0x0201,0x0000); //INT GRAM address //LCD_CPU_WR(0,0x0211, 0x00ef); // //LCD_CPU_WR(0,0x0212, 0x0000); // //LCD_CPU_WR(0,0x0213, 0x018f); // }
/********************************************** Lcd初始化函数 ***********************************************/ void Lcd_Initialize(void) { LCD_GPIO_Config(); LCD_FSMC_Config(); LCD_Rst(); //************* Start Initial Sequence **********// WriteComm(0xFF); // EXTC Command Set enable register WriteData(0xFF); WriteData(0x98); WriteData(0x06); WriteComm(0xBA); // SPI Interface Setting WriteData(0xE0); WriteComm(0xBC); // GIP 1 WriteData(0x03); WriteData(0x0F); WriteData(0x63); WriteData(0x69); WriteData(0x01); WriteData(0x01); WriteData(0x1B); WriteData(0x11); WriteData(0x70); WriteData(0x73); WriteData(0xFF); WriteData(0xFF); WriteData(0x08); WriteData(0x09); WriteData(0x05); WriteData(0x00); WriteData(0xEE); WriteData(0xE2); WriteData(0x01); WriteData(0x00); WriteData(0xC1); WriteComm(0xBD); // GIP 2 WriteData(0x01); WriteData(0x23); WriteData(0x45); WriteData(0x67); WriteData(0x01); WriteData(0x23); WriteData(0x45); WriteData(0x67); WriteComm(0xBE); // GIP 3 WriteData(0x00); WriteData(0x22); WriteData(0x27); WriteData(0x6A); WriteData(0xBC); WriteData(0xD8); WriteData(0x92); WriteData(0x22); WriteData(0x22); WriteComm(0xC7); // Vcom WriteData(0x1E); WriteComm(0xED); // EN_volt_reg WriteData(0x7F); WriteData(0x0F); WriteData(0x00); WriteComm(0xC0); // Power Control 1 WriteData(0xE3); WriteData(0x0B); WriteData(0x00); WriteComm(0xFC); WriteData(0x08); WriteComm(0xDF); // Engineering Setting WriteData(0x00); WriteData(0x00); WriteData(0x00); WriteData(0x00); WriteData(0x00); WriteData(0x02); WriteComm(0xF3); // DVDD Voltage Setting WriteData(0x74); WriteComm(0xB4); // Display Inversion Control WriteData(0x00); WriteData(0x00); WriteData(0x00); WriteComm(0xF7); // 480x854 WriteData(0x81); WriteComm(0xB1); // Frame Rate WriteData(0x00); WriteData(0x10); WriteData(0x14); WriteComm(0xF1); // Panel Timing Control WriteData(0x29); WriteData(0x8A); WriteData(0x07); WriteComm(0xF2); //Panel Timing Control WriteData(0x40); WriteData(0xD2); WriteData(0x50); WriteData(0x28); WriteComm(0xC1); // Power Control 2 WriteData(0x17); WriteData(0X85); WriteData(0x85); WriteData(0x20); WriteComm(0xE0); WriteData(0x00); //P1 WriteData(0x0C); //P2 WriteData(0x15); //P3 WriteData(0x0D); //P4 WriteData(0x0F); //P5 WriteData(0x0C); //P6 WriteData(0x07); //P7 WriteData(0x05); //P8 WriteData(0x07); //P9 WriteData(0x0B); //P10 WriteData(0x10); //P11 WriteData(0x10); //P12 WriteData(0x0D); //P13 WriteData(0x17); //P14 WriteData(0x0F); //P15 WriteData(0x00); //P16 WriteComm(0xE1); WriteData(0x00); //P1 WriteData(0x0D); //P2 WriteData(0x15); //P3 WriteData(0x0E); //P4 WriteData(0x10); //P5 WriteData(0x0D); //P6 WriteData(0x08); //P7 WriteData(0x06); //P8 WriteData(0x07); //P9 WriteData(0x0C); //P10 WriteData(0x11); //P11 WriteData(0x11); //P12 WriteData(0x0E); //P13 WriteData(0x17); //P14 WriteData(0x0F); //P15 WriteData(0x00); //P16 WriteComm(0x35); //Tearing Effect ON WriteData(0x00); WriteComm(0x36); WriteData(0x60); WriteComm(0x3A); WriteData(0x55); WriteComm(0x11); //Exit Sleep LCD_delay(120); WriteComm(0x29); // Display On LCD_delay(10); Lcd_Light_ON; WriteComm(0x3A); WriteData(0x55); WriteComm(0x36); WriteData(0xA8); Lcd_ColorBox(0,0,800,480,YELLOW); // LCD_Fill_Pic(80,160,320,480, gImage_MM_T035); // BlockWrite(0,0,799,479); }
void Adafruit_TFTLCD::begin(uint16_t id) { uint8_t i = 0; reset(); if((id == 0x9325) || (id == 0x9328)) { uint16_t a, d; driver = ID_932X; // CS_ACTIVE; // BLH: CS is always asserted. while(i < sizeof(ILI932x_regValues) / sizeof(uint16_t)) { a = pgm_read_word(&ILI932x_regValues[i++]); d = pgm_read_word(&ILI932x_regValues[i++]); if(a == TFTLCD_DELAY) LCD_delay(d); else writeRegister16(a, d); } setRotation(rotation); setAddrWindow(0, 0, TFTWIDTH-1, TFTHEIGHT-1); } else if (id == 0x9341) { uint16_t a, d; driver = ID_9341; // CS_ACTIVE; // BLH: CS is always asserted. writeRegister8(ILI9341_SOFTRESET, 0); LCD_delay(50); writeRegister8(ILI9341_DISPLAYOFF, 0); writeRegister8(ILI9341_POWERCONTROL1, 0x23); writeRegister8(ILI9341_POWERCONTROL2, 0x10); writeRegister16(ILI9341_VCOMCONTROL1, 0x2B2B); writeRegister8(ILI9341_VCOMCONTROL2, 0xC0); writeRegister8(ILI9341_MEMCONTROL, ILI9341_MADCTL_MY | ILI9341_MADCTL_BGR); writeRegister8(ILI9341_PIXELFORMAT, 0x55); writeRegister16(ILI9341_FRAMECONTROL, 0x001B); writeRegister8(ILI9341_ENTRYMODE, 0x07); /* writeRegister32(ILI9341_DISPLAYFUNC, 0x0A822700);*/ writeRegister8(ILI9341_SLEEPOUT, 0); LCD_delay(150); writeRegister8(ILI9341_DISPLAYON, 0); LCD_delay(500); setAddrWindow(0, 0, TFTWIDTH-1, TFTHEIGHT-1); } else if(id == 0x7575) { uint8_t a, d; driver = ID_7575; // CS_ACTIVE; // BLH: CS is always asserted. while(i < sizeof(HX8347G_regValues)) { a = pgm_read_byte(&HX8347G_regValues[i++]); d = pgm_read_byte(&HX8347G_regValues[i++]); if(a == TFTLCD_DELAY) LCD_delay(d); else writeRegister8(a, d); } setRotation(rotation); setLR(); // Lower-right corner of address window } else { driver = ID_UNKNOWN; return; } }