[资料分享] ADS7846/ADS7843驱动程序--C51

[复制链接]
 楼主| xyz549040622 发表于 2020-1-27 13:30 | 显示全部楼层 |阅读模式
  1. 触摸屏芯片ADS7846/ADS7843驱动程序(C51)


  2. /*
  3. [文件名] Touch.c
  4. [功 能] 8051单片机驱动ADS7846/ADS7843芯片
  5. [简 介] ADS7846/7843芯片 适合用在4线制触摸屏,它通过标准SPI协议和CPU通信,操作简单,精度高,当
  6. 触摸屏被按下时(即有触摸事件发生)则ADS7846向CPU发中断请求,CPU接到请求后,应延时一下再响应
  7. 其请求,目的是为了消除抖动使得采样更准确。如果一次采样不准确。
  8. [原作者] 鞠春阳
  9. [版 本] v1.1b
  10. [最后修改时间] 2004年3月31日 9:11

  11. */


  12. #include "reg51.h"
  13. #include "intrins.h"


  14. sbit DCLK=P1^6;
  15. sbit CS=P2^2;
  16. sbit DIN=P2^3;
  17. sbit DOUT=P2^4;
  18. sbit BUSY=P2^5;

  19. delay(unsigned char i--)
  20. {
  21. while(i--);
  22. }


  23. void start() //SPI开始
  24. {
  25. DCLK=0;
  26. CS=1;
  27. DIN=1;
  28. DCLK=1;
  29. CS=0;
  30. }

  31. WriteCharTo7843(unsigned char num) //SPI写数据
  32. {
  33. unsigned char count=0;
  34. DCLK=0;
  35. for(count=0;count<8;count++)
  36. {
  37. num<<=1;
  38. DIN=CY;
  39. DCLK=0; _nop_();_nop_();_nop_(); //上升沿有效
  40. DCLK=1; _nop_();_nop_();_nop_();
  41. }
  42. }


  43. ReadFromCharFrom7843() //SPI 读数据
  44. {
  45. unsigned char count=0;
  46. unsigned int Num=0;
  47. for(count=0;count<12;count++)
  48. {
  49. Num<<=1;
  50. DCLK=1; _nop_();_nop_();_nop_(); //下降沿有效
  51. DCLK=0; _nop_();_nop_();_nop_();
  52. if(DOUT) Num++;
  53. }
  54. return(Num);
  55. }

  56. void ZhongDuan() interrupt 0 //外部中断0 用来接受键盘发来的数据
  57. {
  58. unsigned int X=0,Y=0;
  59. delay(10000); //中断后延时以消除抖动,使得采样数据更准确
  60. start(); //启动SPI
  61. // while(BUSY); //如果BUSY信号不好使可以删除不用
  62. delay(2);
  63. WriteCharTo7843(0x90); //送控制字 10010000 即用差分方式读X坐标 详细请见有关资料
  64. // while(BUSY); //如果BUSY信号不好使可以删除不用
  65. delay(2);
  66. DCLK=1; _nop_();_nop_();_nop_();_nop_();
  67. DCLK=0; _nop_();_nop_();_nop_();_nop_();
  68. X=ReadFromCharFrom7843();
  69. WriteCharTo7843(0xD0); //送控制字 11010000 即用差分方式读Y坐标 详细请见有关资料
  70. DCLK=1; _nop_();_nop_();_nop_();_nop_();
  71. DCLK=0; _nop_();_nop_();_nop_();_nop_();
  72. Y=ReadFromCharFrom7843();
  73. CS=1;
  74. }


  75. main()
  76. {
  77. TMOD=0x11; // 记数器0 计数器1 都以 16 位 记数
  78. TCON=0x00;
  79. IE=0x83; //1000 0001 EA=1中断允许,
  80. IP=0x01;
  81. while(1);
  82. }


hudi008 发表于 2020-3-3 20:14 | 显示全部楼层
              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群: 嵌入式系统arm初学者 224636155←← +→→点击-->小 i 精品课全集,21ic公开课~~←←→→点击-->小 i 精品课全集,给你全方位的技能策划~~←←

2841

主题

19330

帖子

110

粉丝
快速回复 在线客服 返回列表 返回顶部