touch.c
来自「触摸屏控制芯片AR7643的驱动程序 drive program of Tou」· C语言 代码 · 共 125 行
C
125 行
#define SET_BIT(io ,bit) ( io |= (1<<bit) ) //example: SET_BIT(PORTA,0);SET_BIT(DDRA,0);
#define CLR_BIT(io ,bit) ( io &= ~(1<<bit) ) //example: CLR_BIT(PORTA,0);CLR_BIT(DDRA,0);
#define GET_BIT(pin,bit) ( pin & (1<<bit) ) //example: GET_BIT(PINA,0);
#define SET_IN( dir,bit) ( dir &= ~(1<<bit) ) //example: SET_IN(DDRA,0);
#define SET_OUT(dir,bit) ( dir |= (1<<bit) ) //example: SET_OUT(DDRA,0);
#define SET_CS SET_BIT(PEN_PORT,PENCS) //CS---PC1 (OUT)
#define CLR_CS CLR_BIT(PEN_PORT,PENCS)
#define SET_DCLK SET_BIT(PEN_PORT,PENCLK) //CLK---PC2 (OUT)
#define CLR_DCLK CLR_BIT(PEN_PORT,PENCLK)
#define SET_DIN SET_BIT(PEN_PORT,PENDIN) //DIN---PC3 (OUT)
#define CLR_DIN CLR_BIT(PEN_PORT,PENDIN)
#define GET_DOUT GET_BIT(PEN_PIN,PENDOUT) //DOUT---PC4 (IN)
#define GET_BUSY GET_BIT(PEN_PIN,PENBUSY) //BUSY---PC5 (IN)
unsigned int XAD_temp[10]={0};
unsigned int YAD_temp[10]={0};
/***********************************************************************
delay
************************************************************************/
void delay(unsigned int i)
{
while(i--);
}
/***********************************************************************
SPI开始
************************************************************************/
void Start(void)
{
CLR_DCLK;
SET_CS;
SET_DIN;
SET_DCLK;
CLR_CS;
}
/***********************************************************************
SPI写数据
************************************************************************/
void WriteCharTo7643(unsigned char num)
{
unsigned char count=0;
CLR_DCLK;
for(count=0;count<8;count++)
{
if((num&0x80)==0x80) SET_DIN;
else CLR_DIN;
num<<=1;
CLR_DCLK; //上升沿有效
SET_DCLK;
}
}
/***********************************************************************
SPI 读数据,返回12位AD转换结果
************************************************************************/
unsigned int ReadIntFrom7643(void)
{
unsigned char count=0;
unsigned int Num=0;
for(count=0;count<12;count++)
{
Num<<=1;
SET_DCLK; //下降沿有效
CLR_DCLK;
if(GET_DOUT) Num++;
}
return(Num);
}
/***********************************************************************
芯片初始化为中断模式12 位AD 转换
************************************************************************/
void _7643_Init(void)
{
Start(); //启动SPI
while(GET_BUSY); //如果BUSY信号不好使可以删除不用
delay(2);
WriteCharTo7643(0x80);
SET_CS;
}
/***********************************************************************
采样一次数据
取得按下点X坐标、Y坐标对应的AD值
存入XAD_temp[],YAD_temp[]
************************************************************************/
void GetOneAD(unsigned char count)
{
unsigned int X=0,Y=0;
unsigned int temp;
Start(); //启动SPI
while(GET_BUSY); //如果BUSY信号不好可以删除不用
delay(2);
WriteCharTo7643(0x90); //送控制字 10010000 读X坐标
//while(GET_BUSY) ; //如果BUSY信号不好可以删除不用
delay(2);
SET_DCLK;
CLR_DCLK;
XAD_temp[count]=ReadIntFrom7643(); //读X轴坐标
WriteCharTo7643(0xD0); //送控制字 11010000 读Y坐标
SET_DCLK;
CLR_DCLK;
YAD_temp[count]=ReadIntFrom7643();
SET_CS;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?