找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5895|回复: 2
打印 上一主题 下一主题
收起左侧

51单片机驱动ASD7843触摸屏控制芯片C语言程序

[复制链接]
跳转到指定楼层
楼主
ID:51773 发表于 2013-7-19 02:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
8051单片机驱动ADS7846/ADS7843芯片,ADS7846/7843芯片 适合用在4线制触摸屏,它通过标准SPI协议和CPU通信,操作简单,精度高,当触摸屏被按下时(即有触摸事件发生)则ADS7846向CPU发中断请求,CPU接到请求后,应延时一下再响应其请求,目的是为了消除抖动使得采样更准确。如果一次采样不准确。
  1. #include "reg51.h"
  2. #include "intrins.h"


  3. sbit DCLK=P1^6;
  4. sbit CS=P2^2;
  5. sbit DIN=P2^3;
  6. sbit DOUT=P2^4;
  7. sbit BUSY=P2^5;

  8. delay(unsigned char i--)
  9. {
  10. while(i--);
  11. }


  12. void start() //SPI开始
  13. {
  14. DCLK=0;
  15. CS=1;
  16. DIN=1;
  17. DCLK=1;
  18. CS=0;
  19. }

  20. WriteCharTo7843(unsigned char num) //SPI写数据
  21. {
  22. unsigned char count=0;
  23. DCLK=0;
  24. for(count=0;count<8;count++)
  25. {
  26. num<<=1;
  27. DIN=CY;
  28. DCLK=0; _nop_();_nop_();_nop_(); //上升沿有效
  29. DCLK=1; _nop_();_nop_();_nop_();
  30. }
  31. }


  32. ReadFromCharFrom7843() //SPI 读数据
  33. {
  34. unsigned char count=0;
  35. unsigned int Num=0;
  36. for(count=0;count<12;count++)
  37. {
  38. Num<<=1;
  39. DCLK=1; _nop_();_nop_();_nop_(); //下降沿有效
  40. DCLK=0; _nop_();_nop_();_nop_();
  41. if(DOUT) Num++;
  42. }
  43. return(Num);
  44. }

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


  64. main()
  65. {
  66. TMOD=0x11; // 记数器0 计数器1 都以 16 位 记数
  67. TCON=0x00;
  68. IE=0x83; //1000 0001 EA=1中断允许,
  69. IP=0x01;
  70. while(1);
  71. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:29434 发表于 2015-6-6 10:35 | 只看该作者
回复

使用道具 举报

板凳
ID:29434 发表于 2015-6-6 10:41 | 只看该作者
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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