请教各位达人~我在实现触摸屏控制功能是,利用 ATmega64与ADS7846芯片实现触摸屏控制 ,进入触摸屏子程序是利用INT0中断来实现,当手指触摸到屏幕上时,会进入中断,但不知道为什么每次运行完中断时,最终输出的结果总是X=0,Y=0。让我不知道从那里入手,头大啊~下面是我写的中断程序,请达人们看看是不是那里写错了啊??? 多谢各位达人了!!!!
//触摸屏处理子程序
void start() //SPI开始 { CMP_DCLK_0() ; //DCLK=0; CMP_CS_1() ; //CS=1; CMP_DIN_1() ; //DIN=1; CMP_DCLK_1() ; //DCLK=1; CMP_CS_0(); //CS=0; }
void WriteCharTo7843(unsigned char num) //SPI写数据 { unsigned char i; CMP_DCLK_0(); //DCLK=0; for (i=0x80;i>0;i/=2) { if (i & num) CMP_DIN_1(); else CMP_DIN_0() ; //DIN=CY; num<<=1; CMP_DCLK_1() ; some_nop; //上升沿有效 CMP_DCLK_0() ; some_nop; } }
uint ReadFromCharFrom7843() //SPI 读数据 { unsigned char count=0; unsigned int Num=0; for(count=0;count<12;count++) { Num<<=1; CMP_DCLK_1() ;some_nop();//下降沿有效 CMP_DCLK_0() ;some_nop(); if(CMP_DOUT == 1) Num++; } return(Num); }
void delay_1ms(void) { unsigned int itemp; for(itemp=1;itemp<1142;itemp++); } #pragma interrupt_handler debug_cmp_key:2
void debug_cmp_key()//触摸屏开关调试子程序 { unsigned char key_data=0; unsigned int X=0,Y=0; delay_1ms(); start(); //启动SPI // while(CMP_BUSY); //如果BUSY信号不好使可以删除不用 delay_1ms();//delay1(2); WriteCharTo7843(0x90); //送控制字 10010000 即用差分方式读X坐标 详细请见有关资料 // while(CMP_BUSY); //如果BUSY信号不好使可以删除不用 delay_1ms(); CMP_DCLK_1() ;some_nop();some_nop();some_nop();some_nop(); CMP_DCLK_0() ;some_nop();some_nop();some_nop();some_nop(); X=ReadFromCharFrom7843();////读X轴坐标 xp_x_cur = X; WriteCharTo7843(0xD0); //送控制字 11010000 即用差分方式读Y坐标 详细请见有关资料 CMP_DCLK_1() ;some_nop();some_nop();some_nop();some_nop(); CMP_DCLK_0() ;some_nop();some_nop();some_nop();some_nop(); Y=ReadFromCharFrom7843(); xp_y_cur = Y; CMP_CS_1(); } |