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

📄 ads7843.c

📁 本代码包含已经移植好的UCGUI代码,控制器是S3C44B0,通过UCGUI,在LCD上图片显示.
💻 C
字号:
#include "44b.h"
#include "44blib.h"
#include "def.h"
#include "ads7843.h"
//#include "..\inc\lcdlib.h"
//#include "..\inc\glib.h"
//#include "..\inc\slib.h"

//typedef struct {int Min; int Max; } tMinMax;
//
//static tMinMax xyMinMax[2] = {
//#if ((GUI_TOUCH_SWAP_XY==0) && (GUI_TOUCH_MIRROR_X==0)) || ((GUI_TOUCH_SWAP_XY) && (GUI_TOUCH_MIRROR_Y==0))
//  { GUI_TOUCH_AD_LEFT, GUI_TOUCH_AD_RIGHT },
//#else
//  { GUI_TOUCH_AD_RIGHT, GUI_TOUCH_AD_LEFT },
//#endif
//#if ((GUI_TOUCH_SWAP_XY==0) && (GUI_TOUCH_MIRROR_Y==0)) || ((GUI_TOUCH_SWAP_XY) && (GUI_TOUCH_MIRROR_X==0))
//  { GUI_TOUCH_AD_TOP,  GUI_TOUCH_AD_BOTTOM }
//#else
//  { GUI_TOUCH_AD_BOTTOM,  GUI_TOUCH_AD_TOP }
//#endif
//};
//
///*********************************************************************
//*
//*       Convert physical value into (logical) coordinates
//*/
//static int AD2X(int adx) {
//  int r = adx - xyMinMax[0].Min;
//  r *= GUI_TOUCH_XSIZE - 1;
//  return r / (xyMinMax[0].Max - xyMinMax[0].Min);    
//}
//
//static int AD2Y(int ady) {
//  int r = ady - xyMinMax[1].Min;
//  r *= GUI_TOUCH_YSIZE - 1;
//  return r/(xyMinMax[1].Max - xyMinMax[1].Min);    
//}

static void WR_CMD (U8 cmd) {
	U8 buf;
	U8 i,j;
	TP_CS(1);
	TP_DIN(0);
    TP_DCLK(0);
    TP_CS(0);	      		//芯片允许
	for(i=0;i<8;i++) {
		buf=(cmd>>(7-i))&0x1;	//MSB在前,LSB在后
		TP_DIN(buf);	 	//时钟上升沿锁存DIN
		
		for(j=0;j<25;j++);	//200ns
		TP_DCLK(1);			//开始发送命令字
		
		for(j=0;j<25;j++);	//200ns
		TP_DCLK(0);			//时钟脉冲,一共8个
	}
}

static U16 RD_AD(void) {
	U16 buf=0,temp;
	U8 i,j;
	TP_DIN(0);
	TP_DCLK(1);
	for(i=0;i<12;i++) {
		
		for(j=0;j<25;j++);	//200ns
		TP_DCLK(0);			
		for(j=0;j<5;j++);	
		temp=TP_DOUT;		//时钟下降沿读取,一共12个,MSB在前,LSB在后
		buf|=(temp<<(11-i));
		
		for(j=0;j<25;j++);	//200ns
		TP_DCLK(1);
	}
	for(i=0;i<4;i++) {
		for(j=0;j<25;j++);	//200ns
		TP_DCLK(1);
		for(j=0;j<25;j++);	//200ns
		TP_DCLK(0);			//4个没用时钟
	}	
	TP_CS(1); 				//禁止芯片
	buf&=0x0fff;			//屏蔽高4 bit
	return(buf);
}

int Read_X(void) { 
	int i;
	
	WR_CMD(CHX);
//	while(TP_BUSY);
	for(i=0;i<5;i++);
	i=RD_AD();
	return i;   
}

int Read_Y(void) { 
	int i;
	
	WR_CMD(CHY);
//	while(TP_BUSY);
	for(i=0;i<5;i++);
	i=RD_AD();
	return i;    
}
/******************************************************************************
 *	get A/D xy
 */
void TP_GetAdXY(int *x,int *y) {
	int adx,ady;
	
	adx=Read_X();
	ady=Read_Y();
	
	*x=adx;
	*y=ady;
}
///******************************************************************************
// *	get touchscreen xy
// */
//void TP_GetScrXY(int *x,int *y) {
//	int adx,ady,xx,yy;
//	
//	adx=Read_X();
//	ady=Read_Y();
//	xx=AD2X(adx);
//	yy=AD2Y(ady);
//	
//	*x=xx;
//	*y=yy;
//}
///******************************************************************************
// *	show the cursor
// */
//void ShowCursor(int x, int y) {
//	Glib_Line(x-2,y,x+2,y,0);
//	Glib_Line(x,y-2,x,y+2,0);
//}
///******************************************************************************
// *	test
// */
//#define TP_UP 	0
//#define TP_DOWN	1
//void tp_test(void)
//{
//    int adx,ady,scrx,scry,i;
//    U32 TpStatus=TP_UP;
//    for(;;){
//        if(TpStatus==TP_UP){			//笔未压下状态位
//        	if(!TP_IRQ){				//得到笔压下中断信号
//                Delay(50);
//                if(!TP_IRQ){			//两次检测防干扰
//                	TP_GetAdXY(&adx,&ady);	//读取A/D转换值
//                    TP_GetScrXY(&scrx, &scry); 	//读取屏幕坐标
//                    TpStatus=TP_DOWN;	//设置压下状态
//                    ShowCursor(scrx,scry);
//                    Uart_Printf("\nadx=%d,ady=%d,scrx=%d,scry=%d",adx,ady,scrx,scry);
//                }
//        	}
//    	}
//        if(TpStatus==TP_DOWN){			//笔已压下状态位
//            if(TP_IRQ) {				//笔中断信号已经消失
//                Delay(50);
//                if(TP_IRQ) { 			//两次检测防干扰
//                	TpStatus=TP_UP;		//设置笔未压状态位
//                }
//            }
//        }
//    if(GetKey()!=0xff)
//    	return;
//    }
//}
//void test2(void) {
//	int scrx,scry;
//    while(!TP_IRQ){
//    	
//		
//        TP_GetScrXY(&scrx, &scry); 	//读取屏幕坐标
//		PutPixel(scrx,scry,0);
////		Uart_Printf("\n XY(%4d,%4d)",scrx,scry);
//		
////		Delay(10000);
////		if(GetKey()!=0xff)
////    		return;
//  	}
//}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -