求助探索者F407开发板配的3.5寸电阻屏校准问题

2019-07-20 19:22发布

用例程中的void TP_Adjust(void)函数对3.5寸电阻屏进行校准,昨天搞了一天,不管怎么弄感觉就和没有进行校准一样,校准后点击屏上某个点时,实际的效果总是偏右,越往右越严重,感觉不线性。我在校准时在四个角打点时有意往左或者右偏都式过,还是没有效果,买的3块屏都是这样。希望能够得到大家的指点。








友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
openedvadmin
1楼-- · 2019-07-20 23:52
 精彩回答 2  元偷偷看……
正点原子
2楼-- · 2019-07-21 01:09
你下载我们的触摸屏实验,测试下
ZHANGXUEJIE
3楼-- · 2019-07-21 05:44
正点原子 发表于 2016-9-30 21:36
你下载我们的触摸屏实验,测试下

最近由于忙其它事情,中断了一定时间的。我就是用的EMWIN扩展例程里面的void TP_Adjust(void)这个校准程序,是不 是说这个校准程序不行?得另外找个。原子哥,你 说的下载我们的触摸屏实验是指的探索者F407开发板的哪个例程里面的呢?
tony129
4楼-- · 2019-07-21 07:32
 精彩回答 2  元偷偷看……
ZHANGXUEJIE
5楼-- · 2019-07-21 12:07
tony129 发表于 2016-10-24 13:59
板子配套程序,触摸屏实验。你用了EMWIN的话,有两个地方要看下,1是GUI初始化要调用GUI_TOUCH_Calibrate那 ...

1.我的GUI_TOUCH_Calibrate()初始化部分是下面这样的,其实就是开发板配套代码,我现在就是直接在开发板上运行的,我设置的是横屏。请问AD边界值如何调整,或者说调整那几个数据是依据什么?
if(lcddev.id == 0X5310 || lcddev.id == 0X6804) //0X5510 0X6804为3.5寸 320x480
        {
                if(lcddev.dir == 0) //竖屏        
                {                                                       
                        GUI_TOUCH_Calibrate(GUI_COORD_X,0,320,3931,226);
                        GUI_TOUCH_Calibrate(GUI_COORD_Y,0,480,3812,196);
                }else //横屏
                {
                        GUI_TOUCH_SetOrientation(GUI_SWAP_XY|GUI_MIRROR_Y);
                        GUI_TOUCH_Calibrate(GUI_COORD_X,0,320,3931,226);
                        GUI_TOUCH_Calibrate(GUI_COORD_Y,0,480,3812,196);        
                }
        }


2.从例程代码中看,是进行了滤波处理的。
//读取一个坐标值(x或者y)
//连续读取READ_TIMES次数据,对这些数据升序排列,
//然后去掉最低和最高LOST_VAL个数,取平均值
//xy:指令(CMD_RDX/CMD_RDY)
//返回值:读到的数据
#define READ_TIMES 5         //读取次数
#define LOST_VAL 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;   
}
希望得到大家指点                         

一周热门 更多>