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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > s3c2440的觸摸屏校正與測試

          s3c2440的觸摸屏校正與測試

          作者: 時間:2016-11-20 來源:網絡 收藏

          本文引用地址:http://www.ex-cimer.com/article/201611/318934.htm
          1. /********************************************************************
          2. *文件名:main.c
          3. *功能:測試TFT屏的驅動函數
          4. *作者:jianqi
          5. *版本:v1.0
          6. ********************************************************************/
          7. #include"2440addr.h"http://包含2440相關寄存器的設置
          8. #include"TFT.h"
          9. #include"Touch.h"
          10. #include"MMU.h"
          11. #include"UART.h"
          12. volatileintA,B,C,D,E,F,K;//校正參數
          13. intflagTS=0;//觸摸屏轉換標志
          14. intxdata,ydata;//觸摸屏A/D轉換數據
          15. /*******************************************
          16. *名稱:Touch_Int
          17. *功能:觸摸屏中斷程序,讀取A/D轉換的值
          18. *入口參數:無
          19. *出口參數:無
          20. **********************************************/
          21. void__irqTouch_Int(void)//中斷函數
          22. {
          23. rINTSUBMSK|=((U32)0x1<<9);//關閉中斷服務
          24. if(rADCUPDN&(U32)0x01)//觸筆down
          25. {
          26. rADCUPDN=0;//清除標志位
          27. Send_String("down");//打印信息(調試用)
          28. rADCTSC=(1<<3)|(1<<2);//上拉無效,自動XY坐標轉換模式
          29. rADCCON|=0x1;//開始A/D轉換
          30. while(rADCCON&0x1);//等待AD轉換開始
          31. while(!(rADCCON&(1<<15)));//等待AD轉換結束
          32. xdata=(rADCDAT0&0x3ff);//保存A/D轉換的x位置
          33. ydata=(rADCDAT1&0x3ff);//保存A/D轉換的y位置
          34. flagTS=0;
          35. rADCTSC=0xd3|(1<<8);//再次設置等待中斷模式,目的判斷觸筆up
          36. }
          37. if((rADCUPDN>>1)&(U32)0x01)//觸筆up
          38. {
          39. rADCUPDN=0;//清除標志位
          40. Send_String("up");//打印信息(調試用)
          41. flagTS=1;//一次接觸完畢
          42. rADCTSC=0xd3;//設置觸摸屏為等待中斷模式。
          43. }
          44. rSRCPND|=(U32)0x1<<31;//清中斷標志
          45. rSUBSRCPND|=(U32)0x01<<9;
          46. rINTPND|=(U32)0x1<<31;
          47. rINTSUBMSK&=~((U32)0x1<<9);//打開中斷服務
          48. }
          49. /*******************************************
          50. *名稱:Delay
          51. *功能:延時
          52. *入口參數:無
          53. *出口參數:無
          54. **********************************************/
          55. voidDelay(void)
          56. {
          57. inti,j,k;
          58. for(i=0;i<20;i++)
          59. {
          60. for(j=0;j<100;j++)
          61. {
          62. for(k=0;k<1000;k++);
          63. }
          64. }
          65. }
          66. /*******************************************
          67. *名稱:Calibration
          68. *功能:觸摸屏校正
          69. *入口參數:無
          70. *出口參數:無
          71. **********************************************/
          72. voidCalibration(void)
          73. {
          74. chari;
          75. intxt[3],yt[3];
          76. TFT_CLearScreen(0xFFFFFF);
          77. Draw_Cross(32,24,0xFF0000);
          78. Draw_Cross(160,216,0xFF0000);
          79. Draw_Cross(288,120,0xFF0000);
          80. //依次讀取三個采樣點的坐標值
          81. for(i=0;i<3;i++)
          82. {
          83. while(flagTS==0)
          84. {
          85. Delay();
          86. }
          87. Send_String("Over");
          88. xt[i]=xdata;
          89. yt[i]=ydata;
          90. flagTS=0;
          91. }
          92. //計算參數
          93. K=(xt[0]-xt[2])*(yt[1]-yt[2])-(xt[1]-xt[2])*(yt[0]-yt[2]);
          94. A=(32-288)*(yt[1]-yt[2])-(160-288)*(yt[0]-yt[2]);
          95. B=(xt[0]-xt[2])*(160-288)-(32-288)*(xt[1]-xt[2]);
          96. 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);
          97. D=(24-120)*(yt[1]-yt[2])-(216-120)*(yt[0]-yt[2]);
          98. E=(xt[0]-xt[2])*(216-120)-(24-120)*(xt[1]-xt[2]);
          99. 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);
          100. }
          101. /*******************************************
          102. *名稱:Touch_Screen_Init
          103. *功能:觸摸屏中斷初始化
          104. *入口參數:無
          105. *出口參數:無
          106. **********************************************/
          107. voidTouch_Screen_Init(void)
          108. {
          109. rADCDLY=50000;//設置延時
          110. rADCCON=(1<<14)|(20<<6);//設置A/D預分頻
          111. rADCTSC=0xd3;//設置等待中斷模式
          112. rSUBSRCPND|=(1<<9);
          113. rSRCPND|=(1<<31);
          114. rINTPND|=(1<<31);
          115. rINTSUBMSK&=~(1<<9);
          116. rINTMSK&=~(1<<31);//打開中斷屏蔽
          117. }
          118. /*******************************************
          119. *名稱:Clk_Set
          120. *功能:關于系統(tǒng)時鐘的初始化
          121. *入口參數:無
          122. *出口參數:無
          123. **********************************************/
          124. voidClk_Set(void)
          125. {
          126. intcount;
          127. rUPLLCON=(56<<12)|(2<<4)|2;//UCLK為48MHZ
          128. for(count=0;count<10;count++)
          129. {
          130. ;
          131. }
          132. rMPLLCON=(92<<12)|(1<<4)|1;//FCLK為400MHZ
          133. rCLKDIVN=(0<<3)|(2<<1)|1;//HCLK位100MHZ,PCLK為50MHZ
          134. rCAMDIVN=(0<<9);//PCLK=HCLK/4
          135. }
          136. /*******************************************
          137. *名稱:Main
          138. *功能:測試TFT屏幕
          139. *入口參數:無
          140. *出口參數:無
          141. **********************************************/
          142. voidMain(void)
          143. {
          144. intx,y;
          145. MMU_Init();//MMU初始化
          146. UART0_init();//串口初始化
          147. TFT_Power_Enable(1);//TFT電源管理使能
          148. TFT_Contraller_Init();//TFT初始化
          149. TFT_Video_ON(1);//打開TFT
          150. pISR_ADC=(U32)Touch_Int;//注冊觸摸屏中斷函數
          151. Touch_Screen_Init();//觸摸屏初始化
          152. Calibration();//觸摸屏校正
          153. TFT_CLearScreen((0x00<<11)|(0x00<<5)|(0x1f));
          154. //Paint_Picture(0,0,480,272,TQ_LOGO_480272_2);
          155. while(1)
          156. {
          157. if(flagTS)
          158. {
          159. flagTS=0;
          160. Send_String("OK");
          161. x=(A*xdata+B*ydata+C)/K;//計算X軸坐標
          162. y=(D*xdata+E*ydata+F)/K;//計算Y軸坐標
          163. Draws_Quare(x,y,0x00);//在觸摸坐標處繪制正方形
          164. }
          165. }
          166. }




          評論


          技術專區(qū)

          關閉
          看屁屁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); })();