OpenEdv-开源电子网

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

发个 电阻触摸屏的修改代码 感觉这样就跟文档上的时序一样了,方便理解

[复制链接]

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-5-29
在线时间
19 小时
发表于 2016-11-2 11:11:10 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 15904520807 于 2016-11-2 11:14 编辑

QQ截图20161102110333.png 通过观察XPT2046的时序 发现在发送命令的时候 是上升沿采集的 采集数据的时候是下降沿采集的
原子哥的程序 看着有点迷糊 于是按照自己的思路 重新修改了一下 感觉 更清晰了些
这个是模拟SPI 实现的

void TP_Write_Byte(u8 num)   
{  
        u8 count=0;   
        for(count=0;count<8;count++)  
        {           
                if(num&0x80)TDIN=1;  
                else TDIN=0;   
                num<<=1;
                delay_us(1);        
                TCLK=1;
                delay_us(1);        
                TCLK=0;                //é&#207;éy&#209;&#216;óDD§         
                delay_us(1);               
        }                                             
}                  
   
u16 TP_Read_AD(u8 CMD)         
{         
        u8 count=0;           
        u16 Num=0;
        TCLK=0;                 
        TDIN=0;         
        TCS=0;                 
        TP_Write_Byte(CMD);
        delay_us(5);   
        这里不用给一个时钟清除盲标志 触摸IC会 自动清除 我尝试了延时2US 也是好用的 为了稳定性建议还是延时长一点
        for(count=0;count<16;count++)
        {                                   
                Num<<=1;         
                delay_us(1);        
                TCLK=1;                       
                delay_us(1);         
                 TCLK=0;
                 if(DOUT)Num++;
                //Num<<=1;  这里一定要注意千万不要这样写,本人愚钝,在这里研究了好几个小时才弄明白 要不然就移了16位 导致数据不准确!!!
   }  
        Num>>=4;           
        TCS=1;               
        return(Num);   
}



这个是我用硬件SPI 驱动的 一样好使 为什么要移3位 是因为我设置SPI 在第一个边沿就采集数据 所以多采集了一个,第一个数据肯定是0 因为在SPI的第一个上升沿没有采集到AD数据
AD数据是在下降沿才有的, 一样好用
#if USE_SPI
//&#182;áè&#161;X&#187;ò&#213;&#223;Yμ&#196;×&#248;±ê μ×2&#227;oˉêy
u16 TP_Read_AD(u8 cmd)
{
        u16 num;
        XPT2046_CS=0;
        
        SPI1_SendReadByte(cmd);
        delay_us(5);
        num=SPI1_SendReadByte(0xFF);
        num<<=8;
        num+=SPI1_SendReadByte(0XFF);
        XPT2046_CS=1;
        num>>=3;
        return num;
}

希望这2个函数 能给和我一样的新手,整理一下心理的疑惑 能对你们有帮助

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

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2016-11-2 12:55:07 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-11-2 19:17:09 | 显示全部楼层
谢谢分享
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-24 16:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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