OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5810|回复: 5

写了一个ADS7843触摸屏的程序

[复制链接]

11

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
181
金钱
181
注册时间
2015-7-30
在线时间
50 小时
发表于 2016-5-5 16:31:06 | 显示全部楼层 |阅读模式
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();

   }
}

***********************************
结果: QQ图片20160505163016.jpg


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2015-7-22
在线时间
126 小时
发表于 2016-5-6 10:23:04 | 显示全部楼层
楼主,你看看你定义的时候引脚是PB,怎么初始化的时候都是PD呢?这能行才怪了!另外楼主是用的spi2吧!spi2的时钟使能了没有?PB引脚时钟使能没有?
work is work!!!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-5-7 22:40:15 | 显示全部楼层
建议参考我们例程
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-12-2
在线时间
4 小时
发表于 2021-7-13 11:13:56 | 显示全部楼层
正点原子 发表于 2016-5-7 22:40
建议参考我们例程

请问这个例程的具体位置
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2021-7-14 02:49:47 | 显示全部楼层
baisong1112 发表于 2021-7-13 11:13
请问这个例程的具体位置

电阻触摸屏实验
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2019-4-9
在线时间
79 小时
发表于 2021-7-14 09:26:21 | 显示全部楼层
你用模拟SPI写的好像有点问题吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-23 23:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表