亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 3543觸摸屏源程序.c

?? 觸摸屏驅動s3c2410,在網上套的希望對各位有幫助
?? C
字號:
#include <string.h>
#include "2410addr.h"
#include "2410lib.h"
#include "Ts_auto.h"
#include "def.h"
#include "lcdlib.h"
#include "glib.h"
#include "lcd.h"

#define TFT640_480	1
#define TFT320_240	2
#define LCD_TYPE	TFT320_240

#define ADCPRS 49
#define Touch_Up 0x1
#define Touch_Down	0x2

#define TouchSample 9


#define TOUCH_MAX_X 1000
#define TOUCH_MIN_X 45
#define TOUCH_MAX_Y 1000
#define TOUCH_MIN_Y 35

#define TOUCH_X	320
#define TOUCH_Y	240

#define FILTER_LIMIT 10

// Maximum allowed variance in the X coordinate samples
#define DELTA_X_COORD_VARIANCE          0x2
// Maximum allowed variance in the X coordinate samples.
#define DELTA_Y_COORD_VARIANCE          0x2
	
//ADC delay time 
#define ADC_DELAY_TIME	0x1400


int	Flag_Touch;
int	gTouchStartSample;

int Touch_Pen_filtering(int *px, int *py)
{
	int RetVal = TRUE;
	// TRUE  : Valid pen sample
	// FALSE : Invalid pen sample
	static int count = 0;
	static int x[2], y[2];
	int TmpX, TmpY;
	int dx, dy;
	
	count++;

	if (count > 2) 
	{ 
		// apply filtering rule
		count = 2;
		
		// average between x,y[0] and *px,y
		TmpX = (x[0] + *px) / 2;
		TmpY = (y[0] + *py) / 2;
		
		// difference between x,y[1] and TmpX,Y
		dx = (x[1] > TmpX) ? (x[1] - TmpX) : (TmpX - x[1]);
		dy = (y[1] > TmpY) ? (y[1] - TmpY) : (TmpY - y[1]);
		
		if ((dx > FILTER_LIMIT) || (dy > FILTER_LIMIT)) 
		{
			// Invalid pen sample

			*px = x[1];
			*py = y[1]; // previous valid sample
			RetVal = FALSE;
			count = 0;
		} 
		else 
		{
			// Valid pen sample
			x[0] = x[1]; y[0] = y[1];		
			x[1] = *px; y[1] = *py; // reserve pen samples
			
			RetVal = TRUE;
		}
		
	} 
	else 
	{ // till 2 samples, no filtering rule
	
		x[0] = x[1]; y[0] = y[1];		
		x[1] = *px; y[1] = *py; // reserve pen samples
		
		RetVal = FALSE;	
	}
	
	return RetVal;
}


void Touch_CoordinateConversion(int *px, int *py)
{
	int TmpX, TmpY;
	int temp;

	TmpX = (*px >= TOUCH_MAX_X) ? (TOUCH_MAX_X) : *px;
	TmpY = (*py >= TOUCH_MAX_Y) ? (TOUCH_MAX_Y) : *py;

	TmpX -= TOUCH_MIN_X;
	TmpY -= TOUCH_MIN_Y;

	TmpX = (TmpX) ? TmpX : 0;
	TmpY = (TmpY) ? TmpY : 0;

	*px = (TmpX* TOUCH_X)  / (TOUCH_MAX_X-TOUCH_MIN_X);
	*py = (TmpY* TOUCH_Y)  /  (TOUCH_MAX_Y-TOUCH_MIN_Y) ;
	
	return;
}

void __irq Adc_or_TsAuto(void)
{
	int ptx,pty;
	rINTSUBMSK|=(BIT_SUB_ADC|BIT_SUB_TC);	// Mask sub interrupt (ADC and TC) 

    // TC(Touch screen Control) Interrupt	
    if(rADCTSC&0x100)
    {
	//Uart_Printf("Stylus Up!!\n");
	Flag_Touch=Touch_Up;
	rADCTSC&=0xff;	// Set stylus down interrupt
    }
    else 
    {
	//Uart_Printf("Stylus Down!!\n");
	// <Auto X-Position and Y-Position Read>
	rADCTSC=(0<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(1<<3)|(1<<2)|(0);
	// Stylus Down,Don't care,Don't care,Don't care,Don't care,XP pullup Dis,Auto,No operation

	rADCCON|=0x1;	// Start Auto conversion

	while(rADCCON & 0x1);		//check if Enable_start is low
	while(!(0x8000&rADCCON));	// Check ECFLG

	ptx=(0x3ff&rADCDAT0);
	pty=(0x3ff&rADCDAT1);
	
	rADCTSC=(1<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(3);
	Flag_Touch=Touch_Down;
   	// Stylus Up,Don't care,Don't care,Don't care,Don't care,XP pullup En,Normal,Waiting mode
    }
    rSUBSRCPND|=BIT_SUB_TC;
    rINTSUBMSK=~(BIT_SUB_TC);	// Unmask sub interrupt (TC)     
    ClearPending(BIT_ADC);
}

//---------------------------------------------------------------------
void __irq Timer4Intr(void)
{

	rINTMSK |= BIT_TIMER4 ;
	if(Flag_Touch==Touch_Down)
		gTouchStartSample=TRUE;
	else 
		gTouchStartSample=FALSE;
	ClearPending(BIT_TIMER4);
	rINTMSK = ~(BIT_TIMER4) ;
}
			

void Ts_Auto(void)
{
	int 	i,ptx[TouchSample],pty[TouchSample];
	int   px[3],py[3];
	int 	tmx,tmy;
	int    	dlXDiff0;
    	int    	dlXDiff1;
    	int    	dlXDiff2;
    	int    	dlYDiff0;
    	int    	dlYDiff1;
    	int    	dlYDiff2;
	char 	command;
		
	Uart_Printf("[Touch Screen Test.]\n");
	Uart_Printf("Auto X/Y position conversion mode test\n");

// init LCD
	Lcd_Port_Init();

	Lcd_Init(MODE_TFT_16BIT_320240);
	Glib_Init(MODE_TFT_16BIT_320240);

	Lcd_PowerEnable(0, 1);
	Lcd_EnvidOnOff(1);

 	Glib_FilledRectangle(0,0,319,239,0xf800);    

	Uart_Printf("Init  TFT 640*480 16BPP, input any key to continue test \n");
	Uart_Getch();  	
	
	Glib_ClearScr(0, MODE_TFT_16BIT_320240);
  
	Uart_Printf("\nStart on Touch Screen test   \n\n1,input 'c' is clear sreen to black color  \n2,other key is exit this test to menu \n\n\n");

	gTouchStartSample=FALSE;
	Flag_Touch=Touch_Up;

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

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

	//Init TIMER4 Register
	rTCFG0 = rTCFG0 &(~(0xFF<<8))| (0xF<<8);         //Prescaler1=15(0x0f)
	rTCFG1  =rTCFG1 & (~( 0xF<<16))&(~(0xF<<20));         //all interrupt,Mux4=1/2
	 //Timer input clock frequency = PCLK/(prescaler value+1)/(divider value)
	rTCNTB4 = 0x3D09;           //(1/(50MHz/16/2 )) * 0x3D09(15625) = 0.01s (100Hz)

	pISR_ADC=(unsigned)Adc_or_TsAuto;
	pISR_TIMER4=(unsigned)Timer4Intr;
	rINTMSK=~(BIT_ADC);
	rINTSUBMSK=~(BIT_SUB_TC);
	rINTMSK = ~(BIT_TIMER4) ;

	rTCON   = rTCON  & (~(0x7<<20)) | (0x6<<20);         //Auto reload, Manual update,  Stop     
	rTCON   = rTCON  & (~(0x7<<20)) | (0x5<<20);         //Auto reload,Start

	while(1)
	{
		while(gTouchStartSample)
		{
			gTouchStartSample=FALSE;
			
			for(i=0;i<TouchSample;i++)
			{
				// <Auto X-Position and Y-Position Read>
				rADCTSC=(0<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(1<<3)|(1<<2)|(0);
				// Stylus Down,Don't care,Don't care,Don't care,Don't care,XP pullup Dis,Auto,No operation
				rADCCON|=0x1;	// Start Auto conversion

				while(rADCCON & 0x1);		//check if Enable_start is low
				while(!(0x8000&rADCCON));	// Check ECFLG

				ptx[i]=(0x3ff&rADCDAT0);
				pty[i]=(0x3ff&rADCDAT1);
			}

			px[0]=(ptx[0]+ptx[1]+ptx[2])/3;
			px[1]=(ptx[3]+ptx[4]+ptx[5])/3;
			px[2]=(ptx[6]+ptx[7]+ptx[8])/3;

			py[0]=(pty[0]+pty[1]+pty[2])/3;
			py[1]=(pty[3]+pty[4]+pty[5])/3;
			py[2]=(pty[6]+pty[7]+pty[8])/3;

		//X  Difference 
			dlXDiff0 = px[ 0 ] - px[ 1 ];
			dlXDiff1 = px[ 1 ] - px[ 2 ];
			dlXDiff2 = px[ 2 ] - px[ 0 ];
			dlXDiff0 = dlXDiff0 > 0  ? dlXDiff0 : -dlXDiff0;
			dlXDiff1 = dlXDiff1 > 0  ? dlXDiff1 : -dlXDiff1;
			dlXDiff2 = dlXDiff2 > 0  ? dlXDiff2 : -dlXDiff2;
			
		// The final X coordinate is the average of coordinates of the two MIN of the differences.
			if ( dlXDiff0 < dlXDiff1 )
			{
			    if ( dlXDiff2 < dlXDiff0 )
			    {
			        tmx = ( ( px[ 0 ] + px[ 2 ] ) >> 1 ) ;
			    }
			    else
			    {
			        tmx =  ( ( px[ 0 ] + px[ 1 ] ) >> 1 );
			    }
			}
			else if ( dlXDiff2 < dlXDiff1 )
			{
			    tmx = ( ( px[ 0 ] + px[ 2 ] ) >> 1 ) ;
			}
			else
			{
			    tmx = ( ( px[ 1 ] + px[ 2 ] ) >> 1 ) ;
			}
			
		//Y Difference 
			dlYDiff0 = py[ 0 ] - py[ 1 ];
			dlYDiff1 = py[ 1 ] - py[ 2 ];
			dlYDiff2 = py[ 2 ] - py[ 0 ];
			dlYDiff0 = dlYDiff0 > 0  ? dlYDiff0 : -dlYDiff0;
			dlYDiff1 = dlYDiff1 > 0  ? dlYDiff1 : -dlYDiff1;
			dlYDiff2 = dlYDiff2 > 0  ? dlYDiff2 : -dlYDiff2;

		// The final Y coordinate is the average of coordinates of the two MIN of the differences.
			if ( dlYDiff0 < dlYDiff1 )
			{
			    if ( dlYDiff2 < dlYDiff0 )
			    {
			        tmy = ( ( py[ 0 ] + py[ 2 ] ) >> 1 ) ;
			    }
			    else
			    {
			        tmy =  ( ( py[ 0 ] + py[ 1 ] ) >> 1 );
			    }
			}
			else if ( dlYDiff2 < dlYDiff1 )
			{
			    tmy = ( ( py[ 0 ] + py[ 2 ] ) >> 1 ) ;
			}
			else
			{
			    tmy = ( ( py[ 1 ] + py[ 2 ] ) >> 1 ) ;
			}

			if ( 	dlXDiff0 > DELTA_X_COORD_VARIANCE &&
				dlXDiff1 > DELTA_X_COORD_VARIANCE &&
				dlXDiff2 > DELTA_X_COORD_VARIANCE &&
				dlYDiff0 > DELTA_Y_COORD_VARIANCE &&
				dlYDiff1 > DELTA_Y_COORD_VARIANCE &&
				dlYDiff2 > DELTA_Y_COORD_VARIANCE 	)
			{
			//if =-1 the option will omit
				tmx=-1;
				tmy=-1;
			}

			rADCTSC=(1<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(3);

			if(tmx!=-1|| tmy!=-1)
			{
				Touch_CoordinateConversion(&tmx,&tmy);

				Touch_Pen_filtering(&tmx,&tmx);

				PutPixel(tmx,tmy,0xf800);
			}

			command=Uart_GetKey();
			if(command=='c')
				Glib_ClearScr(0, MODE_TFT_16BIT_640480);
			else if(command !=0)
				return;
			
			Uart_Printf("[%04d,", tmx);
			Uart_Printf("%04d]     ", tmy);
		}
	}

	Uart_Printf("\nType any key to exit!!!\n");
	Uart_Printf("\nStylus Down, please...... \n");
	Uart_Getch();

	rINTSUBMSK|=BIT_SUB_TC;
	rINTMSK|=BIT_ADC;
	Uart_Printf("[Touch Screen Test.]\n");

	MoveViewPort(MODE_TFT_16BIT_320240);
	Lcd_MoveViewPort(0,0,MODE_TFT_16BIT_320240);
	Lcd_EnvidOnOff(0);
	Lcd_Port_Return();
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀av一级做a爰片久久| 日韩精品一区二区三区老鸭窝| 亚洲国产成人自拍| 国产精品亚洲成人| 国产精品久久三区| 日本久久电影网| 日韩中文字幕1| 精品国产乱码久久久久久蜜臀| 国产精品一区在线| 一色屋精品亚洲香蕉网站| 91福利在线看| 日本麻豆一区二区三区视频| 亚洲精品一线二线三线| www.亚洲国产| 亚洲成人福利片| 久久久久久电影| 在线精品国精品国产尤物884a| 免费观看91视频大全| 欧美激情一区不卡| 欧美日本一道本| 成人一级黄色片| 亚洲高清不卡在线| 国产视频亚洲色图| 欧美亚洲动漫另类| 国产精品亚洲成人| 五月激情综合网| 中文字幕一区二区在线观看 | 亚洲午夜精品在线| 日韩精品一区二区在线| 91玉足脚交白嫩脚丫在线播放| 日韩av电影天堂| 国产精品久久看| 日韩欧美在线123| 99久久久国产精品| 精品午夜一区二区三区在线观看| 日韩一区欧美小说| 日韩欧美国产电影| 日本精品一区二区三区高清 | 色中色一区二区| 久久精品国产亚洲高清剧情介绍| 亚洲免费av观看| 久久蜜桃香蕉精品一区二区三区| 欧美三级视频在线播放| 不卡免费追剧大全电视剧网站| 免费成人结看片| 亚洲制服丝袜在线| 中文字幕欧美一| 久久精品亚洲精品国产欧美kt∨| 欧美精品一二三| 色天使色偷偷av一区二区| 国产河南妇女毛片精品久久久| 五月综合激情婷婷六月色窝| 亚洲男同1069视频| 国产精品久久久久桃色tv| 精品国产1区2区3区| 欧美日韩国产高清一区二区三区 | 91精品蜜臀在线一区尤物| 91社区在线播放| 成人禁用看黄a在线| 国产精品一区专区| 国产一区不卡精品| 久久99国产精品久久| 视频在线观看一区二区三区| 一区二区三区四区国产精品| 亚洲视频一区在线| 国产精品不卡视频| 国产精品久久久久久久蜜臀 | 色综合天天综合给合国产| 成人综合婷婷国产精品久久蜜臀 | 怡红院av一区二区三区| 成人欧美一区二区三区1314| 日本一区二区三区久久久久久久久不 | 一本大道久久a久久精二百 | 日韩avvvv在线播放| 亚洲二区视频在线| 日本大胆欧美人术艺术动态| 日本午夜精品视频在线观看| 日本伊人精品一区二区三区观看方式| 亚洲一区二区三区视频在线播放 | 精品国产髙清在线看国产毛片| 欧美一区二区三区播放老司机| 欧美精品在欧美一区二区少妇| 欧美精品欧美精品系列| 日韩欧美国产一区二区三区 | 国产欧美日本一区二区三区| 久久久精品黄色| 国产精品入口麻豆原神| 亚洲欧洲www| 亚洲国产aⅴ成人精品无吗| 亚洲国产va精品久久久不卡综合 | 欧美国产精品一区二区| 国产精品久久福利| 一区二区三区日韩精品| 丝袜美腿亚洲一区| 极品销魂美女一区二区三区| 成人的网站免费观看| 在线亚洲精品福利网址导航| 在线综合视频播放| 久久久综合视频| 亚洲欧美一区二区在线观看| 香蕉成人伊视频在线观看| 久久99久久99小草精品免视看| 国产激情一区二区三区四区| 91丨porny丨户外露出| 91麻豆精品国产91久久久久久 | 久久久精品天堂| 亚洲欧美国产高清| 日韩av网站在线观看| 成人一区在线看| 51精品久久久久久久蜜臀| 国产午夜精品久久久久久久| 亚洲欧美日韩国产另类专区| 蜜桃在线一区二区三区| 99国产精品一区| 欧美一区二区国产| 国产精品理论在线观看| 日本不卡视频一二三区| 不卡电影一区二区三区| 欧美一区二区久久| 亚洲日本va午夜在线影院| 久久精品国产精品亚洲红杏| 97aⅴ精品视频一二三区| 日韩亚洲欧美成人一区| 亚洲人吸女人奶水| 国内成人免费视频| 欧美日韩电影在线| 国产精品欧美综合在线| 久久精品久久久精品美女| 在线观看国产91| 国产欧美日韩在线看| 日韩av午夜在线观看| 91久久精品一区二区三| 日本一区免费视频| 黄一区二区三区| 欧美军同video69gay| 亚洲人成7777| 大胆亚洲人体视频| 国产亚洲一区二区三区四区| 亚洲成人黄色小说| 日本精品视频一区二区| 欧美高清一级片在线观看| 麻豆高清免费国产一区| 精品视频一区二区不卡| 亚洲欧美一区二区三区极速播放 | 日韩色视频在线观看| 亚洲免费观看视频| 不卡av免费在线观看| 久久久欧美精品sm网站| 美女一区二区在线观看| 欧美久久久久久久久中文字幕| 亚洲欧美日韩久久| 91老司机福利 在线| 国产精品对白交换视频| 国产成人免费视频一区| 国产天堂亚洲国产碰碰| 国产乱妇无码大片在线观看| 日韩欧美一级精品久久| 蜜桃视频免费观看一区| 日韩一区二区视频| 日韩av中文字幕一区二区三区| 欧美精品vⅰdeose4hd| 亚洲国产日韩综合久久精品| 欧洲亚洲国产日韩| 亚洲在线免费播放| 在线观看日韩av先锋影音电影院| 亚洲老妇xxxxxx| 欧美在线啊v一区| 亚洲一二三区在线观看| 欧美日韩国产天堂| 天天影视涩香欲综合网| 日韩女优电影在线观看| 久久国内精品视频| 久久影院视频免费| 国产98色在线|日韩| 国产精品久久久久久久久图文区 | 欧美在线|欧美| 亚洲韩国精品一区| 91精品国产麻豆国产自产在线 | 自拍偷拍欧美激情| 91久久久免费一区二区| 日精品一区二区三区| 日韩欧美资源站| 国产.欧美.日韩| 亚洲精品欧美激情| 91精品国产综合久久福利| 精品一区二区三区在线播放| 久久先锋影音av| 91蜜桃传媒精品久久久一区二区| 一级特黄大欧美久久久| 91麻豆精品国产无毒不卡在线观看| 激情小说欧美图片| 中文字幕中文在线不卡住| 欧美性猛片xxxx免费看久爱| 日韩av一区二区三区四区| 欧美国产一区在线| 欧美无乱码久久久免费午夜一区 | 免费欧美日韩国产三级电影| 久久综合九色综合欧美就去吻| 成人a级免费电影| 婷婷开心激情综合|