新闻中心

EEPW首页>嵌入式系统>设计应用> S3C2440之触摸屏

S3C2440之触摸屏

作者: 时间:2016-11-27 来源:网络 收藏
Test_Touchpanel.c实现检测触点坐标
  1. #defineREQCNT30
  2. #defineADCPRS9//YH0627
  3. #defineLOOP1
  4. void__irqAdcTsAuto(void);
  5. intcount=0;
  6. volatileintxdata,ydata;
  7. voidTest_Touchpanel(void)
  8. {
  9. rADCDLY=50000;//Normalconversionmodedelayabout(1/3.6864M)*50000=13.56ms
  10. rADCCON=(1<<14)+(ADCPRS<<6);//ADCPRSEn,ADCPRSValue
  11. Uart_Printf("ADCtouchscreentest");
  12. rADCTSC=0xd3;//[0:7]Wfait,XP_PU(在等待中断模式下,上拉电阻要有效),XP_Dis,XM_Dis,YP_Dis,YM_En
  13. pISR_ADC=(int)AdcTsAuto;
  14. rINTMSK=~BIT_ADC;//ADCTouchScreenMaskbitclear,enableADCint
  15. rINTSUBMSK=~(BIT_SUB_TC);//enablesubADCint
  16. Uart_Printf("Typeanykeytoexit!!!");
  17. Uart_Printf("StylusDown,please......");
  18. Uart_Getch();
  19. rINTSUBMSK|=BIT_SUB_TC;//getakeythenmasksubADCint;exit
  20. rINTMSK|=BIT_ADC;//maskADCint
  21. Uart_Printf("TouchScreenTestisFinished!!!");
  22. }
  23. void__irqAdcTsAuto(void)
  24. {
  25. inti;
  26. U32saveAdcdly;
  27. if(rADCDAT0&0x8000)
  28. {
  29. //Uart_Printf("StylusUp!!");
  30. rADCTSC&=0xff;//Setstylusdowninterruptbit
  31. }
  32. //else
  33. //Uart_Printf("StylusDown!!");
  34. rADCTSC=(1<<3)|(1<<2);//Pull-updisable,(在触发中断后,上拉电阻要无效)Seq.X,Ypostionmeasure.
  35. saveAdcdly=rADCDLY;//saveADCDLY(启动延时)
  36. rADCDLY=40000;//Normalconversionmodedelayabout(1/50M)*40000=0.8ms
  37. rADCCON|=0x1;//startADC
  38. while(rADCCON&0x1);//checkifEnable_startislow,转换开启结束
  39. while(!(rADCCON&0x8000));//checkifEC(EndofConversion)flagishigh,Thislineisnecessary~!!
  40. //conversionover
  41. while(!(rSRCPND&(BIT_ADC)));//checkifADCisfinishedwithinterruptbit,等待中断清零?
  42. xdata=(rADCDAT0&0x3ff);
  43. ydata=(rADCDAT1&0x3ff);//读取转换结果,x轴坐标值放入rADCDAT0,y轴坐标值放入ADCDAT1
  44. //YH0627,TocheckStylusUpInterrupt.
  45. rSUBSRCPND|=BIT_SUB_TC;
  46. ClearPending(BIT_ADC);//清楚中断标志位
  47. rINTSUBMSK=~(BIT_SUB_TC);//使能中断?
  48. rINTMSK=~(BIT_ADC);
  49. rADCTSC=0xd3;//Waitingforinterrupt//[0:7]Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En
  50. rADCTSC=rADCTSC|(1<<8);//Detecttylusupsinterruptsignal.检查触笔抬起中断
  51. while(1)//tocheckPen-upstate
  52. {
  53. if(rSUBSRCPND&(BIT_SUB_TC))//checkifADCisfinishedwithinterruptbit
  54. {
  55. //Uart_Printf("StylusUpInterrupt~!");//触笔抬起!
  56. break;//ifStylusisup(1)state
  57. }
  58. }
  59. Uart_Printf("count=dXP=d,YP=d",count++,xdata,ydata);//X-positionConversiondata
  60. rADCDLY=saveAdcdly;//恢复ADCDLY原值
  61. rADCTSC=rADCTSC&~(1<<8);//DetectstylusDowninterruptsignal.检查触笔落下中断(下一次检测)
  62. rSUBSRCPND|=BIT_SUB_TC;
  63. rINTSUBMSK=~(BIT_SUB_TC);//Unmasksubinterrupt(TC)//使能中断
  64. ClearPending(BIT_ADC);
  65. }

效果图:

本文引用地址: //m.amcfsurvey.com/article/201611/322378.htm
上一页 1 2 下一页

关键词:S3C2440触摸

评论


相关推荐

技术专区

关闭