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

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

?? armjishu_touchscreen.c

?? 基于STM32F107的UDP服務器程序
?? C
字號:
/******************** (C) COPYRIGHT 2009 www.armjishu.com ************************
* File Name          : ARMJISHU_TouchScreen_ADS7843.c
* Author             : www.armjishu.com Team
* Version            : V3.0.1
* Date               : 03/20/2010
* Description        : 
                        ADS7843_CS   is PB1
                        ADS7843_INT  is PC1
*******************************************************************************/
#include "ARMJISHU_TouchScreen.h"
#include "stm32f10x.h"
#include <stdio.h>
#include "stm32f10x_exti.h"


extern void LCD_SetPoint(uint8_t Xpos, uint16_t Ypos, uint16_t Color);

// A/D 通道選擇命令字和工作寄存器
#define	CHX 	0x90//0x90 	//通道Y+的選擇控制字	//0x94
#define	CHY 	0xD0//0xd0	//通道X+的選擇控制字	//0xD4

//#define ADS7843_WrCmd  SPI1_SendByte
//#define ADS7843_Read   SPI1_RecvByte

void ADS7843_CS_config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  /* Enable GPIOB, GPIOC and AFIO clock */
  RCC_APB2PeriphClockCmd(RCC_ADS7843_CS , ENABLE);  //RCC_APB2Periph_AFIO
  
  /* LEDs pins configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_ADS7843_CS;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIO_ADS7843_CS_PORT, &GPIO_InitStructure);
}

static void ADS7843_INT_config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  /* Enable GPIOB, GPIOC and AFIO clock */
  RCC_APB2PeriphClockCmd(RCC_ADS7843_INT , ENABLE);  //RCC_APB2Periph_AFIO
  
  /* LEDs pins configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_ADS7843_INT;
  //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIO_ADS7843_INT_PORT, &GPIO_InitStructure);
}

static void ADS7843_INT_EXIT_Init(void)
{
    EXTI_InitTypeDef EXTI_InitStructure;

    /* Connect Button EXTI Line to Button GPIO Pin */
    GPIO_EXTILineConfig(GPIO_ADS7843_EXTI_PORT_SOURCE, GPIO_ADS7843_EXTI_PIN_SOURCE);  

    /* Configure Button EXTI line */
    EXTI_InitStructure.EXTI_Line = GPIO_ADS7843_EXTI_LINE;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);

}


/*******************************************************************************
* Function Name  : InterruptConfig
* Description    : Configures the used IRQ Channels and sets their priority.NVIC_Configuration
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
static void ADS7843_InterruptConfig(void)
{ 
  NVIC_InitTypeDef NVIC_InitStructure;
  
  /* Set the Vector Table base address at 0x08000000 */
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);
  
  /* Configure the Priority Group to 2 bits */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

  /* Enable the EXTI5 Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = GPIO_ADS7843_EXTI_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}


static void LCD_BIG_POINT(u16 xScreen, u16 yScreen)
 {
   LCD_SetPoint(xScreen, yScreen, 0xF81F);//Magenta
   LCD_SetPoint(xScreen-1, yScreen, 0xF81F);
   LCD_SetPoint(xScreen+1, yScreen, 0xF81F);
   LCD_SetPoint(xScreen, yScreen-1, 0xF81F);
   LCD_SetPoint(xScreen, yScreen+1, 0xF81F);
   LCD_SetPoint(xScreen-1, yScreen-1, 0xF81F);
   LCD_SetPoint(xScreen-1, yScreen+1, 0xF81F);
   LCD_SetPoint(xScreen+1, yScreen-1, 0xF81F);
   LCD_SetPoint(xScreen+1, yScreen+1, 0xF81F);
 }
 
static void LCD_SMALL_POINT(u16 xScreen, u16 yScreen)
 {
   LCD_SetPoint(xScreen, yScreen, 0xF81F);//Magenta
   LCD_SetPoint(xScreen-1, yScreen, 0xF81F);
   LCD_SetPoint(xScreen-1, yScreen-1, 0xF81F);
   LCD_SetPoint(xScreen, yScreen-1, 0xF81F);
 }
/*=====================================================================*/
u16 _AD2Y(u16 adx) //240
{
  u16 sx=0;
  int r = adx - 200;
  r *= 240;
  sx=r / (4000 - 280);
  if (sx<=0 || sx>240)
    return 0;
  return sx;
}


u16 _AD2X(u16 ady) //320
{
  u16 sy=0;
  int r = ady - 260;
  r *= 320;
  sy=r/(3960 - 360);
  if (sy<=0 || sy>320)
    return 0;
  return sy;
}

/*=====================================================================*/
/*=====================================================================*/
/*=====================================================================*/
/*=====================================================================*/
// A/D 通道選擇命令字和工作寄存器
//#define	CHX 	0x90 	//通道Y+的選擇控制字	//0x94
//#define	CHY 	0xd0	//通道X+的選擇控制字	//0xD4



//讀ADS7843的IO控制口
	
/*=====================================================================*/

void ADS7843_Init(void)
{
    ADS7843_CS_config();     // 使能LCD
    ADS7843_CS_HIGH() ;     // 關閉LCD
    SPI1_Config();
    SPI1_Init_For_Byte();
    SPI1_MOSI_HIGH();
    SPI1_SCK_LOW();
    ADS7843_INT_config();
#if 0
    ADS7843_INT_EXIT_Init();
    ADS7843_InterruptConfig();
#endif
}
/*=====================================================================*/
/*=====================================================================*/


void SPI1_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
    
  // Set as Output push-pull - SCK and MOSI
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  
  GPIO_InitStructure.GPIO_Pin = SPI1_SCK | SPI1_MOSI;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(SPI1_PORT, &GPIO_InitStructure);
  
  //SPI_MISO
  GPIO_InitStructure.GPIO_Pin = SPI1_MISO;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(SPI1_PORT, &GPIO_InitStructure);

}

/*=====================================================================*/
void SPI1_Init_For_Byte(void)
{

}

/*=====================================================================*/
static void ADS7843_SPI_Start( void )
{
    ADS7843_CS_HIGH();
    SPI1_MOSI_HIGH();
    SPI1_SCK_LOW();
    ADS7843_CS_LOW();	      		//芯片允許
}

/*=====================================================================*/
static void SPI_MOSI(u8 data)
{
    if(data)
        SPI1_MOSI_HIGH();
    else
        SPI1_MOSI_LOW();
}

/*=====================================================================*/
/*
#define ShortDelayTime 1
#define LongDelayTime (ShortDelayTime*2)
SPI1_Delay_Short()
{
    __IO uint32_t nCount;
    
    for( nCount= 0; nCount < ShortDelayTime; nCount++ );
}
*/
/*=====================================================================*/


/*=====================================================================*/
static void ADS7843_WrCmd(u8 cmd)
{
    u8 buf, i;

    for( i = 0; i < 8; i++ )
    {
        buf = (cmd >> (7-i)) & 0x1 ;	//MSB在前,LSB在后
        SPI_MOSI(buf);	 	//時鐘上升沿鎖存DIN
        SPI1_SCK_HIGH();			//時鐘脈沖,一共8個
        SPI1_SCK_LOW();			//開始發送命令字
    }
	
}

/*=====================================================================*/
static u16 ADS7843_Read(void)
{
	u16 buf = 0 ;
	u8 i;

    SPI1_SCK_HIGH(); //wait busy
	SPI1_SCK_LOW();	
	for( i = 0; i < 12; i++ )
	{
		buf = buf << 1 ;
		SPI1_SCK_HIGH();
		if ( SPI1_MISO_READ() )	
		{
			buf = buf + 1 ;
		}
		SPI1_SCK_LOW();			
	}

	for( i = 0; i < 3; i++ )
	{
		SPI1_SCK_HIGH();
		SPI1_SCK_LOW();			
	}
    
	return( buf ) ;
}

/*=====================================================================*/
#define  READ_TIMES  10
#define  VALID_TIMES  (((READ_TIMES-1)/2) -1)
static u8 ADS7843_Rd_Addata(u16 *X_Addata,u16 *Y_Addata)
{

	u16		i,j,k,x_dataarray[READ_TIMES],y_dataarray[READ_TIMES];
    

        
	for(i=0;(GPIO_ADS7843_INT_VALID)&&(i<READ_TIMES);i++)	//采樣多次.
	{
	    ADS7843_SPI_Start();
		ADS7843_WrCmd( CHX ) ;
		x_dataarray[i] = ADS7843_Read() ;
        ADS7843_CS_HIGH(); 

	    ADS7843_SPI_Start();
		ADS7843_WrCmd( CHY ) ;
		y_dataarray[i] = ADS7843_Read() ;
        ADS7843_CS_HIGH(); 
	}
    
    if(i == READ_TIMES) //一定要讀到times次數據,否則丟棄
    {
        // 濾波:排序后去掉最大值和最小值
    	for(i=0;i<READ_TIMES;i++)
    	{
        	for(j=READ_TIMES;j<READ_TIMES-1;j++)
        	{
               if(x_dataarray[j] > x_dataarray[i])
                {
                    k = x_dataarray[j];
                    x_dataarray[j] = x_dataarray[i];
                    x_dataarray[i] = k;
                }
             }
            }  

        // 濾波:排序后去掉最大值和最小值
    	for(i=0;i<READ_TIMES;i++)
    	{
        	for(j=READ_TIMES;j<READ_TIMES-1;j++)
        	{
               if(y_dataarray[j] > y_dataarray[i])
                {
                    k = y_dataarray[j];
                    y_dataarray[j] = y_dataarray[i];
                    y_dataarray[i] = k;
                }
             }
        }
    	// 濾波:去掉最大值和最小值
    	*X_Addata = (x_dataarray[VALID_TIMES] + x_dataarray[VALID_TIMES+1] 
                        + x_dataarray[VALID_TIMES+2] + x_dataarray[VALID_TIMES+3]) >> 2;
#ifdef  SIZE_2_8INCH_TFT_LCD
    	*Y_Addata = 4095 - ((y_dataarray[VALID_TIMES] + y_dataarray[VALID_TIMES+1] 
    	                + y_dataarray[VALID_TIMES+2] + y_dataarray[VALID_TIMES+3]) >> 2);
#else   // SIZE_3_2INCH_TFT_LCD
        *Y_Addata= (y_dataarray[VALID_TIMES] + y_dataarray[VALID_TIMES+1] 
    	                + y_dataarray[VALID_TIMES+2] + y_dataarray[VALID_TIMES+3]) >> 2;
#endif

        //printf("\n\r (0x%x, 0x%x), (%d, %d)", *X_Addata, *Y_Addata, *X_Addata, *Y_Addata);
        return 1;
    }
    return 0;
}

/*=====================================================================*/
/*=====================================================================*/
/*=====================================================================*/
u16 distence(u16 data1,u16 data2)
{
    if((data2 > data1 + 2) || (data1 > data2 + 2))
    {
        return 0;
    }

    return 1;    
}

/*=====================================================================*/
void ARMJISHU_TouchScreen(void)
{
  u16 xdata, ydata;
  u32 xScreen, yScreen;

    static u16 sDataX,sDataY;
    
 // printf("\n\r ARMJISHU_TouchScreen_ADS7843 \n\r");
  if(!ADS7843_Rd_Addata(&xdata, &ydata))
  {
     return;
  }
  xScreen = _AD2X(xdata);
  yScreen = _AD2Y(ydata);

   //xScreen = 320 - ((ydata*320)>>12);
   //yScreen = (xdata*240)>>12;

 
  //printf("\n\r (0x%x, 0x%x), (%d, %d)", xdata, ydata, xScreen, yScreen);
  if((xScreen>1)&&(yScreen>1)&&(xScreen<320-1)&&(yScreen<240-1))
  {
       //printf("\n\r%d,%d", xScreen, yScreen);
      if((GPIO_ADS7843_INT_VALID) && distence(sDataX,xScreen) && distence(sDataY,yScreen))
        {
             //LCD_BIG_POINT(yScreen, xScreen);
             LCD_SMALL_POINT(yScreen, xScreen);
        }
      sDataX = xScreen;
      sDataY = yScreen;
  }
    
}
/*=====================================================================*/
/*=====================================================================*/
/*=====================================================================*/
/*=====================================================================*/
/*=====================================================================*/
/*=====================================================================*/
/*=====================================================================*/
/*=====================================================================*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91福利国产精品| 北条麻妃国产九九精品视频| 亚洲gay无套男同| 久久日韩粉嫩一区二区三区| 欧美一级电影网站| 欧美肥妇bbw| 欧美一区二区三区视频免费| 欧美一区二区三区在线观看| 91精品国产综合久久精品| 欧美日产在线观看| 日韩一区二区精品| 久久久久久毛片| 国产日韩欧美电影| 国产精品女主播在线观看| 国产精品理论片在线观看| 中文字幕欧美激情| 亚洲免费视频中文字幕| 午夜久久久久久电影| 麻豆精品一区二区av白丝在线| 欧美精品v国产精品v日韩精品| 欧美片网站yy| 久久精品视频免费观看| 亚洲欧美电影院| 日韩国产精品久久| 国产久卡久卡久卡久卡视频精品| 国产精选一区二区三区| av电影天堂一区二区在线观看| 日本国产一区二区| 日韩免费电影一区| 国产精品伦一区| 亚洲第一电影网| 国产一区二区电影| 色噜噜狠狠成人网p站| 欧美一卡在线观看| 最新不卡av在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精品一区久久久久| 91久久精品一区二区二区| 欧美一区日韩一区| 国产精品福利一区| 蜜桃av一区二区| 色综合 综合色| 久久色.com| 天堂蜜桃一区二区三区 | 亚洲区小说区图片区qvod| 国产一区二区免费视频| 欧美性大战xxxxx久久久| 精品久久五月天| 性感美女极品91精品| 不卡的电视剧免费网站有什么| 欧美喷潮久久久xxxxx| 亚洲精品亚洲人成人网在线播放| 蜜桃久久精品一区二区| 在线精品视频免费观看| 国产欧美日韩视频一区二区| 日本色综合中文字幕| 91国在线观看| 中文字幕一区视频| 国产麻豆视频一区二区| 91精品在线麻豆| 性久久久久久久久久久久| 91在线观看一区二区| 国产日产欧产精品推荐色| 天天影视涩香欲综合网| 91精品91久久久中77777| 国产精品久久久久久久久快鸭 | 青青草原综合久久大伊人精品优势| 成人激情免费视频| 久久精品网站免费观看| 国产综合久久久久影院| 亚洲一区二区三区视频在线 | 欧美在线观看视频在线| 国产精品美女久久久久久久久久久| 久久9热精品视频| 欧美videos中文字幕| 麻豆精品在线观看| 精品福利一区二区三区 | 综合在线观看色| 不卡的电影网站| 亚洲色欲色欲www| 91美女片黄在线观看91美女| 亚洲综合免费观看高清完整版 | 99视频一区二区| 亚洲婷婷国产精品电影人久久| 成人app网站| 玉足女爽爽91| 欧美日韩国产片| 久久97超碰国产精品超碰| 欧美videofree性高清杂交| 国产乱色国产精品免费视频| 国产精品视频九色porn| 一本到不卡精品视频在线观看| 亚洲一区中文在线| 7777精品伊人久久久大香线蕉| 久久精品国产久精国产| 国产日产欧美一区| 在线观看免费亚洲| 奇米色777欧美一区二区| 国产三级欧美三级日产三级99| 成人av先锋影音| 五月天一区二区三区| 精品久久久久一区二区国产| 不卡欧美aaaaa| 亚洲国产sm捆绑调教视频| 日韩精品一区二区三区中文精品| 国产成人在线色| 亚洲精品视频在线观看网站| 日韩一区二区三区电影在线观看| 国产成人精品三级| 天天av天天翘天天综合网色鬼国产| 日韩欧美一级精品久久| 99久久久久免费精品国产| 亚洲国产日韩综合久久精品| 精品国产一区二区亚洲人成毛片 | 美女网站在线免费欧美精品| 国产欧美一区二区精品性| 欧洲一区在线电影| 国产一区二区三区在线观看免费视频| 成人免费在线播放视频| 日韩三区在线观看| 91亚洲资源网| 韩国三级在线一区| 午夜精品免费在线| 国产精品久久久久久久久久久免费看| 欧美肥胖老妇做爰| 在线视频你懂得一区| 国产成人av福利| 久久爱www久久做| 石原莉奈一区二区三区在线观看| 一区在线观看视频| 亚洲第一精品在线| 亚洲柠檬福利资源导航| 久久一日本道色综合| 宅男在线国产精品| 欧美色男人天堂| 色综合久久久久| 99国产麻豆精品| 国产馆精品极品| 狠狠色狠狠色综合| 精品一区二区免费在线观看| 亚洲3atv精品一区二区三区| 亚洲丝袜美腿综合| 国产精品电影院| 国产精品免费丝袜| 亚洲欧洲性图库| 中文字幕五月欧美| 亚洲国产成人午夜在线一区| ww亚洲ww在线观看国产| 日韩欧美二区三区| 日韩欧美一二三区| 日韩三级电影网址| 91精品国产综合久久福利| 777色狠狠一区二区三区| 欧美日韩精品福利| 欧美日韩精品一区二区三区蜜桃| 在线免费av一区| 欧美日韩电影一区| 欧美日本高清视频在线观看| 日本韩国欧美三级| 欧美丰满高潮xxxx喷水动漫| 5月丁香婷婷综合| 欧美大胆一级视频| 国产视频一区在线播放| 亚洲国产成人在线| 亚洲伦理在线精品| 一区二区三区精品视频在线| 一区二区三区成人| 婷婷中文字幕一区三区| 精品一区二区国语对白| 国产一区二区三区av电影 | 日韩一区二区三区免费看| 日韩精品在线看片z| 欧美激情在线看| 亚洲欧美激情插 | 中文字幕亚洲欧美在线不卡| 亚洲黄色性网站| 日韩av中文字幕一区二区| 国产一区二区成人久久免费影院| 国产一区二区三区免费看| 99久久99久久久精品齐齐| 欧美日韩一区二区电影| 欧美精品一区二区在线观看| 国产精品美女视频| 奇米精品一区二区三区在线观看 | 亚洲人妖av一区二区| 亚洲va中文字幕| 国产精品亚洲一区二区三区妖精| 91在线观看地址| 日韩视频免费直播| 亚洲欧美另类久久久精品2019| 无吗不卡中文字幕| 成人一区二区三区视频| 欧美日韩精品是欧美日韩精品| 久久九九久精品国产免费直播| 亚洲综合精品自拍| 国产不卡视频在线播放| 91麻豆精品国产91久久久久久久久| 日本一区二区在线不卡| 日韩精品欧美精品| 99re热视频精品|