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

📄 tft.h

📁 51单片机SD卡TFT彩屏显示图片
💻 H
📖 第 1 页 / 共 3 页
字号:
	u32 result=1;	 
	while(n--)result*=m;    
	return result;
}			 
//显示2个数字
//x,y :起点坐标	 
//len :数字的位数
//size:字体大小
//color:颜色
//num:数值(0~4294967295);	 
void LCD_ShowNum(u8 x,u16 y,u32 num,u8 len,u8 size)
{         	
	u8 t,temp;
	u8 enshow=0;						   
	for(t=0;t<len;t++)
	{
		temp=(num/mypow(10,len-t-1))%10;
		if(enshow==0&&t<(len-1))
		{
			if(temp==0)
			{
				LCD_ShowChar(x+(size/2)*t,y,' ',size,0);
				continue;
			}else enshow=1; 
		 	 
		}
	 	LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,0); 
	}
} 
//显示2个数字
//x,y:起点坐标
//size:字体大小
//mode:模式	0,填充模式;1,叠加模式
//num:数值(0~99);	 
void LCD_Show2Num(u8 x,u16 y,u16 num,u8 len,u8 size,u8 mode)
{         	
	u8 t,temp;						   
	for(t=0;t<len;t++)
	{
		temp=(num/mypow(10,len-t-1))%10;
	 	LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,mode); 
	}
} 
//显示字符串
//x,y:起点坐标  
//*p:字符串起始地址
//用16字体
void LCD_ShowString(u8 x,u16 y,const u8 *p)
{         
    while(*p!='\0')
    {       
        if(x>MAX_CHAR_POSX){x=0;y+=16;}
        if(y>MAX_CHAR_POSY){y=x=0;LCD_Clear(WHITE);}
        LCD_ShowChar(x,y,*p,16,0);
        x+=8;
        p++;
    }  
}

void LCD_LineCfg(void)
{	   	 
	RCC->AHBENR|=1<<8;	   //使能FSMC
	RCC->APB2ENR|=1<<0;    //使能AFIO时钟
	RCC->APB2ENR|=1<<4;    //使能PORTC时钟
	RCC->APB2ENR|=1<<5;    //使能PORTD时钟
	RCC->APB2ENR|=1<<6;    //使能PORTE时钟
 
	GPIOD->CRL&=0X0000FF00; 
	GPIOD->CRL|=0XB3BB00BB;//PD0,PD1,PD4,PD5,PD7推挽输出 	 
	GPIOD->CRH&=0X00FF0000; 
	GPIOD->CRH|=0XBB00BBBB;//PD8~PD11,PD14,PD15 推挽输出   	 
    GPIOD->ODR|=0XC733;      //输出高

   	GPIOE->CRL&=0X0FFFF0FF; 
	GPIOE->CRL|=0XB0000B00;//PE7,E2 推挽输出   	 
	GPIOE->CRH=0XBBBBBBBB;//PE8~PE15推挽输出   	 
    GPIOE->ODR|=0XFFC0;      //输出高
}

void LCD_FSMCConfig(void) 
{ 
  	FSMC_Bank1->BTCR[FSMC_Bank1_NORSRAM1]= (u32)FSMC_DataAddressMux_Disable|
	FSMC_MemoryType_NOR|FSMC_MemoryDataWidth_16b|FSMC_BurstAccessMode_Disable|
	FSMC_WaitSignalPolarity_Low|FSMC_WrapMode_Disable|FSMC_WaitSignalActive_BeforeWaitState|
	FSMC_WriteOperation_Enable|FSMC_WaitSignal_Disable|FSMC_ExtendedMode_Disable|
	FSMC_AsyncWait_Disable|FSMC_WriteBurst_Disable;
	FSMC_Bank1->BTCR[FSMC_Bank1_NORSRAM1]|=((u32)0x00000040);//(u32)BCR_FACCEN_Set;
  	FSMC_Bank1->BTCR[FSMC_Bank1_NORSRAM1+1]= 
	(u32)0x00|//FSMC_AddressSetupTime
	(0x00<<4)|//FSMC_AddressHoldTime
	(0x02<<8)|//FSMC_DataSetupTime
	(0x00<<16)|//SMC_BusTurnAroundDuration
	(0x00<<20)|//FSMC_CLKDivision
    (0x00<<24)|//FSMC_DataLatency
    FSMC_AccessMode_A;//FSMC_AccessMode
	FSMC_Bank1E->BWTR[FSMC_Bank1_NORSRAM1]=0x0FFFFFFF;
	FSMC_Bank1->BTCR[FSMC_Bank1_NORSRAM1]|=((u32)0x00000001);//Enable FSMC Bank1_SRAM Bank 
}
//初始化lcd
//该初始化函数可以初始化各种ILI93XX液晶,但是其他函数是基于ILI9320的!!!
//在其他型号的驱动芯片上没有测试! 
void LCD_Init(void)
{ 
	u32 i;
  	LCD_LineCfg();
	LCD_FSMCConfig();	
	LCD_WriteReg(0x0000,0x0001);
	Delay(5); // delay 50 ms 
	DeviceCode = LCD_ReadReg(0x0000);   
//	printf("ID:%d\n",DeviceCode);   
	if(DeviceCode==0x9325||DeviceCode==0x9328)
	{
  		LCD_WriteReg(0x00e7,0x0010);      
        LCD_WriteReg(0x0000,0x0001);  			//start internal osc
        LCD_WriteReg(0x0001,0x0100);     
        LCD_WriteReg(0x0002,0x0700); 				//power on sequence                     
        LCD_WriteReg(0x0003,(1<<12)|(1<<5)|(1<<4) ); 	//65K 
        LCD_WriteReg(0x0004,0x0000);                                   
        LCD_WriteReg(0x0008,0x0207);	           
        LCD_WriteReg(0x0009,0x0000);         
        LCD_WriteReg(0x000a,0x0000); 				//display setting         
        LCD_WriteReg(0x000c,0x0001);				//display setting          
        LCD_WriteReg(0x000d,0x0000); 				//0f3c          
        LCD_WriteReg(0x000f,0x0000);
        LCD_WriteReg(0x0010,0x0000);   
        LCD_WriteReg(0x0011,0x0007);
        LCD_WriteReg(0x0012,0x0000);                                                                 
        LCD_WriteReg(0x0013,0x0000);                 
        for(i=50000;i>0;i--);
		for(i=50000;i>0;i--);
        LCD_WriteReg(0x0010,0x1590);   
        LCD_WriteReg(0x0011,0x0227);
        for(i=50000;i>0;i--);
		for(i=50000;i>0;i--);
        LCD_WriteReg(0x0012,0x009c);                  
        for(i=50000;i>0;i--);
		for(i=50000;i>0;i--);
        LCD_WriteReg(0x0013,0x1900);   
        LCD_WriteReg(0x0029,0x0023);
        LCD_WriteReg(0x002b,0x000e);
        for(i=50000;i>0;i--);
		for(i=50000;i>0;i--);
        LCD_WriteReg(0x0020,0x0000);                                                            
        LCD_WriteReg(0x0021,0x0000);           
        for(i=50000;i>0;i--);
		for(i=50000;i>0;i--);
        LCD_WriteReg(0x0030,0x0007); 
        LCD_WriteReg(0x0031,0x0707);   
        LCD_WriteReg(0x0032,0x0006);
        LCD_WriteReg(0x0035,0x0704);
        LCD_WriteReg(0x0036,0x1f04); 
        LCD_WriteReg(0x0037,0x0004);
        LCD_WriteReg(0x0038,0x0000);        
        LCD_WriteReg(0x0039,0x0706);     
        LCD_WriteReg(0x003c,0x0701);
        LCD_WriteReg(0x003d,0x000f);
        for(i=50000;i>0;i--);
		for(i=50000;i>0;i--);
        LCD_WriteReg(0x0050,0x0000);        
        LCD_WriteReg(0x0051,0x00ef);   
        LCD_WriteReg(0x0052,0x0000);     
        LCD_WriteReg(0x0053,0x013f);
        LCD_WriteReg(0x0060,0xa700);        
        LCD_WriteReg(0x0061,0x0001); 
        LCD_WriteReg(0x006a,0x0000);
        LCD_WriteReg(0x0080,0x0000);
        LCD_WriteReg(0x0081,0x0000);
        LCD_WriteReg(0x0082,0x0000);
        LCD_WriteReg(0x0083,0x0000);
        LCD_WriteReg(0x0084,0x0000);
        LCD_WriteReg(0x0085,0x0000);
        LCD_WriteReg(0x0090,0x0010);     
        LCD_WriteReg(0x0092,0x0000);  
        LCD_WriteReg(0x0093,0x0003);
        LCD_WriteReg(0x0095,0x0110);
        LCD_WriteReg(0x0097,0x0000);        
        LCD_WriteReg(0x0098,0x0000);  
        LCD_WriteReg(0x0007,0x0133);
        LCD_WriteReg(0x0020,0x0000);                                                            
        LCD_WriteReg(0x0021,0x0000);
	}
	else if(DeviceCode==0x9320||DeviceCode==0x9300)
	{
		LCD_WriteReg(0x00,0x0000);
		LCD_WriteReg(0x01,0x0100);	//Driver Output Contral.
		LCD_WriteReg(0x02,0x0700);	//LCD Driver Waveform Contral.
		LCD_WriteReg(0x03,0x1018);	//Entry Mode Set.
		LCD_WriteReg(0x04,0x0000);	//Scalling Contral.
		LCD_WriteReg(0x08,0x0202);	//Display Contral 2.(0x0207)
		LCD_WriteReg(0x09,0x0000);	//Display Contral 3.(0x0000)
		LCD_WriteReg(0x0a,0x0000);	//Frame Cycle Contal.(0x0000)
		LCD_WriteReg(0x0c,(1<<0));	//Extern Display Interface Contral 1.(0x0000)
		LCD_WriteReg(0x0d,0x0000);	//Frame Maker Position.
		LCD_WriteReg(0x0f,0x0000);	//Extern Display Interface Contral 2.
		for(i=50000;i>0;i--);
		for(i=50000;i>0;i--);
		LCD_WriteReg(0x07,0x0101);	//Display Contral.
		for(i=50000;i>0;i--);
		for(i=50000;i>0;i--);
		LCD_WriteReg(0x10,(1<<12)|(0<<8)|(1<<7)|(1<<6)|(0<<4));	//Power Control 1.(0x16b0)
		LCD_WriteReg(0x11,0x0007);								//Power Control 2.(0x0001)
		LCD_WriteReg(0x12,(1<<8)|(1<<4)|(0<<0));					//Power Control 3.(0x0138)
		LCD_WriteReg(0x13,0x0b00);								//Power Control 4.
		LCD_WriteReg(0x29,0x0000);								//Power Control 7.
		LCD_WriteReg(0x2b,(1<<14)|(1<<4));
		LCD_WriteReg(0x50,0);		//Set X Start.
		LCD_WriteReg(0x51,239);	//Set X End.
		LCD_WriteReg(0x52,0);		//Set Y Start.
		LCD_WriteReg(0x53,319);	//Set Y End.
		LCD_WriteReg(0x60,0x2700);	//Driver Output Control.
		LCD_WriteReg(0x61,0x0001);	//Driver Output Control.
		LCD_WriteReg(0x6a,0x0000);	//Vertical Srcoll Control.
		LCD_WriteReg(0x80,0x0000);	//Display Position? Partial Display 1.
		LCD_WriteReg(0x81,0x0000);	//RAM Address Start? Partial Display 1.
		LCD_WriteReg(0x82,0x0000);	//RAM Address End-Partial Display 1.
		LCD_WriteReg(0x83,0x0000);	//Displsy Position? Partial Display 2.
		LCD_WriteReg(0x84,0x0000);	//RAM Address Start? Partial Display 2.
		LCD_WriteReg(0x85,0x0000);	//RAM Address End? Partial Display 2.
		LCD_WriteReg(0x90,(0<<7)|(16<<0));	//Frame Cycle Contral.(0x0013)
		LCD_WriteReg(0x92,0x0000);	//Panel Interface Contral 2.(0x0000)
		LCD_WriteReg(0x93,0x0001);	//Panel Interface Contral 3.
		LCD_WriteReg(0x95,0x0110);	//Frame Cycle Contral.(0x0110)
		LCD_WriteReg(0x97,(0<<8));	//
		LCD_WriteReg(0x98,0x0000);	//Frame Cycle Contral.
		LCD_WriteReg(0x07,0x0173);	//(0x0173)
	}
	else if(DeviceCode==0x4531)
	{		
		LCD_WriteReg(0x00,0x0001);
	    LCD_WriteReg(0x10,0x0628);
	    LCD_WriteReg(0x12,0x0006);
	    LCD_WriteReg(0x13,0x0A32);
	    LCD_WriteReg(0x11,0x0040);
	    LCD_WriteReg(0x15,0x0050);
	    LCD_WriteReg(0x12,0x0016);
	    Delay(10);
	    LCD_WriteReg(0x10,0x5660);
	    Delay(10);
	    LCD_WriteReg(0x13,0x2A4E);
	    LCD_WriteReg(0x01,0x0100);
	    LCD_WriteReg(0x02,0x0300);
	    LCD_WriteReg(0x03,0x1030);
	    LCD_WriteReg(0x08,0x0202);
	    LCD_WriteReg(0x0A,0x0000);
	    LCD_WriteReg(0x30,0x0000);
	    LCD_WriteReg(0x31,0x0402);
	    LCD_WriteReg(0x32,0x0106);
	    LCD_WriteReg(0x33,0x0700);
	    LCD_WriteReg(0x34,0x0104);
	    LCD_WriteReg(0x35,0x0301);
	    LCD_WriteReg(0x36,0x0707);
	    LCD_WriteReg(0x37,0x0305);
	    LCD_WriteReg(0x38,0x0208);
	    LCD_WriteReg(0x39,0x0F0B);
	    Delay(10);
	    LCD_WriteReg(0x41,0x0002);
	    LCD_WriteReg(0x60,0x2700);
	    LCD_WriteReg(0x61,0x0001);
	    LCD_WriteReg(0x90,0x0119);
	    LCD_WriteReg(0x92,0x010A);
	    LCD_WriteReg(0x93,0x0004);
	    LCD_WriteReg(0xA0,0x0100);
	    Delay(10);
	    LCD_WriteReg(0x07,0x0133);
	    Delay(10);
	    LCD_WriteReg(0xA0,0x0000);
	    Delay(10);
	} 							 
  	for(i=50000;i>0;i--);
	LCD_Clear(WHITE);
}  	
  /********************************************* 
  **               硬件连接说明             ** 
  ** STM32                         ili9481    ** 
  ** PE/PD(FSMC_D0-15) <---->      DB0~15     **     
  ** PD4 (FSMC_NOE)    <---->      nRD        ** 
  ** PD5 (FSMC_NWE)    <---->      nWR        ** 
  ** PD7 (FSMC_NE1)    <---->      nCS        **       
  ** PD11(FSMC_A23)    <---->      RS         ** 
  ** PC1              <---->       nReset     ** 
  PD.14(D0), PD.15(D1), PD.00(D2), PD.01(D3), PD.08(D13), PD.09(D14), PD.10(D15),
  PD.04(RD), PD.05(WR), PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8),
  PE.12(D9), PE.13(D10), PE.14(D11), PE.15(D12)
  *********************************************/

//设置窗口
//入口参数: x0 y0,为显示窗口左上角坐标;x1,y1为显示窗口右下角坐标。
//说明:该函数设置TFT模块的显示窗口。
void TFT_window(unsigned char x0,unsigned int y0,unsigned char x1,unsigned int y1)
{
	LCD_WriteReg(0x0050,x0);//水平起始位置
	LCD_WriteReg(0x0051,x1);//水平终止位置
	LCD_WriteReg(0x0052,y0);//垂直起始位置
	LCD_WriteReg(0x0053,y1);//垂直终止位置
	LCD_WriteReg(0x0020,x0);//设置X坐标位置
	LCD_WriteReg(0x0021,y0);//设置Y坐标位置 
	LCD_WriteRAM_Prepare();//LCD_WriteCMD(GRAMWR);
}
   

⌨️ 快捷键说明

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