- /********************************************************************
- *文件名:TFT.h
- *功用:界说TFT操控器参数,声明驱动TFT屏的相关函数
- *作者:jianqi
- *版别:v1.0
- ********************************************************************/
- #ifndef__TFT_H__
- #define__TFT_H__
- #include”def.h”
- #defineTFT351
- #defineTFT432
- #defineLCD_TypeTFT43
- //4.3寸TFT屏的相关参数
- #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芯片的屏幕操控器相关寄存器,界说TFT相关显现函数
- *作者:jianqi
- *版别:v1.0
- ********************************************************************/
- #include”2440addr.h”
- #include”TFT.h”
- #include”def.h”
- volatileunsignedintTFT_Buffer[TFT_YSIZE][TFT_XSIZE];//显现数据缓存区
- /**********************************************
- *称号:TFT_Contraller_Init
- *功用:初始化相关的S3C2440的TFT驱动寄存器
- *进口参数:无
- *出口参数:无
- **********************************************/
- voidTFT_Contraller_Init(void)
- {
- rGPDCON=0xaaaaaaaa;//使能VD[15:8]
- rGPDUP=0x00000000;//使能上拉电阻
- rGPCCON=0xaaaa02a9;//使能相关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);//缓存区开始地址30~22位
- rLCDSADDR2=((((U32)TFT_Buffer+(TFT_XSIZE*TFT_YSIZE)*4)>>1)&0x1fffff);//缓存区完毕地址21~1位
- }
- /**********************************************
- *称号:TFT_Video_ON
- *功用:是否舱位TFT屏
- *进口参数:1–舱位TFT;0–封闭TFT
- *出口参数:无
- **********************************************/
- voidTFT_Video_ON(BOOLON_OFF)
- {
- if(ON_OFF==1)
- rLCDCON1|=1;//ENVID=ON
- else
- rLCDCON1=rLCDCON1&0xffffe;//ENVID=Off
- }
- /**********************************************
- *称号:TFT_Power_Enable
- *功用:是否使能TFT操控器电源
- *进口参数:1–使能;0–不使能
- *出口参数:无
- **********************************************/
- 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
- *功用:点亮一个像素点
- *进口参数:像素点X坐标x,Y坐标y,显现色彩color
- *出口参数:无
- **************************************************************/
- voidPaint_Pixel(U32x,U32y,U32color)
- {
- if((x
- {
- TFT_Buffer[y][x]=color;
- }
- }
- /*************************************************************
- *称号:TFT_CLearScreen
- *功用:擦除屏幕为指定色彩
- *进口参数:擦出色彩color
- *出口参数:无
- **************************************************************/
- voidTFT_CLearScreen(U32color)
- {
- U32x,y;
- for(y=0;y
- {
- for(x=0;x
- {
- TFT_Buffer[y][x]=color;
- }
- }
- }
- /*************************************************************
- *称号:Draw_Line
- *功用:显现一条直线
- *进口参数:开始坐标(x1,y1),完毕坐标(x2,y2),线条色彩color
- *出口参数:无
- **************************************************************/
- 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
- *功用:显现一条矩形框
- *进口参数:开始坐标(x1,y1),完毕坐标(x2,y2),矩形框色彩color
- *出口参数:无
- **************************************************************/
- 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
- *功用:显现一条矩形框,并填充色彩
- *进口参数:开始坐标(x1,y1),完毕坐标(x2,y2),填充色彩color
- *出口参数:无
- **************************************************************/
- voidGraw_Full_Rectangle(U32x1,U32y1,U32x2,U32y2,U32color)
- {
- inti;
- for(i=y1;i<=y2;i++)
- Draw_Line(x1,i,x2,i,color);
- }
- /**********************************************************************************
- *称号:Paint_Picture
- *功用:显现一张图片
- *进口参数:开始坐标(x0,y0),显现高度height,显现宽度width,填充色彩color
- *出口参数:无
- ************************************************************************************/
- 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屏的驱动函数
- *作者:jianqi
- *版别:v1.0
- ********************************************************************/
- #include”2440addr.h”//包括2440相关寄存器的设置
- #include”TFT.h”
- externunsignedcharq_480x272[];//图片转化后的数组
- /*******************************************
- *称号:Delay
- *功用:延时
- *进口参数:无
- *出口参数:无
- **********************************************/
- voidDelay()
- {
- inti,j,k;
- for(i=0;i<20;i++)
- {
- for(j=0;j<100;j++)
- {
- for(k=0;k<1000;k++);
- }
- }
- }
- /*******************************************
- *称号:Main
- *功用:测验TFT屏幕
- *进口参数:无
- *出口参数:无
- **********************************************/
- 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();
- }
- }
S3C2440驱动TFT屏(24bit显现形式)
/*********************************************************************文件名:TFT.h*功能:定义TFT控制器参数,声明驱动TF
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/biancheng/264421.html