⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 touch.h

📁 基于ADS1.2环境编写的操作NANDFLASH存储器的移植了UC/OS-II的源代码
💻 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 + -