初级会员

- 积分
- 159
- 金钱
- 159
- 注册时间
- 2014-12-9
- 在线时间
- 18 小时
|

楼主 |
发表于 2014-12-19 11:15:43
|
显示全部楼层
u8  ageTime =0,Asdd =0;
u16 X[60]; //X?á??????×é
u16 Y[60]; //Y?á??????×é
u16  ointDataX,  ointDataY;//??×?XY×?±ê
//u16 XMIN = 57; // LCD(0,0)
//u16 YMIN = 153;
//u16 XMAX = 985;//LCD(799,479)
//u16 YMAX = 1083;
//u16 Numx = 901;
//u16 Numy = 929;
//u16 Signlex = 1508;
//u16 Signley = 2416;
u16 XMIN = 57; // LCD(0,0)
u16 YMIN = 153;
u16 XMAX = 985;//LCD(799,479) 384000
u16 YMAX = 1083;
u16 Numx = 901;
u16 Numy = 929;
u16 Signlex = 1508;
u16 Signley = 2416;
u8 GetAD_XY = 0; //????±ê??,???????±,????????AD??,??1????????????AD????????
//u8 GetAD_XY = 1;
u8 AD_NO =0; //??????????????????????????????±???
u8 ADINT = 0; //??????????±ê??=0????????=1????
u8 buttonxy =0; //???é?±????±ê??
u16 NUM[2][20]; //??×?
s16  ENX =0,PENY =0; //??????????????
//u16  ENX =0,PENY =0; //??????????????
u8  EN_STATUS =255; //????×???,0??,3×ó,4??,1??,2??
//????????
u16 ADC_value_X,ADC_value_Y;
u16 X1,Y1,X2,Y2,X3,Y3,X4,Y4;
u8 TOUCHSTS = 0;
//u8  o_OR_Aj;
//u8 poAj;
extern struct BUTTONDEFINE button1[];
extern void DelayMs(u32 nMs);
u8 Adjustdisplay(void);
void DisplayPointGet(void);
void MidValueCalculate(void);
void Access_TP_coordinate(void);
extern void Tim2_Out(void);
/**************************************************************************************************************
?????è??: ?????????ù??????
***************************************************************************************************************/
void MidValueCalculate(void)
{
if(X2>X3)
{
if(X3>X4)
X1=X3;
else
{
if(X2>X4)
X1=X4;
else
X1=X2;
}
}
else
{
if(X3<X4)
X1=X3;
else
{
if(X2><X4)
X1=X4;
else
X1=X2;
}
}
if(Y2>Y3)
{
if(Y3>Y4)
Y1=Y3;
else
{
if(Y2>Y4)
Y1=Y4;
else
Y1=Y2;
}
}
else
{
if(Y3<Y4)
Y1=Y3;
else
{
if(Y2><Y4)
Y1=Y4;
else
Y1=Y2;
}
}
ADC_value_X = X1;
ADC_value_Y = Y1;
}
void Access_TP_coordinate(void) //????AD??????
{
clear_TP_interrupt(); //????RA8875????±ê??
Waitus(220); //???±????????
if(Touch_Status())
{
X2 = Get_X_ADC_Value_10bit(); //????X?áAD??
Y2 = Get_Y_ADC_Value_10bit(); //????Y?áAD??
clear_TP_interrupt(); //????RA8875????±ê??
Waitus(220); //???±????????
if(Touch_Status()) //????????±ê??
{
X3 = Get_X_ADC_Value_10bit(); //????X?áAD??
Y3 = Get_Y_ADC_Value_10bit(); //????Y?áAD??
clear_TP_interrupt(); //????RA8875????±ê??
Waitus(220); //???±????????
if(Touch_Status()) //????????±ê??
{
X4 = Get_X_ADC_Value_10bit(); //????X?áAD??
Y4 = Get_Y_ADC_Value_10bit(); //????Y?áAD??
MidValueCalculate(); //????????,??????X1,Y1
clear_TP_interrupt(); //????RA8875????±ê??
}
else //???ù??????
{
ADC_value_X =0;
ADC_value_Y =0;
ADINT =0; //±í??????±ê????
}
}
else //???ù??????
{
ADC_value_X =0;
ADC_value_Y =0;
ADINT =0; //±í??????±ê????
}
}
else //???ù??????
{
ADC_value_X =0;
ADC_value_Y =0;
ADINT =0; //±í??????±ê????
}
}
/*********************************************************************************************************
???? ???è????×???
**********************************************************************************************************/
//void Touch_Calculate(void)
void  ointshet(void)
{
u8 again =1;
u8 i,j=0,k=0;
u16  ointData[20];//????XY?áAD????
// u16 temp[24] = {25,40,40,25,25,440,40,425,745,440,760,425,745,40,760,25};//×?±ê??
u16 temp[24] = {5,20,20,5,5,240,20,225,445,240,460,225,445,20,460,5};//×?±ê??
u32 xl,xn,yl,yn,xx,yy;
do
{
clear_TP_interrupt();
LcdClear(myBLACK);//????
// LcdPrintStr("????????×?",360,150,WHITE,BLACK,1);//????×?·?
// LcdPrintStr("???÷??????????×???.?±??±???????.????×???????",225,176,WHITE,BLACK,1);//????×?·???
RA8875DrawString(10,100,"Lcd test1",0xFFFF,0x001f);
while(ADINT){;}
j=0;
for(i=0;i<4;i++)
{
LcdPrintHorz(temp[j], temp[j+1]-1, 30, myWHITE); //?á?áBLACK
LcdPrintHorz(temp[j], temp[j+1], 30, myWHITE); //?á?áBLACK
LcdPrintHorz(temp[j], temp[j+1]+1, 30, myWHITE); //?á?áBLACK
LcdPrintVert(temp[j+2]-1, temp[j+3], 30, myWHITE);//?ú?áBLACK
LcdPrintVert(temp[j+2], temp[j+3], 30, myWHITE);//?ú?áBLACK
LcdPrintVert(temp[j+2]+1, temp[j+3], 30, myWHITE);//?ú?áBLACK
GetAD_XY =1; //??AD???????ù
while(!Adjustdisplay()); //????????
PointData[k++] =  ointDataX; //????X?áAD
PointData[k++] = PointDataY; //????Y?áAD
LcdPrintHorz(temp[j], temp[j+1]-1, 30, myBLUE); //?á?áRED
LcdPrintHorz(temp[j], temp[j+1], 30, myBLUE); //?á?áRED
LcdPrintHorz(temp[j], temp[j+1]+1, 30, myBLUE); //?á?áRED
LcdPrintVert(temp[j+2]-1, temp[j+3], 30, myBLUE);//?ú?áRED
LcdPrintVert(temp[j+2], temp[j+3], 30, myBLUE);//?ú?áRED
LcdPrintVert(temp[j+2]+1, temp[j+3], 30, myBLUE);//?ú?áRED
j+=4;
DelayMs(100);
while(ADINT);
}
// u32 xl,xn,yl,yn,xx,yy;
xl = (PointData[4]+PointData[6])/2; //X3+X4
xn = (PointData[0]+PointData[2])/2; //X1+X2
yl = (PointData[1]+PointData[7])/2; //Y1+Y4
yn = (PointData[3]+PointData[5])/2; //Y2+Y3
// Signlex = (xn*1000 - xl*1000)/720; //X?á????????AD??
// Signley = (yn*1000 - yl*1000)/400; //Y?á????????AD??
Signlex = (xn*1000 - xl*1000)/400; //X?á????????AD??
Signley = (yn*1000 - yl*1000)/192; //Y?á????????AD??
xx = (Signlex*40)/1000; //X40??AD??
yy = (Signley*40)/1000; //Y40??AD??
XMIN =xl - xx; //X?á×?????
XMAX =xn + xx; //X?á×??ó??
YMIN =yl - yy; //Y?á×?????
YMAX =yn + yy; //Y?á×??ó??
Numx =XMAX - XMIN; //?óX?á?à????
Numy =YMAX - YMIN; //?óY?á?à????
FLASH_Unlock();//????FLASH±à???????????÷
FLASH_ErasePage(0x0800EFF0);//????????FLASH????
FLASH_ProgramHalfWord(0x0800EFF0,XMIN);//?????¨???·±à??°?×?
FLASH_ProgramHalfWord(0x0800EFF2,XMAX);
FLASH_ProgramHalfWord(0x0800EFF4,YMIN);
FLASH_ProgramHalfWord(0x0800EFF6,YMAX);
FLASH_ProgramHalfWord(0x0800EFF8,Numx);
FLASH_ProgramHalfWord(0x0800EFFA,Numy);
RA8875DrawString(10,150,"Lcd test2",0xFFFF,0x001f);
// LcdPrintStr("?????÷??????×???",336,288,WHITE,BLACK,1);//????×?·?
// LcdPrintHorz(385, 239, 30, myWHITE); //??×???
// LcdPrintHorz(385, 240, 30, myWHITE);
// LcdPrintHorz(385, 241, 30, myWHITE);
// LcdPrintVert(399, 225, 30, myWHITE);
// LcdPrintVert(400, 225, 30, myWHITE);
// LcdPrintVert(401, 225, 30, myWHITE);
LcdPrintHorz(240, 135, 30, myWHITE); //??×???
LcdPrintHorz(240, 136, 30, myWHITE);
LcdPrintHorz(240, 137, 30, myWHITE);
LcdPrintVert(254, 122, 30, myWHITE);
LcdPrintVert(255, 122, 30, myWHITE);
LcdPrintVert(256, 122, 30, myWHITE);
buttonxy =1; //???????÷°???
GetAD_XY =1; //??AD???????ù
while(!Adjustdisplay()); //?????á??
// LcdPrintHorz(385, 239, 30, myBLUE); //??×???
// LcdPrintHorz(385, 240, 30, myBLUE);
// LcdPrintHorz(385, 241, 30, myBLUE);
// LcdPrintVert(399, 225, 30, myBLUE);
// LcdPrintVert(400, 225, 30, myBLUE);
// LcdPrintVert(401, 225, 30, myBLUE);
LcdPrintHorz(240, 135, 30, myBLUE); //??×???
LcdPrintHorz(240, 136, 30, myBLUE);
LcdPrintHorz(240, 137, 30, myBLUE);
LcdPrintVert(254, 122, 30, myBLUE);
LcdPrintVert(255, 122, 30, myBLUE);
LcdPrintVert(256, 122, 30, myBLUE);
// LcdPrintStr("?????÷??????×???",336,288,BLACK,BLACK,0);//????×?·???
RA8875DrawString(10,200,"Lcd test3",0xFFFF,0x001f);
if(!buttonxy) //??×?????buttonxy=0
{
again =0; //±ê??????
// LcdPrintStr("??×?????",368,288,WHITE,BLACK,0);//??????×?????
RA8875DrawString(200,100,"Lcd test4",0xFFFF,0x001f);
}
else //??×???????buttonxy=1
{
again =1; //??????×?
// LcdPrintStr("??×??§°?.2???ó??????×?",332,288,WHITE,BLACK,0);//??????×??§°?
RA8875DrawString(200,200,"Lcd test5",0xFFFF,0x001f);
}
DelayMs(2000);
buttonxy =0;
}while(again);
}
/*********************************************************************************************************
???? ??????????
**********************************************************************************************************/
u8 Adjustdisplay(void)
{
if(!GetAD_XY)
{
if(buttonxy) //°???±ê??????????????×??á??
{
u16 X,Y;
// X = ((PointDataX -XMIN)*800)/Numx; //x?á?ò??????
// Y = ((PointDataY -YMIN)*480)/Numy; //y?á?ò??????
// X = 800- X;
X = ((PointDataX -XMIN)*480)/Numx; //x?á?ò??????
Y = ((PointDataY -YMIN)*272)/Numy; //y?á?ò??????
X = 480- X;
if(385><X&&X><415&&225<Y&&Y><255)//??°?????
buttonxy =0;//???????é
else
buttonxy =1;//???é??????
}
while(Touch_Status())//?????§??
{
clear_TP_interrupt();
DelayMs(1);
}
return 1;
}
else
return 0;
}
/*********************************************************************************************************
?? ??:Tim2,
×÷ ?? ??5ms????,
????AD,XY?á
**********************************************************************************************************/
void Tim2_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//????TIM2?±??
// NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//??????·?×é
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;//
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //??????????
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 6; //????????
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //????????
NVIC_Init(&NVIC_InitStructure); //?????????èNVIC?????÷
TIM_TimeBaseStructure.TIM_Period = 5000;//????
TIM_TimeBaseStructure.TIM_Prescaler = 71;//???¨??????·?TIM?¤·?????
TIM_TimeBaseStructure.TIM_ClockDivision = 0;//?¤·???
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//?ò??????
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//
TIM_ClearFlag(TIM2, TIM_FLAG_Update);//
TIM_ARRPreloadConfig(TIM2, DISABLE);//
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);//
TIM_Cmd(TIM2, ENABLE);//
}
/*********************************************************************************************************
???? ??TIM2 5ms
**********************************************************************************************************/
void TIM2_IRQHandler(void)
{
u16 adx =0,ady =0,j =0;
if((TIM2->SR&TIM_IT_Update) && (TIM2->DIER&TIM_IT_Update))
{
TIM2->CR1 &= 0x03FE;//???¨?±?÷
TIM2->SR = 0xFFFE; //TIM_ClearITPendingBit(TIM3, TIM_IT_Update);????????±ê??
if(TOUCHSTS)//8875??·????????????ò
{
RA8875_WAITSTATUS();//?ì??8875??·???
if(Touch_Status())
{
ADINT =1; //±í??°?×???±ê????
for(j=0;j<2;j++)
{
Access_TP_coordinate();
adx += ADC_value_X;
ady += ADC_value_Y;
}
if(ADINT)
{
X[ AD_NO ] = adx>>1; //Y?áAD?????????ù??
Y[ AD_NO ] = ady>>1;
AD_NO++; //??????????????10???é???????????????à????
}
else
AD_NO = 0;
}
else
AD_NO = 0;
if( AD_NO >14 ) //??????????????15??
{
DisplayPointGet();//????
AD_NO =0; //????AD??????±?????0
}
}
else
AD_NO = 0;//±í????????±ê????
TIM2->CNT = 0; //?¨?±?÷CNT????
TIM2->CR1 |= 0x0001; //????TIM2
}
}
/*********************************************************************************************************
???? ???è?????????ò×???
**********************************************************************************************************/
void DisplayPointGet(void)
{
u8 tempi =0; //??×é???????????????????±±???
u8 ii =0, jj; //???????±±???
u16 num[40]; //????3?????????ù???????±±???
s16 tempNum1, tempNum2; //???±±???
s16 tempNumx =0, tempNumy =0; //X??Y?á?????±????±???
u8 point =0; //??????±ê????
s16 pox,poy; //X?á??±???
u8 pioo =0;
u32 mm,nn;
//x?á×?±ê?ì??
for(jj =0; jj<5; jj++)
{
tempNum1 = X[tempi+1] - X[tempi];//x1?????? X[ AD_NO ] = adx>>1; //Y?áAD?????????ù??
// Y[ AD_NO ] = ady>>1;
tempi +=2;
tempNum2 = X[tempi] - X[tempi-1];//x2??????
tempi++;//3
if((tempNum1<40)&&(tempNum1>-40)&&(tempNum2<40)&&(tempNum2>-40))//?????????ó??40
{
num[ii] = (X[tempi -3] + X[tempi -2] +X[tempi-1])/3;//?á??????×é???????ù????·?????×é??
ii++;
}
}
if(ii>3)
{
tempNumx = num[0] - num[ii -1];
pox = tempNumx;
if((tempNumx<70)&&(tempNumx>-70))
{
tempNumx =0;
for(jj =0; jj <ii; jj++)
{
tempNumx+=num[jj];
}
tempNumx/= ii;
point =1;
}
pioo =1;
}
tempi =0;
ii =0;
//y?á×?±ê?ì??
for(jj =0; jj><5; jj++)
{
tempNum1 = Y[tempi+1] - Y[tempi];
tempi +=2;
tempNum2 = Y[tempi] - Y[tempi-1];
tempi++;//3
if((tempNum1<40)&&(tempNum1>-40)&&(tempNum2<40)&&(tempNum2>-40))
{
num[ii] = (Y[tempi -3] + Y[tempi -2] +Y[tempi-1])/3;
ii++;
}
}
if(ii>3)
{
tempNumy = num[0] - num[ii -1];
poy = tempNumy;
if((tempNumy<70)&&(tempNumy>-70))
{
tempNumy =0;
for(jj =0; jj <ii; jj++)
{
tempNumy += num[jj];
}
tempNumy/= ii;
if(point)
{
// PENX = ((tempNumx -XMIN)*800)/Numx;
// PENY = ((tempNumy -YMIN)*480)/Numy;
PENX = ((tempNumx -XMIN)*480)/Numx;
PENY = ((tempNumy -YMIN)*272)/Numy;
// PENX = 800-PENX;
PENX = 480-PENX;
// if(!Po_OR_Aj&&GetAD_XY)
if(!poAj&&GetAD_XY)
{
PointDataX = tempNumx; //????X?áAD
PointDataY = tempNumy; //????Y?áAD
GetAD_XY =0;
}
PEN_STATUS = 0;
//LcdPrintDot(PENX, PENY, WHITE);
return;
}
}
// u32 mm,nn;
mm = abs(pox);
nn = abs(poy);
mm = (mm*1000)/Signlex;
nn = (nn*1000)/Signley;
if(pioo)
{
if(mm >=nn)
{
/*if(pox < 0)//?ò×ó
{
PEN_STATUS = 3;
}
else//?ò??
{
PEN_STATUS = 4;
}*/
}
else
{
if(poy< 0)//?ò??
{
PEN_STATUS = 2;
//USART_SendData(USART1,2);
//while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}
else//?ò??
{
PEN_STATUS = 1;
//USART_SendData(USART1,1);
//while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}
}
}
else
{
if(poy< 0)//?ò??
{
PEN_STATUS = 2;
//USART_SendData(USART1,2);
//while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}
else//?ò??
{
PEN_STATUS = 1;
//USART_SendData(USART1,1);
//while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}
}
}
/*else if(pioo)
{
if(pox < 0)//?ò×ó
{
PEN_STATUS = 3;
}
else//?ò??
{
PEN_STATUS = 4;
}
}*/
}
u16 XMIN = 57; // LCD(0,0)
u16 YMIN = 153;
u16 XMAX = 985;//LCD(799,479) 384000
u16 YMAX = 1083;
u16 Numx = 901;
u16 Numy = 929;
u16 Signlex = 1508;
u16 Signley = 2416;
这是用ra8875 驱动4.3的屏 里面这个定义的变量是什么意思 |
|