哪位高手,请问一下标题内的原因.这款触摸彩屏是不需要校准的,比如,触摸一下才屏某个按键位置,读出来的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; //和连键标志位
}
} |