<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          s3c2440觸摸屏測(cè)試

          作者: 時(shí)間:2016-11-20 來源:網(wǎng)絡(luò) 收藏
          * 文件名:main.c
          * 功能:測(cè)試TFT屏的驅(qū)動(dòng)函數(shù)
          * 作者:jianqi
          * 版本:v1.0

          #include"2440addr.h" //包含2440相關(guān)寄存器的設(shè)置
          #include"TFT.h"
          #include"Touch.h"
          #include"MMU.h"
          #include"UART.h"

          volatile int A,B,C,D,E,F,K; //校正參數(shù)

          int flagTS=0; //觸摸屏轉(zhuǎn)換標(biāo)志

          int xdata,ydata; //觸摸屏A/D轉(zhuǎn)換數(shù)據(jù)

          本文引用地址:http://www.ex-cimer.com/article/201611/318922.htm

          * 名稱:Touch_Int

          * 功能:觸摸屏中斷程序,讀取A/D轉(zhuǎn)換的值
          * 入口參數(shù):無
          * 出口參數(shù):無

          void __irq Touch_Int(void) //中斷函數(shù)
          {
          rINTSUBMSK |= ((U32)0x1<<9); //關(guān)閉中斷服務(wù)
          if (rADCUPDN&(U32)0x01) //觸筆down
          {
          rADCUPDN=0;//清除標(biāo)志位
          Send_String("down"); //打印信息(調(diào)試用)
          rADCTSC = (1<<3)|(1<<2); //上拉無效,自動(dòng)XY坐標(biāo)轉(zhuǎn)換模式
          rADCCON|=0x1; //開始A/D轉(zhuǎn)換
          while(rADCCON&0x1); //等待AD轉(zhuǎn)換開始
          while(!(rADCCON&(1<<15))); //等待AD轉(zhuǎn)換結(jié)束
          xdata=(rADCDAT0&0x3ff); //保存A/D轉(zhuǎn)換的x位置
          ydata=(rADCDAT1&0x3ff); //保存A/D轉(zhuǎn)換的y位置
          flagTS=0;
          rADCTSC=0xd3|(1<<8); //再次設(shè)置等待中斷模式,目的判斷觸筆up
          }
          if((rADCUPDN>>1)&(U32)0x01) //觸筆up
          {
          rADCUPDN=0; //清除標(biāo)志位
          Send_String("up"); //打印信息(調(diào)試用)
          flagTS=1;//一次接觸完畢
          rADCTSC=0xd3; //設(shè)置觸摸屏為等待中斷模式
          }
          rSRCPND|=(U32)0x1<<31; //清中斷標(biāo)志
          rSUBSRCPND|=(U32)0x01<<9;
          rINTPND|=(U32)0x1<<31;
          rINTSUBMSK&=~((U32)0x1<<9);//打開中斷服務(wù)
          }


          * 名稱:Delay
          * 功能:延時(shí)
          * 入口參數(shù):無
          * 出口參數(shù):無

          void Delay(void)
          {
          int i,j,k;
          for(i=0;i<20;i++)
          {
          for(j=0;j<100;j++)
          {
          for(k=0;k<1000;k++);
          }
          }
          }


          * 名稱:Calibration
          * 功能:觸摸屏校正
          * 入口參數(shù):無
          * 出口參數(shù):無

          void Calibration(void)
          {
          char i;
          int xt[3],yt[3];
          TFT_CLearScreen(0xFFFFFF);
          Draw_Cross(32,24,0xFF0000);
          Draw_Cross(160,216,0xFF0000);
          Draw_Cross(288,120,0xFF0000);

          //依次讀取三個(gè)采樣點(diǎn)的坐標(biāo)值
          for(i=0;i<3;i++)
          {
          while(flagTS==0)
          {
          Delay();
          }
          Send_String("Over");
          xt[i]=xdata;
          yt[i]=ydata;
          flagTS=0;
          }

          //計(jì)算參數(shù)
          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
          * 功能:觸摸屏中斷初始化
          * 入口參數(shù):無
          * 出口參數(shù):無

          void Touch_Screen_Init(void)
          {
          rADCDLY=50000; //設(shè)置延時(shí)
          rADCCON=(1<<14)|(20<<6); //設(shè)置A/D預(yù)分頻
          rADCTSC=0xd3; //設(shè)置等待中斷模式
          rSUBSRCPND|=(1<<9);
          rSRCPND|=(1<<31);
          rINTPND|=(1<<31);
          rINTSUBMSK&=~(1<<9);
          rINTMSK&=~(1<<31); //打開中斷屏蔽
          }

          * 名稱:Clk_Set
          * 功能:關(guān)于系統(tǒng)時(shí)鐘的初始化
          * 入口參數(shù):無
          * 出口參數(shù):無

          void Clk_Set(void)
          {
          int count;
          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
          * 功能:測(cè)試TFT觸摸屏幕
          * 入口參數(shù):無
          * 出口參數(shù):無

          void Main(void)
          {
          int x,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; //注冊(cè)觸摸屏中斷函數(shù)
          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; //計(jì)算X軸坐標(biāo)
          y=(D*xdata+E*ydata+F)/K; //計(jì)算Y軸坐標(biāo)
          Draws_Quare(x,y,0x00); //在觸摸坐標(biāo)處繪制正方形
          }
          }
          }



          關(guān)鍵詞: s3c2440觸摸屏測(cè)

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();