📄 touch.h
字号:
#include "44b.h"
#include "def.h"
#include "44blib.h"
//ads7846同CPU之间的时序:CPU送一个命令字节后ads7846回送两字节的数据
#define COMMAND_GET_X 0xD1 //CPU=>ads7846的读X方向命令
#define COMMAND_GET_Y 0x91 //CPU=>ads7846的读Y方向命令
#define LCD_XSIZE 320 //LCD的X族方向的点数
#define LCD_YSIZE 240 //LCD的Y族方向的点数
/********************************************************
* *
* 以下的常量是通过调用校准函数得出 *
* 通常每个触摸屏由于其本身材料及制造的不同 *
* 这些值都有所差异 *
* 在实验中第一步就是分别按下触摸屏的四个角 *
* 分析得出这四个值 *
* *
********************************************************/
#define XORDINAMAX 0x0E78 //X方向A/D最大值
#define XORDINAMIN 0x180 //X方向A/D最小值
#define YORDINAMAX 0x0DB8 //Y方向A/D最大值
#define YORDINAMIN 0x260 //Y方向A/D最小值
#define LCD_TOUCH_BUFFER_SIZE 128
/******************************************************************
* (0,0) (320,0) (小,大) (大,大) *
* ----------------- ----------------- *
* | | | | *
* | | | | *
* | LCD | | A/D值 | *
* | (x,y) | | (X,Y) | *
* | | | | *
* | | | | *
* ----------------- ----------------- *
* (0,240) (320,240) (小,小) (大,小) *
* *
* 上面说明了LCD上的坐标同ads7846的A/D转换值之间的换算关系 *
* *
* 由上推出下列公式: *
******************************************************************/
#define ADC2X(adc) (((adc-XORDINAMIN)*LCD_XSIZE/(XORDINAMAX-XORDINAMIN))%(LCD_XSIZE))
#define ADC2Y(adc) (((YORDINAMAX-adc)*LCD_YSIZE/(YORDINAMAX-YORDINAMIN))%(LCD_YSIZE))
//CS PE5
//CLK PF8=SIOCLK
//DIN PF5=SIOTXD
//DOUT PF7=SIORXD
//BUSY PF6=SIORDY
//PenIrq PG7=EXINT7
#define CS_L() rPDATE &= 0xffdf //ads7846的片选选中
#define CS_H() rPDATE |= 0x0020 //拆除ads7846的片选
#define CLK_L() rPDATF &= 0xfeff //CLK 低
#define CLK_H() rPDATF |= 0x0100 //CLK 高
#define DIN_L() rPDATF &= 0xffdf //ads7846的命令输入腿 低
#define DIN_H() rPDATF |= 0x0020 //ads7846的命令输入腿 高
#define DOUT() (rPDATF & 0x80)?1:0 //读ads7846的数据输出腿
#define BUSY() (rPDATF & 0x40) //判ads7846内A/D转换完成?
void Ads7846_Delay(void); //CLK 的时钟脉宽,太快时ads7846不能接收
//INT8U GetDInt();
//发送8bit的命令到ads7846(DIN 腿)
void Ads7846_SendCommand(INT8U ucCommand);
//ads7846返回12BIT的A/D转换值
INT32U Ads7846_Get(INT8U ucCommand);
//读取完整的A/D值(X,Y)并换算成对应的LCD坐标(x,y)
INT32U QueryAds7846(void);
//CS PE5
//CLK PF8=SIOCLK
//DIN PF5=SIOTXD
//DOUT PF7=SIORXD
//BUSY PF6=SIORDY
//PenIrq PG7=EXINT7
void Ads7846_Portinit(void);
/****************************************************************
* *
* 按触摸屏的四个角分析得出 *
* XORDINAMAX //X方向A/D最大值 *
* XORDINAMIN //X方向A/D最小值 *
* YORDINAMAX //Y方向A/D最大值 *
* YORDINAMIN //Y方向A/D最小值 *
* 然后校准上面的定义,再重新编译 *
****************************************************************/
void CheckTouch(void);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -