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

📄 test1.c

📁 arm开发精彩例程全包括
💻 C
字号:
#define IN_MAIN
#include "config.h"
#include "Enhance_GPIO\Enhance_GPIO.h"					//使用增强性GPIO

#pragma import(__use_no_semihosting_swi)	//don't delete this line
void  IRQ_Exception(void)
{
}


#include "ASIIC_TEXT.h"
#include "GB_TEXT.h"
#define NOP() delayxx()

#define pgm_read_word *(unsigned char *)

#define DATA_PORT  FIO0PIN0 

#define  LCD_CS_BIT 18   //  LCMPIN_5
#define  LCD_RS_BIT 19   //  LCMPIN_6
#define  LCD_WR_BIT 20   //  LCMPIN_7
#define  LCD_RD_BIT  21  //  LCMPIN_8
#define  LCD_RST_BIT 22  //  LCMPIN_9

//#define  LCDDI  20   //P0.20   D/I为1表示数据传送, 为0表示命令传送;
//#define  LCDRW  20   //P1.20   R/W为0进行写操作,为1时进行读操作;
//#define  LCDE   21   //P1.21   读写脉冲;

#define BUS_NO 0
#define	 OutData(dat)	FIO0PIN0=dat;delayxx() //IO1CLR = 0xFF<<BUS_NO; IO1SET = (dat&0xff)<<BUS_NO;delayxx()
#define  DATA_INPUT()   FIO0SET = (0xFF<<BUS_NO);  FIO0DIR = IO0DIR &(~(0xFF<<BUS_NO));delayxx()
#define  DATA_OUTPUT()  FIO0DIR =FIO0DIR|(0xff<<BUS_NO);	FIO0SET = (0xFF<<BUS_NO);delayxx()
#define  DATA_PIN      (FIO0PIN0)  //delayxx()



#define LCD_CS_H() FIO0SET |=( 1<<LCD_CS_BIT)
#define LCD_CS_L() FIO0CLR |=(1<<LCD_CS_BIT)

#define LCD_RS_H() FIO0SET |= 1<<LCD_RS_BIT
#define LCD_RS_L() FIO0CLR |=(1<<LCD_RS_BIT)

#define LCD_WR_H() FIO0SET |= 1<<LCD_WR_BIT
#define LCD_WR_L() FIO0CLR |=(1<<LCD_WR_BIT)

#define LCD_RD_H() FIO0SET |= 1<<LCD_RD_BIT
#define LCD_RD_L() FIO0CLR |=(1<<LCD_RD_BIT)

#define LCD_RST_H()  FIO0SET |= 1<<LCD_RST_BIT
#define LCD_RST_L()  FIO0CLR |=(1<<LCD_RST_BIT)


#define PORT_INI() {\
						DATA_INPUT();\
						LCD_CS_H();\
						LCD_RS_H();\
						LCD_WR_H();\
						LCD_RD_H();\
						LCD_RST_L();\
						FIO0DIR |= 1<<LCD_CS_BIT;\
						FIO0DIR |= 1<<LCD_RS_BIT;\
						FIO0DIR |= 1<<LCD_WR_BIT;\
						FIO0DIR |= 1<<LCD_RD_BIT;\
						FIO0DIR |= 1<<LCD_RST_BIT;\
						}


void delayxx(void)
{
    unsigned char  i;
    i =3;
    while(--i);
}


void LCD_WR_REG(unsigned char index,unsigned int val)
{
	LCD_CS_L();
	LCD_RS_L();
	DATA_OUTPUT();
	DATA_PORT = 0;
	LCD_WR_L();
	NOP();
	NOP();
	LCD_WR_H();
	DATA_PORT = (unsigned char)index;
	LCD_WR_L();
	NOP();
	NOP();
	LCD_WR_H();
	LCD_RS_H();
	DATA_PORT = (unsigned char)(val>>8);
	LCD_WR_L();
	NOP();
	NOP();
	LCD_WR_H();
	DATA_PORT = (unsigned char)val;
	LCD_WR_L();
	NOP();
	NOP();
	LCD_WR_H();
	LCD_CS_H();
}

