给LCD12864装上低成本的电阻触摸屏

本文介绍了如何将低成本的电阻触摸屏应用于LCD12864显示器,仅需四根线即可实现触摸功能。通过理解电阻屏的工作原理,配合Arduino代码,可以读取触摸位置并实时显示XY坐标。文章提供了接线方法、应用示例及源码供参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现的功能效果

贴在LCD12864上,实现完整的触摸屏功能。只需接四根线,程序简单。

1、效果展示:

小尺寸的触摸屏
尺寸刚刚好的触摸屏

2、原理

图2-1 滑动变阻器实物
图2-2 滑动变阻器原理图
如图2-1 、2-2读者应该不陌生,用过变阻器的都应该知道它的原理,即如图2-2,若在A端接个直流5V,在B端接个电池负极,那么随着中间的P的滑动,在C或者D上(C、D都是导通的)测得的电压也会跟随变化,若P从右边的B向左滑动靠近A,电压则从0V逐渐变到接近5V。掌握这个基本原理,下面的电阻屏就很好理解,下面仅以X轴做分析,Y轴一模一样。

3、代码原理

图2-3 电阻屏分析
图2-4 电阻触摸模型
仔细观察电阻屏实物会看到明显的上下分层,即电阻层,根据这张图脑补一下,它就是一种“平面式变阻器”,当给两极通一个高低电平,再任意读取另外两极的其中一个电极的电压,根据读到的电压值(AD模拟值)不就知道此时该轴的按压位置了?同理再快速的变换极性,对另外两极也做同样操作,不也得到那轴的位置了?在程序里快速循环执行这种供电检测操作不就实时的得到按压的XY坐标了?

4、实现方法

接线方法一:需要六根线
arduino接线仿真图
读者手上有啥型号就用啥,不一定非得用Arduino MEGA2560
电阻屏线序

法二:需要四根线,需要四颗下拉电阻。(读者理解原理后可自行搭建)

接好线,上传程序后,打开串口检验一下接线有没有问题,正常的话,按下触摸屏就会有数值显示出来,并且会有随着x,y轴有序变化。比如你从左下角靠近原点的地方开始向右上角划动,就应该有(50,50)–至—(1000,1000)这样有规律的变化。

5、应用范例

void loop() { 
   if(touch())//如果触摸   
 {    
 if((coordx>280&&coordx<365)  && (coordy>290&&coordy<340)) 如果在这个区域内触摸  {LED_NO;}//打开LED  
 if((coordx>300&&coordx<320)  && (coordy>100&&coordy<207)) //同理,如果在这个区域内触摸,执行下面的语句。 
 {MOTOR——NO();}//打开电机  }

6、源码

/***测试程序,打开串口监视器就可以看到xy轴的值*****/
//触摸屏电源连接  从左  至  右
#define Right  7//右侧X2
#define Left   6//左端X1
#define Bottom 5//底部Y2
#define Top    4//顶部Y1
/******读取********/
#define topInput   A0 //顶部Y1 (4和A0接在一起)
#define rightInput A1 //右侧X2(7和A1接在一起)
int coordx=0,coordy=0;
void setup() {
 Serial.begin(9600);

}

void loop()  
{
   if(touch())//如果屏被触摸
   {
    Serial.print("x=");
    Serial.print(coordx);//显示出所触摸处x轴的值
    Serial.print("   Y=");
    Serial.println(coordy);//显示出所触摸处y轴的值
    delay(100);
    }

}
/*****下面这段代码不用理,照搬进来放在loop下面即可***********/
boolean touch()
        {
          boolean touch = false;
          pinMode(Left,OUTPUT);
          digitalWrite(Left,LOW);

          pinMode(Right,OUTPUT);
          digitalWrite(Right,HIGH);

          pinMode(Top,INPUT);
          pinMode(Bottom,INPUT);

          delay(3);
          coordx = analogRead(topInput);

          //获得垂直坐标
          pinMode(Bottom,OUTPUT);
          digitalWrite(Bottom,LOW);

          pinMode(Top,OUTPUT);
          digitalWrite(Top,HIGH);

          pinMode(Right,INPUT);
          pinMode(Left,INPUT);

          delay(3);
          coordy = analogRead(rightInput);
          //如果坐标值小于1000大于0,那么屏被触摸
          if(coordx<1000&&coordx>0&&coordy<1000&&coordy>0)
            {
              touch=true;
              }
              return touch;
          
          }

©LIU

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值