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

📄 ili9320.c

📁 基于STM32(CotextM3)开发的实时操作系统uCos和UCGUI设计
💻 C
📖 第 1 页 / 共 3 页
字号:
		ili9320_WriteRegister(0x0061, 0x0001); // NDL,VLE, REV
		ili9320_WriteRegister(0x006A, 0x0000); // set scrolling line
		//-------------- Partial Display Control ---------//
		ili9320_WriteRegister(0x0080, 0x0000);
		ili9320_WriteRegister(0x0081, 0x0000);
		ili9320_WriteRegister(0x0082, 0x0000);
		ili9320_WriteRegister(0x0083, 0x0000);
		ili9320_WriteRegister(0x0084, 0x0000);
		ili9320_WriteRegister(0x0085, 0x0000);
		//-------------- Panel Control -------------------//
		ili9320_WriteRegister(0x0090, 0x0010);
		ili9320_WriteRegister(0x0092, 0x0600);
		ili9320_WriteRegister(0x0007,0x0021);		
		ili9320_Delay(50);
		ili9320_WriteRegister(0x0007,0x0061);
		ili9320_Delay(50);
		ili9320_WriteRegister(0x0007,0x0133);  // 262K color and display ON
		ili9320_Delay(50);
	}  
	else if(DeviceCode==0x7783)
	{
		// Start Initial Sequence
		ili9320_WriteRegister(0x00FF,0x0001);
		ili9320_WriteRegister(0x00F3,0x0008);
		ili9320_WriteRegister(0x0001,0x0100);
		ili9320_WriteRegister(0x0002,0x0700);
		ili9320_WriteRegister(0x0003,0x1030);  //0x1030
		ili9320_WriteRegister(0x0008,0x0302);
		ili9320_WriteRegister(0x0008,0x0207);
		ili9320_WriteRegister(0x0009,0x0000);
		ili9320_WriteRegister(0x000A,0x0000);
		ili9320_WriteRegister(0x0010,0x0000);  //0x0790
		ili9320_WriteRegister(0x0011,0x0005);
		ili9320_WriteRegister(0x0012,0x0000);
		ili9320_WriteRegister(0x0013,0x0000);
		ili9320_Delay(50);
		ili9320_WriteRegister(0x0010,0x12B0);
		ili9320_Delay(50);
		ili9320_WriteRegister(0x0011,0x0007);
		ili9320_Delay(50);
		ili9320_WriteRegister(0x0012,0x008B);
		ili9320_Delay(50);
		ili9320_WriteRegister(0x0013,0x1700);
		ili9320_Delay(50);
		ili9320_WriteRegister(0x0029,0x0022);
		
		//################# void Gamma_Set(void) ####################//
		ili9320_WriteRegister(0x0030,0x0000);
		ili9320_WriteRegister(0x0031,0x0707);
		ili9320_WriteRegister(0x0032,0x0505);
		ili9320_WriteRegister(0x0035,0x0107);
		ili9320_WriteRegister(0x0036,0x0008);
		ili9320_WriteRegister(0x0037,0x0000);
		ili9320_WriteRegister(0x0038,0x0202);
		ili9320_WriteRegister(0x0039,0x0106);
		ili9320_WriteRegister(0x003C,0x0202);
		ili9320_WriteRegister(0x003D,0x0408);
		ili9320_Delay(50);
		
		
		ili9320_WriteRegister(0x0050,0x0000);		
		ili9320_WriteRegister(0x0051,0x00EF);		
		ili9320_WriteRegister(0x0052,0x0000);		
		ili9320_WriteRegister(0x0053,0x013F);		
		ili9320_WriteRegister(0x0060,0xA700);		
		ili9320_WriteRegister(0x0061,0x0001);
		ili9320_WriteRegister(0x0090,0x0033);				
		ili9320_WriteRegister(0x002B,0x000B);		
		ili9320_WriteRegister(0x0007,0x0133);
		ili9320_Delay(50);
	}  
		else if(DeviceCode==0x8989)
	{
		ili9320_WriteRegister(0x0000,0x0001);    ili9320_Delay(50000);  //打开晶振
    	ili9320_WriteRegister(0x0003,0xA8A4);    ili9320_Delay(50000);   //0xA8A4
    	ili9320_WriteRegister(0x000C,0x0000);    ili9320_Delay(50000);   
    	ili9320_WriteRegister(0x000D,0x080C);    ili9320_Delay(50000);   
    	ili9320_WriteRegister(0x000E,0x2B00);    ili9320_Delay(50000);   
    	ili9320_WriteRegister(0x001E,0x00B0);    ili9320_Delay(50000);   
    	ili9320_WriteRegister(0x0001,0x2B3F);    ili9320_Delay(50000);   //驱动输出控制320*240  0x6B3F
    	ili9320_WriteRegister(0x0002,0x0600);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0010,0x0000);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0011,0x6070);    ili9320_Delay(50000);        //0x4030           //定义数据格式  16位色 		横屏 0x6058
    	ili9320_WriteRegister(0x0005,0x0000);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0006,0x0000);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0016,0xEF1C);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0017,0x0003);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0007,0x0233);    ili9320_Delay(50000);        //0x0233       
    	ili9320_WriteRegister(0x000B,0x0000);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x000F,0x0000);    ili9320_Delay(50000);        //扫描开始地址
    	ili9320_WriteRegister(0x0041,0x0000);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0042,0x0000);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0048,0x0000);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0049,0x013F);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x004A,0x0000);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x004B,0x0000);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0044,0xEF00);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0045,0x0000);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0046,0x013F);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0030,0x0707);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0031,0x0204);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0032,0x0204);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0033,0x0502);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0034,0x0507);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0035,0x0204);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0036,0x0204);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0037,0x0502);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x003A,0x0302);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x003B,0x0302);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0023,0x0000);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0024,0x0000);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x0025,0x8000);    ili9320_Delay(50000);
    	ili9320_WriteRegister(0x004f,0);        //行首址0
    	ili9320_WriteRegister(0x004e,0);        //列首址0
	}
	/*
	else if(DeviceCode==0x1505)
	{
// second release on 3/5  ,luminance is acceptable,water wave appear during camera preview
        ili9320_WriteRegister(0x0007,0x0000);
        ili9320_Delay(5);
        ili9320_WriteRegister(0x0012,0x011C);//0x011A   why need to set several times?
        ili9320_WriteRegister(0x00A4,0x0001);//NVM
    //
        ili9320_WriteRegister(0x0008,0x000F);
        ili9320_WriteRegister(0x000A,0x0008);
        ili9320_WriteRegister(0x000D,0x0008);
       
  //GAMMA CONTROL/
        ili9320_WriteRegister(0x0030,0x0707);
        ili9320_WriteRegister(0x0031,0x0007); //0x0707
        ili9320_WriteRegister(0x0032,0x0603); 
        ili9320_WriteRegister(0x0033,0x0700); 
        ili9320_WriteRegister(0x0034,0x0202); 
        ili9320_WriteRegister(0x0035,0x0002); //?0x0606
        ili9320_WriteRegister(0x0036,0x1F0F);
        ili9320_WriteRegister(0x0037,0x0707); //0x0f0f  0x0105
        ili9320_WriteRegister(0x0038,0x0000); 
        ili9320_WriteRegister(0x0039,0x0000); 
        ili9320_WriteRegister(0x003A,0x0707); 
        ili9320_WriteRegister(0x003B,0x0000); //0x0303
        ili9320_WriteRegister(0x003C,0x0007); //?0x0707
        ili9320_WriteRegister(0x003D,0x0000); //0x1313//0x1f08
        ili9320_Delay(5);
        ili9320_WriteRegister(0x0007,0x0001);
        ili9320_WriteRegister(0x0017,0x0001);   //Power supply startup enable
        ili9320_Delay(5);
  
  //power control//
        ili9320_WriteRegister(0x0010,0x17A0); 
        ili9320_WriteRegister(0x0011,0x0217); //reference voltage VC[2:0]   Vciout = 1.00*Vcivl
        ili9320_WriteRegister(0x0012,0x011E);//0x011c  //Vreg1out = Vcilvl*1.80   is it the same as Vgama1out ?
        ili9320_WriteRegister(0x0013,0x0F00); //VDV[4:0]-->VCOM Amplitude VcomL = VcomH - Vcom Ampl
        ili9320_WriteRegister(0x002A,0x0000);  
        ili9320_WriteRegister(0x0029,0x000A); //0x0001F  Vcomh = VCM1[4:0]*Vreg1out    gate source voltage??
        ili9320_WriteRegister(0x0012,0x013E); // 0x013C  power supply on
           //Coordinates Control//
        ili9320_WriteRegister(0x0050,0x0000);//0x0e00
        ili9320_WriteRegister(0x0051,0x00EF); 
        ili9320_WriteRegister(0x0052,0x0000); 
        ili9320_WriteRegister(0x0053,0x013F); 
    //Pannel Image Control//
        ili9320_WriteRegister(0x0060,0x2700); 
        ili9320_WriteRegister(0x0061,0x0001); 
        ili9320_WriteRegister(0x006A,0x0000); 
        ili9320_WriteRegister(0x0080,0x0000); 
    //Partial Image Control//
        ili9320_WriteRegister(0x0081,0x0000); 
        ili9320_WriteRegister(0x0082,0x0000); 
        ili9320_WriteRegister(0x0083,0x0000); 
        ili9320_WriteRegister(0x0084,0x0000); 
        ili9320_WriteRegister(0x0085,0x0000); 
  //Panel Interface Control//
        ili9320_WriteRegister(0x0090,0x0013); //0x0010 frenqucy
        ili9320_WriteRegister(0x0092,0x0300); 
        ili9320_WriteRegister(0x0093,0x0005); 
        ili9320_WriteRegister(0x0095,0x0000); 
        ili9320_WriteRegister(0x0097,0x0000); 
        ili9320_WriteRegister(0x0098,0x0000); 
  
        ili9320_WriteRegister(0x0001,0x0100); 
        ili9320_WriteRegister(0x0002,0x0700); 
        ili9320_WriteRegister(0x0003,0x1030); 
        ili9320_WriteRegister(0x0004,0x0000); 
        ili9320_WriteRegister(0x000C,0x0000); 
        ili9320_WriteRegister(0x000F,0x0000); 
        ili9320_WriteRegister(0x0020,0x0000); 
        ili9320_WriteRegister(0x0021,0x0000); 
        ili9320_WriteRegister(0x0007,0x0021); 
        ili9320_Delay(20);
        ili9320_WriteRegister(0x0007,0x0061); 
        ili9320_Delay(20);
        ili9320_WriteRegister(0x0007,0x0173); 
        ili9320_Delay(20);
	}							 			  
  */
  for(i=50000;i>0;i--);
  ili9320_Clear(0x00f8);
  ili9320_Clear(0xf800);
}

/****************************************************************************
* 名    称:void ili9320_SetCursor(u16 x,u16 y)
* 功    能:设置屏幕座标
* 入口参数:x      行座标
*           y      列座标
* 出口参数:无
* 说    明:
* 调用方法:ili9320_SetCursor(10,10);
****************************************************************************/
__inline void ili9320_SetCursor(u16 x,u16 y)
{
	if(DeviceCode==0x8989)
	{
	 	ili9320_WriteRegister(0x004e,y);        //行
    	ili9320_WriteRegister(0x004f,0x13f-x);  //列
	}
	else if(DeviceCode==0x9919)
	{
		ili9320_WriteRegister(0x004e,x); // 行
  		ili9320_WriteRegister(0x004f,y); // 列	
	}
	else
	{
  		ili9320_WriteRegister(0x0020,y); // 行
  		ili9320_WriteRegister(0x0021,0x13f-x); // 列
	}
}

/****************************************************************************
* 名    称:void ili9320_SetWindows(u16 StartX,u16 StartY,u16 EndX,u16 EndY)
* 功    能:设置窗口区域
* 入口参数:StartX     行起始座标
*           StartY     列起始座标
*           EndX       行结束座标
*           EndY       列结束座标
* 出口参数:无
* 说    明:
* 调用方法:ili9320_SetWindows(0,0,100,100);
****************************************************************************/
__inline void ili9320_SetWindows(u16 StartX,u16 StartY,u16 EndX,u16 EndY)
{
  ili9320_SetCursor(StartX,StartY);
  ili9320_WriteRegister(0x0050, StartX);
  ili9320_WriteRegister(0x0052, StartY);
  ili9320_WriteRegister(0x0051, EndX);
  ili9320_WriteRegister(0x0053, EndY);
}

