网站导航: 首页 > 设计参考 > 正文 文章搜索
触摸屏芯片ADS7846/ADS7843驱动程序(C51)
 
文章编号:
081208125810
文章分类: 单片机 51系列
点 击:
...
关 键 词: ADS7846,ADS7843,触摸屏
文章来源:
网络
摘 要:
8051单片机驱动ADS7846/ADS7843芯片,ADS7846/7843芯片 适合用在4线制触摸屏,它通过标准SPI协议和CPU通信,操作简单,精度高,当触摸屏被按下时(即有触摸事件发生)则ADS7846向CPU发中断请求...

 
  1. /*  
  2. [文件名] Touch.c  
  3. [功 能] 8051单片机驱动ADS7846/ADS7843芯片  
  4. [简 介] ADS7846/7843芯片 适合用在4线制触摸屏,它通过标准SPI协议和CPU通信,操作简单,精度高,当触摸屏被按下时(即有触摸事件发生)则ADS7846向CPU发中断请求,CPU接到请求后,应延时一下再响应其请求,目的是为了消除抖动使得采样更准确。如果一次采样不准确。  
  5. [原作者] 鞠春阳  
  6. [版 本] v1.1b  
  7. [最后修改时间] 2004年3月31日 9:11  
  8. */  
  9. #include "reg51.h"   
  10. #include "intrins.h"   
  11.   
  12. sbit DCLK=P1^6;   
  13. sbit CS=P2^2;   
  14. sbit DIN=P2^3;   
  15. sbit DOUT=P2^4;   
  16. sbit BUSY=P2^5;   
  17.   
  18. delay(unsigned char i--)   
  19. {   
  20.     while(i--);   
  21. }   
  22.   
  23. void start() //SPI开始   
  24. {   
  25.     DCLK=0;   
  26.     CS=1;   
  27.     DIN=1;   
  28.     DCLK=1;   
  29.     CS=0;   
  30. }   
  31.   
  32. WriteCharTo7843(unsigned char num) //SPI写数据   
  33. {   
  34.     unsigned char count=0;   
  35.     DCLK=0;   
  36.     for(count=0;count<8;count++)   
  37.     {   
  38.         num<<=1;   
  39.         DIN=CY;   
  40.         DCLK=0; _nop_();_nop_();_nop_(); //上升沿有效   
  41.         DCLK=1; _nop_();_nop_();_nop_();   
  42.     }   
  43. }   
  44.   
  45.   
  46. ReadFromCharFrom7843() //SPI 读数据   
  47. {   
  48.     unsigned char count=0;   
  49.     unsigned int Num=0;   
  50.     for(count=0;count<12;count++)   
  51.     {   
  52.         Num<<=1;   
  53.         DCLK=1; _nop_();_nop_();_nop_(); //下降沿有效   
  54.         DCLK=0; _nop_();_nop_();_nop_();   
  55.         if(DOUT) Num++;   
  56.     }   
  57.     return(Num);   
  58. }   
  59.   
  60. void ZhongDuan() interrupt 0 //外部中断0 用来接受键盘发来的数据   
  61. {   
  62.     unsigned int X=0,Y=0;   
  63.     delay(10000); //中断后延时以消除抖动,使得采样数据更准确   
  64.     start(); //启动SPI   
  65.     // while(BUSY); //如果BUSY信号不好使可以删除不用   
  66.     delay(2);   
  67.     WriteCharTo7843(0x90); //送控制字 10010000 即用差分方式读X坐标 详细请见有关资料   
  68.     // while(BUSY); //如果BUSY信号不好使可以删除不用   
  69.     delay(2);   
  70.     DCLK=1; _nop_();_nop_();_nop_();_nop_();   
  71.     DCLK=0; _nop_();_nop_();_nop_();_nop_();   
  72.     X=ReadFromCharFrom7843();   
  73.     WriteCharTo7843(0xD0); //送控制字 11010000 即用差分方式读Y坐标 详细请见有关资料   
  74.     DCLK=1; _nop_();_nop_();_nop_();_nop_();   
  75.     DCLK=0; _nop_();_nop_();_nop_();_nop_();   
  76.     Y=ReadFromCharFrom7843();   
  77.     CS=1;   
  78. }   
  79.   
  80.   
  81. main()   
  82. {   
  83.     TMOD=0x11; // 记数器0 计数器1 都以 16 位 记数   
  84.     TCON=0x00;   
  85.     IE=0x83; //1000 0001 EA=1中断允许,   
  86.     IP=0x01;   
  87.     while(1);   
  88. }  

 

 
相关文章:

 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4