unsigned int LCD_RD_REG(unsigned char index)
{
	unsigned int ret;
	LCD_CS_L();
	LCD_RS_L();
	DATA_OUTPUT();
	DATA_PORT = 0;
	LCD_WR_L();
	NOP();
	NOP();
	LCD_WR_H();
	DATA_PORT = (unsigned char)index;
	LCD_WR_L();
	NOP();
	NOP();
	LCD_WR_H();
	LCD_RS_H();
	DATA_INPUT();
	LCD_RD_L();
	NOP();
	NOP();
	ret = DATA_PIN;
	LCD_RD_H();
	ret <<= 8;
	LCD_RD_L();
	NOP();
	NOP();
	ret += DATA_PIN;
	LCD_RD_H();
	LCD_CS_H();
	return ret;
}

void LCD_Write_Start()
{
	LCD_CS_L();
	LCD_RS_L();
	DATA_OUTPUT();
	DATA_PORT = 0x00;
	LCD_WR_L();
	NOP();
	NOP();
	LCD_WR_H();
	DATA_PORT = 0x22;
	LCD_WR_L();
	NOP();
	NOP();
	LCD_WR_H();
	LCD_RS_H();
}

void LCD_Write_Data(unsigned int val)
{
	DATA_PORT = (unsigned char)val;
	LCD_WR_L();
	NOP();
	NOP();
	LCD_WR_H();
	DATA_PORT = (unsigned char)(val>>8);
	LCD_WR_L();
	NOP();
	NOP();
	LCD_WR_H();
}

void LCD_Write_End()
{
	LCD_CS_H();
}

void LCD_Read_Start()
{
	LCD_CS_L();
	LCD_RS_L();
	DATA_OUTPUT();
	DATA_PORT = 0x00;
	LCD_WR_L();
	NOP();
	NOP();
	LCD_WR_H();
	DATA_PORT = 0x22;
	LCD_WR_L();
	NOP();
	NOP();
	LCD_WR_H();
	LCD_RS_H();
	DATA_INPUT();
	LCD_RD_L();//dummy read
	NOP();
	LCD_RD_H();
	NOP();
	NOP();
}

unsigned int LCD_RD_DATA()
{
	unsigned int ret;
	LCD_RD_L();
	NOP();
	NOP();
	NOP();
	ret = DATA_PIN;
	LCD_RD_H();
	ret <<= 8;
	LCD_RD_L();
	NOP();
	NOP();
	ret += DATA_PIN;
	LCD_RD_H();
	NOP();
	NOP();
	return ret;	
}

void LCD_Read_End()
{
	LCD_CS_H();
}
void DelayNS (uint32 uiDly)
{
    uint32 i;
    
    for (; uiDly > 0; uiDly--){
        for(i = 0; i < 5000; i++);
    }
}
void delay_Nms(unsigned int n)
{
	while(n--)DelayNS(1);
}

#define Display_ON() LCD_WR_REG(0x07,0x0173)
#define Display_OFF() LCD_WR_REG(0x07,0x0000)

void LCD_Init()
{  
    
    PINSEL0= 0;
    PINSEL1 = PINSEL1 & (~(0x3FFFFF));                                 /*  将P0.17-P0.20设置为GPIO     */
    SCS     = 0x01;                                                     /*  设定为高速GPIO模式          */
    FIO0DIR =0X7FFFFFF;// LED1 | LED2 | LED3 | LED4;                                /*  设置LED控制口为输出         */
    FIO0SET =0X7FFFFFF;// LED1 | LED2 | LED3 | LED4;                                /*  LED1熄灭                    */
    
	PORT_INI();

	LCD_RST_L();
	delay_Nms(10);
	LCD_RST_H();

	//delay 10ms
	delay_Nms(10);

	//initializing funciton 1
	LCD_WR_REG(0xe5,0x8000);
	LCD_WR_REG(0x00,0x0001);
	LCD_WR_REG(0x2b,0x0010);
	LCD_WR_REG(0x01,0x0100);
	LCD_WR_REG(0x02,0x0700);
	LCD_WR_REG(0x03,0x1230);
	LCD_WR_REG(0x04,0x0000);
	LCD_WR_REG(0x08,0x0202);
	LCD_WR_REG(0x09,0x0000);
	LCD_WR_REG(0x0a,0x0000);
	LCD_WR_REG(0x0c,0x0000);
	LCD_WR_REG(0x0d,0x0000);
	LCD_WR_REG(0x0f,0x0000);
	LCD_WR_REG(0x50,0x0000);
	LCD_WR_REG(0x51,0x00ef);
	LCD_WR_REG(0x52,0x0000);
	LCD_WR_REG(0x53,0x013f);
	LCD_WR_REG(0x60,0x2700);
	LCD_WR_REG(0x61,0x0001);
	LCD_WR_REG(0x6a,0x0000);
	LCD_WR_REG(0x80,0x0000);
	LCD_WR_REG(0x81,0x0000);
	LCD_WR_REG(0x82,0x0000);
	LCD_WR_REG(0x83,0x0000);
	LCD_WR_REG(0x84,0x0000);
	LCD_WR_REG(0x85,0x0000);
	LCD_WR_REG(0x90,0x0010);
	LCD_WR_REG(0x92,0x0000);
	LCD_WR_REG(0x93,0x0003);
	LCD_WR_REG(0x95,0x0110);
	LCD_WR_REG(0x97,0x0000);
	LCD_WR_REG(0x98,0x0000);

	//power setting function
	LCD_WR_REG(0x10,0x0000);
	LCD_WR_REG(0x11,0x0000);
	LCD_WR_REG(0x12,0x0000);
	LCD_WR_REG(0x13,0x0000);
	delay_Nms(200);
	LCD_WR_REG(0x10,0x17b0);
	LCD_WR_REG(0x11,0x0004);
	delay_Nms(50);
	LCD_WR_REG(0x12,0x013e);
	delay_Nms(50);
	LCD_WR_REG(0x13,0x1f00);
	LCD_WR_REG(0x29,0x000f);
	delay_Nms(50);
	LCD_WR_REG(0x20,0x0000);
	LCD_WR_REG(0x21,0x0000);

	//initializing function 2

	LCD_WR_REG(0x30,0x0204);
	LCD_WR_REG(0x31,0x0001);
	LCD_WR_REG(0x32,0x0000);
	LCD_WR_REG(0x35,0x0206);
	LCD_WR_REG(0x36,0x0600);
	LCD_WR_REG(0x37,0x0500);
	LCD_WR_REG(0x38,0x0505);
	LCD_WR_REG(0x39,0x0407);
	LCD_WR_REG(0x3c,0x0500);
	LCD_WR_REG(0x3d,0x0503);

	//display on
	LCD_WR_REG(0x07,0x0173);
	//Display_ON();
}


void LCD_Set_XY(unsigned int x, unsigned int y)
{
	LCD_WR_REG(0x20,x);
	LCD_WR_REG(0x21,y);
}

void LCD_Set_Window(unsigned int startX,unsigned int startY,unsigned int endX,unsigned int endY)
{
	LCD_Set_XY(startX,startY);
	LCD_WR_REG(0x50,startX);
	LCD_WR_REG(0x52,startY);
	LCD_WR_REG(0x51,endX);
	LCD_WR_REG(0x53,endY);	
}

//***********该程序将一BYTE的数据写到LCD缓存中,有两个输入参数LINE_DATA为要显示的数据,COLOR为要显示的颜色*******//
void Write_Line (unsigned char Byte,unsigned int Color)
     {     
	  unsigned char l,k;
      l = 0x80 ;
	  LCD_Write_Start();
	  for(k=0;k<8;k++)
		 { 
		   if (Byte & l) LCD_Write_Data(Color); 
		   else  LCD_Write_Data(0xffff); 
		   l = l >> 1   ; 
		 }
      }
void Write_Word (unsigned int Word ,unsigned int Color)
     {
	  unsigned int l;
	  unsigned char k;
      l = 0x8000 ;
	  LCD_Write_Start();
	  for(k=0;k<16;k++)
		 { 
		   if (Word & l) LCD_Write_Data(Color); 
		   else  LCD_Write_Data(0xffff); 
		   l = l >> 1   ; 
		 }
      }
//***********//  //**********//
/*void Write_ASIIC (unsigned int Color ,unsigned char ASIIC_X ,unsigned char ASIIC_Y ,unsigned char ASIIC ,unsigned char *ASIIC_Ip)
     {
	  unsigned int j,k;
      unsigned char l,ASIIC_Data ;
      for(j=0;j<16;j++)
	     { LCD_Set_XY( ASIIC_X*8, ASIIC_Y*16+j ); 
		   Write_Line (pgm_read_word( ASIIC*16 + j),Color);
	      }
      }
*/
void ASIIC_Test (unsigned char *Table ,unsigned int Color)
{
  unsigned char k,l,m;
     for ( k=0;k<20;k++ )
     {
	 for ( l=0;l<30;l++ )
	     {
	      for ( m=0;m<16;m++ )
	          {
	          LCD_Set_XY( l*8, k*16+m );  
	          Write_Line (*(Table++ ),Color);
	           } 
		   }
	 }
}  
void Write_Test (unsigned int Color ,unsigned char ASIIC_X ,unsigned char ASIIC_Y )
     {
	  unsigned char j,k,l,ASIIC;
	  ASIIC = 0X80  ;
	  for (j=0;j<8;j++)
	      {
	        LCD_Set_XY( ASIIC_X*8, ASIIC_Y*16+j);
            l = 0x80 ;
			LCD_Write_Start();
	        for(k=0;k<8;k++)
		       { if (ASIIC & l) LCD_Write_Data(Color); 
			    else  LCD_Write_Data(0xffff); 
				l = l >> 1   ; 
			    }
            ASIIC =  ASIIC>>1   ;
	       }
	  ASIIC = 0X01  ;
		   for (j=8;j<16;j++)
	      {
	        LCD_Set_XY( ASIIC_X*8, ASIIC_Y*16+j);
            l = 0x80 ;
			LCD_Write_Start();
	        for(k=0;k<8;k++)
		       { if (ASIIC & l) LCD_Write_Data(Color); 
			    else  LCD_Write_Data(0xffff); 
				l = l >> 1   ; 
			    }
            ASIIC =  ASIIC<<1   ;
	       }
      }


void LCD_test()
{
	unsigned int i,j,k;
	LCD_Set_XY (0x0000,0x0000);
	LCD_Write_Start();
	k = 0x0000  ;
	for(i=0;i<320;i++)
	{  
		for(j=0;j<240;j++)
		{
		 k = k+ 0x0001 ;
         LCD_Write_Data(k);
		 
		 }
	}
	LCD_Write_End();
}
void LCD_test1()
{
	unsigned int i,j,k;
	LCD_Set_XY (0x0000,0x0000);
	LCD_Write_Start();
	k = 0x0000  ;
	for(i=0;i<320;i++)
	{  
		for(j=0;j<240;j++)
		{
         LCD_Write_Data(k);
		 }
     k = k+0x000f  ;
	}
	LCD_Write_End();
}
void LCD_test2()
     {
	 unsigned int i;
	 unsigned  char j,k,l;
	 LCD_Set_XY (0x0000,0x0000);
     LCD_Write_Start();
	 k = 0;
	for(i=0;i<320;i++)
	   {
		for(j=0;j<30;j++)
		   {
		      for(l=0;l<8;l++)
		         {
	              LCD_Write_Data(k);
		         }
             k++ ;
			 }
	     }
	 }

void LCD_Test3 (void)
{
  unsigned int Color = 0x0000 ;
  unsigned char k,l,m;
  for ( k=0;k<20;k++ )
     {
	 for ( l=0;l<30;l++ )
	     {
	      for ( m=0;m<16;m++ )
	          {
	          LCD_Set_XY( l*8, k*16+m );  
	          Write_Line (0XFF ,Color);
	           } 
          Color = Color + 0x00f  ;
		   }
	 }
}  
void LCD_Test4 (void)
{
  unsigned int Color = 0x0000 ;
  unsigned int  l;
  unsigned char k;
  for ( k=0;k<30;k++ )
     {
	 for ( l=0;l<320;l++ )
	     {
	          LCD_Set_XY( k*8, l );  
	          Write_Line (0XFF ,Color);
	      } 
          Color = Color + 0x00f  ;
	 }
}
void LCD_Test5 (void)
{
  unsigned int Color = 0x0000 ;
  unsigned char k,l,m;
  for ( k=0;k<20;k++ )
     {
	 for ( l=0;l<15;l++ )
	     {
	      for ( m=0;m<16;m++ )
	       Write_Word (0Xffff ,Color);
           Color = Color + 0x00f  ;
		   }
	 }
}  
void LCD_test6(void)
{   unsigned char i,j,l ;
	unsigned int k;
	LCD_Set_XY (0x0000,0x0000);
	LCD_Write_Start();
	k = 0x0000  ;
	for(i=0;i<40;i++)
	   {  
	    for( l=0;l<8;l++)
		   {
		    for(j=0;j<240;j++)
		       {
                 LCD_Write_Data(k);
		       }
		    }
     k = k+0x000f  ;
	}
	LCD_Write_End();
}
void LCD_Test7 (void)
{
  unsigned int Color = 0x0000 ;
  unsigned char k,l,m;
  for ( k=0;k<20;k++ )
     {
	 for ( l=0;l<15;l++ )
	     {
	      for ( m=0;m<16;m++ )
	       Write_Word (0Xffff ,Color);
		  }
     Color = Color + 0x00f  ;
	 }
}  

/*unsigned char LCD_DrawPicture(unsigned char startX, unsigned char startY, unsigned int *pic, unsigned char sizeX, unsigned char sizeY)
{
	unsigned int endX,endY;
	unsigned long totalPixels = (unsigned long)sizeX * (unsigned long)sizeY;
	endX = startX+sizeX-1;
	endY = startY+sizeY-1;
	if(endX>239 || endY>319)return 1;
	LCD_Set_Window(startX,startY,endX,endY);
	LCD_Write_Start();
	while(totalPixels--)LCD_Write_Data(pgm_read_word(pic++));
	LCD_Write_End();
	return 0;
}
*/
  unsigned char LCD_DrawPicture2(unsigned char startX, unsigned char startY, unsigned int *pic, unsigned char sizeX, unsigned char sizeY)
  {
	unsigned int i,j;

	if((startX+sizeX)>240 || (startY+sizeY)>320)return 1;

	for (j = 0; j<sizeY; j++)
	{
    	LCD_Set_XY(startX,startY);
		LCD_Write_Start();
    	for(i = 0; i<sizeX; i++)
    	{
			LCD_Write_Data(*(pic++));
    	}
    	startY++;//换行
  	}
	LCD_Write_End();
	return 0;
  }


void Main(void )
{   
    unsigned char  LCD_X ,LCD_Y ,Again;
	unsigned int   Color  ;
	Again = 200 ;
   TargetInit(VPBDIV_DATA, PLLCFG_DATA, MAMTIM_DATA);	// don't delete
	while((PLLSTAT & (1 << 10)) == 0);					// can delete
	LCD_Init();
while (1) 
   { 
	LCD_test();
	delay_Nms(2000);
	delay_Nms(2000);
	LCD_test2();
    delay_Nms(2000);
	delay_Nms(2000);
	LCD_Test3();
	delay_Nms(2000);
	delay_Nms(2000);
	LCD_Test4();
	delay_Nms(2000);
	delay_Nms(2000);
	Color = 0x0001 ;
	LCD_Test5();
	delay_Nms(2000);
	delay_Nms(2000);
	LCD_test6 () ;
	delay_Nms(2000);
	delay_Nms(2000);
	LCD_Test7();
	delay_Nms(2000);
	delay_Nms(2000);
	Color = 0x0001 ;
	for (LCD_Y = 0 ; LCD_Y<20 ; LCD_Y ++ )
	     {
	     for (LCD_X = 0 ; LCD_X<30 ; LCD_X ++ )
		     {
	          Write_Test (Color,LCD_X,LCD_Y)   ; 
			  Color = Color + 0x001f           ;   
			   }
		  }
	delay_Nms(2000);
    
	Color  = 0x0001; 
	Again = 100 ; 
  while(Again)
       { 
	     ASIIC_Test ((unsigned char *)ASIIC_TEXT,Color) ;
         delay_Nms(20);
	     Color = Color+0X0F ;
	    Again = Again - 1 ;
       }
	LCD_test();
	delay_Nms(2000);
	delay_Nms(2000);
	LCD_test2();
    delay_Nms(2000);
	delay_Nms(2000);
	LCD_Test3();
	delay_Nms(2000);
	delay_Nms(2000);
	LCD_Test4();
	delay_Nms(2000);
	delay_Nms(2000);
	Color = 0x0001 ;
	LCD_Test5();
	delay_Nms(2000);
	delay_Nms(2000);
	LCD_test6();
	delay_Nms(2000);
	delay_Nms(2000);
	LCD_Test7();
	delay_Nms(2000);
	delay_Nms(2000);
	Color = 0x0001 ;
	for (LCD_Y = 0 ; LCD_Y<20 ; LCD_Y ++ )
	     {
	     for (LCD_X = 0 ; LCD_X<30 ; LCD_X ++ )
		     {
	          Write_Test (Color,LCD_X,LCD_Y)   ; 
			  Color = Color + 0x001f           ;   
			   }
		  }
   delay_Nms(2000);
   Color = 0x0001 ;
   Again = 100 ;
   while(Again)
        { 
	     ASIIC_Test ((unsigned char *)GB_TEXT,Color) ;
         delay_Nms(20);
	     Color = Color+0X0F ;
	     Again = Again - 1 ;
         }
     }
}

⌨️ 快捷键说明

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