#define _TP_TEST_C_
#include "reg51.h"
//#include "tp_test.h"
#define uchar unsigned char
#define uint unsigned int
uchar bdata num;
sbit bit7=num^7;
unsigned int TP_X=0,TP_Y=0;
unsigned int LCD_X=0,LCD_Y=0; //coordinate value read from TP
unsigned int ymin=12,ymax=230,xmin=12,xmax=230;
sbit TP_DCLK=P2^0;
sbit TP_CS=P2^1;
sbit TP_DIN=P2^2;
sbit TP_BUSY=P2^3;
sbit TP_DOUT=P2^4;
sbit TP_PENIRQ=P3^2;
void display_rgb(uint dat1,dat2);
void write_command(uchar cdatah,cdatal);
void write_data(uchar ddata_h,ddata_l);
void WCOM(uchar Register, uchar Upper_Code, uchar Lower_Code);
void delay(uint t);
uchar code home[];
uchar code email[];
uchar code book[];
uchar code phone[];
uchar code mp4[];
uchar code flash[];
uchar code camera[];
/////////////////////////////////////
void SPI_Start() //SPI开始
{
TP_DCLK=0;
TP_CS=1;
TP_DIN=1;
TP_DCLK=1;
TP_CS=0;
}
//////////////////////////////////
void TP_write(uchar t)
{
uchar i;
num=t;
for(i=0;i<8;i++)
{
TP_DIN=bit7;
TP_DCLK=0;
TP_DCLK=1; //rising edge
num=num<<1;
}
TP_DCLK=0;
}
uchar TP_read(void)
{
uchar i,tp_data=0;
TP_CS=0;
for(i=0;i<8;i++)
{
tp_data<<=1;
TP_DCLK=1; //falling edge
TP_DCLK=0;
if(TP_DOUT) tp_data++;
}
return(tp_data);
}
void get_TP_X_addr()//give the control byte,the read 5 times and get the average
{
uint i,sum=0;
for(i=0;i<5;i++)
{
TP_CS=0;
TP_write(0xd8+1);//PD0=0,PENIRQ DISABLE
sum+=TP_read();
TP_CS=1; //TP_CS=1;
}
TP_write(0xd8);//PD0=1,PENIRQ ENABLE
TP_X=sum/5+4;//get the average
}
void get_TP_Y_addr()//give the control byte,the read 5 times and get the average
{
uint i,sum=0;
for(i=0;i<5;i++)
{
TP_CS=0;
TP_write(0x98+1);//PD0=0,PENIRQ DISABLE
sum+=TP_read();
TP_CS=1; //TP_CS=1;
}
TP_write(0x98);//PD0=1,PENIRQ ENABLE
TP_Y=sum/5-11;//get the average
}
void write_to_LCD(uint TP_X,TP_Y)
{
uchar LCD_YH;
LCD_X=(TP_X-xmin)*1.1;//240/(xmax-xmin);
//LCD_X=LCD_X+5;
if (LCD_X>240) LCD_X=240;
if (LCD_X<0) LCD_X=0;
LCD_Y=(TP_Y-ymin)*1.468;//320/(ymax-ymin);
//LCD_Y=LCD_Y-13;
if (LCD_Y>320) LCD_Y=320;
if (LCD_Y<0) LCD_Y=0;
LCD_Y=320-LCD_Y;
LCD_YH=(LCD_Y>>8)&&0xff;
write_command(0x00,0x20);
write_data(0x00,LCD_X); //GRAM Horizontal/Vertical Address Set (R20h, R21h)
write_command(0x00,0x21);
write_data(LCD_YH,LCD_Y); //
write_command(0x00,0x50);
write_data(0x00,LCD_X); //
write_command(0x00,0x51);
write_data(0x00,LCD_X); //
write_command(0x00,0x52);
write_data(LCD_YH,LCD_Y); //
write_command(0x00,0x53);
write_data(LCD_YH,LCD_Y); //
write_command(0x00,0x22); //write data to Gram
write_data(0x00,0x1F);
delay(5);
}
void display_TP_Icon(uchar t[])
{
int i;
write_command(0x00,0x20);
write_data(0,100); //GRAM Horizontal/Vertical Address Set (R20h, R21h)
write_command(0x00,0x21);
write_data(0,100); //
write_command(0x00,0x50);
write_data(0x00,100); //
write_command(0x00,0x51);
write_data(0x00,147); //
write_command(0x00,0x52);
write_data(0,100); //
write_command(0x00,0x53);
write_data(0,131); //
write_command(0x00,0x22); //write data to Gram
for(i=0;i<3072;i=i+2)//48*32*2=3072
write_data(t[i],t[i+1]);
}
unsigned int get_region_index()
{
// region 1
if ((TP_X >= 0) && (TP_X < 230)
&& (TP_Y >= 12) && (TP_Y < 230))
return 1;
//Icon
// region 2
if ((TP_X >= 185) && (TP_X < 220)
&& (TP_Y >= 0) && (TP_Y < 12))
return 6;
// region 3
if ((TP_X >= 145) && (TP_X < 180)
&& (TP_Y >= 0) && (TP_Y < 12))
return 5;
// region 4
if ((TP_X >= 110) && (TP_X < 135)
&& (TP_Y >= 0) && (TP_Y < 12))
return 4;
// region 5
if ((TP_X >= 70) && (TP_X < 100)
&& (TP_Y >= 0) && (TP_Y < 12))
return 3;
// region 6
if ((TP_X >= 30) && (TP_X <60)
&& (TP_Y >= 0) && (TP_Y <= 12))
return 2;
// as for unconcerned regions, return 0 as the index
return 0;
}
void int_0(void) interrupt 0
{
uint regionidx = 0;
IE=0x80;
SPI_Start();
get_TP_X_addr();//x-position measure
get_TP_Y_addr();//8bit mode ,y-position measure
//write_to_LCD(TP_X,TP_Y);
regionidx = get_region_index();
// according to different interested regions, do related process
switch(regionidx)
{
case 1: // region 1
write_to_LCD(TP_X,TP_Y);
break;
case 2: // region 2
display_TP_Icon(phone);
break;
case 3: // region 3
display_TP_Icon(book);
break;
case 4: // region 4
display_TP_Icon(email);
break;
case 5: // region 5
display_TP_Icon(mp4);
break;
case 6: // region 6
display_TP_Icon(home);
break;
default:
// do nothing for these unconcerned regions
break;
}
IE=0x81;
}
//48*32
unsigned char code phone[]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xF7,0x9E,0xF7,0x9E,0xF7,0xDE,0xF7,0xFE,0xF7,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xF7,0xFE,0xF7,0xFF,0xF7,0xFE,0xF7,0xDE,0xFF,0xBE,0xFF,0xDF,0xFF,0xDF,0xFF,0xDF,0xFF,0xDF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xF7,0xFE,0xF7,0xFE,0xEF,0x3E,0xEC,0x5D,0xFB,0xBD,0xFB,0xDF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,
0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,
0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xF3,0xBE,0xF3,0xBE,0xEB,0xDC,0xED,0xBD,0xF7,0xBE,0xFF,0xFF,0xFF,0xDF,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,
0xFF,0xDF,0xFF,0xDF,0xFF,0xDF,0xFF,0xDE,0xFF,0xDF,0xF7,0xDE,0xEC,0xFD,0xF2,0xFE,0xF0,0x9D,0xF0,0x1E,0xF0,0x1E,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,
0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,
0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1E,0xF0,0x1D,0xF8,0x1E,0xF8,0x1E,0xF1,0x7D,0xE4,0x9C,0xF7,0xBE,0xFF,0xFF,0xFF,0xBF,0xFF,0xDE,0xFF,0xFF,
0xFF,0xBF,0xF7,0xFD,0xFF,0xDD,0xF7,0xBF,0xEF,0xFE,0xEB,0xFD,0xF0,0x1D,0xF0,0x1E,0xF0,0x9D,0xEA,0xDD,0xF3,0x7E,0xFB,0x5F,0xFB,0x7F,0xFB,0x7F,0xFB,0x7F,0xFB,0x7F,
0xFB,0x7F,0xFB,0x7F,0xFB,0x7F,0xFB,0x7F,0xFB,0x7F,0xFB,0x7F,0xFB,0x7F,0xFB,0x7F,0xFB,0x7F,0xFB,0x7F,0xFB,0x7F,0xFB,0x7F,0xFB,0x7F,0xFB,0x7F,0xFB,0x7F,0xFB,0x7F,
0xFB,0x7F,0xFB,0x7F,0xFB,0x7F,0xFB,0x7F,0xFB,0x7F,0xF3,0x7E,0xFB,0x5F,0xFB,0x3F,0xE9,0x7C,0xF0,0x1E,0xF0,0x1D,0xEA,0x1D,0xEF,0x9E,0xF7,0xDE,0xF7,0xBF,0xFF,0xDF,
0xFF,0xDE,0xFF,0xDE,0xF7,0xBE,0xF7,0xFF,0xEC,0x9D,0xF0,0x1D,0xF0,0x3D,0xE5,0x3D,0xF7,0x9E,0xF7,0xFC,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xF7,0xFE,0xF7,0xFE,0xEF,0xBD,0xEE,0x5D,0xE9,0xBC,0xF0,0x1E,0xEA,0x7D,0xFF,0xBE,0xF7,0xBE,0xFF,0xDE,
0xF7,0xDF,0xFF,0xDE,0xFF,0xBE,0xEF,0xBD,0xE9,0x9E,0xF0,0x5D,0xE3,0xDC,0xFF,0xFF,0xF7,0xDE,0xFF,0xBD,0xF7,0xBF,0xFF,0xDF,0xFF,0xBF,0xFF,0xBF,0xFF,0xBF,0xFF,0xBF,
0xFF,0xBF,0xFF,0xBF,0xFF,0xBF,0xFF,0xBF,0xFF,0xBF,0xFF,0xDF,0xFF,0xDF,0xFF,0xBF,0xFF,0xBF,0xFF,0xDF,0xFF,0xBF,0xF7,0x9F,0xFF,0xBE,0xFF,0xFF,0xF7,0xFE,0xFF,0xBE,
0xFF,0xBF,0xF7,0xBE,0xFF,0xBE,0xF7,0xBF,0xFF,0xBF,0xFF,0xBF,0xFF,0xBF,0xFF,0xBF,0xFF,0xBF,0xFF,0xFF,0xEF,0x1D,0xE1,0x3C,0xE8,0x1D,0xE5,0xFB,0xFF,0xFF,0xF7,0xBE,
0xFF,0xDE,0xFF,0xDF,0xF7,0xFE,0xEE,0xBC,0xE0,0x5D,0xE1,0x1C,0xEF,0xBD,0xFF,0xBE,0xFF,0xBF
评论0