找回密码
 注册
关于网站域名变更的通知
查看: 444|回复: 1
打印 上一主题 下一主题

嵌入式开发之ARM9--TQ2440触摸屏学习笔记(转)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2016-5-12 14:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
硬件平台:TQ2440
4 ]% s" }4 }4 H' ^9 m  触摸屏检测方法可以分两种:" E4 ?$ W  A* v7 H1 {2 X
  1.检测按下、弹起两个状态时的x y坐标值;, w1 x6 F  O" r5 r4 I% X2 ^
  以检测按下状态是读取x y坐标值为例 实现代码如下4 h* u+ @3 R% f" H! x) Y( o
  void Init_Touchpanel(void)7 B% J  n6 f$ I! y& ~4 r7 a
  {
- {* B) a' q6 |  ClearPending(BIT_ADC);
" Q& a, b% r4 n5 }  rSUBSRCPND|=BIT_SUB_TC ;
4 Y: T% D6 c4 @  //清adc中断 触摸屏中断
4 q. V7 o' W" B+ O  rADCDLY=40000; //ADC转换间隔 (1/3.6864M)*50000=13.56ms
* U8 H$ c: p9 c  @  //Normal conversion mode:ADC Start or interval delay 0~65535
, \2 t$ I2 W* h, g  rADCCON=(1<<14)+(ADCPRS<<6); //ADCPRS En, ADCPRS Value
5 a. N" d$ L8 K) k  //使能预分频器 预分频值 ADCPRS(9) AD转换器频率=gclk / (9+1)% X% E1 k# V, `
  rADCTSC=0xd3; //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En
% _7 F# G2 e( v) d4 x# P  //ADC触摸屏控制寄存器 检测手写笔按下的中断信号 YM输出驱动有效 YP输出无效 XM输出禁止 XP输出驱动禁止" z4 G+ {: a* p* {
  // XP上啦使能 adc正常转换模式 等待中断模式
6 k; N( C) k- E" x  pISR_ADC = (int)AdcTsAuto;
( k# g, \3 ]% v, y6 B  //指定adc中断服务程序4 o) a# u. w% V+ |1 N# j5 y
  rINTMSK=~BIT_ADC; //ADC Touch Screen Mask bit clear
1 L# A0 ^! j# T, o' L  rINTSUBMSK=~(BIT_SUB_TC);
. V; ]: d! \! J  S# V  //使能中断 当触摸笔按下时 触发INT_TC中断8 o0 W' K. u" E' J) y4 Y* d/ M4 q
  }
$ f* k' E0 _2 W  //触摸屏中断函数' O6 w* C; Y2 `1 E" e' U+ A7 B0 r
  void __irq AdcTsAuto(void)* R! X! ]2 ]  ]+ P# Y
  {
' E- Z, K. C& C% {  //ADCDAT0[15]==1 触摸笔未按下
+ B* l$ M* g4 M  //ADCDAT0[15]==0 触摸笔按下
* b- w8 }1 J$ P  if(rADCDAT0&0X8000)- s1 n; k. V% t/ M7 G6 |$ K' A
  return ;0 L# @) k5 R! q% A0 g' ]
  rINTMSK |= (BIT_ADC);
% ]0 j" }: W- b  //禁止adc中断8 N& {( a  o1 _- E  a/ I" A2 p2 h
  rSUBSRCPND|=BIT_SUB_TC ;
; c( V; \" _) L: I2 c5 _  //禁止adc的子中断
. w# \5 {( Y0 A9 b2 i% a* K  rADCTSC=(1<<3)|(1<<2); //Pull-up disable, Seq. X,Y postion measure.
6 A4 L: T( M: \9 M. I  //xp上拉禁止 自动顺序测量x y位置2 R& H% F7 t* S2 r
  rADCCON|=0x1; //start ADC* v! T+ a# m+ ?. s0 s
  while(rADCCON & 0x1); //check if Enable_start is low
7 C5 N0 K: B! i% k  //adc一旦开始 将自动使ADCCON[0]=0
5 P9 L4 P9 m# x4 R  while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high, This line is necessary~!!7 I' C  l( g0 U# B2 a! P+ w
  //adc结束时,ADCCON[15]==1
) J8 N/ q& C; j% O: o7 ^  while(!(rSRCPND & (BIT_ADC))); //check if ADC is finished with interrupt bit- E! G6 o6 Y+ P8 n8 b
  //等待ADC结束(不管后级中断是否传递 adc完成后 此处应该被置位)* i6 V. A( t% p; m
  point.x = (rADCDAT0&0x3ff);- K6 E: k; a) p2 W6 Q4 _4 n( f
  point.y = (rADCDAT1&0x3ff);
, l" ]& e, [1 C5 s, K6 _: U2 Y5 X  //获取x y方向的adc值 更新坐标点
3 _& S# z' p) B; D9 O& g$ X  Uart_Printf("XP=%04d, YP=%04dn",point.x, point.y); //X-position Conversion data
" n( A, e, Q) B2 h5 C; ]4 y; ?  ClearPending(BIT_ADC);; G% ^! l) D8 b
  rSUBSRCPND|=BIT_SUB_TC ;6 Y: w0 k1 @& _5 K6 C
  //清adc中断9 `: t: A% K! m& J' ]! y
  Init_Touchpanel();
3 Q' J0 {, e) m, j# {9 p- T  //重新初始化触摸屏
% h( ~. E. y/ g' j- F% i/ \  }2 C2 y8 I# ^7 ?" j2 @( ~( _" ?
  2.检测在按下~弹起两个状态中间的x y坐标值 定时检测并更新坐标;
# e, x! J7 _5 @3 \2 H4 m! V  实现:
6 a' g7 ?8 W- L5 w  a 将adc 触摸屏接口设置为检测按下触摸笔中断;$ z1 J! B' J( Q* M
  b 在adc按下触摸笔中断函数中 将adc的中断服务程序重新指定为弹起触摸笔中断函数;
$ u/ w, \: q) r; }7 k3 G* ]3 N  c 在adc按下触摸笔中断函数中 启动定时器定时进行ADC 采集XY坐标值 或在每次读取坐标值的时候进行ad转换 获取坐标值;
0 S$ o8 U' y, R; w  d 在adc弹起触摸笔中断函数中 关闭定时器 停止采集x y坐标;" ?, d! \9 D. G0 T5 }6 q; L; t

该用户从未签到

2#
发表于 2016-5-16 13:48 | 只看该作者
楼主辛苦了!感谢分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 02:19 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表