s3c2440的触摸屏校正与测试
时间:11-20
来源:互联网
点击:
- /********************************************************************
- *文件名:main.c
- *功能:测试TFT屏的驱动函数
- *作者:jianqi
- *版本:v1.0
- ********************************************************************/
- #include"2440addr.h"//包含2440相关寄存器的设置
- #include"TFT.h"
- #include"Touch.h"
- #include"MMU.h"
- #include"UART.h"
- volatileintA,B,C,D,E,F,K;//校正参数
- intflagTS=0;//触摸屏转换标志
- intxdata,ydata;//触摸屏A/D转换数据
- /*******************************************
- *名称:Touch_Int
- *功能:触摸屏中断程序,读取A/D转换的值
- *入口参数:无
- *出口参数:无
- **********************************************/
- void__irqTouch_Int(void)//中断函数
- {
- rINTSUBMSK|=((U32)0x1<9);//关闭中断服务
- if(rADCUPDN&(U32)0x01)//触笔down
- {
- rADCUPDN=0;//清除标志位
- Send_String("down");//打印信息(调试用)
- rADCTSC=(1<3)|(1<2);//上拉无效,自动XY坐标转换模式
- rADCCON|=0x1;//开始A/D转换
- while(rADCCON&0x1);//等待AD转换开始
- while(!(rADCCON&(1<15)));//等待AD转换结束
- xdata=(rADCDAT0&0x3ff);//保存A/D转换的x位置
- ydata=(rADCDAT1&0x3ff);//保存A/D转换的y位置
- flagTS=0;
- rADCTSC=0xd3|(1<8);//再次设置等待中断模式,目的判断触笔up
- }
- if((rADCUPDN>>1)&(U32)0x01)//触笔up
- {
- rADCUPDN=0;//清除标志位
- Send_String("up");//打印信息(调试用)
- flagTS=1;//一次接触完毕
- rADCTSC=0xd3;//设置触摸屏为等待中断模式。
- }
- rSRCPND|=(U32)0x1<31;//清中断标志
- rSUBSRCPND|=(U32)0x01<9;
- rINTPND|=(U32)0x1<31;
- rINTSUBMSK&=~((U32)0x1<9);//打开中断服务
- }
- /*******************************************
- *名称:Delay
- *功能:延时
- *入口参数:无
- *出口参数:无
- **********************************************/
- voidDelay(void)
- {
- inti,j,k;
- for(i=0;i<20;i++)
- {
- for(j=0;j<100;j++)
- {
- for(k=0;k<1000;k++);
- }
- }
- }
- /*******************************************
- *名称:Calibration
- *功能:触摸屏校正
- *入口参数:无
- *出口参数:无
- **********************************************/
- voidCalibration(void)
- {
- chari;
- intxt[3],yt[3];
- TFT_CLearScreen(0xFFFFFF);
- Draw_Cross(32,24,0xFF0000);
- Draw_Cross(160,216,0xFF0000);
- Draw_Cross(288,120,0xFF0000);
- //依次读取三个采样点的坐标值
- for(i=0;i<3;i++)
- {
- while(flagTS==0)
- {
- Delay();
- }
- Send_String("Over");
- xt[i]=xdata;
- yt[i]=ydata;
- flagTS=0;
- }
- //计算参数
- K=(xt[0]-xt[2])*(yt[1]-yt[2])-(xt[1]-xt[2])*(yt[0]-yt[2]);
- A=(32-288)*(yt[1]-yt[2])-(160-288)*(yt[0]-yt[2]);
- B=(xt[0]-xt[2])*(160-288)-(32-288)*(xt[1]-xt[2]);
- C=yt[0]*(xt[2]*160-xt[1]*288)+yt[1]*(xt[0]*288-xt[2]*32)+yt[2]*(xt[1]*32-xt[0]*160);
- D=(24-120)*(yt[1]-yt[2])-(216-120)*(yt[0]-yt[2]);
- E=(xt[0]-xt[2])*(216-120)-(24-120)*(xt[1]-xt[2]);
- F=yt[0]*(xt[2]*216-xt[1]*120)+yt[1]*(xt[0]*120-xt[2]*24)+yt[2]*(xt[1]*24-xt[0]*216);
- }
- /*******************************************
- *名称:Touch_Screen_Init
- *功能:触摸屏中断初始化
- *入口参数:无
- *出口参数:无
- **********************************************/
- voidTouch_Screen_Init(void)
- {
- rADCDLY=50000;//设置延时
- rADCCON=(1<14)|(20<6);//设置A/D预分频
- rADCTSC=0xd3;//设置等待中断模式
- rSUBSRCPND|=(1<9);
- rSRCPND|=(1<31);
- rINTPND|=(1<31);
- rINTSUBMSK&=~(1<9);
- rINTMSK&=~(1<31);//打开中断屏蔽
- }
- /*******************************************
- *名称:Clk_Set
- *功能:关于系统时钟的初始化
- *入口参数:无
- *出口参数:无
- **********************************************/
- voidClk_Set(void)
- {
- intcount;
- rUPLLCON=(56<12)|(2<4)|2;//UCLK为48MHZ
- for(count=0;count<10;count++)
- {
- ;
- }
- rMPLLCON=(92<12)|(1<4)|1;//FCLK为400MHZ
- rCLKdivN=(0<3)|(2<1)|1;//HCLK位100MHZ,PCLK为50MHZ
- rCAMdivN=(0<9);//PCLK=HCLK/4
- }
- /*******************************************
- *名称:Main
- *功能:测试TFT屏幕
- *入口参数:无
- *出口参数:无
- **********************************************/
- voidMain(void)
- {
- intx,y;
- MMU_Init();//MMU初始化
- UART0_init();//串口初始化
- TFT_Power_Enable(1);//TFT电源管理使能
- TFT_Contraller_Init();//TFT初始化
- TFT_Video_ON(1);//打开TFT
- pISR_ADC=(U32)Touch_Int;//注册触摸屏中断函数
- Touch_Screen_Init();//触摸屏初始化
- Calibration();//触摸屏校正
- TFT_CLearScreen((0x00<11)|(0x00<5)|(0x1f));
- //Paint_Picture(0,0,480,272,TQ_LOGO_480272_2);
- while(1)
- {
- if(flagTS)
- {
- flagTS=0;
- Send_String("OK");
- x=(A*xdata+B*ydata+C)/K;//计算X轴坐标
- y=(D*xdata+E*ydata+F)/K;//计算Y轴坐标
- Draws_Quare(x,y,0x00);//在触摸坐标处绘制正方形
- }
- }
- }
s3c2440触摸屏校正与测 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)