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

📄 lcd.c

📁 HX8306A LCD 驱动,关于命令初始化等
💻 C
📖 第 1 页 / 共 3 页
字号:
        LCD_DataWrite_HX8306A(0x00);
	 LCD_DataWrite_HX8306A(0x37);	
	} /* -- end LCM_LEAD_ILI9221_176x220--*/

#elif defined(LCM_XINSHENHUI_HX8306A_176x220)
      {
       LCD_set_reg(0x0007,0x0040);//turn off power,display off
	LCD_set_reg(0x0012,0x0000);//power control 3
	LCD_set_reg(0x0013,0x0000);//power control 4
	LCD_Delay(10);
	LCD_set_reg(0x0001,0x011b);
	LCD_set_reg(0x0002,0x0700);
	LCD_set_reg(0x0003,0x1030);//bgr=1  janing xu
	LCD_set_reg(0x0004,0x0000);
	LCD_set_reg(0x0005,0x0000);
	LCD_set_reg(0x000b,0x4000);
	/*********power setting*********/
	LCD_set_reg(0x0011,0x0000);
	LCD_set_reg(0x0012,0x0008);
	LCD_set_reg(0x0013,0x1014);//VCOMH
	LCD_set_reg(0x0010,0x4040);
	LCD_Delay(10);
	LCD_set_reg(0x0012,0x0018);
	LCD_Delay(10);
	LCD_set_reg(0x0013,0x3014);//VCOMH
	LCD_Delay(10);
	/********Gamma Adjustment*********/
	LCD_set_reg(0x0030,0x0000);
	LCD_set_reg(0x0031,0x0207);
	LCD_set_reg(0x0032,0x0000);
	LCD_set_reg(0x0033,0x0401);
	LCD_set_reg(0x0034,0x0707);
	LCD_set_reg(0x0035,0x0005);
	LCD_set_reg(0x0036,0x0707);
	LCD_set_reg(0x0037,0x0000);
	LCD_set_reg(0x0038,0x0000);
	LCD_set_reg(0x0039,0x0000);
	////////////////////////////////////
	LCD_set_reg(0x0040,0x0000);
	LCD_set_reg(0x0041,0xef00);
	LCD_set_reg(0x0042,0x00db);
	LCD_set_reg(0x0043,0xdb00);
	LCD_set_reg(0x0044,0xaf00);
	LCD_set_reg(0x0045,0xdb00);
	/////////////////////////////////////
	LCD_set_reg(0x0007,0x0141);
	LCD_Delay(10);
	LCD_set_reg(0x0007,0x0161);
	LCD_Delay(10);
	LCD_set_reg(0x0007,0x0163);
	LCD_Delay(10);
	LCD_set_reg(0x0007,0x0f77);
	LCD_Delay(10);
	LCD_set_reg(0x0008,0x0202);
      }/* -- end LCM_XINSHENHUI_HX8306A_176x220--*/
	  
#endif

/*
//janing xu debug
{    // Italy National Flag
	#include 	"Device.h"   
      extern const char gpio_led_mainbl_en_pin;
      extern void PWM_level(kal_uint8 level);


        GPIO_WriteIO(1, gpio_led_mainbl_en_pin);     
        PWM_level(LED_LIGHT_LEVEL4);

         LCD_blockClear_HX8306A(0,0,43,159,0x07E0);
	  LCD_blockClear_HX8306A(44,0,83,159,0xFFFF);	 
	  LCD_blockClear_HX8306A(84,0,127,159,0xF800);		 
kal_sleep_task(600);

}
*/
	LCD_ClearAll_HX8306A(bkground);
	lcd_power_ctrl_shadow1=0x0144;//0x0004;//0x2140;
	lcd_power_ctrl_shadow3=0x0014;//0x0012;
	lcd_power_ctrl_shadow4=0x2a15;//0x300E;
	lcd_power_ctrl_shadow1=0x2464;
	lcd_power_ctrl_shadow3=0x0012;
	lcd_power_ctrl_shadow4=0x2a15;
	DELAY_1ms(5);//Delayms(0x80000); 
}

void LCD_ReInit(void)
{
	LCD_Init_HX8306A(0,NULL);
}

void LCD_ExitSleep_HX8306A(void)
{
	//lcd_power_ctrl_shadow1 &= ~0x2;
	//lcd_power_ctrl_shadow3 |= 0x10;
	//lcd_power_ctrl_shadow4 |= 0x2000;

	 LCD_Init_HX8306A(0,0);  // janing xu
}


void LCD_PWRON_HX8306A(kal_bool on)
{
}

void LCD_SetContrast_HX8306A(kal_uint8 level)
{
}
   
void LCD_ON_HX8306A(kal_bool on)
{
}

void LCD_BlockWrite_HX8306A(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
	 kal_uint16 roi_offset_x,roi_offset_y;
	kal_uint16 roi_width,roi_height,start_x,end_x;

	while (LCD_IS_RUNNING);

    	lcd_assert_fail = KAL_TRUE;

/*----ALL  DMA MODE----*/		
#ifdef LCM_LEAD_R61503_176x220
          {
        	  SET_LCD_CMD_PARAMETER(0,LCD_CMD, 0);
		      SET_LCD_CMD_PARAMETER(1,LCD_CMD, (0x50 & 0xFF));
		      SET_LCD_CMD_PARAMETER(2,LCD_DATA,0);
		      SET_LCD_CMD_PARAMETER(3,LCD_DATA, (startx & 0xFF));

		      SET_LCD_CMD_PARAMETER(4,LCD_CMD, 0);
		      SET_LCD_CMD_PARAMETER(5,LCD_CMD, (0x51 & 0xFF));
		      SET_LCD_CMD_PARAMETER(6,LCD_DATA,0);
		      SET_LCD_CMD_PARAMETER(7,LCD_DATA, (endx & 0xFF));
			  
		      SET_LCD_CMD_PARAMETER(8,LCD_CMD, 0);
		      SET_LCD_CMD_PARAMETER(9,LCD_CMD, (0x52 & 0xFF));
		      SET_LCD_CMD_PARAMETER(10,LCD_DATA,0);
		      SET_LCD_CMD_PARAMETER(11,LCD_DATA, (starty & 0xFF));

		      SET_LCD_CMD_PARAMETER(12,LCD_CMD, 0);
		      SET_LCD_CMD_PARAMETER(13,LCD_CMD, (0x53 & 0xFF));
		      SET_LCD_CMD_PARAMETER(14,LCD_DATA,0);
		      SET_LCD_CMD_PARAMETER(15,LCD_DATA, (endy & 0xFF));

		      SET_LCD_CMD_PARAMETER(16,LCD_CMD, 0);
		      SET_LCD_CMD_PARAMETER(17,LCD_CMD, (0x20&0xFF));
		      SET_LCD_CMD_PARAMETER(18,LCD_DATA,0);
		      SET_LCD_CMD_PARAMETER(19,LCD_DATA,(startx&0xFF));

		      SET_LCD_CMD_PARAMETER(20,LCD_CMD,0);
		      SET_LCD_CMD_PARAMETER(21,LCD_CMD, (0x21&0xFF));
		      SET_LCD_CMD_PARAMETER(22,LCD_DATA,0);
		      SET_LCD_CMD_PARAMETER(23,LCD_DATA,(starty&0xFF));
			  
		      SET_LCD_CMD_PARAMETER(24,LCD_CMD,0);
		      SET_LCD_CMD_PARAMETER(25,LCD_CMD, (0x22&0xFF));
	   		  SET_LCD_ROI_CTRL_NUMBER_OF_CMD(26);
			  
	          ENABLE_LCD_TRANSFER_COMPLETE_INT;
	          ENABLE_LCD_ROI_CTRL_CMD_FIRST;
		while (LCD_IS_RUNNING){};//ss.pan 2007.11.27 add
              START_LCD_TRANSFER;
         } /*--end LCM_LEAD_R61503_176x220 --*/

#elif defined(LCM_LEAD_ILI9221_176x220)
       {
      	      SET_LCD_CMD_PARAMETER(0,LCD_CMD, 0);
		      SET_LCD_CMD_PARAMETER(1,LCD_CMD, (0x44&0xFF));
		      SET_LCD_CMD_PARAMETER(2,LCD_DATA, (endx&0xFF));
		      SET_LCD_CMD_PARAMETER(3,LCD_DATA, (startx&0xFF));

      	             SET_LCD_CMD_PARAMETER(4,LCD_CMD, 0);
		      SET_LCD_CMD_PARAMETER(5,LCD_CMD, (0x45&0xFF));
		      SET_LCD_CMD_PARAMETER(6,LCD_DATA, (endy&0xFF));
		      SET_LCD_CMD_PARAMETER(7,LCD_DATA, (starty&0xFF));			  

      	             SET_LCD_CMD_PARAMETER(8,LCD_CMD, 0);
		      SET_LCD_CMD_PARAMETER(9,LCD_CMD, (0x21&0xFF));
		      SET_LCD_CMD_PARAMETER(10,LCD_DATA, (starty&0xFF));
		      SET_LCD_CMD_PARAMETER(11,LCD_DATA, (startx&0xFF));

      	             SET_LCD_CMD_PARAMETER(12,LCD_CMD, 0);
		      SET_LCD_CMD_PARAMETER(13,LCD_CMD, (0x22&0xFF));
			   
	            SET_LCD_ROI_CTRL_NUMBER_OF_CMD(14);
		
	            ENABLE_LCD_TRANSFER_COMPLETE_INT;
	            ENABLE_LCD_ROI_CTRL_CMD_FIRST;
	            START_LCD_TRANSFER;  
             }/* -- end LCM_LEAD_ILI9221_176x220--*/
#elif defined(LCM_XINSHENHUI_HX8306A_176x220)
        {
                     SET_LCD_CMD_PARAMETER(0,LCD_CMD, 0);
			SET_LCD_CMD_PARAMETER(1,LCD_CMD, 0x44 );
		       SET_LCD_CMD_PARAMETER(2,LCD_DATA, (endx & 0x00FF));
		       SET_LCD_CMD_PARAMETER(3,LCD_DATA, (startx & 0x00FF));
			SET_LCD_CMD_PARAMETER(4,LCD_CMD, 0);
			SET_LCD_CMD_PARAMETER(5,LCD_CMD,0x45);
			SET_LCD_CMD_PARAMETER(6,LCD_DATA, (endy & 0x00FF));
			SET_LCD_CMD_PARAMETER(7,LCD_DATA, (starty & 0x00FF));
			SET_LCD_CMD_PARAMETER(8,LCD_CMD, 0);
			SET_LCD_CMD_PARAMETER(9,LCD_CMD, 0x21);
			SET_LCD_CMD_PARAMETER(10,LCD_DATA, (starty & 0x00FF));
			SET_LCD_CMD_PARAMETER(11,LCD_DATA, (startx & 0x00FF));
			SET_LCD_CMD_PARAMETER(12,LCD_CMD, 0);							
			SET_LCD_CMD_PARAMETER(13,LCD_CMD,0x22);							
    			SET_LCD_ROI_CTRL_NUMBER_OF_CMD(14);

	              ENABLE_LCD_TRANSFER_COMPLETE_INT;
	              ENABLE_LCD_ROI_CTRL_CMD_FIRST;
	              START_LCD_TRANSFER; 
        }/* -- end LCM_XINSHENHUI_HX8306A_176x220--*/
#elif defined(LCM_LEAD_L1E2_176x220)
          {
            SET_LCD_CMD_PARAMETER(0,LCD_CMD, 0x2A);
			
	     SET_LCD_CMD_PARAMETER(1,LCD_DATA, ((startx>>8)&0xFF));
	     SET_LCD_CMD_PARAMETER(2,LCD_DATA, (startx & 0x00FF));
	     SET_LCD_CMD_PARAMETER(3,LCD_DATA, ((endx>>8)&0xFF));
	     SET_LCD_CMD_PARAMETER(4,LCD_DATA, (endx & 0x00FF));
		 
            SET_LCD_CMD_PARAMETER(5,LCD_CMD, 0x2B);
			
	     SET_LCD_CMD_PARAMETER(6,LCD_DATA, ((starty>>8)&0xFF));
	     SET_LCD_CMD_PARAMETER(7,LCD_DATA, (starty & 0x00FF));
	     SET_LCD_CMD_PARAMETER(8,LCD_DATA, ((endy>>8)&0xFF));
	     SET_LCD_CMD_PARAMETER(9,LCD_DATA, (endy & 0x00FF));	
		 
	     SET_LCD_CMD_PARAMETER(10,LCD_CMD, 0x2C);
		 
	      SET_LCD_ROI_CTRL_NUMBER_OF_CMD(11);
	      ENABLE_LCD_TRANSFER_COMPLETE_INT;
	      ENABLE_LCD_ROI_CTRL_CMD_FIRST;
	      START_LCD_TRANSFER; 
           }

#endif  /*----Above of all  DMA MODE----*/		
     lcd_assert_fail = KAL_FALSE;
}

void LCD_Size_HX8306A(kal_uint16 *out_LCD_width, kal_uint16 *out_LCD_height)
{
   	*out_LCD_width = LCD_WIDTH;
   	*out_LCD_height = LCD_HEIGHT;
}

/*Engineering mode*/
kal_uint8 LCD_GetParm_HX8306A(lcd_func_type type)
{
    switch(type) {
    case lcd_Bais_func:
        return 1;

    case lcd_Contrast_func:
        return 1;

    case lcd_LineRate_func:
        return 4;

    case lcd_Temperature_Compensation_func:
        return 4;

    default:
        ASSERT(0);
   }

   return 100;
}

void LCD_SetBias_HX8306A(kal_uint8 *bias)
{
}

void LCD_Contrast_HX8306A(kal_uint8 *contrast)
{
}

void LCD_LineRate_HX8306A(kal_uint8 *linerate)
{
}

void LCD_Temp_Compensate_HX8306A(kal_uint8 *compensate)
{
}

kal_bool LCD_ESD_check_HX8306A()
{
    volatile  kal_uint16 data_value = 0;
    kal_uint16 data_addr = 0;
	kal_uint8 i, reg_start_idx, reg_end_idx;
	
	if (lcd_reg_index > 2) {
        lcd_reg_index = 0;
	}
   
	while (LCD_IS_RUNNING);   

    if (lcd_reg_index == 0) {
      reg_start_idx = 0;
      reg_end_idx = 7;
   }else if (lcd_reg_index == 1) {
      reg_start_idx = 8;
      reg_end_idx = 14;
   }else{
      reg_start_idx = 15;
      reg_end_idx = N_lcd_reg - 1;
   }   

    for (i = reg_start_idx; i <= reg_end_idx; i++) {
        if (lcd_check == 1) {
            data_addr = lcd_check_reg.reg[i].addr;
            data_value = readreg_HX8306A(data_addr);	   
            kal_prompt_trace(MOD_ENG, "--read %x as %x", data_addr, data_value);
            if (data_value != lcd_check_reg.reg[i].para) {
                kal_prompt_trace(MOD_ENG, "ESD FAIL read %x as %x", data_addr, data_value);
                return KAL_FALSE;
            }
	    }
    }

    lcd_reg_index++;
    while (LCD_IS_RUNNING);
   
    return KAL_TRUE;
}

/*===================The above is LCD dependent==========*/
#if ( (defined(MT6205B)) || (defined(MT6218)) )
void LCD_memcpy(void *dst /*s1*/, const void *src /*s2*/, kal_uint16 size)
{
   #ifdef LCD_DMAENABLE
      kal_uint32 srcaddr=(kal_uint32)src;
      kal_uint32 dstaddr=(kal_uint32)dst;
      kal_uint16 size_MSB = (kal_uint16)(size >> 9);
      kal_uint16 size_LSB = (kal_uint16)(size & 0x01ff);

      ASSERT(lcd_assert_fail==KAL_FALSE);
      lcd_assert_fail = KAL_TRUE;
      ASSERT(DRV_Reg(LCD_REFR)==0x00);
      if(size_MSB)
      {
         DRV_WriteReg(LCD_MSBSRC,(kal_uint16)(srcaddr >> 16));
         DRV_WriteReg(LCD_LSBSRC,(kal_uint16)srcaddr);

         DRV_WriteReg(LCD_REFR,0x0000);
         DRV_WriteReg(LCD_MSBDST,(kal_uint16)(dstaddr >> 16));
         DRV_WriteReg(LCD_LSBDST,(kal_uint16)(dstaddr));

         DRV_WriteReg(LCD_CADDRSET,512);
         DRV_WriteReg(LCD_PADDRSET,size_MSB);
         DRV_WriteReg(LCD_CHOP,0);

         DRV_WriteReg(LCD_PCON,LCD_PCON_DINC);

         DRV_WriteReg(LCD_START,LCD_START_BIT);
         while(DRV_Reg(LCD_GSTA)&LCD_GSTA_PRUN);
         DRV_WriteReg(LCD_START,LCD_STOP_BIT);
      }

      if (size_LSB)
      {
         srcaddr = (srcaddr + size - size_LSB);
         dstaddr = (dstaddr + size - size_LSB);

         DRV_WriteReg(LCD_MSBSRC,(kal_uint16)(srcaddr >> 16));
         DRV_WriteReg(LCD_LSBSRC,(kal_uint16)srcaddr);

         DRV_WriteReg(LCD_REFR,0x0000);
         DRV_WriteReg(LCD_MSBDST,(kal_uint16)(dstaddr >> 16));
         DRV_WriteReg(LCD_LSBDST,(kal_uint16)(dstaddr));

         DRV_WriteReg(LCD_CADDRSET,size_LSB);
         DRV_WriteReg(LCD_PADDRSET,1);
         DRV_WriteReg(LCD_CHOP,0);

         DRV_WriteReg(LCD_PCON,LCD_PCON_DINC);

         DRV_WriteReg(LCD_START,LCD_START_BIT);
         while(DRV_Reg(LCD_GSTA)&LCD_GSTA_PRUN);
         DRV_WriteReg(LCD_START,LCD_STOP_BIT);
      }

      lcd_assert_fail = KAL_FALSE;
   #else /*!LCD_DMAENABLE*/
      kal_mem_cpy(dst,src,size);
   #endif   /*LCD_DMAENABLE*/
}
#else /*!(MT6205B,MT6218)*/
void LCD_memcpy(void *dst /*s1*/, const void *src /*s2*/, kal_uint16 size)
{
   kal_mem_cpy(dst,src,size);
}
#endif   /*(MT6205B,MT6218)*/

LCD_Funcs LCD_func_HX8306A = {
   LCD_Init_HX8306A,
   LCD_PWRON_HX8306A,
   LCD_SetContrast_HX8306A,
   LCD_ON_HX8306A,
   LCD_BlockWrite_HX8306A,
   LCD_Size_HX8306A,
   LCD_EnterSleep_HX8306A,
   LCD_ExitSleep_HX8306A,
   LCD_Partial_On_HX8306A,
   LCD_Partial_Off_HX8306A,
   LCD_Partial_line_HX8306A,
   /*Engineering mode*/
   LCD_GetParm_HX8306A,
   LCD_SetBias_HX8306A,
   LCD_Contrast_HX8306A,
   LCD_LineRate_HX8306A,
   LCD_Temp_Compensate_HX8306A
   #ifdef __LCD_ESD_RECOVERY__   
   ,LCD_ESD_check_HX8306A
   #endif 
};

void LCD_FunConfig(void)
{
    MainLCD = &LCD_func_HX8306A;
}

⌨️ 快捷键说明

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