TOUCH PANEL
来源:互联网 发布:有哪些污的游戏知乎 编辑:程序博客网 时间:2024/05/21 11:22
//====================================================================================
//文 件 名: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;
}
}
//文 件 名: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
- NJY Touch Panel
- zz android touch panel
- Touch Panel调试
- Windows Mobile 触摸屏(Touch Panel)截获(Touch Panel伪驱动)
- Windows Mobile 触摸屏(Touch Panel)截获(Touch Panel伪驱动)
- Android Keyboard/Touch Panel分析
- ssd2531 Capacitive Touch Panel driver
- mtk android touch panel调试
- Android Keyboard/Touch Panel分析
- code of touch panel driver
- Sencha Touch实现点击Panel,切换带图片的Panel
- QTE对Input Touch Panel的支持
- WinCE下Touch Panel驱动介绍
- Windows Mobile 触摸屏(Touch Panel)截获
- Windows Mobile触摸屏(Touch Panel)截获(手写)
- WinCE下Touch Panel驱动介绍
- WinCE下Touch Panel驱动介绍
- android 报错java.io.IOException: Permission denied
- javascript:void(0) 与 # 锚点的 讲解
- ADC
- 从文件中读取字符串并格式取值的例子
- 常用的几个公式
- TOUCH PANEL
- 北京地铁6号线部分图形
- hdu 3789 hdoj 3789
- SPI 用例
- jquery 请求ie缓存,数据不更新的问题【ajax禁用缓存解决ie数据不更新的问题】
- 浅谈Javascript编码规范
- IBM Ponder This史上最难谜题:给出谜底猜谜面
- DM8168 EVM OMX
- mysql中的limit語句