当前位置:首页 > 单片机 > 单片机
[导读] 电阻式触摸屏的检测原理是触摸后引起上下两个导电层的接触,改变了电压输出,进行A/D转换后成了该点的X,Y坐标。 初始化AD和触摸口: void TouchSrceen_Test(void) { rADCDLY = 50000; //(1/3.68

电阻式触摸屏的检测原理是触摸后引起上下两个导电层的接触,改变了电压输出,进行A/D转换后成了该点的X,Y坐标。
初始化AD和触摸口:
void TouchSrceen_Test(void)

{

rADCDLY = 50000; //(1/3.68MHz)*50000 = 13.56ms
注: 在ADC转换之前用的是外部时钟X-tal clock:3.68MHz
之后才用到GLK: 50MHz

rADCCON = (1<<14)|(prescaler<<6);

注: bit[14]: 0--disable ADC 1--enable ADC bit[13:6]: prescaler = 9 ADC fleq = 50MHz/(9+1) = 5MHz

Uart_Printf("nTouch Screen testn");

rADCTSC = 0xd3;//waiting for interrupt Mode
注: bit[1:0]: 11--waiting for interrupt Mode
bit[2]:0--Normal ADC 1--Auto Sequential measurement of X-position,Y-position
bit[3]:0--XP pull-up enable1--XP pull-up disable
bit[4]: 0--XP output driver enable 1--XP output driver disable
bit[5]: 0--XM output driver disable1--XM output driver enable
bit[6]: 0--YP output driver enable 1--YP output driver disable
bit[7]: 0--YM output driver disable 1--YM output driver enable
bit[8]:0--stylus down interrupt signal 1--stylus up interrupt signal

pISR_ADC = (int)ADC_TCTest;

rINTMSK = ~(1<<31); //clear ADC MASK bit

rINTSUBMSK = ~(1<<9); //clear TouchScreen MASK bit

}

void __irq ADC_TCTest(void)

{

U32 saveADCDLY;

if(rADCDAT0 & 0.8000) //bit[15]:0--stylus down 1--stylus up

{

rADCTSC &= 0xff; //clear bit[8]:0 stylus down 1--stylus up

}

rADCTSC = (1<<3)|(1<<2);//disable XP pull-up

//auto sequential measurement of XY position

saveADCDLY = rADCDLY;

rADCDLY = 40000; //(1/50MHz)*40000=0.8ms
注:如下图,在需要对X,Y转换时切换到GCLK,之前用X-Tal

rADCCON |= 0x01; //start ADC

while(rADCCON & 0x1); //waiting for ADC startup

while(!(rADCCON & 0x8000)); //waiting for ADC end

while(!(rSRCPND & (0x1<<31)));//waiting for interrupt bit=1

xdata = rADCDAT0 & 0x3ff;

ydata = rADCDAT1 & 0x3ff;
注: 读取buffer里的X,Y坐标数据

if(((xdata-xdata_save > 5)||(xdata-xdata_save < -5))

||((ydata-ydata_save > 5)||(ydata-ydata_save < -5)))

{

Uart_Printf("X_value = %d,Y_value = %d,X_data = %d,Y_data = %dn",
xdata,ydata,xdata_save,ydata_save);

}

xdata_save = xdata;

ydata_save = ydata;


rSUBSRCPND |= (1<<9);

rINTSUBMSK =~(1<<9);

rSRCPND |= (0x1<<31);

rINTPND |= (0x1<<31);

rINTMSK = ~(0x1<<31);

注: 清所有跟中断有关的标志位,为下次中断做准备

rADCTSC =0xd3; //waiting for interrupt

rADCTSC |= 0x100;//stylus up

while(!(rSUBSRCPND & (1<<9)));//waiting for stylus up interrupt bit=1


Uart_Printf("The pen has stylus up.");

rSUBSRCPND |= (1<<9);

rINTSUBMSK =~(1<<9);

rSRCPND |= (0x1<<31);

rINTPND |= (0x1<<31);

rINTMSK = ~(0x1<<31);
注: 清所有跟中断有关的标志位,为下次中断做准备

rADCDLY = saveADCDLY;

rADCTSC &= ~0x100; //stylus down

}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

  本文根据网络视频采集的需要,将网络传输与视频采集相结合,设计了以S3C2440为核心的USB摄像头视频采集和嵌入式Linux系统下的视频服务器,从而实现了远程网络视频信息采集。   

关键字: s3c2440 视频采集 usb摄像头

         之前在提起自动化或是智能化时,人们会不自觉的想到工业生产,这是因为自动化这个字眼进入中国,确实是以工业

关键字: 嵌入式 Linux s3c2440 视频采集

  引言   随着科技的不断发展,以数据业务为主的固定宽带无线接入技术发展已经很成熟,而移动宽带无线通信技术还并没有得到广泛的应用。由于移动宽带无线接入系统需要解决带宽、移动性和覆盖范围

关键字: IPv6 s3c2440 x86 架构

  1 引言   人们生活水平的提高以及科技的进步,特别是计算机技术、网络技术和通信技术的发展,智能家居将慢慢成为未来家居生活的发展方向。1984年在美国诞生了世界上第一座智能家居建筑,

关键字: boa nrf24l01 s3c2440 智能家居

我们知道2440开发流程为:移植uboot--》移植内核---》挂接根文件系统。我们移植完内核需要挂接根文件系统,那么首先我们必须拥有根文件系统。如何来制作我们的根文件系统呢?第一步:在linux下建

关键字: s3c2440 根文件系统

1.TQ2440u-boot-1.1.6修改文件所在的路径是u-boot-1.1.6includeconfigsEmbedSky.h将#defineLCD_TFTxxx(LCD类型)W353.5寸TFT4802724.3...

关键字: s3c2440 lcd参数

2440的晶振频率为12MHZ,有两个PLL:MPLL和UPLL,其中MPLL产生FCLK、HCLK、PCLK;UPLL产生UCLK。FCLK为ARM核提供时钟,HCLK为AHB总线时钟,PCLK为APB总线时钟,UCL...

关键字: s3c2440 时钟初始化

开发板:TQ2440内核:Linux 2.6.32PC OS:Ubuntu 11.041.配置内核打开I2C功能:打开杂项设备,该选项打开后,EEPROM也就打开了。2. 修改代码修改文件: linux/arch/arm...

关键字: at24c02 eeprom s3c2440 移植 linux驱动

在分析ARM-Linux s3c2440中UART的时有必要先了解 s3c2440A中串口的硬件知识。硬件篇:S3c2440A串口提供三个独立的异步串行通信I/O端口(asynchronousserial I/O por...

关键字: ARM Linux s3c2440 uart

s3c2440 cpu的默认工作主频有两种12MHz和16.9344MHz,也就是我们的晶振的频率,但一般12MHz的晶振用的比较多,Fin就是指我们接的晶振频率。大家都知道s3c2440上电正常工作后频率是远远大于12...

关键字: s3c2440 时钟
关闭
关闭