📄 drv_ad2lcd.c
字号:
/***********************************************************************
* *
* Copyright (C) SEIKO EPSON CORP. 2000 *
* *
* File name: add2lcdd.c *
* This file includes some functions which translate the touch *
* panel AD data to the LCD pixel data *
* Note: in this file x means the long axes,y means the short axes
* eg. in 160x240 LCD x=240,y=160 *
* *
* *
* Revision history *
* 2000.06.30 Kurt Shen Start. *
* 2000.08.14 Kurt Shen add tp_mapping function *
************************************************************************/
#include "sysMCU.h"
unsigned short get_avrg(unsigned short *);
unsigned short get_avrg_adj(unsigned short *);
float get_x_step(unsigned short,unsigned short);
float get_y_step(unsigned short,unsigned short);
short get_lcdd(unsigned short,float);
short get_xlcdd(unsigned short,float);
short get_ylcdd(unsigned short,float);
void tp_mapping(void);//814
extern float x_step,y_step;//814
unsigned short x0; // the x_add of (0,0) point in lcd
unsigned short y0; // the y_add of (0,0) point in lcd
unsigned short x240; // the x_add of (160,240) point in lcd
unsigned short y160; // the x_add of (160,240) point in lcd
unsigned char x_tp_map[256];//814
unsigned char y_tp_map[512];//814
/*******************************************************************************
* get_avrg
* Type : void
* Input: add <- (x_add[0] or y_add[0]),step <- (x_step or y_step size)
* Ret val : add_avrg <- x or y axes average ad data
* Argument : void
* Function : average touch panel ad data
*******************************************************************************/
unsigned short get_avrg(unsigned short *add)
{
unsigned char i_get_avrg;
unsigned short add_max;
unsigned short add_min;
unsigned short add_ma;
unsigned short add_mi;
unsigned short add_sum;
unsigned short add_avrg;
add_max = *add;
add_min = *add;
add_ma = *add;
add_mi = *add;
add_sum = *add;
add_avrg = *add;
for(i_get_avrg=1;i_get_avrg<AD_DATA_NUM;i_get_avrg++)
{
add ++;
if((*add)>add_max)
{
add_ma = add_max; // get the 2nd max add
add_max = *add; // get the max x_add or y_add
}
else
{
if((*add)<add_min)
{
add_mi = add_min; // get the 2nd min add
add_min= *add; // get the min x_add or y_add
}
}
add_sum += (*add); // sum all x_add or y_add
}
if((add_ma-add_mi)>0x10) return(0); // error ad data
add_avrg = (add_sum - add_max - add_min) / (AD_DATA_NUM-2); //average x_add or y_add except max & min
if ((add_avrg<0x50) || (add_avrg>0x3df)) return(0); //error ad data
return(add_avrg); // average T/P ad data
}
/*******************************************************************************
* get_avrg_adj
* Type : void
* Input: add <- (x_add[0] or y_add[0]),step <- (x_step or y_step size)
* Ret val : add_avrg <- x or y axes average ad data
* Argument : void
* Function : average ad data, just used in getting adjust point ad data
*******************************************************************************/
unsigned short get_avrg_adj(unsigned short *add)
{
unsigned char i_get_avrg;
unsigned short add_max;
unsigned short add_min;
unsigned short add_ma;
unsigned short add_mi;
unsigned short add_sum;
unsigned short add_avrg;
add_max = *add;
add_min = *add;
add_ma = *add;
add_mi = *add;
add_sum = *add;
add_avrg = *add;
for(i_get_avrg=1;i_get_avrg<AD_DATA_NUM;i_get_avrg++)
{
add ++;
if((*add)>add_max)
{
add_ma = add_max; // get the 2nd max add
add_max = *add; // get the max x_add or y_add
}
else
{
if((*add)<add_min)
{
add_mi = add_min; // get the 2nd min add
add_min= *add; // get the min x_add or y_add
}
}
add_sum += (*add); // sum all x_add or y_add
}
if((add_ma-add_mi)>0x10) return(0); // error ad data
add_avrg = (add_sum - add_max - add_min) / (AD_DATA_NUM-2); //average x_add or y_add except max & min
if ((add_avrg<0x50)) return(0); //error ad data
return(add_avrg); // average T/P ad data
}
/******************************************************************************
* get_x_step
* Type : float
* Input: upper_left x_add,lower_right x_add
* Ret val : x axes data
* Argument : float
* Function : get the lcd dot step from ad data
* caculate x0 & x120 from x_add_lr & x_add_ul
*******************************************************************************/
float get_x_step(unsigned short x_add_ul,unsigned short x_add_lr)
{
float x_step;
x_step = (x_add_ul-(float)x_add_lr) / (120-2*MARGIN);
x0 = x_add_ul + x_step*MARGIN;
x240 = x_add_lr - x_step*MARGIN;
return(x_step);
}
/*******************************************************************************
* get_y_step
* Type : float
* Input: upper_left y_add,lower_right y_add
* Ret val : y axes data
* Argument : float
* Function : get the lcd dot step from ad data
* caculate y0 & y160 from y_add_lr & y_add_ul
*******************************************************************************/
float get_y_step(unsigned short y_add_ul,unsigned short y_add_lr)
{
float y_step;
y_step = ((float)y_add_ul-(float)y_add_lr) / (160-2*MARGIN);
y0 = y_add_ul + y_step*MARGIN;
y160 = y_add_lr - y_step*MARGIN;
return(y_step);
}
/****************************814************************************************
* Function name: tp_mapping
* Input: void
* Ret val : void
* Argument : none
* Function : map the touch panel AD data to LCD data
* AD data : num*4
* ` LCD data : x_tp_map[num],y_tp_map[]
*
* Histroy :
* 2000,08,14 Kurt Shen star
*
*******************************************************************************/
void tp_mapping(void)
{
unsigned short num;
for(num=0;num<TP_ADD_MIN/2+1;num++)
{
y_tp_map[num]=255; // set the overanged AD data to 0xff
}
for(num=TP_ADD_MIN/2+1;num<TP_ADD_MAX/2;num++) // map add data to lcd data
{
y_tp_map[num]=(unsigned char)((y0-num*2)/y_step+0.5);
}
for(num=TP_ADD_MAX/2;num<512;num++)
{
y_tp_map[num]=255; // set the overanged AD data to 0xff
}
for(num=0;num<TP_ADD_MIN/4+1;num++)
{
x_tp_map[num]=255; // set the overanged AD data to 0xff
}
for(num=TP_ADD_MIN/4+1;num<TP_ADD_MAX/4;num++)// map add data to lcd data
{
x_tp_map[num]=(unsigned char)((x0-num*4)/x_step+0.5);
}
for(num=TP_ADD_MAX/4;num<256;num++)
{
x_tp_map[num]=255; // set the overanged AD data to 0xff
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -