触摸屏芯片ADS7846/ADS7843驱动程序(C51)

[文件名]touch.c

[功能]8051单片机驱动ads7846/ads7843芯片

[简介]ads7846/7843芯片适合用在4线制触摸屏,它通过标准spi协议和cpu通信,操作简单,精度高,当触摸屏被按下时(即有触摸事件发生)则ads7846向cpu发中断请求,cpu接到请求后,应延时一下再响应其请求,目的是为了消除抖动使得采样更准确。如果一次采样不准确,可以尝试多次采样取最后一次结果为准,目的也是为了消除抖动。

[原作者]鞠春阳

[版本]v1.8

[最后修改时间]2004年6月23日下午

[版权]哈尔滨众邦龙科技开发有限公司单片机坐标网:www.mcuzb.com

*/

#include"reg51.h"

#include"intrins.h"

sbitdclk=p1^6;//根据用户自己的定义

sbitcs=p2^2;

sbitdin=p2^3;

sbitdout=p2^4;

sbitbusy=p2^5;

delay(unsignedchari--)

{

while(i--);

}

voidstart()//spi开始

{

dclk=0;

cs=1;

din=1;

dclk=1;

cs=0;

}

writecharto7843(unsignedcharnum)//spi写数据

{

unsignedcharcount=0;

dclk=0;

for(count=0;count<8;count++)

{

num<<=1;

din=cy;

dclk=0;_nop_();_nop_();_nop_();//上升沿有效

dclk=1;_nop_();_nop_();_nop_();

}

}

readfromcharfrom7843()//spi读数据

{

unsignedcharcount=0;

unsignedintnum=0;

for(count=0;count<12;count++)

{

num<<=1;

dclk=1;_nop_();_nop_();_nop_();//下降沿有效

dclk=0;_nop_();_nop_();_nop_();

if(dout)num++;

}

return(num);

}

voidzhongduan()interrupt0//外部中断0用来接受键盘发来的数据

{

unsignedintx=0,y=0;

delay(10000);//中断后延时以消除抖动,使得采样数据更准确

start();//启动spi

//while(busy);//如果busy信号不好使可以删除不用

delay(2);

writecharto7843(0x90);//送控制字10010000即用差分方式读x坐标详细请见有关资料

//while(busy);//如果busy信号不好使可以删除不用

delay(2);

dclk=1;_nop_();_nop_();_nop_();_nop_();

dclk=0;_nop_();_nop_();_nop_();_nop_();

x=readfromcharfrom7843();//读x轴坐标

writecharto7843(0xd0);//送控制字11010000即用差分方式读y坐标详细请见有关资料

dclk=1;_nop_();_nop_();_nop_();_nop_();

dclk=0;_nop_();_nop_();_nop_();_nop_();

y=readfromcharfrom7843();//读y轴坐标

cs=1;

}

main()

{

tmod=0x11;//记数器0计数器1都以16位记数

tcon=0x00;

ie=0x83;//10000001ea=1中断允许,

ip=0x01;

while(1);//等待触摸中断

}

  • 触摸屏芯片ADS7846/ADS7843驱动程序(C51)已关闭评论
    A+
发布日期:2019年07月02日  所属分类:参考设计