打印

读出的金鹏C系列4.3寸触摸彩屏的X,Y坐标不对

[复制链接]
1122|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hopewise|  楼主 | 2013-12-11 10:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
哪位高手,请问一下标题内的原因.这款触摸彩屏是不需要校准的,比如,触摸一下才屏某个按键位置,读出来的X坐标值有时正确,有时不对.y坐标值也产生同样的现象.因为要确定某个按键,要同时判断x,y坐标值是否同时在一些数值范围内,现问题是:要么X坐标值符合,但Y坐标值不对,反过来,亦然.
下面是uart()和key_scan().
/*****************************************
* 名称:     Uart() interrupt()       
* 功能:     数据接收中断程序
* 入口参数: 无
* 出口参数: 无
* 说明:     Uart_Buff[2]----x坐标(高字节)
                     Uart_Buff[3]----x坐标(低字节)  
                         Uart_Buff[4]----y坐标(高字节)
                         Uart_Buff[5]----y坐标(低字节)               
******************************************/
void Uart() interrupt 4
{
            ES=0;
            if(RI)
            {       
                                RI=0;
                                if(SBUF == HMI_CMD)  rdcnt = 0;                                   //收到帧头,则字节累加计数器初始化为0
                                else
                                {
                              Uart_Buff[rdcnt] = SBUF;                                   //存入数组Uart_Buff
                              rdcnt++;
                              if(rdcnt == 10)                                                   //最大收到10字节内容
                              {
                                         f_touch_down=1;                                   //置收到1帧标志位
                                                 rdcnt = 0;                                                   //清字节累加计数器
                                         TP_X = Uart_Buff[2];
                                         TP_X = (TP_X<<8)+Uart_Buff[3];           //最终收到的X坐标数字(2字节)
                                         TP_Y = Uart_Buff[4];
                                         TP_Y = (TP_Y<<8)+Uart_Buff[5];           //最终收到的y坐标数字(2字节)
                                          }
                                          
                       }       
                                                       
            }
        ES=1;
}


//**************按键扫描********************
//******************************************
void key_scan()
{
           if(key_pcs<10000) key_pcs++;                        //检测次数
           if(f_touch_down==1)                                                    //触摸屏按下,则判断按下坐标
           {         
                  f_touch_down=0;                                                //清按下标志位
                         
                          hex_to_dec(TP_X);                                                //触摸屏发来的X坐标值(16进制)→10进制
                          Touch_LCD_x=dec_buf;

                          hex_to_dec(TP_Y);                                                //触摸屏发来的y坐标值(16进制)→10进制
                          Touch_LCD_y=dec_buf;          

                          if((Touch_LCD_x>227)&&(Touch_LCD_x<306)&&(Touch_LCD_y>217)&&(Touch_LCD_y<250))
                  {
                                 if(key_pcs==15)  f_start=1;    //按下15次,则判为start按键
                  }
           }
           else
           {
                      key_pcs=0;                                           //触摸屏没有按下的话,则清检测次数变量key_pcs
                      f_contikey=0;                                        //和连键标志位
           }
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

468

帖子

3

粉丝