初级会员

- 积分
- 181
- 金钱
- 181
- 注册时间
- 2015-7-30
- 在线时间
- 50 小时
|
1金钱
写了一个ADS7843触摸屏的程序,发现有点问题:显示的数据都没有规律,最后全部为固定值1554******************ads7843.h**********************
#ifndef __ADS7843_H
#define __ADS7843_H
#include "sys.h"
#define ads7843_CLK_H() GPIO_SetBits(GPIOB,GPIO_Pin_13)
#define ads7843_CLK_L() GPIO_ResetBits(GPIOB,GPIO_Pin_13)
#define ads7843_CS_H() GPIO_SetBits(GPIOB,GPIO_Pin_12)
#define ads7843_CS_L() GPIO_ResetBits(GPIOB,GPIO_Pin_12)
#define ads7843_DIN_H() GPIO_SetBits(GPIOB,GPIO_Pin_14)
#define ads7843_DIN_L() GPIO_ResetBits(GPIOB,GPIO_Pin_14)
#define ads7843_IRQ_FLAG() GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)
#define ads7843_DOUT() GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)
#define CHX 0x90
#define CHY 0xd0
void ads7843_io_init(void);
void ads7843_start(void);
void ads7843_write(u8 cmd);
u16 ads7843_read(void);
u16 ads7843_average(u16 a[8]);
void ads7843_work(void);
#endif
******************************************************
***************ads7843.c***********************
#include "ads7843.h"
#include "sys.h"
#include "delay.h"
#include <stdio.h>
void ads7843_io_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD,&GPIO_InitStructure);
}
void ads7843_start(void)
{
ads7843_CS_H();
ads7843_CLK_H();
ads7843_DIN_H();
ads7843_CLK_H();
}
void ads7843_write(u8 cmd)
{
u8 i;
u8 temp;
ads7843_CLK_L();
for(i=0;i<8;i++)
{
temp = cmd&0x80;
if(temp)
{
ads7843_DIN_H();
}
else
{
ads7843_DIN_L();
}
}
}
u16 ads7843_read(void)
{
u16 buf = 0;
u8 i;
for(i=0;i<12;i++)
{
buf <<= 1;
ads7843_CLK_H();
delay_us(1);
ads7843_CLK_L();
delay_us(1);
if(ads7843_DOUT())
{
buf++;
}
}
return(buf);
}
u16 ads7843_average(u16 a[8])
{
u16 i;
u16 ave = 0;
u16 sum = 0;
for(i=0;i<8;i++)
{
sum+=a;
}
ave=(sum)/6;
return ave;
}
void ads7843_work(void)
{
u16 X=0 , Y=0;
u16 i;
u16 avex , avey;
u16 x[8],y[8];
if(!ads7843_IRQ_FLAG())
{
delay_us(100);
if(!ads7843_IRQ_FLAG())
{
ads7843_start();
ads7843_CS_L();
for(i=0;i<8;i++)
{
ads7843_write(CHX);
ads7843_CLK_H();
delay_us(100);
ads7843_CLK_L();
delay_us(100);
X = ads7843_read();
x = X;
ads7843_write(CHY);
ads7843_CLK_H();
delay_us(100);
ads7843_CLK_L();
delay_us(100);
Y = ads7843_read() ;
y = Y;
}
ads7843_CS_H();
avex = ads7843_average(x);
avey = ads7843_average(y);
printf("x=%x\r\n",avex);
printf("y=%x\r\n\r\n",avey);
}
}
}
**************************************************
*******************main.c**********************
int main(void)
{
delay_init();
uart_init(9600);
ads7843_io_init();
while(1)
{
ads7843_work();
}
}
***********************************
结果:
|
|