S3C2440驅(qū)動TFT屏(24bit顯示模式)
- /********************************************************************
- *文件名:TFT.h
- *功能:定義TFT控制器參數(shù),聲明驅(qū)動TFT屏的相關(guān)函數(shù)
- *作者:jianqi
- *版本:v1.0
- ********************************************************************/
- #ifndef__TFT_H__
- #define__TFT_H__
- #include"def.h"
- #defineTFT351
- #defineTFT432
- #defineLCD_TypeTFT43
- //4.3寸TFT屏的相關(guān)參數(shù)
- #if(LCD_Type==TFT43)
- #defineTFT_XSIZE480
- #defineTFT_YSIZE272
- #defineCLKVAL4
- #defineVBPD4
- #defineVFPD4
- #defineVSPW8
- #defineHBPD4
- #defineHFPD4
- #defineHSPW40
- #definePNRMODE3
- #defineBPPMODE13
- #endif
- #defineHOZVALTFT_XSIZE-1
- #defineLINEVALTFT_YSIZE-1
- voidTFT_Power_Enable(BOOLON_OFF);
- voidTFT_Video_ON(BOOLON_OFF);
- voidTFT_Contraller_Init(void);
- voidPaint_Pixel(U32x,U32y,U32color);
- voidTFT_CLearScreen(U32color);
- voidDraw_Line(U32x1,U32y1,U32x2,U32y2,U32color);
- voidGraw_Rectangle(U32x1,U32y1,U32x2,U32y2,U32color);
- voidGraw_Full_Rectangle(U32x1,U32y1,U32x2,U32y2,U32color);
- voidPaint_Picture(U32x0,U32y0,U32width,U32height,UCHARbmp[]);
- #endif
- /********************************************************************
- *文件名:TFT.c
- *功能:配置ARM芯片的屏幕控制器相關(guān)寄存器,定義TFT相關(guān)顯示函數(shù)
- *作者:jianqi
- *版本:v1.0
- ********************************************************************/
- #include"2440addr.h"
- #include"TFT.h"
- #include"def.h"
- volatileunsignedintTFT_Buffer[TFT_YSIZE][TFT_XSIZE];//顯示數(shù)據(jù)緩存區(qū)
- /**********************************************
- *名稱:TFT_Contraller_Init
- *功能:初始化相關(guān)的S3C2440的TFT驅(qū)動寄存器
- *入口參數(shù):無
- *出口參數(shù):無
- **********************************************/
- voidTFT_Contraller_Init(void)
- {
- rGPDCON=0xaaaaaaaa;//使能VD[15:8]
- rGPDUP=0x00000000;//使能上拉電阻
- rGPCCON=0xaaaa02a9;//使能相關(guān)GPC引腳的LCD控制功能
- rGPCUP=0x00000000;//使能上拉電阻
- rLCDCON1=(CLKVAL<<8)|(0<<7)|(PNRMODE<<5)|(BPPMODE<<1)|0;
- rLCDCON2=(VBPD<<24)|(LINEVAL<<14)|(VFPD<<6)|(VSPW<<0);
- rLCDCON3=(HBPD<<19)|(HOZVAL<<8)|(HFPD<<0);
- rLCDCON4=(13<<8)|(HSPW<<0);
- rLCDCON5=(1<<11)|(0<<10)|(1<<9)|(1<<8)|(0<<7)|(0<<6)|(1<<3)|(0<<1)|(1<<0);
- rLCDSADDR1=(((U32)TFT_Buffer>>22)<<21)|(((U32)TFT_Buffer>>1)&0x1fffff);//緩存區(qū)起始地址30~22位
- rLCDSADDR2=((((U32)TFT_Buffer+(TFT_XSIZE*TFT_YSIZE)*4)>>1)&0x1fffff);//緩存區(qū)結(jié)束地址21~1位
- }
- /**********************************************
- *名稱:TFT_Video_ON
- *功能:是否開啟TFT屏
- *入口參數(shù):1--開啟TFT;0--關(guān)閉TFT
- *出口參數(shù):無
- **********************************************/
- voidTFT_Video_ON(BOOLON_OFF)
- {
- if(ON_OFF==1)
- rLCDCON1|=1;//ENVID=ON
- else
- rLCDCON1=rLCDCON1&0xffffe;//ENVID=Off
- }
- /**********************************************
- *名稱:TFT_Power_Enable
- *功能:是否使能TFT控制器電源
- *入口參數(shù):1--使能;0--不使能
- *出口參數(shù):無
- **********************************************/
- voidTFT_Power_Enable(BOOLEnable_Disenable)
- {
- rGPGUP=rGPGUP&(~(1<<4))|(1<<4);
- rGPGCON=rGPGCON&(~(3<<8))|(3<<8);//GPG4=PWREN
- if(Enable_Disenable==1)
- {
- rGPGDAT=rGPGDAT|(1<<4);
- }
- else
- {
- rGPGDAT=rGPGDAT&(~(1<<4));
- }
- }
- /*************************************************************
- *名稱:Paint_Pixel
- *功能:點亮一個像素點
- *入口參數(shù):像素點X坐標(biāo)x,Y坐標(biāo)y,顯示顏色color
- *出口參數(shù):無
- **************************************************************/
- voidPaint_Pixel(U32x,U32y,U32color)
- {
- if((x
- {
- TFT_Buffer[y][x]=color;
- }
- }
- /*************************************************************
- *名稱:TFT_CLearScreen
- *功能:擦除屏幕為指定顏色
- *入口參數(shù):擦出顏色color
- *出口參數(shù):無
- **************************************************************/
- voidTFT_CLearScreen(U32color)
- {
- U32x,y;
- for(y=0;y
- {
- for(x=0;x
- {
- TFT_Buffer[y][x]=color;
- }
- }
- }
- /*************************************************************
- *名稱:Draw_Line
- *功能:顯示一條直線
- *入口參數(shù):起始坐標(biāo)(x1,y1),結(jié)束坐標(biāo)(x2,y2),線條顏色color
- *出口參數(shù):無
- **************************************************************/
- voidDraw_Line(U32x1,U32y1,U32x2,U32y2,U32color)
- {
- intdx,dy,e;
- dx=x2-x1;
- dy=y2-y1;
- if(dx>=0)
- {
- if(dy>=0)
- {
- if(dx>=dy)//1/8象限
- {
- e=dy-dx/2;
- while(x1<=x2)
- {
- Paint_Pixel(x1,y1,color);
- if(e>0)
- {
- y1+=1;
- e-=dx;
- }
- x1+=1;
- e+=dy;
- }
- }
- else//2/8象限
- {
- e=dx-dy/2;
- while(y1<=y2)
- {
- Paint_Pixel(x1,y1,color);
- if(e>0)
- {
- x1+=1;
- e-=dy;
- }
- y1+=1;
- e+=dx;
- }
- }
- }
- else
- {
- dy=-dy;
- if(dx>=dy)//8/8象限
- {
- e=dy-dx/2;
- while(x1<=x2)
- {
- Paint_Pixel(x1,y1,color);
- if(e>0)
- {
- y1-=1;
- e-=dx;
- }
- x1+=1;
- e+=dy;
- }
- }
- else//7/8象限
- {
- e=dx-dy/2;
- while(y1>=y2)
- {
- Paint_Pixel(x1,y1,color);
- if(e>0)
- {
- x1+=1;
- e-=dy;
- }
- y1-=1;
- e+=dx;
- }
- }
- }
- }
- else
- {
- dx=-dx;
- if(dy>=0)
- {
- if(dx>=dy)//4/8象限
- {
- e=dy-dx/2;
- while(x1>=x2)
- {
- Paint_Pixel(x1,y1,color);
- if(e>0)
- {
- y1+=1;
- e-=dx;
- }
- x1-=1;
- e+=dy;
- }
- }
- else//3/8象限
- {
- e=dx-dy/2;
- while(y1<=y2)
- {
- Paint_Pixel(x1,y1,color);
- if(e>0)
- {
- x1-=1;
- e-=dy;
- }
- y1+=1;
- e+=dx;
- }
- }
- }
- else
- {
- dy=-dy;
- if(dx>=dy)//5/8象限
- {
- e=dy-dx/2;
- while(x1>=x2)
- {
- Paint_Pixel(x1,y1,color);
- if(e>0)
- {
- y1-=1;
- e-=dx;
- }
- x1-=1;
- e+=dy;
- }
- }
- else//6/8象限
- {
- e=dx-dy/2;
- while(y1>=y2)
- {
- Paint_Pixel(x1,y1,color);
- if(e>0)
- {
- x1-=1;
- e-=dy;
- }
- y1-=1;
- e+=dx;
- }
- }
- }
- }
- }
- /*************************************************************
- *名稱:Graw_Rectangle
- *功能:顯示一條矩形框
- *入口參數(shù):起始坐標(biāo)(x1,y1),結(jié)束坐標(biāo)(x2,y2),矩形框顏色color
- *出口參數(shù):無
- **************************************************************/
- voidGraw_Rectangle(U32x1,U32y1,U32x2,U32y2,U32color)
- {
- Draw_Line(x1,y1,x2,y1,color);
- Draw_Line(x2,y1,x2,y2,color);
- Draw_Line(x1,y2,x2,y2,color);
- Draw_Line(x1,y1,x1,y2,color);
- }
- /*************************************************************
- *名稱:Graw_Full_Rectangle
- *功能:顯示一條矩形框,并填充顏色
- *入口參數(shù):起始坐標(biāo)(x1,y1),結(jié)束坐標(biāo)(x2,y2),填充顏色color
- *出口參數(shù):無
- **************************************************************/
- voidGraw_Full_Rectangle(U32x1,U32y1,U32x2,U32y2,U32color)
- {
- inti;
- for(i=y1;i<=y2;i++)
- Draw_Line(x1,i,x2,i,color);
- }
- /**********************************************************************************
- *名稱:Paint_Picture
- *功能:顯示一張圖片
- *入口參數(shù):起始坐標(biāo)(x0,y0),顯示高度height,顯示寬度width,填充顏色color
- *出口參數(shù):無
- ************************************************************************************/
- voidPaint_Picture(U32x0,U32y0,U32width,U32height,UCHARbmp[])
- {
- intx,y;
- U32c;
- intp=0;
- for(y=y0;y
- {
- for(x=x0;x
- {
- c=bmp[p+2]|(bmp[p+1]<<8)|(bmp[p]<<16);
- if(((x0+x)
- {
- TFT_Buffer[y0+y][x0+x]=c;
- }
- p=p+3;
- }
- }
- }
- /********************************************************************
- *文件名:main.c
- *功能:測試TFT屏的驅(qū)動函數(shù)
- *作者:jianqi
- *版本:v1.0
- ********************************************************************/
- #include"2440addr.h"http://包含2440相關(guān)寄存器的設(shè)置
- #include"TFT.h"
- externunsignedcharq_480x272[];//圖片轉(zhuǎn)換后的數(shù)組
- /*******************************************
- *名稱:Delay
- *功能:延時
- *入口參數(shù):無
- *出口參數(shù):無
- **********************************************/
- voidDelay()
- {
- inti,j,k;
- for(i=0;i<20;i++)
- {
- for(j=0;j<100;j++)
- {
- for(k=0;k<1000;k++);
- }
- }
- }
- /*******************************************
- *名稱:Main
- *功能:測試TFT屏幕
- *入口參數(shù):無
- *出口參數(shù):無
- **********************************************/
- voidMain(void)
- {
- TFT_Power_Enable(1);
- TFT_Contraller_Init();
- TFT_Video_ON(1);
- while(1)
- {
- TFT_CLearScreen((0x00<<11)|(0x3f<<5)|(0x00));//全屏顯示紅色
- Delay();
- Draw_Line(0,0,480,272,(0x1f<<11)|(0x00<<5)|(0x00));//對角線畫直線
- Delay();
- Graw_Rectangle(20,20,400,200,(0x00<<11)|(0x00<<5)|(0x1f));//矩形框
- Delay();
- Graw_Full_Rectangle(20,20,400,200,(0x00<<11)|(0x00<<5)|(0x1f));//填充矩形框位指定顏色
- Delay();
- Paint_Picture(0,0,480,272,q_480x272);//顯示圖片
- Delay();
- }
- }
評論