大学生
最后登录1970-1-1
在线时间 小时
注册时间2022-1-14
|
就是在使用XPT2046,其ADC数据突然跳变,获取到的ADC数据不对该怎么解决?读ADC数据的函数:
- /***********************************
- *函数名称:XPT2046_Rread_adc
- *函数功能:XPT2046读adc数据
- *输入:uint8_t cmd
- *输出:uint16_t temp
- ************************************/
- uint16_t XPT2046_Rread_adc(uint8_t cmd)
- {
- uint16_t temp;
-
- XPT2046_SPI_CS_LOW();
-
- XPT2046_Write_Bite(cmd);
-
- temp=XPT2046_Rread_CMD();
-
- XPT2046_SPI_CS_HIGH();
-
- return temp;
- }
复制代码 将ADC数据转换为坐标:
- /***********************************
- *函数名称:XPT2046_Original_COORD
- *函数功能:XPT20462.8寸屏读触摸位置
- *输入:
- *输出:COORD coordinate
- ************************************/
- COORD XPT2046_Original_COORD(void)
- {
- COORD coordinate;
- uint16_t adc_x,adc_y,i;
- uint16_t sum_x=0,sum_y=0;
- uint16_t ave_x,ave_y;
- for(i=0;i<CHECK;i++)
- {
- /************************/
- //求x,y方向上的adc数据
- adc_x=XPT2046_Rread_adc(XPT2046_CHANEL_X);
- adc_y=XPT2046_Rread_adc(XPT2046_CHANEL_Y);
-
- sum_x+=adc_x;
- sum_y+=adc_y;
- }
- ave_x=sum_x/CHECK;
- ave_y=sum_y/CHECK;
- if(XPT2046_SPI_INT()==PRESS)
- printf("adc_x:%d adc_y:%d\n",ave_x,ave_y);//测试,输出的ADC数据
-
- coordinate.x=ave_x*X_LENGTH/ADC_MAX;
- coordinate.y=Y_LENGTH-ave_y*Y_LENGTH/ADC_MAX;
-
- return coordinate;
- }
复制代码 检测是否有触摸:
- /***********************************
- *函数名称:Check_Press
- *函数功能:检测是否按下
- *输入:uint16_t lx 检测范围左上角x坐标
- uint16_t ly 检测范围左上角y坐标
- uint16_t rx 检测范围右下角x坐标
- uint16_t ry 检测范围右下角y坐标
- *输出:PRESS/UNPRESS
- ************************************/
- uint16_t Check_Press(uint16_t lx,uint16_t ly,uint16_t rx,uint16_t ry)
- {
- COORD coordinate={0,0};
- coordinate=XPT2046_REALLY_COORD();
- if(XPT2046_SPI_INT()==PRESS)
- printf("x:%d y:%d\n",coordinate.x,coordinate.y);//测试,输出的真实坐标
- if((coordinate.x>lx)&&(coordinate.x<rx)&&(coordinate.y>ly)&&(coordinate.y<ry))
- {
- return PRESS;
- }
- return UNPRESS;
-
- }
复制代码 这是串口测试结果:
这是串口测试结果
本来adc_x,与adc_y一次只能输出检测位置只能输出一次,但却输出了两次,且差距较大。求解惑!
|
|