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

📄 lcd_test.c

📁 嵌入式方面的一些简单程序
💻 C
字号:
#ifndef Lcd_Test_C
#define Lcd_Test_C
#include "2410addr.h"
#include "Def.h"
#include "LCD_test.h"
#include "Gui.h"
#include "Dma.h"
#include "GuiDeskTop.h"
#include "DeskTop.h"
#include "Word.h"
#include "Touch.h"

/*
//#define LCD_SetPixel(x,y)  PutPixel(x,y,penColor)
#define My_LCD_SetPixel(x,y)  My_PutTft16Bit_800480(x,y,penColor)
int penColor=0xf0caf0ca;
#define MODE_TFT_16BIT_800480 1
//void _PutTft16Bit_800480(U32,U32,U32);
void(*PutPixel)(U32,U32,U32);
int dmaDone;
void Dma();
static void __irq Dma0Done(void);
typedef struct  point{
	int x;
	int y;
};
void Glib_Init(int type)
{
	switch(type)
	{
	case MODE_TFT_16BIT_800480:
		// PutPixel=_PutTft16Bit_800480;
		 Uart_Printf("\n\nsuccessful!") ;
		 //GetPixel=_GetTFt16Bit_800480;
		 break;
	default:
		break;
	}
}

void _PutTft16Bit_800480(U32 x,U32 y,U32 c)
{
	if(x<SCR_XSIZE_TFT_800480&&y<SCR_YSIZE_TFT_800480)
		frameBuffer16BitTft800480[(y)][(x)/2]=frameBuffer16BitTft800480[(y)][x/2]&~(0xffff0000>>((x)%2*16))|((c&0x0000ffff)<<((2-1-((x)%2))*16));
}
void My_PutTft16Bit_800480(U32 x,U32 y,U32 c)
{
	if(x<SCR_XSIZE_TFT_800480&&y<SCR_YSIZE_TFT_800480)
		My_frameBuffer16BitTft800480[(y)][(x)]=c;//[(y)][(x)/2]=My_frameBuffer16BitTft800480[(y)][x/2]&~(0xffff0000>>((x)%2*16))|((c&0x0000ffff)<<((2-1-((x)%2))*16));
}


__inline void My_Clear()
{
	int i,j;
	for(i=0;i<SCR_YSIZE_TFT_800480;i++)
	{
		for(j =0;j<SCR_XSIZE_TFT_800480;j++)
    	{
			My_frameBuffer16BitTft800480[i][j] = 0xffffffff; 
    	}
    }
   // Dma();
    Uart_Printf("\nDMASend Clean_Sreen Success!\n");
}
__inline void Clean()
{
	int i;
	for(i = 0; i < SCR_XSIZE_TFT_800480*SCR_YSIZE_TFT_800480;i++)
       (*frameBuffer16BitTft800480)[i] = 0xffffffff;
}
__inline void Draw_line(int y,int x0,int x1)
{
	{
		int x;
		for(x=x0;x<=x1;++x)
		{
			LCD_SetPixel(x,y);
		}
	}
}
__inline void My_Draw_line_x3(int y,int x0,int x1)
{
	{
		int x;
		for(x=x0;x<=x1;++x)
		{
			My_LCD_SetPixel(x,y);
		}
	}
}
__inline void My_draw_line_x2(int y,int x0,int lenth)
{
    	{
		int x;
		x1=x0+lenth;
		for(x=x0;x<=x1;++x)
		{
			My_LCD_SetPixel(x,y);
		}
	}
}
__inline void my_draw_line_y3(int x,int y0,int y1)
{
    int y;
    for(y=y0;y<=y1;y++)
        My_LCD_SetPixel(x,y);
}
__inline void my_draw_line_y2(int x,int y0,int lenth)
{
    int y;
    int y1=y0+lenth;
    for(y=y0;y<=y1;y++)
        My_LCD_SetPixel(x,y);
}


__inline void Draw_rectangle(int x0,int y0,int x1,int y1)
{
	int i;
	for(i=y0;i<=y1;i++)
	    Draw_line(i,x0,x1);
}
__inline void My_Draw_rectangle(int x0,int y0,int x1,int y1)
{
	int i;
	for(i=y0;i<=y1;i++)
	    My_Draw_line(i,x0,x1);
}
__inline void My_Draw_rectangle_1(int x0,int y0,int lenthx,int lenthy)
{
	int i;
	int x1=x0+lenthx;
	int y1=y0+lenthy;
	for(i=y0;i<=y1;i++)
	    My_Draw_line(i,x0,x1);
}
__inline void my_draw_circle(point p,int r)
{
    int x,y;
    for((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y)<=r*r)
        My_LCD_SetPixel(x,y);
}
void Dma()
{
    pISR_DMA0 = (int)Dma0Done;
		//INTMSK  INT_DMA0  [17] = 0 : Service available
    rINTMSK = ~(BIT_DMA0);  
    
    dmaDone=0;
    //Draw_rectangle(0x00,0x00,0x50,0x50);
    rDISRC0 =(U32)My_frameBuffer16BitTft800480;//[0][0];
    rDISRCC0 = (0<<1)|(0<<0); // inc,AHB
    rDIDST0 =(U32)frameBuffer16BitTft800480;//[0][0];
    rDIDSTC0 = (0<<1)|(0<<0); // inc,AHB
    rDCON0 = (1<<31)|(1<<30)|(1<<29)|(1<<28)|(1<<27)|
    	        (0<<23)|(1<<22)|(2<<20)|(96000);
    		//HS,AHB,TC interrupt,whole, SW request mode,relaod off
    rDMASKTRIG0 = (1<<1)|1; //DMA on, SW_TRIG
	
	
    rINTMSK = BIT_ALLMSK;
    
}
static void __irq Dma0Done(void)
{

    ClearPending(BIT_DMA0);
    
    dmaDone=1;
}
Move(U32 x0,U32 y0,U32 x1,U32 y1)
{
    int i=1;
    for(;x1<SCR_XSIZE_TFT_800480;x0+=3,x1+=3)
    {
        My_Clear();
        //Clean();
        My_Draw_rectangle(x0,y0,x1,y1);
        
        Dma();
    }
}

__inline void _DrawCircle(int r,int x,int y)
{	
	int i,j;
	for(j=y-r;j<y+r;j++)
	{
		if(j<0x0||j>0x1e0)
			//continue;
		for(i=x-r;i<=x+r;i++)
		{
			if(i<0x0||i>0x320)
			//continue;
			if((i-x)*(i-x)+(j-y)*(j-y)<=r*r)
			LCD_SetPixel(i,j);
		}
	}
}

__inline void move(x0,y0,x1,y1)
{
	int y=0;
	while(1);
	{	
		penColor=0xfefefefe;
		_DrawHline(y0+y,x0,x1);
		penColor=0xf0caf0ca;
		_DrawHline(y1+y,x0,x1);
		y++;
	}
}

void LCD_2410_test()
{

    LCD_2410_Port_Init();
    LCD_2410_Init();
    LCD_2410_PowerEnable(0, 1);
    LCD_2410_EnvidOnOff(1);
    Glib_Init(MODE_TFT_16BIT_800480);
   // _DrawHline(0x00,0x50,0x100); 
   // _DrawJUXI(0x100,0x100,0x150,0x150);
    //move(0x100,0x100,0x150,0x150);
   //_DrawJUXI(0x150,0x150,0x200,0x250);
    My_Clear();
   // My_Clear();
    //My_Draw_rectangle(0x50,0x100,0x70,0x110);
   // Dma();
    
    My_Draw_rectangle(0x00,0x00,0x50,0x50);
    Dma();
    Move(0x00,0x00,0x50,0x50);
    //penColor=0xffffffff;
    //Draw_rectangle(0x00,0x00,0x150,0x150);
    My_Clear();
   // Dma();
    Uart_Printf("\n\nsuccessful!") ;
    //LCD_2410_Draw();
}

void LCD_2410_Port_Init()
{
    
    rGPCUP=0xffffffff; // Disable Pull-up register
    rGPCCON=0xaaaaaaaa; //Initialize VD[7:0],LCDVF[2:0],VM,VFRAME,VLINE,VCLK,LEND 
    rGPDUP=0xffffffff; // Disable Pull-up register
    rGPDCON=0xaaaaaaaa; //Initialize VD[23:8]
    //Uart_Printf("Initializing GPIO ports..........\n");
}


void LCD_2410_Init()
{
   // frameBuffer16BitTft800480=(U32 (*)[SCR_XSIZE_TFT_800480])LCDFRAMEBUFFER;
   // My_frameBuffer16BitTft800480=(U32 (*)[SCR_XSIZE_TFT_800480])LCDFRAMEBUFFER;
	rLCDCON1=(CLKVAL_TFT_800480<<8)|(MVAL_USED<<7)|(3<<5)|(12<<1)|0;
        // TFT LCD panel,16bpp TFT,ENVID=off
	rLCDCON2=(VBPD_800480<<24)|(LINEVAL_TFT_800480<<14)|(VFPD_800480<<6)|(VSPW_800480);
	rLCDCON3=(HBPD_800480<<19)|(HOZVAL_TFT_800480<<8)|(HFPD_800480);
	rLCDCON4=(MVAL<<8)|(HSPW_800480);
	rLCDCON5=(1<<12)|(1<<9)|(1<<8);	// BPP16:MSB,HSYNC and VSYNC are inverted
	rLCDSADDR1=(((U32)frameBuffer16BitTft800480>>22)<<21)|M5D((U32)frameBuffer16BitTft800480>>1);
	rLCDSADDR2=M5D( ((U32)frameBuffer16BitTft800480+(SCR_XSIZE_TFT_800480*LCD_YSIZE_TFT_800480*4))>>1 );
	rLCDSADDR3=(((SCR_XSIZE_TFT_800480-LCD_XSIZE_TFT_800480)*2)<<11)|(LCD_XSIZE_TFT_800480*2);
	rLCDINTMSK|=(3); // MASK LCD Sub Interrupt
	rLPCSEL&=(~7); // Disable LPC3600
	rTPAL=0; // Disable Temp Palette
}

void LCD_2410_PowerEnable(int invpwren,int pwren)
{
    //GPG4 is setted as LCD_PWREN
    rGPGUP=rGPGUP&(~(1<<4))|(1<<4); // Pull-up disable
    rGPGCON=rGPGCON&(~(3<<8))|(3<<8); //GPG4=LCD_PWREN,背光灯开
    //Enable LCD POWER ENABLE Function
    rLCDCON5=rLCDCON5&(~(1<<3))|(pwren<<3);   // PWREN,使背光灯使能
    rLCDCON5=rLCDCON5&(~(1<<5))|(invpwren<<5);
       // INVPWREN,设置极性
} 

void LCD_2410_EnvidOnOff(int onoff)
{
    if(onoff==1)
	rLCDCON1|=1; // ENVID=ON, 使视频和控制信号有效。video output and the logic enable
    else
	rLCDCON1 =rLCDCON1 & 0x3fffe; // ENVID Off
}  

void LCD_2410_Draw()
{
	int i;	
    for(i = 0; i < SCR_XSIZE_TFT_800480*SCR_YSIZE_TFT_800480;i++)
       (*frameBuffer16BitTft800480)[i] = COLOR;
       
    for(i = 0; i < SCR_XSIZE_TFT_800480*SCR_YSIZE_TFT_800480;i++)
       (*frameBuffer16BitTft800480)[i] = COLOR_RED;
        
    Uart_Printf("\n\nsuccessful!") ;
	
            
}
*/ 
void Lcd_2410_Port_Init(void);
void Lcd_2410_Init(void);
void Lcd_2410_Power_Enable(void);
void Lcd_2410_Envid(void);
void Touch(void);

U32 Frame_Buffer[480][400];
U32 Buffer[480][400];
//void clean(void);

void clean(void)
{
    int x,y;
    //Pen_Color=Color_White;
    for(y=0;y<Lcd_Y;y++)
        for(x=0;x<Lcd_X;x++)    
            Buffer[y][x]=Color_White;
}
void clean0(void)
{
    int x,y;
    //Pen_Color=Color_White;
    for(y=0;y<Lcd_Y;y++)
        for(x=0;x<Lcd_X;x++)    
            Buffer[y][x]=Color_Blue;
}
void Dra0(int x,int y,U16 p)
{
    int i;
    for(i=0;i<16;i++)
    {
        if(1<<(15-i)&p) Set_Pixel(x+i,y);
        /*
        switch(i)
        {
            case 0:
            if(0x80&p) Set_Pixel(x,y);
            break;
            case 1:
            if(0x40&p) Set_Pixel(x+1,y);
            break;
            case 2:
            if(0x20&p) Set_Pixel(x+2,y);
            break;
            case 3:
            if(0x10&p) Set_Pixel(x+3,y);
            break;
            case 4:
            if(0x08&p) Set_Pixel(x+4,y);
            break;
            case 5:
            if(0x04&p) Set_Pixel(x+5,y);
            break;
            case 6:
            if(0x02&p) Set_Pixel(x+6,y);
            break;
            case 7:
            if(0x01&p) Set_Pixel(x+7,y);
            break;
            default:
            break;
            }*/
            
        
    }
        
}
void Draw_0_Bitmap(U16* p)
{
    int x,y;
    int i;
    x=Focus_Point.x;
    y=Focus_Point.y;
    for(i=0;i<24;i++)
        Dra0(x,y+i,p[i]);
        
    
    
}
void Lcd_2410(void)
{
    Lcd_2410_Port_Init();
    Lcd_2410_Init();
    Lcd_2410_Power_Enable();
    Lcd_2410_Envid();
   // clean();
    Clean();

    
    

}
void Lcd_2410_Envid(void)
{
	rLCDCON1|=1;
}
void Lcd_2410_Power_Enable(void)
{

    rGPGUP=rGPGUP&(~(1<<4))|(1<<4); // Pull-up disable
    rGPGCON=rGPGCON&(~(3<<8))|(3<<8); //GPG4=LCD_PWREN,背光灯开
    rLCDCON5=rLCDCON5&(~(1<<3))|(1<<3);   // PWREN,使背光灯使能
    rLCDCON5=rLCDCON5&(~(1<<5))|(0<<5);
}
void Lcd_2410_Init(void)
{
    rLCDCON1=(Clkval<<8)|(3<<5)|(12<<1)|0;//640*480,clkval=2(vclk=10Mhz),tft lcd,24bpp,envid disable
    rLCDCON2=(Vbpd<<24)|((Lcd_Y-1)<<14)|(Vfpd<<6)|(Vspw);
    rLCDCON3=(Hbpd<<19)|((Lcd_X-1)<<8)|(Hfpd);
    rLCDCON4=(Hspw);
    rLCDCON5=(1<<11)|(1<<9)|(1<<8);
    rLCDSADDR1=((((U32)Buffer)>>22)<<21)|((((U32)Buffer)>>1)& 0x1fffff);
    rLCDSADDR2=( ((U32)Buffer+(Lcd_X*Lcd_Y*4))>>1 )& 0x1fffff;
	rLCDSADDR3=(0<<11)|(Lcd_X*2);
	rTPAL=0; // Disable Temp Palette
	rLCDINTMSK|=(3); // MASK LCD Sub Interrupt
	rLPCSEL&=(~7); // Disable LPC3600

    
}
void Lcd_2410_Port_Init(void)
{
    rGPCUP=0x0000ffff;
    rGPCCON=0xaaaaaaaa;
    rGPDUP=0x0000ffff;
    rGPDCON=0xaaaaaaaa; 
}
void Touch(void)
{
    U8 p[]="hello world";
    Draw_Bitmap(p);
}
#endif

⌨️ 快捷键说明

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