Arduino驱动触摸屏实验

thomas 于 2012-3-21 15:33 编辑



买了12864液晶屏后,总觉得少点儿什么,似乎应该有个配套的触摸屏会更漂亮。

结果taobao了半天,根本买不到带触摸屏的12864模块。

我开始怀疑我的脑袋是不是不正常了,这应该是个基础需求吧。有触摸屏的话可以省去很多按钮,面板设计会更简洁。

量了一下,我买的12864属于低端产品,大概3.2吋的屏幕。淘宝搜了下,唯一的3.2吋触摸屏是手机专用的,不敢冒险,所以买了一块最常见的“4线电阻式触摸屏” 3.4吋的屏,已经粘好了面板。又同时买了个配套的插座。

本次是初步联合调试,液晶屏是传统的SPI接法,可以参照弘毅的帖子arduino学习笔记15 - 12864液晶实验。

3.4吋的屏和液晶屏宽度一样,高度长出一些,很难看。突发灵感,把空白位置做成了固定的按钮。

激光机打了一张,开始为了追求质感,怕漏光,用的卡片纸。后来发现纯属画蛇添足,改用普通白纸答应更漂亮。



自己写了个类,分两行做实时动态显示。第一次上手,代码有些笨拙。

网上找了个触摸屏程序,直接用来看看。

接线:非常简单。触摸屏1234脚接 ANALOG IN 0,1,2,3 然后所有4个引脚各挂一个10k电阻连接到GND

touchscreen.gif

2012-3-21 15:22 上传
(36.72 KB)





(未完待续)

加精了,怎么也得补个连接图吧。第一次用Fritzin,不熟练,自己做了一个TouchScreen的原件。




2012-03-12_10-01-51_140.jpg

2012-3-12 19:38 上传
(85.36 KB)




2012-03-12_10-02-30_726.jpg

2012-3-12 19:38 上传
(92.09 KB)




2012-03-12_10-03-24_846.jpg

2012-3-12 19:38 上传
(79.26 KB)




2012-03-12_10-04-08_202.jpg

2012-3-12 19:38 上传
(59.63 KB)




2012-03-12_10-46-15_641.jpg

2012-3-12 19:38 上传
(50.53 KB)




总装

2012-3-12 19:38 上传
(65.38 KB)

总装




驱动成功

2012-3-12 19:38 上传
(67.45 KB)

驱动成功





代码,就几行,其余都是LCD显示的,自己摘吧。

/*
LCDArduino
PIN1 = GND
PIN2 = 5V
RS(CS) = 8;
RW(SID)= 9;
EN(CLK) = 3;
PIN15 PSB = GND;
*/
#define xLow17
#define xHigh 15
#define yLow16
#define yHigh 14

//将触摸屏连接到ANALOGIN 0~4

#include "LCD12864RSPI.h"

void setup()
{
Serial.begin(9600);
LCDA.Initialise(); // initialize
delay(100);
}

void loop()
{
LCDA.CLEAR();// clear screen
//touch screen
pinMode(xLow,OUTPUT);
pinMode(xHigh,OUTPUT);
digitalWrite(xLow,LOW);
digitalWrite(xHigh,HIGH);

digitalWrite(yLow,LOW);
digitalWrite(yHigh,LOW);

pinMode(yLow,INPUT);
pinMode(yHigh,INPUT);
delay(10);

//xLow has analog port -14 !!
int x=analogRead(yLow -14);

pinMode(yLow,OUTPUT);
pinMode(yHigh,OUTPUT);
digitalWrite(yLow,LOW);
digitalWrite(yHigh,HIGH);

digitalWrite(xLow,LOW);
digitalWrite(xHigh,LOW);

pinMode(xLow,INPUT);
pinMode(xHigh,INPUT);
delay(10);

//xLow has analog port -14 !!
int y=analogRead(xLow - 14);

//out to display x,y
splitNum(0,1,x);
splitNum(1,1,y);
delay(500);
}

//split number and display to screen
void splitNum(int dx,int dy,int sn)
{
int d0=0;
int d1=0;
int d2=0;

if(sn<10){
d0=sn;
d1=0;
d2=0;
}
else if(sn<100){

d0= sn%10;
d1= sn/10;
d2=0;
}
else if(sn<1000){
d0=sn%10;
d1=sn%100/10;
d2=sn/100;
}
else{
d0=9;
d1=9;
d2=9;
}
LCDA.DisplaySig(dx,dy,d2+48);
LCDA.DisplaySig(dx,dy+1,d1+48);
LCDA.DisplaySig(dx,dy+2,d0+48);

}
复制代码
via - 极客工坊

标签: Arduino教程