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

📄 main.c

📁 LPC2114drive TFT2.4" ILI9320的屏驱动
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
/****************************************************************************
* 文件名:OSRUN.C
* 功能:多任务切换工作期间.
* 说明:将跳线器JP3短接。
****************************************************************************/
 
  #include  "config.h"

  #define   _RST 	(1<<23)			/* P0.23 */
  #define   _CS1 	(1<<24)			/* P0.24 */
  #define   RS	 	(1<<25)			/* P0.25 */
  #define   _WR 	(1<<26)			/* P0.26 */
  #define   _RD 	(1<<27)			/* P0.27 */ 
  
  #define   Data0_17	(1<<17)
  #define   Data0_16	(1<<16)
  #define   Data0_15	(1<<15)
  #define   Data0_14	(1<<14)
  #define   Data0_13	(1<<13)
  #define   Data0_12	(1<<12)
  #define   Data0_11	(1<<11)
  #define   Data0_10	(1<<10)
  #define   Data0_9	(1<<9)
  #define   Data0_8	(1<<8)
  #define   Data0_7	(1<<7)
  #define   Data0_6	(1<<6)
  #define   Data0_5	(1<<5)
  #define   Data0_4	(1<<4)
  #define   Data0_3	(1<<3)
  #define   Data0_2	(1<<2)  
  #define   Data0_1	(1<<1)
  #define   Data0_0	(1<<0)
  #define   DataPort    (Data0_17|Data0_16|Data0_15|Data0_14|Data0_13|Data0_12|Data0_11|Data0_10|Data0_9|Data0_8|Data0_7|Data0_6|Data0_5|Data0_4|Data0_3|Data0_1|Data0_3|Data0_0)

  #define   DisplayCol  240   
  #define   DisplaySeg  320 
//  unsigned int xdata, *ptr;
  unsigned int page,seg;
   
  uint32 *TCBTaskCur;
  uint32 TaskState;
  uint32 TaskNum; 
  uint32 IOBuf;  
  uint8  count;
  unsigned char step=0;
 
void delay(unsigned int param)
{
   unsigned int x,y;
   for(y=0;y<param;y++)
   for(x=0;x<1000;x++);
}

void LCD_CmdWrite(unsigned char Command)
{
    IOCLR = 0x3ffff;  		//DataPort
    IOCLR = RS|_CS1;
    
    delay(0);    
    IOSET = Command;
    IOCLR = _WR;
    delay(0);
    IOSET = _WR;
    delay(0);
    IOSET = RS;
    delay(0);    
} 

void LCD_DataWrite(unsigned int OutData)
{
    IOCLR = 0x0ffff;    		
    IOSET = OutData;	//DataPort=OutData;
    
    IOCLR = _WR;
    delay(0);    
    IOSET = _WR;
    delay(0);
    IOSET = _CS1;
} 

void WriteReg(unsigned int Command, unsigned int OutData)
{
   LCD_CmdWrite(Command);
   LCD_DataWrite(OutData);
}

void LCD_Reset(void)
{
    IOSET = _CS1;
    IOSET = _RST;
    IOSET = _RD;

    delay(10);
    IOCLR = _RST;
    delay(200);
    IOSET = _RST;
    delay(10);
}

void LCD_Initial(void)       //initial code 1
{
	WriteReg(0x0000,0x0001); 
  	WriteReg(0x0001,0x0100); 
	WriteReg(0x0002,0x0700); 
	WriteReg(0x0003,0x1028); 
	WriteReg(0x0004,0x0000);
	 
	WriteReg(0x0008,0x0202); 
	WriteReg(0x0009,0x0000); 
	WriteReg(0x000a,0x0000); 
	WriteReg(0x000c,0x0000); 
	WriteReg(0x000d,0x0000); 
	WriteReg(0x000f,0x0000);
	 
	WriteReg(0x0010,0x0000); 
	WriteReg(0x0011,0x0007); 
	WriteReg(0x0012,0x0000); 
	WriteReg(0x0013,0x0000); 
	delay(200);
	WriteReg(0x0010,0x17b0); 
	WriteReg(0x0011,0x0037); 
	delay(50);
	WriteReg(0x0012,0x013e); 
	WriteReg(0x0013,0x1700); 
	WriteReg(0x0029,0x0009); 
	WriteReg(0x0020,0x0000); 
	WriteReg(0x0021,0x0000); 
	WriteReg(0x0030,0x0007); 
	WriteReg(0x0031,0x0403); 
	WriteReg(0x0032,0x0404); 
	WriteReg(0x0035,0x0002); 
	WriteReg(0x0036,0x0707); 
	WriteReg(0x0037,0x0606); 
	WriteReg(0x0038,0x0106); 
	WriteReg(0x0039,0x0007); 
	WriteReg(0x003c,0x0700); 
	WriteReg(0x003d,0x0707); 
	
//------------------ Set GRAM area -------------//
	WriteReg(0x0050, 0x0000);	    	// Horizontal GRAM Start Address
	WriteReg(0x0051, 0x00EF);	    	// Horizontal GRAM End Address
	WriteReg(0x0052, 0x0000);	    	// Vertical GRAM Start Address
	WriteReg(0x0053, 0x013F);	    	// Vertical GRAM Start Address
	
	WriteReg(0x0060, 0x2700);	    	// Gate Scan Line
	WriteReg(0x0061, 0x0001);	    	// NDL,VLE, REV
	WriteReg(0x006A, 0x0000);	    	// set scrolling line
	//-------------- Partial Display Control -------//
	WriteReg(0x0080, 0x0000);
	WriteReg(0x0081, 0x0000);
	WriteReg(0x0082, 0x0000);
	WriteReg(0x0083, 0x0000);
	WriteReg(0x0084, 0x0000);
	WriteReg(0x0085, 0x0000);
	//-------------- Panel Control -----------------//
	WriteReg(0x0090, 0x0010);
	WriteReg(0x0092, 0x0000);
	WriteReg(0x0093, 0x0003);
	WriteReg(0x0095, 0x0110);
	WriteReg(0x0097, 0x0000);
	WriteReg(0x0098, 0x0000);
	//Delay(200);
	WriteReg(0x0007, 0x0173);	    	// 65K color and display ON
}	

//----------------------------------------------------------------------

void Checker(unsigned int param1,unsigned int param2) //Full on,off,checkerboard,bar
{
   LCD_CmdWrite(0x0022);
   for(page=0;page<DisplayCol;page++)
       {
	for(seg=0;seg<DisplaySeg;seg++)
            {
	     if(seg%2) 
	       {
		LCD_DataWrite(param1);
		}
            else 
	       {
		LCD_DataWrite(param2);
    		}
	     }
	}
}

void test(void)  //test
{
    for(page=0;page<DisplayCol;page++)
    {
	for(seg=0;seg<DisplaySeg;seg++)
	 {
          if (page<3) 
	     {
	     LCD_DataWrite(0xffff);
	     delay(10);
	     }
          else 
	     LCD_DataWrite(0x0000);
	 }
    }
}

void WriteGrid1(void)
{
  for(page=0;page<DisplayCol;page++)
     {
      for(seg=0;seg<DisplaySeg;seg++)
	 {
	 switch((page/16+seg/16)%3)
            {
             case 0: LCD_DataWrite(0x001f);break;  //red
             case 1: LCD_DataWrite(0x07e0);break;  //green
             case 2: LCD_DataWrite(0xf800);break;  //blue
             }
	 }
      }
}

void WriteBar1(void)
{
    unsigned char i;
    unsigned int m;
    LCD_CmdWrite(0x0022);
    for(i=0;i<80;i++)
	  {
	   for(m=0;m<240;m++)
	   LCD_DataWrite(0xf800);
	   }
    for(i=0;i<80;i++)
	  {
	   for(m=0;m<240;m++)
	   LCD_DataWrite(0x07e0);
	   }
    for(i=0;i<80;i++)
	  {
	   for(m=0;m<240;m++)
	   LCD_DataWrite(0x001f);
	   }
    for(i=0;i<80;i++)
	  {
	   for(m=0;m<240;m++)
	   LCD_DataWrite(0xffff);
	   }
}

//============================================
void Field(void)
{
    unsigned char x;
    unsigned int y;
    LCD_CmdWrite(0x0022);
	for(y=0;y<320;y++)
	   for(x=0;x<240;x++)
	      {
	      if((y==0)||(y==1)||(y==158)||(y==159)||(y==318)||(y==319)){LCD_DataWrite(0xffff);}
		else if((x==0)||(x==1)||(x==118)||(x==119)||(x==238)||(x==239)){LCD_DataWrite(0xffff);}
		else{LCD_DataWrite(0x0000); }
	       }
}

void WR_DATA(unsigned char temp1, unsigned char temp2)
{
    IOSET = RS;
    IOSET = _CS1;
    IOCLR = 0x03ff; 		//DataPort=temp1;
    IOSET = temp1;
    
    IOCLR = _CS1;
    IOCLR = 0x03ff;		//DataPort=temp2;
    IOSET = temp2;
    IOCLR = _WR;
    IOSET = _WR;
    IOSET = _CS1;
} 

//========================================================
void showpicture1()
{
    unsigned char *p;
    unsigned int i,j,temp1,temp2;  
    WriteReg(0x0020,0x0000);   
    WriteReg(0x0021,0x0000);  
    LCD_CmdWrite(0x0022);

    for(i=0;i<320;i++)
    {
       for(j=0;j<240;j++)
	{
	temp1=*p++;
       	temp2=*p++;
	WR_DATA(temp1,temp2);
	}
    }
} 
      
/****************************************************************************
* 名称:HC595_SendDat()
* 功能:向74HC595发送一字节数据
* 入口参数:dat		要发送的数据
* 出口参数:无
* 说明:发送数据时,高位先发送。
****************************************************************************/  
void __irq  IRQ_Time0(void)  
{  
   T0IR = 0X01;
   VICVectAddr = 0x00; 
}

/****************************************************************************
* 名称:main()
* 功能:掉电测试。  
* 说明:在STARTUP.S文件中使能IRQ中断(清零CPSR中的I位)。
****************************************************************************/
int  main(void)
{ 
   PINSEL0 = 0x00000000;		            
   PINSEL1 = 0x00000000;			// 设置MAT0.0连接到P0.22                
   IODIR =  _RST|_CS1|RS|_WR|_RD|DataPort; 

   delay(10); 
   LCD_Reset(); 
   LCD_Initial();
   while(1)
      {
	step = 0;
	for(step=0;step<8;step++)	
	{
	   switch(step)
	    {
		case 2: Checker(0xffff,0xffff);break;  // all on 
		case 0: Checker(0x0000,0x0000);break;  // all off 
		case 4: Checker(0x07e0,0x07e0);break;  // green
            	case 5: Checker(0x001f,0x001f);break;  // red 
		case 6: Checker(0xf800,0xf800);break;  // blue
            	case 1: Field(); break;                // Gird
		case 7: WriteBar1(); break;            // bar
		case 3: showpicture1(); break;         // bitbmp
		default: break;			       // Power_Off();		       
 	    }
	   delay(2000);
   	}
     }	   
   return(0);
}

/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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