|
急!!!请各位看看我的这个触摸屏程序就是显示不出坐标?
[复制链接]
程序好像没有运行这一部分(红色显示)
下面是我的程序:
#include
#include
#include
sfr AUXR = 0x8e;
#define X_ADDR XBYTE[0x0000]
#define Y_ADDR XBYTE[0x0100]
#define CMD XBYTE[0x0200]
#define DAT XBYTE[0x0300]
unsigned char code shuzi[160]={
0x00,0x00,0x00,0x1C,0x22,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x22,0x1C,0x00,0x00,//shuzi"0"
0x00,0x00,0x00,0x10,0x30,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,//shuzi"1"
};
sbit DCLK=P1^6; //根据用户自己的定义
sbit CS=P2^2;
sbit DIN=P2^3;
sbit DOUT=P2^4;
sbit BUSY=P2^5;
delay(unsigned char i)
{
while(i--);
}
void clear()
{unsigned int x,y;
AUXR = 0x02;
//用蓝色清屏
CMD = 0x04;DAT = 0x03;//背景色
CMD = 0x08;//启动填充操作
for(y=0;y<600*12;y++);//延时16.6毫秒
CMD = 0x00;//退出填充操作
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
}
void zuobiao(int m)
{
unsigned char n;
AUXR = 0x02;
CMD = 0x02;DAT=0x00;//前景色
CMD = 0x04;DAT=0xff;//背景色
CMD = 0x01;
for ( n=0; n<=100; n++ )
{
X_ADDR = 0;
X_ADDR = 100;
Y_ADDR = n;
DAT = shuzi[n+m];
}
while(1);
}
void start() //SPI开始
{
DCLK=0;
CS=1;
DIN=1;
DCLK=1;
CS=0;
}
WriteCharTo7843(unsigned char num) //SPI写数据
{
unsigned char count=0;
DCLK=0;
for(count=0;count<8;count++)
{
num<<=1;
DIN=CY;
DCLK=0; _nop_();_nop_();_nop_(); //上升沿有效
DCLK=1; _nop_();_nop_();_nop_();
}
}
ReadFromCharFrom7843() //SPI 读数据
{
unsigned char count=0;
unsigned int Num=0;
for(count=0;count<12;count++)
{
Num<<=1;
DCLK=1; _nop_();_nop_();_nop_(); //下降沿有效
DCLK=0; _nop_();_nop_();_nop_();
if(DOUT) Num++;
}
return(Num);
}
void ZhongDuan() interrupt 0 //外部中断0 用来接受键盘发来的数据
{
unsigned int X=0,Y=0,x[12],j;
delay(10000); //中断后延时以消除抖动,使得采样数据更准确
start(); //启动SPI
// while(BUSY); //如果BUSY信号不好使可以删除不用
delay(2);
WriteCharTo7843(0x90); //送控制字 10010000 即用差分方式读X坐标 详细请见有关资料
// while(BUSY); //如果BUSY信号不好使可以删除不用
delay(2);
DCLK=1; _nop_();_nop_();_nop_();_nop_();
DCLK=0; _nop_();_nop_();_nop_();_nop_();
X=ReadFromCharFrom7843(); //读X轴坐标
WriteCharTo7843(0xD0); //送控制字 11010000 即用差分方式读Y坐标 详细请见有关资料
DCLK=1; _nop_();_nop_();_nop_();_nop_();
DCLK=0; _nop_();_nop_();_nop_();_nop_();
Y=ReadFromCharFrom7843(); //读Y轴坐标
CS=1;
for(j=0;j<12;j++){
X<<=1;
x[j]=CY;
if(x[j]==0){zuobiao(16);}
else if(x[j]==1) {zuobiao(32);}
}}
main()
{clear();
TMOD=0x11; // 记数器0 计数器1 都以 16 位 记数
TCON=0x00;
IE=0x83; //1000 0001 EA=1中断允许,
IP=0x01;
while(1){};
//等待触摸中断
}
|
|