初级会员

- 积分
- 141
- 金钱
- 141
- 注册时间
- 2019-3-28
- 在线时间
- 59 小时
|
5金钱
本帖最后由 chenjian1419 于 2020-6-28 11:34 编辑
请教各位,平台:stm32f103zet6,我用stm32cubemx生成的代码,移植原子哥touch.c源码后,触摸屏读坐标和画点划线为什么速度很慢,划稍微快一点点就画不出来,不知道问题出在哪里了,有了解的大佬帮忙看看。
划线的图片
代码如下:
void rtp_test(void)
{
u8 key;
u8 i=0;
while(1)
{
key=KEY_Scan(0);
tp_dev.scan(0);
if(tp_dev.sta&TP_PRES_DOWN)
{
if(tp_dev.x[0]<lcddev.width&&tp_dev.y[0]<lcddev.height)
{
if(tp_dev.x[0]>(lcddev.width-24)&&tp_dev.y[0]<16)Load_Drow_Dialog();
else TP_Draw_Big_Point(tp_dev.x[0],tp_dev.y[0],RED);
}
}else delay_ms(10);
if(key==KEY0_PRES)
{
LCD_Clear(WHITE);
TP_Adjust();
Load_Drow_Dialog();
}
i++;
if(i%20==0)HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
}
}
u8 TP_Scan(u8 tp)
{
if(HAL_GPIO_ReadPin(GPIOF,PEN_Pin)==GPIO_PIN_RESET)
{
if(tp)TP_Read_XY2(&tp_dev.x[0],&tp_dev.y[0]);
else if(TP_Read_XY2(&tp_dev.x[0],&tp_dev.y[0]))
{
tp_dev.x[0]=tp_dev.xfac*tp_dev.x[0]+tp_dev.xoff;
tp_dev.y[0]=tp_dev.yfac*tp_dev.y[0]+tp_dev.yoff;
}
if((tp_dev.sta&TP_PRES_DOWN)==0)
{
tp_dev.sta=TP_PRES_DOWN|TP_CATH_PRES;
tp_dev.x[4]=tp_dev.x[0];
tp_dev.y[4]=tp_dev.y[0];
}
}else
{
if(tp_dev.sta&TP_PRES_DOWN)
{
tp_dev.sta&=~(1<<7);
}else
{
tp_dev.x[4]=0;
tp_dev.y[4]=0;
tp_dev.x[0]=0xffff;
tp_dev.y[0]=0xffff;
}
}
return tp_dev.sta&TP_PRES_DOWN;
}
u8 TP_Read_XY2(u16 *x,u16 *y)
{
u16 x1,y1;
u16 x2,y2;
u8 flag;
flag=TP_Read_XY(&x1,&y1);
if(flag==0)return(0);
flag=TP_Read_XY(&x2,&y2);
if(flag==0)return(0);
if(((x2<=x1&&x1<x2+ERR_RANGE)||(x1<=x2&&x2<x1+ERR_RANGE))
&&((y2<=y1&&y1<y2+ERR_RANGE)||(y1<=y2&&y2<y1+ERR_RANGE)))
{
*x=(x1+x2)/2;
*y=(y1+y2)/2;
return 1;
}else return 0;
}
u8 TP_Read_XY(u16 *x,u16 *y)
{
u16 xtemp,ytemp;
xtemp=TP_Read_XOY(CMD_RDX);
ytemp=TP_Read_XOY(CMD_RDY);
//if(xtemp<100||ytemp<100)return 0;
*x=xtemp;
*y=ytemp;
return 1;
}
u16 TP_Read_XOY(u8 xy)
{
u16 i, j;
u16 buf[READ_TIMES];
u16 sum=0;
u16 temp;
for(i=0;i<READ_TIMES;i++)buf=TP_Read_AD(xy);
for(i=0;i<READ_TIMES-1; i++)
{
for(j=i+1;j<READ_TIMES;j++)
{
if(buf>buf[j])
{
temp=buf;
buf=buf[j];
buf[j]=temp;
}
}
}
sum=0;
for(i=LOST_VAL;i<READ_TIMES-LOST_VAL;i++)sum+=buf;
temp=sum/(READ_TIMES-2*LOST_VAL);
return temp;
}
u16 TP_Read_AD(u8 CMD)
{
u8 count=0;
u16 Num=0;
HAL_GPIO_WritePin(GPIOF, TCS_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, TCLK_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOF, TDIN_Pin, GPIO_PIN_RESET);
TP_Write_Byte(CMD);
HAL_delay_us(6);
HAL_GPIO_WritePin(GPIOB, TCLK_Pin, GPIO_PIN_RESET);
HAL_delay_us(1);
HAL_GPIO_WritePin(GPIOB, TCLK_Pin, GPIO_PIN_SET);
HAL_delay_us(1);
HAL_GPIO_WritePin(GPIOB, TCLK_Pin, GPIO_PIN_RESET);
for(count=0;count<16;count++)
{
Num<<=1;
HAL_GPIO_WritePin(GPIOB, TCLK_Pin, GPIO_PIN_RESET);
HAL_delay_us(1);
HAL_GPIO_WritePin(GPIOB, TCLK_Pin, GPIO_PIN_SET);
if(HAL_GPIO_ReadPin(GPIOB ,DOUT_Pin))Num++;
}
Num>>=4;
HAL_GPIO_WritePin(GPIOF, TCS_Pin, GPIO_PIN_SET);
return(Num);
}
void TP_Write_Byte(u8 num)
{
u8 count=0;
for(count=0;count<8;count++)
{
if(num&0x80)HAL_GPIO_WritePin(GPIOF, TDIN_Pin, GPIO_PIN_SET);
else HAL_GPIO_WritePin(GPIOF, TDIN_Pin, GPIO_PIN_RESET);
num<<=1;
HAL_GPIO_WritePin(GPIOB, TCLK_Pin, GPIO_PIN_RESET);
HAL_delay_us(1);
HAL_GPIO_WritePin(GPIOB, TCLK_Pin, GPIO_PIN_SET);
}
}
|
最佳答案
查看完整内容[请看2#楼]
已经解决了,谢谢!要把写数据函数和读AD数据里面的延时全部去掉,标准库和HAL库用的指令延时不一样吧!
|