/****************************************************************************
* 名    称:void ili9320_Clear(u16 dat)
* 功    能:将屏幕填充成指定的颜色,如清屏,则填充 0xffff
* 入口参数:dat      填充值
* 出口参数:无
* 说    明:
* 调用方法:ili9320_Clear(0xffff);
****************************************************************************/
void ili9320_Clear(u16 dat)
{
  u32  i;

  ili9320_SetCursor(0x0000, 0x0000);  
  Clr_Cs; 
  ili9320_WriteIndex(0x0022);    
  for(i=0;i<76800;i++)
  {
    ili9320_WriteData(dat);
  }
  Set_Cs;
}

/****************************************************************************
* 名    称:u16 ili9320_GetPoint(u16 x,u16 y)
* 功    能:获取指定座标的颜色值
* 入口参数:x      行座标
*           y      列座标
* 出口参数:当前座标颜色值
* 说    明:
* 调用方法:i=ili9320_GetPoint(10,10);
****************************************************************************/
//u16 ili9320_GetPoint(u16 x,u16 y)
//{
//  ili9320_SetCursor(x,y);
//  return (ili9320_BGR2RGB(ili9320_ReadRegister(0x0022)));
//}


u16 ili9320_GetPoint(u16 x,u16 y)
{
  u16 temp;
  ili9320_SetCursor(x,y);
  Clr_Cs;
  ili9320_WriteIndex(0x0022);  
	temp = ili9320_ReadData(); //dummy
	temp = ili9320_ReadData(); 	
   Set_Cs;
   if(DeviceCode!=0x7783||DeviceCode!=0x9919)
   	  temp=ili9320_BGR2RGB(temp);
   return (temp);
}

/****************************************************************************
* 名    称:void ili9320_SetPoint(u16 x,u16 y,u16 point)
* 功    能:在指定座标画点
* 入口参数:x      行座标

⌨️ 快捷键说明

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