📄 toch.h
字号:
#include "Include\Function.h"
int TXs;
int TXe;
int TYs;
int TYe;
#define TXsADD 10
#define TXeADD 14
#define TYsADD 18
#define TYeADD 22
#define TU_Cal 26
int Toch_X=0,
Toch_Y=0;
unsigned char Bx,By;
int CheckTochAre(int,int,int,int);
#define FIRST_ADC_INPUT 0
#define LAST_ADC_INPUT 1
unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
#define ADC_VREF_TYPE 0x00
// ADC interrupt service routine
// with auto input scanning
interrupt [ADC_INT] void adc_isr(void)
{
static unsigned char input_index=0;
// Read the AD conversion result
adc_data[input_index]=ADCW;
// Select next ADC input
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
input_index=0;
ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
}
/*
#####################################################################
*/
void ADCInit()
{
// ADC initialization
// ADC Clock frequency: 921.600 kHz
// ADC Voltage Reference: AREF pin
ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff);
ADCSRA=0xCB;
// Global enable interrupts
#asm("sei")
}
/*
#####################################################################
*/
void ReadXPos(int TAV)
{
unsigned long Avrage=0;
int i=0;
DDRA=0x05;
PORTA=0x04;
delay_ms(10);
for(i=0 ;i<TAV ;i++)
{
Avrage+=adc_data[1];
}
Toch_X=Avrage/TAV ;
}
/*
#####################################################################
*/
void ReadYPos(int TAV)
{
unsigned long Avrage=0;
int i=0;
DDRA=0x0A;
PORTA=0x08;
delay_ms(10);
for(i=0 ;i<TAV ;i++)
{
Avrage+=adc_data[0];
}
Toch_Y=Avrage/TAV ;
}
/*
#####################################################################
*/
int CheckTochAre(int x,int y,int x1,int y1)
{
ReadXPos(1000);
ReadYPos(1000);
if( Toch_X >= x)
{
if( Toch_X <= x1)
{
if(Toch_Y >= y)
{
if(Toch_Y <= y1)
{
Buzzer=0;
delay_ms(20);
Buzzer=1;
Toch_Y=0;
Toch_X=0;
return (1);
}
}
}
}
return(0);
}
/*
#####################################################################
*/
void Touch_Scan(void)
{
while(1)
{
char XP[6];
char YP[6];
ReadYPos(100);
ReadXPos(100);
itoa(Toch_X,XP);
itoa(Toch_Y,YP);
clearLCD();
LCDprintf3(0,7,XP);
LCDprintf3(64,7,YP);
delay_ms(200);
}
}
/*
#####################################################################
*/
void Touch_Test(void)
{
LCD_RST();
on();
clearLCD();
LCDprintf2(0,0,"Toc1 Toc2 Toc3 Toc4");
LCDprintf2(0,1,"Toc5 Toc6 Toc7 Toc8");
LCDprintf2(0,2,"Toc9 To10 To11 To12");
LCDprintf2(0,3,"To13 To14 To15 To16");
LCDprintf2(0,4,"To17 To18 To19 To20");
LCDprintf2(0,5,"To21 To22 To23 To24");
LCDprintf2(0,6,"To25 To26 To27 To28");
Touch_Scan();
}
/*
#####################################################################
*/
char Touch_Calibration(void)
{
int Xpo,Ypo,Xpo1,Ypo1,Xpo2,Ypo2,Xpo3,Ypo3,
TSX1,TSY1,TEX1,TEY1,TSX2,TSY2,TEX2,TEY2;
long int TSX,TSY,TEX,TEY;
unsigned char Tel=10;
unsigned int DELAY1=100;
unsigned int DELAY2=500;
int Area;
Toch_X=0;
Toch_Y=0;
ReadXPos(1000);
ReadYPos(1000);
Xpo=Toch_X;
Ypo=Toch_Y;
clearLCD();
delay_ms(DELAY1);
LCDprintf2(0,7,"[1]"),LCDprintf2(0,3,"Touch[1]for 1 Seconds");
LOOP1:
Toch_X=0;
Toch_Y=0;
ReadXPos(1000);
ReadYPos(1000);
Xpo1=Toch_X;
Ypo1=Toch_Y;
if((Xpo1>=Xpo-Tel && Xpo1<=Xpo+Tel) && (Ypo1>=Ypo-Tel && Ypo1<=Ypo+Tel)) goto LOOP1;
delay_ms(DELAY2);
Toch_X=0;
Toch_Y=0;
ReadXPos(1000);
ReadYPos(1000);
Xpo2=Toch_X;
Ypo2=Toch_Y;
if(!((Xpo2>=Xpo1-Tel && Xpo1<=Xpo1+Tel) && (Ypo1>=Ypo1-Tel && Ypo1<=Ypo1+Tel))) goto LOOP1;
delay_ms(DELAY2);
Toch_X=0;
Toch_Y=0;
ReadXPos(1000);
ReadYPos(1000);
Xpo3=Toch_X;
Ypo3=Toch_Y;
if(!((Xpo3>=Xpo2-Tel && Xpo3<=Xpo2+Tel) && (Ypo3>=Ypo2-Tel && Ypo3<=Ypo2+Tel))) goto LOOP1;
TSX1=Xpo3;
TSY1=Ypo3;
//------------------------------------------------------
Toch_X=0;
Toch_Y=0;
ReadXPos(1000);
ReadYPos(1000);
Xpo=Toch_X;
Ypo=Toch_Y;
clearLCD();
delay_ms(DELAY1);
LCDprintf2(109,7,"[2]");
LCDprintf2(0,3,"Touch[2]for 1 Seconds");
LOOP2:
Toch_X=0;
Toch_Y=0;
ReadXPos(1000);
ReadYPos(1000);
Xpo1=Toch_X;
Ypo1=Toch_Y;
if((Xpo1>=Xpo-Tel && Xpo1<=Xpo+Tel) && (Ypo1>=Ypo-Tel && Ypo1<=Ypo+Tel)) goto LOOP2;
delay_ms(DELAY2);
Toch_X=0;
Toch_Y=0;
ReadXPos(1000);
ReadYPos(1000);
Xpo2=Toch_X;
Ypo2=Toch_Y;
if(!((Xpo2>=Xpo1-Tel && Xpo1<=Xpo1+Tel) && (Ypo1>=Ypo1-Tel && Ypo1<=Ypo1+Tel))) goto LOOP2;
delay_ms(DELAY2);
Toch_X=0;
Toch_Y=0;
ReadXPos(1000);
ReadYPos(1000);
Xpo3=Toch_X;
Ypo3=Toch_Y;
if(!((Xpo3>=Xpo2-Tel && Xpo3<=Xpo2+Tel) && (Ypo3>=Ypo2-Tel && Ypo3<=Ypo2+Tel))) goto LOOP2;
TEX1=Xpo3;
TSY2=Ypo3;
//------------------------------------------------------
Toch_X=0;
Toch_Y=0;
ReadXPos(1000);
ReadYPos(1000);
Xpo=Toch_X;
Ypo=Toch_Y;
clearLCD();
delay_ms(DELAY1);
LCDprintf2(0,0,"[3]");
LCDprintf2(0,3,"Touch[3]for 1 Seconds");
LOOP3:
Toch_X=0;
Toch_Y=0;
ReadXPos(1000);
ReadYPos(1000);
Xpo1=Toch_X;
Ypo1=Toch_Y;
if((Xpo1>=Xpo-Tel && Xpo1<=Xpo+Tel) && (Ypo1>=Ypo-Tel && Ypo1<=Ypo+Tel)) goto LOOP3;
delay_ms(DELAY2);
Toch_X=0;
Toch_Y=0;
ReadXPos(1000);
ReadYPos(1000);
Xpo2=Toch_X;
Ypo2=Toch_Y;
if(!((Xpo2>=Xpo1-Tel && Xpo1<=Xpo1+Tel) && (Ypo1>=Ypo1-Tel && Ypo1<=Ypo1+Tel))) goto LOOP3;
delay_ms(DELAY2);
Toch_X=0;
Toch_Y=0;
ReadXPos(1000);
ReadYPos(1000);
Xpo3=Toch_X;
Ypo3=Toch_Y;
if(!((Xpo3>=Xpo2-Tel && Xpo3<=Xpo2+Tel) && (Ypo3>=Ypo2-Tel && Ypo3<=Ypo2+Tel))) goto LOOP3;
TSX2=Xpo3;
TEY1=Ypo3;
//------------------------------------------------------
Toch_X=0;
Toch_Y=0;
ReadXPos(1000);
ReadYPos(1000);
Xpo=Toch_X;
Ypo=Toch_Y;
clearLCD();
delay_ms(DELAY1);
LCDprintf2(109,0,"[4]");
LCDprintf2(0,3,"Touch[4]for 1 Seconds");
LOOP4:
Toch_X=0;
Toch_Y=0;
ReadXPos(1000);
ReadYPos(1000);
Xpo1=Toch_X;
Ypo1=Toch_Y;
if((Xpo1>=Xpo-Tel && Xpo1<=Xpo+Tel) && (Ypo1>=Ypo-Tel && Ypo1<=Ypo+Tel)) goto LOOP4;
delay_ms(DELAY2);
Toch_X=0;
Toch_Y=0;
ReadXPos(1000);
ReadYPos(1000);
Xpo2=Toch_X;
Ypo2=Toch_Y;
if(!((Xpo2>=Xpo1-Tel && Xpo1<=Xpo1+Tel) && (Ypo1>=Ypo1-Tel && Ypo1<=Ypo1+Tel))) goto LOOP4;
delay_ms(DELAY2);
Toch_X=0;
Toch_Y=0;
ReadXPos(1000);
ReadYPos(1000);
Xpo3=Toch_X;
Ypo3=Toch_Y;
if(!((Xpo3>=Xpo2-Tel && Xpo3<=Xpo2+Tel) && (Ypo3>=Ypo2-Tel && Ypo3<=Ypo2+Tel))) goto LOOP4;
TEX2=Xpo3;
TEY2=Ypo3;
//------------------------------------------------------
TSX=(TSX1+TSX2)/2;
TEX=(TEX1+TEX2)/2;
TSY=(TSY1+TSY2)/2;
TEY=(TEY1+TEY2)/2;
TXs=(unsigned int)TSX;
TXe=(unsigned int)TEX;
TYs=(unsigned int)TSY;
TYe=(unsigned int)TEY;
//------------------------------------------------------
Write_EEProm(TXsADD,TXs);
Write_EEProm(TXeADD,TXe);
Write_EEProm(TYsADD,TYs);
Write_EEProm(TYeADD,TYe);
Write_EEProm(TU_Cal,10);
//------------------------------------------------------
clearLCD();
LCDprintf2(0,0,"Touch Calibration");
LCDprintf2(0,1,"successfully");
LCDprintf2(0,2,"completed");
LCDprintf2(0,4,"Touch Next");
LCDprintf2(100,7,"Next");
L1:
Area=CheckTochAre(500,50,1100,200);
if(Area!=1) goto L1;
else return 1;
}
//------------------------------------------------------ END
/*
#####################################################################
*/
char Button(void)
{
unsigned int tel=10;
unsigned int DELAY=20;
unsigned int TX,TY,XS,YS,XE,YE,X,Y,X1,Y1,X2,Y2,x,y;
float Dx,Dy,xx,yy;
unsigned char BUTTON[8][8]={{11,12,13,14,15,16,17,18},
{21,22,23,24,25,26,27,28},
{31,32,33,34,35,36,37,38},
{41,42,43,44,45,46,47,48},
{51,52,53,54,55,56,57,58},
{61,62,63,64,65,66,67,68},
{71,72,73,74,75,76,77,78},
{81,82,83,84,85,86,87,88}};
//--------------------------------------------------------------
TXs=Read_EEProm(TXsADD);
TXe=Read_EEProm(TXeADD);
TYs=Read_EEProm(TYsADD);
TYe=Read_EEProm(TYeADD);
//--------------------------------------------------------------
XS=TXs,YS=TYs,XE=TXe,YE=TYe,TX=XE-XS,TY=YE-YS;
Dx=(float)TX/8;
Dy=(float)TY/8;
LOOP:
Toch_X=0;
Toch_Y=0;
ReadXPos(1000);
ReadYPos(1000);
X=Toch_X;
Y=Toch_Y;
if(X<XS || Y<YS) goto LOOP;
delay_ms(DELAY);
Toch_X=0;
Toch_Y=0;
ReadXPos(1000);
ReadYPos(1000);
X1=Toch_X;
Y1=Toch_Y;
if(!(( X1>=X-tel && X1<=X+tel ) && ( Y1>=Y-tel && Y1<=Y+tel))) goto LOOP;
delay_ms(DELAY);
Toch_X=0;
Toch_Y=0;
ReadXPos(1000);
ReadYPos(1000);
X2=Toch_X;
Y2=Toch_Y;
if(!(( X2>=X1-tel && X2<=X1+tel ) && ( Y2>=Y1-tel && Y2<=Y1+tel))) goto LOOP;
if(X2>=XE) Bx=7;
else
{
x=X2-XS;
xx=x/Dx;
Bx=floor(xx);
}
if(Y2>=YE) By=7;
else
{
y=Y2-YS;
yy=y/Dy;
By=floor(yy);
}
return BUTTON[By][Bx];
}
/*
#####################################################################
*/
void Touch_Test2(void)
{
unsigned char BATTON;
unsigned char XX;
unsigned char YY;
clearLCD();
line(0,0,127,0);
line(0,8,127,8);
line(0,16,127,16);
line(0,24,127,24);
line(0,32,127,32);
line(0,40,127,40);
line(0,48,127,48);
line(0,56,127,56);
line(0,63,127,63);
line(0,0,0,63);
line(16,0,16,63);
line(32,0,32,63);
line(48,0,48,63);
line(64,0,64,63);
line(80,0,80,63);
line(96,0,96,63);
line(112,0,112,63);
line(127,0,127,63);
while(1)
{
BATTON=Button();
BUZZER(1);
switch(Bx)
{
case 0:
XX=1;
break;
case 1:
XX=17;
break;
case 2:
XX=33;
break;
case 3:
XX=49;
break;
case 4:
XX=65;
break;
case 5:
XX=81;
break;
case 6:
XX=97;
break;
case 7:
XX=113;
break;
}
switch(By)
{
case 0:
YY=7;
break;
case 1:
YY=6;
break;
case 2:
YY=5;
break;
case 3:
YY=4;
break;
case 4:
YY=3;
break;
case 5:
YY=2;
break;
case 6:
YY=1;
break;
case 7:
YY=0;
break;
}
LCDprintf2(XX,YY,"OK");
BUZZER(1);
delay_ms(10);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -