找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3576|回复: 2
收起左侧

零知开源软件库使用-XPT2046

[复制链接]
ID:349555 发表于 2018-8-6 12:09 | 显示全部楼层 |阅读模式
本次介绍一下软件库XPT2046型号的触摸屏的使用,该触摸屏结合ILI9341的LCD显示屏一起使用(原文请查看零知官网,我们的LCD和触摸屏已经连接在一起使用的),使用以下示例进行介绍,示例功能为:当触摸屏按下后,在LCD屏上显示当前按下的点的坐标值,示例程序代码如下:
  1. /**
  2. * XPT2046 Touch Screen Controller example.
  3. *       
  4. * @ brief:show the touch point on the LCD screen
  5. */

  6. #include <XPT2046_Touchscreen.h>

  7. #include "ili9341_parallel.h"

  8. #define CS_PIN 10 // Chip Select pin
  9. #define irq_pin 14 //IRQ pin

  10. XPT2046_Touchscreen ts(CS_PIN, irq_pin);

  11. ili9341_parallel_class tft(15,16,17,18,19,0,1,2,3,4,5,6,9);

  12. void setup() {
  13.   Serial.begin(9600);
  14.   
  15.         ts.begin(); //Begin TouchScreen.
  16.   
  17.   tft.begin();
  18.   tft.clear(BLACK);
  19. }

  20. boolean wastouched = true;

  21. void loop() {
  22.        
  23.   boolean istouched = ts.touched();
  24.   if (istouched) {
  25.     TS_Point p = ts.getPoint();
  26.     if (!wastouched) {
  27.       tft.drawString(20,180,BLUE,"Touch");
  28.     }
  29.         tft.clear(BLACK);
  30.     tft.drawFrame(100, 150, 200, 230, RED);

  31.     tft.drawString(110,160,GREEN,"X = ");
  32.         char str[20];
  33.         sprintf(str, "%d", p.x);
  34.        
  35.     tft.drawString(150,160,GREEN,str);

  36.     tft.drawString(110,200,GREEN,"Y = ");
  37.         sprintf(str, "%d", p.y);
  38.     tft.drawString(150,200,GREEN,str);
  39.        
  40.     Serial.print(", x = ");
  41.     Serial.print(p.x);
  42.     Serial.print(", y = ");
  43.     Serial.println(p.y);
  44.   } else {
  45.         Serial.println("no touch");
  46.   }
  47.   wastouched = istouched;
  48.   delay(100);
  49. }
复制代码
可以看到触摸屏的使用比较简单,我们通过SPI接口将触摸屏的接口与零知开发板相连接即可,然后在程序中通过touched()接口检测是否有触摸动作,如果有触摸再通过getPoint()函数得到触摸的坐标值。触摸屏的检测的时候还可以使用中断引脚连接到开发板,然后通过检测中断是否发生来检测是否有触摸动作,该型号的触摸屏在没有触摸的时候中断脚输出高电平,如果有触摸发生会有一段时间的低电平信号。我们连接好硬件后,烧写上面点的程序到零知开发板,程序运行后,我们用手指触摸屏幕,可以在显示屏上显示我们当前触摸的坐标值,如下:


Screenshot_20180806-114705.jpg


需要注意的是触摸屏的坐标和LCD坐标的转换,这里XPT2046的触摸屏为12位的精度,因此坐标范围为0-4096,而此处ILI9341的LCD坐标范围为0-240,和0-320,因此需要转换后两者才能对应起来,而且还需要注意两者的原点坐标,这可以通过软件方式简单的转换即可对应起来。当然在实际产品开发中,我们还需要做触摸屏的校准,这样得到的触摸动作才能精确的检测。
回复

使用道具 举报

ID:579197 发表于 2020-1-9 18:06 | 显示全部楼层
请问如何自定义MOSI、MISO、SCK引脚呢?
回复

使用道具 举报

ID:71262 发表于 2020-1-15 08:04 | 显示全部楼层
非常感谢楼主
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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