//====================================================================================
//文 件 名:TouchPanel.c
//功能描述: 触摸屏驱动程序
//====================================================================================

#include "TouchPanel.h"
#include "2440lib.h"
#include "option.h"
#include "2440addr.h"
#include "uart/uart.h"

#define ADCPRS 39

short ResultX;
short ResultY;

void __irq Adc_or_TsSep(void);
//=============================================================
//语法格式:void Touch_Init(void)
//实现功能:触摸屏驱动初始化,初始化变量、ADC、IO等,并开启ADC中断
//参数: 无
//返回值: 无
//=============================================================
void Touch_Init(void)
{
ResultX = -1;
ResultY = -1;

rADCDLY = (5000);  // ADC Start or Interval Delay

rADCCON = (1<<14)|(ADCPRS<<6)|(0<<3)|(0<<2)|(0<<1)|(0);
 // Enable Prescaler,Prescaler,AIN7/5 fix,Normal,Disable read start,No operation
rADCTSC = (0<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(3);//等待按下模式
 // Down,YM:GND,YP:AIN5,XM:Hi-z,XP:AIN7,XP pullup En,Normal,Waiting for interrupt mode

//清中断
rSRCPND |= BIT_ADC;
rINTPND |= BIT_ADC;
rSUBSRCPND|= BIT_SUB_TC;
rSUBSRCPND |= BIT_SUB_ADC;
//打开TC中断
rINTMSK &=~(BIT_ADC);
rINTSUBMSK &=~(BIT_SUB_TC);
rINTSUBMSK |= (BIT_SUB_ADC); //关闭触ADC转换中断
pISR_ADC   = (unsigned)Adc_or_TsSep;
}

//=============================================================
//语法格式:void Touch_ADC_ISR(void);
//实现功能:TC中断服务子程序
//参数: 无
//返回值: 无
//=============================================================
void __irq Adc_or_TsSep(void)
{
unsigned int valx, valy;
int i;

rSUBSRCPND |= BIT_SUB_TC;
ClearPending(BIT_ADC);

if(rADCDAT0&0x8000)
{
Uart_Printf("\nStylus Up!!\n");
rADCTSC &= ~(0x01<<8);    // Set stylus down interrupt
}
else 
{
Uart_Printf("\nStylus Down!!\n");

// 采集X轴
rADCTSC=(0<<8)|(0<<7)|(1<<6)|(1<<5)|(0<<4)|(1<<3)|(0<<2)|(1);
valx = 0;
for(i=0;i<5;i++)
{
rADCCON|=0x1;               
while(rADCCON & 0x1);      
while(!(0x8000&rADCCON));   
valx += (0x3ff&rADCDAT0);
}
valx /= 5;

// 采集Y轴
rADCTSC=(0<<8)|(1<<7)|(0<<6)|(0<<5)|(1<<4)|(1<<3)|(0<<2)|(2);
valy = 0;
for(i=0;i<5;i++)
{
rADCCON|=0x1;              
while(rADCCON & 0x1);      
while(!(0x8000&rADCCON));  
valy += (0x3ff&rADCDAT1);
}
valy /= 5;

// 计算X和Y坐标
  ResultX = TOUCH_WIDTH * ( TOUCH_DEFAULT_RB -valx) / (TOUCH_DEFAULT_RB - TOUCH_DEFAULT_LB);
  ResultY = TOUCH_HEIGHT * (valy - TOUCH_DEFAULT_TB) / (TOUCH_DEFAULT_BB - TOUCH_DEFAULT_TB);

// 恢复到等待台起中断模式
rADCTSC=(1<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(3);
}
}

//=============================================================
//语法格式:short Touch_Get(short *x, short *y);
//实现功能:触摸屏获取触摸坐标函数
//参数: *x: 触摸点的横坐标; *y: 触摸点的纵坐标
//返回值: 无
//=============================================================
short Touch_Get(short *x, short *y)
{
if(ResultX != -1)
{
*x = ResultX ;
*y = ResultY;
ResultX = -1;
ResultY = -1;
return 0;
}
else
{
*x = -1;
*y = -1;
return -1;
}
}

TOUCH  PANEL相关推荐

  1. Linux学习第五篇之文件处理命令touch、cat、tac、more、less、head、tail

    一.touch命令: 命令名称:touch 命令所在路径:/bin/touch 执行权限:所有用户 语法:touch [文件名] 功能描述:创建空文件 例子: touch leanring.file ...

  2. linux touch 源码,每天一个Linux命令(09)--touch命令

    linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件. 1.命令格式: touch  [选项]··· 文件··· 2.命令参数: -a 或 ...

  3. 如何选择Sencha Touch和jQuery Mobile

    如果你正在面临是选择 jQuery Mobile 或者是 Sencha Touch ,那么下面这些因素是你需要考虑的. jQuery Mobile JM 只是一个 UI 库,依赖于 jQuery 和 ...

  4. JS事件监听手机屏幕触摸事件 Touch

    JS移动客户端--触屏滑动事件 移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的t ...

  5. PPC挑战上网本 多普达Touch HD使用评测

    智能手机越来越强大,是现在手机发展的大势所趋.如同顽石逐步蜕变为美玉的过程一样,手机由一个大块头的无线通信工具逐渐演变.缩小进入人们的口袋.同时,其小巧的机身在不断的"进化中"集合 ...

  6. Scrolling DIV and Canvas flicker on iPhone/iPad touch

    最近一直在优化一个网站,为了使其能在移动设备上有更好的用户体验,我们做了许多调整,包括将所有的Flash和Silverlight控件替换成HTML5,以及添加一些针对触屏的事件等.在下一篇文章中我会介 ...

  7. linux用户空间 限制吗,在Linux中限制用户空间

    在Linux中限制用户的磁盘使用空间使用的是Quota,一般Quota在安装Linux时就已包括在内核中,不需要另行安装.Quota可以从两方面指定磁盘的储存限制: 使用者所能够支配的索引节点(ino ...

  8. 对 makefile 中 .SECONDARY 的学习体会

    上例子 LIBS=foo.gao bar.gao .INTERMEDIATE:$(LIBS) .SECONDARY:bar.gao all: $(LIBS) #pass foo.gao: @echo ...

  9. 【Linux笔记(002) 】-- centos7 文档操作基本命令

    索引: 目录索引 一.cd -- ChangeDirectory a) 切换到 /DemoLM/ 文件夹 b) 回到用户 Home 根目录:是哪个账户登录的就会进入哪个用户的根目录 二.pwd -- ...

  10. 【学神-RHEL7】1-4-1-Linux文件管理和恢复误删除的文件

      Linux基本文件管理 本节所讲内容: Linux系统目录结构 相对/绝对路径 创建/复制/删除文件 rm -rf / 意外事故 查看文件内容 xfs文件系统的备份和恢复 extundelete恢 ...

最新文章

  1. Android手机系统adb常用的命令
  2. STM32F4 HAL库开发 -- STM32F407引脚图
  3. TCGA样本命名详解
  4. 错误处理在Spring Integration中如何工作
  5. Spring框架IOC和AOP的实现原理(概念)
  6. perl uc,lc,ucfirst,lcfirst的用法
  7. 为什么哲学是最难的学科_世界十大哲学难题:全球哲学家都苦恼的哲学问题盘点...
  8. 【案例4-8】模拟物流快递系统
  9. python刷步数程序设计_【云函数 小米运动刷步数】云函数刷步数
  10. windowsServer安装sqlServer2008
  11. 奇葩问题☞ npm install 报错 gyp ERR
  12. 排列显示阿拉伯语、数字及英文时的处理方法
  13. 厦门大学计算机专业,厦门大学计算机科学系专业介绍
  14. 局域网服务器文件夹隐藏,共享文件设置隐藏 隐藏共享文件夹的方法
  15. 堆溢出(DwordShoot)利用SEH异常处理
  16. 每日缺口分析-统计1991年以来股市每天产生的缺口数量
  17. vue3项目使用prettier格式化代码
  18. java三国将星录_【图片】《三国将星录威力加强版》简评与前几关心得【曹操传吧】_百度贴吧...
  19. Python爬取安居客房产经纪人信息
  20. oracle 小项目实战总结

热门文章

  1. 【工具类】数据脱敏工具类
  2. win10北通手柄没反应_【游戏手柄攻略】WIN10怎样校准和设置游戏手柄
  3. python中os关于目录创建和文件移动操作
  4. PHP中json对象转数组过程中去除字符串中的换行与数字方法
  5. axure插件安装360浏览器
  6. LTE 调制与解调——QPSK,16QAM,64QAM误码率比较
  7. oracle中rollup函数与mysql中with rollup区别
  8. 【Qt一骚操作】Qt语言家 Qt Linguist 使用 【总结】
  9. Java Spring Security 安全框架:(四)PasswordEncoder 密码解析器详解
  10. 大一计算机信息技术重点知识,大学计算机信息技术教程必考点知识归纳