|
我用的是ADS7846触摸芯片,彩屏是TFT为什么在用ADS7846触摸芯片是程序开始时要采集两个点用来矫正用,给的驱动程序是这样的
void Touch ()
{
unsigned int row;
unsigned int line;
float x,y, x1,y1,x2,y2;//temp1,temp2;
CLR_Screen(BColor); //用背景色来清屏
ADS7846_Initial(); //初始化触摸芯片
Rectangle(1,9,19,11,FColor); //在这个坐标画点,矫正用,十字坐标
Rectangle(9,1,11,19,FColor);
while(ads7846_IRQ); //等待触摸中断信号
{
x1=GUI_TOUCH_X_MeasureX(); //读取该点的触摸值
y1=GUI_TOUCH_X_MeasureY();
}
Rectangle(1,9,19,11,BColor);
Rectangle(9,1,11,19,BColor); //用背景色清除这个点,并准备画下一个点
while(!ads7846_IRQ); //等待离开触摸屏,防止干扰下一个点
Rectangle(221,309,239,311,FColor);
Rectangle(229,301,231,319,FColor);//屏的对角画第二个点
while(ads7846_IRQ); //等待触摸中断信号
{
x2=GUI_TOUCH_X_MeasureX(); //读取该点触摸值
y2=GUI_TOUCH_X_MeasureY();
}
Rectangle(221,309,239,311,BColor);
Rectangle(229,301,231,319,BColor);
delayms(200); //延时
while(1)
{
while(!ads7846_IRQ)
{
do{ //这里面的220,10,300怎么来的,不懂,求指教!!!!!!!!!!!!!!!!
x=GUI_TOUCH_X_MeasureX();
row=220*(x-x1)/(x2-x1)+10; //读取当前触摸值。并根据矫正点的值算出实际的显示坐标
y=GUI_TOUCH_X_MeasureY();
line=300*(y-y1)/(y2-y1)+10;
}
while((x>4095)||(x<0)||(y>4095)||(y<0));
//if((row>20)&&(row<=50)&&(line>330)&&(line<340)) CLR_Screen(0xf800);
//if((row>70)&&(row<=110)&&(line>330)&&(line<340)) CLR_Screen(0x07e0);
//if((row>130)&&(row<=170)&&(line>330)&&(line<340)) CLR_Screen(0x0000);
if((row>190)&&(row<=220)&&(line>330)&&(line<340))
CLR_Screen(0xffff);
if((line>0)&&(line<320)) Show_Touch(row,line,0x001f); //320x240坐标内直接画点
}
}
}求指教!!!!!! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|