📄 ads7843.c
字号:
#include <avr/io.h>
#include <avr/delay.h>
#define TOUCH_DCLK 0
#define TOUCH_CS 1
#define TOUCH_DIN 2
#define TOUCH_BUSY 3
#define TOUCH_DOUT 4
#define TOUCH_PENIRQ 5
#define TOUCH_DDR DDRE
#define TOUCH_PORT PORTE
#define TOUCH_PIN PINE
unsigned long Xaddress,Yaddress;
unsigned char Xstring[8];
unsigned char Ystring[8];
unsigned char touch_irq_flag;
int main(void)
{
TouchInit();
Int5Init();
GUI_Initialize(); // 初始化LCM
touch_irq_flag=0;
while(1)
{
if(touch_irq_flag==1)
{
//Xaddress=TouchReadAddress(0xdc); //注意:在中断置标志位退出后,要第一时间读TOUCH,ADDRESS
//Yaddress=TouchReadAddress(0x9c); //在调用其他程序后,在读就会出错。可能是BUG,在中断中读也有同样的问题
// change touch point to lcd point
Xaddress=(230-TouchReadAddress(0xdc))*320/210;
Yaddress=(230-TouchReadAddress(0x9c))*240/210;
if(Xaddress>=320) Xaddress=319;
if(Yaddress>=240) Yaddress=239;
touch_irq_flag=0;
sei();
}
}
return(0);
}
SIGNAL(SIG_INTERRUPT5)
{
touch_irq_flag=1;
cli();
}
void Int5Init(void)
{
DDRE&= (~(1<<INT5));
PORTE&=(~(1<<INT5));
// GICR=0x80; //低电平中断
EIMSK|=(1<<INT5);
sei();
}
void TouchInit(void)
{
TOUCH_DDR|=(1<<TOUCH_DCLK)|(1<<TOUCH_CS)|(1<<TOUCH_DIN);
TOUCH_DDR&=(~((1<<TOUCH_DOUT)|(1<<TOUCH_BUSY)|(1<<TOUCH_PENIRQ)));
TOUCH_PORT|=(1<<TOUCH_DCLK)|(1<<TOUCH_CS)|(1<<TOUCH_DIN);
}
unsigned long TouchReadAddress(unsigned char command)
{
unsigned char i,address=0;
unsigned char temp=0x80;
TOUCH_PORT&=(~(1<<TOUCH_CS));
TOUCH_PORT&=(~(1<<TOUCH_DCLK));
for (i=0;i<8;i++)
{
TOUCH_PORT&=(~(1<<TOUCH_DCLK));
_delay_loop_2(2);
if ((command&temp)) TOUCH_PORT|=(1<<TOUCH_DIN); //SDIO=1;
else TOUCH_PORT&=(~(1<<TOUCH_DIN)); //SDIO=0;
_delay_loop_2(2);
TOUCH_PORT|=(1<<TOUCH_DCLK); //SCLK=1;
_delay_loop_2(2);
temp>>=1;
}
TOUCH_PORT&=(~(1<<TOUCH_DCLK));
while((TOUCH_PIN&(1<<TOUCH_BUSY))==0);
TOUCH_PORT&=(~(1<<TOUCH_DIN));
_delay_loop_2(2);
TOUCH_PORT|=(1<<TOUCH_DCLK); //SCLK=1;
_delay_loop_2(2);
TOUCH_PORT&=(~(1<<TOUCH_DCLK));
_delay_loop_2(2);
for (i=0;i<7;i++)
{
TOUCH_PORT|=(1<<TOUCH_DCLK); //SCLK=1;
_delay_loop_2(2);
if (TOUCH_PIN&(1<<TOUCH_DOUT)) address+=1;
address<<=1;
_delay_loop_2(2);
TOUCH_PORT&=(~(1<<TOUCH_DCLK));
_delay_loop_2(2);
}
TOUCH_PORT|=(1<<TOUCH_DCLK); //SCLK=1;
_delay_loop_2(2);
if (TOUCH_PIN&(1<<TOUCH_DOUT)) address+=1;
_delay_loop_2(2);
TOUCH_PORT&=(~(1<<TOUCH_DCLK));
TOUCH_PORT|=(1<<TOUCH_CS);
return(address);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -