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
2012-3-21 15:22 上传
(36.72 KB)
(未完待续)
加精了,怎么也得补个连接图吧。第一次用Fritzin,不熟练,自己做了一个TouchScreen的原件。
2012-3-12 19:38 上传
(85.36 KB)
2012-3-12 19:38 上传
(92.09 KB)
2012-3-12 19:38 上传
(79.26 KB)
2012-3-12 19:38 上传
(59.63 KB)
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 - 极客工坊