⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 ILI9320的驱动在手机上使用过并已经生产
💻 C
📖 第 1 页 / 共 4 页
字号:
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
		#elif (defined(LCD_18BIT_MODE))

	        	SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0007&0xFF00)<<2)|((0x0007&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(1,LCD_DATA,((0x0036&0xFF00)<<2)|((0x0036&0xFF)<<1));
			LCD_SEND_DMA_CMD(2);
			LCD_Delay(0x1000);
			SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0007&0xFF00)<<2)|((0x0007&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(1,LCD_DATA,((0x0026&0xFF00)<<2)|((0x0026&0xFF)<<1));
			LCD_SEND_DMA_CMD(2);
			SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0007&0xFF00)<<2)|((0x0007&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(1,LCD_DATA,((0x0004&0xFF00)<<2)|((0x0004&0xFF)<<1));
			LCD_SEND_DMA_CMD(2);
			LCD_Delay(0x1000);
			SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0010&0xFF00)<<2)|((0x0010&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(1,LCD_DATA,((lcd_power_ctrl_shadow1&0xFF00)<<2)|((lcd_power_ctrl_shadow1&0xFF)<<1));
			LCD_SEND_DMA_CMD(2);
			LCD_Delay(0x8000);
			SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0012&0xFF00)<<2)|((0x0012&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(1,LCD_DATA,((lcd_power_ctrl_shadow3&0xFF00)<<2)|((lcd_power_ctrl_shadow3&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(2,LCD_CMD,((0x0013&0xFF00)<<2)|((0x0013&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(3,LCD_DATA,((lcd_power_ctrl_shadow4&0xFF00)<<2)|((lcd_power_ctrl_shadow4&0xFF)<<1));
			LCD_SEND_DMA_CMD(4);
			LCD_Delay(0x1000);
		#endif
	#else
		LCD_CtrlWrite_HX8306A(0x0007);
		LCD_DataWrite_HX8306A(0x0036);
		LCD_Delay(0x1000);
		LCD_CtrlWrite_HX8306A(0x0007);
		LCD_DataWrite_HX8306A(0x0026);
		LCD_CtrlWrite_HX8306A(0x0007);
		LCD_DataWrite_HX8306A(0x0004);
		LCD_Delay(0x1000);
		LCD_CtrlWrite_HX8306A(0x0010);
		LCD_DataWrite_HX8306A(lcd_power_ctrl_shadow1);
		LCD_Delay(0x8000);
		LCD_CtrlWrite_HX8306A(0x0012);
		LCD_DataWrite_HX8306A(lcd_power_ctrl_shadow3);
		LCD_CtrlWrite_HX8306A(0x0013);
		LCD_DataWrite_HX8306A(lcd_power_ctrl_shadow4);
		LCD_Delay(0x1000);
	#endif
}

void LCD_ExitSleep_HX8306A(void)
{
//------------  Exit Sleep Mode    -----------//
  TFT_writec(0x0010);TFT_writed(0x0000);

  //-------------Power On sequence -------------//
   LCD_set_reg(0x0010,0x0000);
  LCD_set_reg(0x0011,0x0007);
  LCD_set_reg(0x0012,0x0000);
  LCD_set_reg(0x0013,0x0000);
  delayms(10);

  LCD_set_reg(0x0010,0x17B0);
  LCD_set_reg(0x0011,0x0227);//07  037
   delayms(10);
  LCD_set_reg(0x0012,0x013c);//11d
  delayms(10);
    #if defined(wei_jin_LCD2)   //  第二个
  LCD_set_reg(0x0013,0x1A00);//19 
  LCD_set_reg(0x0029,0x000C); //0007
  #elif  defined(wei_jin_LCD1)             //第一个
  LCD_set_reg(0x0013,0x1F00);//19 
  LCD_set_reg(0x0029,0x000A); //0007
  #endif

  
  delayms(30);
// #if 0
  //------------ display on function ------------//  
  TFT_writec(0x0007);TFT_writed(0x0022);
  delayms(30);
  TFT_writec(0x0007);TFT_writed(0x0133);
//#endif
        return;
	lcd_power_ctrl_shadow1 &= ~0x2;
	lcd_power_ctrl_shadow3 |= 0x10;
	lcd_power_ctrl_shadow4 |= 0x2000;
	#if (defined(LCD_CMD_DMA_MODE))
		#if (defined(LCD_8BIT_MODE))
            LCD_Init_HX8306A(0, 0);
		#elif (defined(LCD_9BIT_MODE))
		#elif (defined(LCD_16BIT_MODE))
            LCD_Init_HX8306A(0, 0);
		#elif (defined(LCD_18BIT_MODE))
			SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0012&0xFF00)<<2)|((0x0012&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(1,LCD_DATA,((lcd_power_ctrl_shadow3&0xFF00)<<2)|((lcd_power_ctrl_shadow3&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(2,LCD_CMD,((0x0013&0xFF00)<<2)|((0x0013&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(3,LCD_DATA,((lcd_power_ctrl_shadow4&0xFF00)<<2)|((lcd_power_ctrl_shadow4&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(4,LCD_CMD,((0x0010&0xFF00)<<2)|((0x0010&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(5,LCD_DATA,((lcd_power_ctrl_shadow1&0xFF00)<<2)|((lcd_power_ctrl_shadow1&0xFF)<<1));
			LCD_SEND_DMA_CMD(6);

			SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0007&0xFF00)<<2)|((0x0007&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(1,LCD_DATA,((0x0005&0xFF00)<<2)|((0x0005&0xFF)<<1));
			LCD_SEND_DMA_CMD(2);
			LCD_Delay(0x1000);
			SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0007&0xFF00)<<2)|((0x0007&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(1,LCD_DATA,((0x0025&0xFF00)<<2)|((0x0025&0xFF)<<1));
			LCD_SEND_DMA_CMD(2);
			SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0007&0xFF00)<<2)|((0x0007&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(1,LCD_DATA,((0x0027&0xFF00)<<2)|((0x0027&0xFF)<<1));
			LCD_SEND_DMA_CMD(2);
			LCD_Delay(0x1000);
			SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0007&0xFF00)<<2)|((0x0007&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(1,LCD_DATA,((0x0037&0xFF00)<<2)|((0x0037&0xFF)<<1));
			LCD_SEND_DMA_CMD(2);
			LCD_Delay(0x1000);
		#endif
	#else
		LCD_CtrlWrite_HX8306A(0x0010);
		LCD_DataWrite_HX8306A(lcd_power_ctrl_shadow1);
		LCD_CtrlWrite_HX8306A(0x0012);
		LCD_DataWrite_HX8306A(lcd_power_ctrl_shadow3);
		LCD_CtrlWrite_HX8306A(0x0013);
		LCD_DataWrite_HX8306A(lcd_power_ctrl_shadow4);
		LCD_CtrlWrite_HX8306A(0x0007);
		LCD_DataWrite_HX8306A(0x0005);
		LCD_Delay(0x1000);
		LCD_CtrlWrite_HX8306A(0x0007);
		LCD_DataWrite_HX8306A(0x0025);
		LCD_CtrlWrite_HX8306A(0x0007);
		LCD_DataWrite_HX8306A(0x0027);
		LCD_Delay(0x1000);
		LCD_CtrlWrite_HX8306A(0x0007);
		LCD_DataWrite_HX8306A(0x0037);
		LCD_Delay(0x1000);
	#endif
}

void LCD_Partial_On_HX8306A(kal_uint16 start_page,kal_uint16 end_page)
{
         return;
	#if (defined(LCD_CMD_DMA_MODE))
		#if (defined(LCD_8BIT_MODE))
			SET_LCD_CMD_PARAMETER(0,LCD_CMD, (0x0007 >> 8));
			SET_LCD_CMD_PARAMETER(1,LCD_CMD, (0x0007 & 0x00FF));
			SET_LCD_CMD_PARAMETER(2,LCD_DATA, (0x003F & 0x00FF));
			SET_LCD_CMD_PARAMETER(3,LCD_DATA, (0x003F & 0x00FF));
			SET_LCD_CMD_PARAMETER(4,LCD_CMD, (0x0042 >> 8));
			SET_LCD_CMD_PARAMETER(5,LCD_CMD, (0x0042 & 0x00FF));
			SET_LCD_CMD_PARAMETER(6,LCD_DATA, (end_page & 0x00FF));
			SET_LCD_CMD_PARAMETER(7,LCD_DATA, (start_page & 0x00FF));
			LCD_SEND_DMA_CMD(8);
		#elif (defined(LCD_9BIT_MODE))
		#elif (defined(LCD_16BIT_MODE))
			LCD_set_reg(0x0007, 0x003f);
			SET_LCD_CMD_PARAMETER(0,LCD_CMD,(0x0042&0xFF00) | (0x0042&0xFF));
			SET_LCD_CMD_PARAMETER(1,LCD_DATA,((end_page&0xFF)<<8)|(start_page&0xFF));
			LCD_SEND_DMA_CMD(2);
		#elif (defined(LCD_18BIT_MODE))
		LCD_CtrlWrite_HX8306A(0x0007);
		LCD_DataWrite_HX8306A(0x003f);
        SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0042&0xFF00)<<2)|((0x0042&0xFF)<<1));
		SET_LCD_CMD_PARAMETER(1,LCD_DATA,((end_page&0xFF)<<10)|((start_page&0xFF)<<1));
		LCD_SEND_DMA_CMD(2);
		#endif
	#else
    	LCD_set_reg(0x0007, 0x003f);
    	LCD_set_reg(0x0042, (start_page & 0xFF) | ((end_page & 0xFF) << 8));
	#endif
}

void LCD_Partial_Off_HX8306A(void)
{       
      return;
	#if (defined(LCD_CMD_DMA_MODE))
		#if (defined(LCD_8BIT_MODE))
			SET_LCD_CMD_PARAMETER(0,LCD_CMD, (0x0007 >> 8));
			SET_LCD_CMD_PARAMETER(1,LCD_CMD, (0x0007 & 0x00FF));
			SET_LCD_CMD_PARAMETER(2,LCD_CMD, (0x0042 >> 8));
			SET_LCD_CMD_PARAMETER(3,LCD_CMD, (0x0042 & 0x00FF));
			SET_LCD_CMD_PARAMETER(4,LCD_DATA, (0xDB00 >> 8));
			SET_LCD_CMD_PARAMETER(5,LCD_DATA, (0xDB00 & 0x00FF));
			LCD_SEND_DMA_CMD(6);
        #elif (defined(LCD_9BIT_MODE))
        #elif (defined(LCD_16BIT_MODE))
            LCD_set_reg(0x0007,0x0037);
            SET_LCD_CMD_PARAMETER(0,LCD_CMD,(0x0042&0xFF00)|(0x0042&0xFF));
            SET_LCD_CMD_PARAMETER(1,LCD_DATA,(0xDB00&0xFF00)|(0xDB00&0xFF));
            LCD_SEND_DMA_CMD(2);
		#elif (defined(LCD_18BIT_MODE))
    		LCD_CtrlWrite_HX8306A(0x0007);
	    	LCD_DataWrite_HX8306A(0x0037);
		    SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0042&0xFF00)<<2)|((0x0042&0xFF)<<1));
		    SET_LCD_CMD_PARAMETER(1,LCD_DATA,((0xDB00&0xFF00)<<2)|((0xDB00&0xFF)<<1));
		    LCD_SEND_DMA_CMD(2);
        #endif
    #else
        LCD_set_reg(0x0007, 0x0037);
        LCD_set_reg(0x0042, 0xDB00);
    #endif
}

kal_uint8 LCD_Partial_line_HX8306A(void)
{
	return 1;		/* partial display in 1 line alignment */
}

void LCD_blockClear_HX8306A(kal_uint16 x1, kal_uint16 y1, kal_uint16 x2, kal_uint16 y2, kal_uint16 data)
{
	kal_uint16 LCD_x;
	kal_uint16 LCD_y;
	kal_uint8    r_color, g_color, b_color;

	x1 -= (x1 & 0x03);
	x2 += (3 - (x2 & 0x03));

	r_color = (data & 0xF800) >> 10;	/* transfer to RGB666 */
	g_color = (data >> 5) & 0x3F;
	b_color = (data & 0x1F) << 1;

	#if (defined(LCD_CMD_DMA_MODE))
		#if (defined(LCD_8BIT_MODE))
			SET_LCD_CMD_PARAMETER(0,LCD_CMD, (0x0044 >> 8));
			SET_LCD_CMD_PARAMETER(1,LCD_CMD, (0x0044 & 0x00FF));

		    SET_LCD_CMD_PARAMETER(2,LCD_DATA, (x2 & 0x00FF));
		    SET_LCD_CMD_PARAMETER(3,LCD_DATA, (x1 & 0x00FF));

			SET_LCD_CMD_PARAMETER(4,LCD_CMD, (0x0045 >> 8));
			SET_LCD_CMD_PARAMETER(5,LCD_CMD, (0x0045 & 0x00FF));

			SET_LCD_CMD_PARAMETER(6,LCD_DATA, (y2 & 0x00FF));
			SET_LCD_CMD_PARAMETER(7,LCD_DATA, (y1 & 0x00FF));

			SET_LCD_CMD_PARAMETER(8,LCD_CMD, (0x0021 >> 8));
			SET_LCD_CMD_PARAMETER(9,LCD_CMD, (0x0021 & 0x00FF));

			SET_LCD_CMD_PARAMETER(10,LCD_DATA, (y1 & 0x00FF));
			SET_LCD_CMD_PARAMETER(11,LCD_DATA, (x1 & 0x00FF));

			SET_LCD_CMD_PARAMETER(12,LCD_CMD, (0x0022 >> 8));
			SET_LCD_CMD_PARAMETER(13,LCD_CMD, (0x0022 & 0x00FF));
			

		#elif (defined(LCD_9BIT_MODE))
		#elif (defined(LCD_16BIT_MODE))
			SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0044&0xFF00))|((0x0044&0xFF)));
		    SET_LCD_CMD_PARAMETER(1,LCD_DATA,((x2&0xFF)<<8)|((x1&0xFF)));
			SET_LCD_CMD_PARAMETER(2,LCD_CMD,((0x0045&0xFF00))|((0x0045&0xFF)));
			SET_LCD_CMD_PARAMETER(3,LCD_DATA,((y2&0xFF)<<8)|((y1&0xFF)));
			SET_LCD_CMD_PARAMETER(4,LCD_CMD,((0x0021&0xFF00))|((0x0021&0xFF)));
			SET_LCD_CMD_PARAMETER(5,LCD_DATA,((y1&0xFF)<<8)|((x1&0xFF)));
			SET_LCD_CMD_PARAMETER(6,LCD_CMD,((0x0022&0xFF00))|((0x0022&0xFF)));
			LCD_SEND_DMA_CMD(7);
		#elif (defined(LCD_18BIT_MODE))
			SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0044&0xFF00)<<2)|((0x0044&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(1,LCD_DATA,((x2&0xFF)<<10)|((x1&0xFF)<<1));

			SET_LCD_CMD_PARAMETER(2,LCD_CMD,((0x0045&0xFF00)<<2)|((0x0045&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(3,LCD_DATA,((y2&0xFF)<<10)|((y1&0xFF)<<1));

			SET_LCD_CMD_PARAMETER(4,LCD_CMD,((0x0021&0xFF00)<<2)|((0x0021&0xFF)<<1));
			SET_LCD_CMD_PARAMETER(5,LCD_DATA,((y1&0xFF)<<10)|((x1&0xFF)<<1));

			SET_LCD_CMD_PARAMETER(6,LCD_CMD,((0x0022&0xFF00)<<2)|((0x0022&0xFF)<<1));

			LCD_SEND_DMA_CMD(7);
		#endif
	#else
		LCD_CtrlWrite_HX8306A(0x0044);
		LCD_DataWrite_HX8306A((((x2&0xFF)<<8)|(x1&0xFF)));
		LCD_CtrlWrite_HX8306A(0x0045);
		LCD_DataWrite_HX8306A((((y2&0xFF)<<8)|(y1&0xFF)));
		LCD_CtrlWrite_HX8306A(0x0021);
		LCD_DataWrite_HX8306A((((y1&0xFF)<<8)|(x1&0xFF)));
		LCD_CtrlWrite_HX8306A(0x0022);
	#endif

	for (LCD_y = y1; LCD_y <= y2; LCD_y++) {
		for (LCD_x = x1; LCD_x <= x2; LCD_x++) {
		#if (defined(LCD_8BIT_MODE))
			*((volatile unsigned char *) LCD_HX8306A_DATA_ADDR) = (kal_uint8)(data >> 8);
			*((volatile unsigned char *) LCD_HX8306A_DATA_ADDR) = (kal_uint8)(data & 0x00FF);
		#elif (defined(LCD_16BIT_MODE))
			*((volatile unsigned short *) LCD_HX8306A_DATA_ADDR) = data;
		#elif (defined(LCD_18BIT_MODE))
			*((volatile unsigned int *) LCD_HX8306A_DATA_ADDR)=(r_color<<12)|(g_color<<6)|b_color;
		#elif (defined(LCD_9BIT_MODE))
			*((volatile unsigned short *) LCD_HX8306A_DATA_ADDR)=(r_color<<6)|(g_color>>3);
			*((volatile unsigned short *) LCD_HX8306A_DATA_ADDR)=((g_color&0x07)<<6)|b_color;
		#endif
		}
	}
}

void LCD_ClearAll_HX8306A(kal_uint16 data)
{
   LCD_blockClear_HX8306A(0, 0, LCD_WIDTH - 1, LCD_HEIGHT - 1, data);
}



//-----------------------------------------------for--------61505----------

void WMLCDCOM(kal_uint16 data1)
{
        LCD_CtrlWrite_HX8312A(data1);   
	 	
}
void  WMLCDDATA(kal_uint16 data)
{
         LCD_DataWrite_HX8306A(data);
}
//-----------------------------------------------61505---------------------------------
void LCD_Init_HX8306A(kal_uint32 bkground, void **buf_addr)
{
#if 0
  WMLCDCOM(0x0000); WMLCDDATA(0x0000);		
  WMLCDCOM(0x0007); WMLCDDATA(0x0001); 
  delayms(50);  
  WMLCDCOM(0x0017); WMLCDDATA(0x0001);  
  delayms(50);
  WMLCDCOM(0x0010); WMLCDDATA(0x17B0);
  WMLCDCOM(0x0011); WMLCDDATA(0x0007); 
  WMLCDCOM(0x0012); WMLCDDATA(0x011A);
  WMLCDCOM(0x0013); WMLCDDATA(0x0F00);
  WMLCDCOM(0x0015); WMLCDDATA(0x0000);
  WMLCDCOM(0x0029); WMLCDDATA(0x000E);
  WMLCDCOM(0x00FD); WMLCDDATA(0x0000);
  delayms(50);
  WMLCDCOM(0x0012); WMLCDDATA(0x013A);
  delayms(100);
  WMLCDCOM(0x0001); WMLCDDATA(0x0100);
  WMLCDCOM(0x0002); WMLCDDATA(0x0700);
  WMLCDCOM(0x0003); WMLCDDATA(0x1030);
  //WMLCDCOM(0x0007); WMLCDDATA(0x0004);
  WMLCDCOM(0x0008); WMLCDDATA(0x0808);
  WMLCDCOM(0x0009); WMLCDDATA(0x0000);
  WMLCDCOM(0x000A); WMLCDDATA(0x0000);
  WMLCDCOM(0x000C); WMLCDDATA(0x0000);
  WMLCDCOM(0x000D); WMLCDDATA(0x0000);
  WMLCDCOM(0x0030); WMLCDDATA(0x0000);
  WMLCDCOM(0x0031); WMLCDDATA(0x0000);
  WMLCDCOM(0x0032); WMLCDDATA(0x0000);
  WMLCDCOM(0x0033); WMLCDDATA(0x0000);
  WMLCDCOM(0x0034); WMLCDDATA(0x0000);
  WMLCDCOM(0x0035); WMLCDDATA(0x0000);
  WMLCDCOM(0x0036); WMLCDDATA(0x0000);
  WMLCDCOM(0x0037); WMLCDDATA(0x0707);
  WMLCDCOM(0x0038); WMLCDDATA(0x0707);
  WMLCDCOM(0x0039); WMLCDDATA(0x0707);
  WMLCDCOM(0x003A); WMLCDDATA(0x0303);
  WMLCDCOM(0x003B); WMLCDDATA(0x0303);
  WMLCDCOM(0x003C); WMLCDDATA(0x0707);
  WMLCDCOM(0x003D); WMLCDDATA(0x0F0F);
  WMLCDCOM(0x0050); WMLCDDATA(0x0000);
  WMLCDCOM(0x0051); WMLCDDATA(0x00EF);
  WMLCDCOM(0x0052); WMLCDDATA(0x0000);
  WMLCDCOM(0x0053); WMLCDDATA(0x013F);
  WMLCDCOM(0x0060); WMLCDDATA(0x2700);
  WMLCDCOM(0x0061); WMLCDDATA(0x0001);
  WMLCDCOM(0x006A); WMLCDDATA(0x0000);
  WMLCDCOM(0x0090); WMLCDDATA(0x0010);
  WMLCDCOM(0x0092); WMLCDDATA(0x0000);
  WMLCDCOM(0x0093); WMLCDDATA(0x0000);
  WMLCDCOM(0x0007); WMLCDDATA(0x0021);
  delayms(50);
  WMLCDCOM(0x0007); WMLCDDATA(0x0061);
  delayms(50);
  WMLCDCOM(0x0007); WMLCDDATA(0x0173);
  WMLCDCOM(0x0020); WMLCDDATA(0x0000);
  WMLCDCOM(0x0021); WMLCDDATA(0x0000);
  WMLCDCOM(0x0022); WMLCDDATA(0x0000);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -