📄 lcd_test.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 + -