极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 161328|回复: 78

arduino学习笔记33 - Mega 2560+TFT3.2寸屏的演示实验

  [复制链接]
发表于 2012-4-16 09:59:44 | 显示全部楼层 |阅读模式
经过了一段时间的学习,慢慢的对TFT 有一些些的了解,对于我们这些初学者来说,写驱动那是不可能的事情,唯一能做的就是看得懂驱动是啥、或者是很好的阅读驱动程序即可。如果是应用,那会这些足矣!如果是开发的,那还需要更多的学习和了解。之前群里的Zzz玩过TFT 3.2+mega2560的,只是他时间有点忙吧,没时间出来写测评,我现在能驱动了,就出来说一下是怎么用的吧。欢迎大家一起讨论实验中的问题,毕竟把问题都回答完了就会理解一点的。
介绍
HY-TFT320是一个3.2英寸屏幕的TFT液晶模块,320X240(分辨率),65K色,40引脚接口,而不只是一个LCD的模块,因为它包含触摸功能和SD卡,所以这是一个强大的显示扩展模块。这个TFT的控制IC是SSD1289,它是16位数据接口的,相对比较容易驱动它,我们可以使用STM32、AVR、8051单片机对它进行控制,HY-TFT320里面也包含了一个触摸控制IC(XPT2046),而且触摸接口也是包含在屏幕的40引脚中,其中还含有SD卡相应的接口,所以此块TFT模块功能还算是比较丰富的。
规格:
1、3.2寸彩屏TFT LCD
2、分辨率 320X240
3、65535种颜色(16位)
4、强大的16位控制器(SSD1289)
5、内置视频内存缓冲区
6、集成电阻触摸屏
7、集成SD卡
8、5V操作电压
9、LED背光

应用
数码相框(DPF)
视频终端
测试设备
GPS
游戏机
视频电视和便携式VCD、DVD

引脚定义:


首先所使用的器材:
一个mega 2560
一个mega V4 扩展板
一个 TFT 3.2寸(主控IC是SSD1289 、触控IC是XPT2046)
一条USB线
若干条杜邦线等等

在这里引用一下本链接的学习资料:http://www.geeetech.com/2012/04/ ... -module-to-arduino/

大概的连接方法是这样的:
(LEDK -> GND)   only 3.2″ TFT LCD
LEDA -> 5V
VCC -> 5V
RD -> 3.3V
GND -> GND
DB0->DB7 to pin D37->D30
DB8->DB15 to pin D22->D29
RS -> D38
WR -> D39
CS(pin6) -> D40
RSET-> D41

把线连接好以后,需要把这个库文件拷到Arduino IDE libraries 里面!

看一下我们的实物连接图!


下面是主要的代码!因为现在对于我的TFT 3.2寸没有合适的转接板,所以需要我们一条条连连起来,除非需要自己画一个转接板,这样用起来就方便很多很多啊!
  1. #include <ITDB02_Graph16.h>

  2. // Declare which fonts we will be using
  3. extern uint8_t SmallFont[];

  4. // Uncomment the next line for the ITDB02 Shield
  5. //ITDB02 myGLCD(19,18,17,16);

  6. // Uncomment the next line for the ITDB02 Mega Shield
  7. ITDB02 myGLCD(38,39,40,41);

  8. void setup()
  9. {
  10.   randomSeed(analogRead(0));
  11.   
  12. // Setup the LCD
  13.   myGLCD.InitLCD();
  14.   myGLCD.setFont(SmallFont);
  15. }

  16. void loop()
  17. {
  18.   int buf[238];
  19.   int x, x2;
  20.   int y, y2;
  21.   int r;

  22. // Clear the screen and draw the frame
  23.   myGLCD.clrScr();

  24.   myGLCD.setColor(255, 0, 0);
  25.   myGLCD.fillRect(0, 0, 239, 13);
  26.   myGLCD.setColor(64, 64, 64);
  27.   myGLCD.fillRect(0, 306, 239, 319);
  28.   myGLCD.setColor(255, 255, 255);
  29.   myGLCD.setBackColor(255, 0, 0);
  30.   myGLCD.print("ITDB02 - 240x320 Color Display", CENTER, 1);
  31.   myGLCD.setColor(255, 128, 128);
  32.   myGLCD.setBackColor(64, 64, 64);
  33.   myGLCD.print("H.Karlsen", LEFT, 307);
  34.   myGLCD.print("(C)2010", RIGHT, 307);
  35.   myGLCD.setColor(255,255,0);
  36.   myGLCD.print("Portrait", CENTER, 307);

  37.   myGLCD.setColor(0, 0, 255);
  38.   myGLCD.drawLine(0, 14, 239, 14);
  39.   myGLCD.drawLine(0, 14, 0, 305);
  40.   myGLCD.drawLine(239, 14, 239, 305);
  41.   myGLCD.drawLine(0, 305, 239, 305);

  42. // Draw crosshairs
  43.   myGLCD.setColor(0, 0, 255);
  44.   myGLCD.setBackColor(0, 0, 0);
  45.   myGLCD.drawLine(119, 15, 119, 304);
  46.   myGLCD.drawLine(1, 159, 238, 159);
  47.   for (int i=9; i<240; i+=10)
  48.     myGLCD.drawLine(i, 157, i, 161);
  49.   for (int i=19; i<300; i+=10)
  50.     myGLCD.drawLine(117, i, 121, i);
  51.   
  52. // Draw sin-, cos- and tan-lines  
  53.   myGLCD.setColor(0,255,255);
  54.   myGLCD.print("Sin", 5, 15);
  55.   for (int i=1; i<238; i++)
  56.   {
  57.     myGLCD.drawPixel(i,159+(sin(((i*1.51)*3.14)/180)*100));
  58.   }
  59.   
  60.   myGLCD.setColor(255,0,0);
  61.   myGLCD.print("Cos", 5, 27);
  62.   for (int i=1; i<238; i++)
  63.   {
  64.     myGLCD.drawPixel(i,159+(cos(((i*1.51)*3.14)/180)*100));
  65.   }

  66.   myGLCD.setColor(255,255,0);
  67.   myGLCD.print("Tan", 5, 39);
  68.   for (int i=1; i<238; i++)
  69.   {
  70.     myGLCD.drawPixel(i,159+(tan(((i*1.51)*3.14)/180)));
  71.   }

  72.   delay(2000);
  73.   
  74.   myGLCD.setColor(0,0,0);
  75.   myGLCD.fillRect(1,15,238,304);
  76.   myGLCD.setColor(0, 0, 255);
  77.   myGLCD.setBackColor(0, 0, 0);
  78.   myGLCD.drawLine(119, 15, 119, 304);
  79.   myGLCD.drawLine(1, 159, 238, 159);

  80. // Draw a moving sinewave
  81.   x=1;
  82.   for (int i=1; i<6902; i++)
  83.   {
  84.     x++;
  85.     if (x==239)
  86.       x=1;
  87.     if (i>239)
  88.     {
  89.       if ((x==119)||(buf[x-1]==159))
  90.         myGLCD.setColor(0,0,255);
  91.       else
  92.         myGLCD.setColor(0,0,0);
  93.       myGLCD.drawPixel(x,buf[x-1]);
  94.     }
  95.     myGLCD.setColor(0,255,255);
  96.     y=159+(sin(((i*1.4)*3.14)/180)*(100-(i / 100)));
  97.     myGLCD.drawPixel(x,y);
  98.     buf[x-1]=y;
  99.   }

  100.   delay(2000);
  101.   
  102.   myGLCD.setColor(0,0,0);
  103.   myGLCD.fillRect(1,15,238,304);

  104. // Draw some filled rectangles
  105.   for (int i=1; i<6; i++)
  106.   {
  107.     switch (i)
  108.     {
  109.       case 1:
  110.         myGLCD.setColor(255,0,255);
  111.         break;
  112.       case 2:
  113.         myGLCD.setColor(255,0,0);
  114.         break;
  115.       case 3:
  116.         myGLCD.setColor(0,255,0);
  117.         break;
  118.       case 4:
  119.         myGLCD.setColor(0,0,255);
  120.         break;
  121.       case 5:
  122.         myGLCD.setColor(255,255,0);
  123.         break;
  124.     }
  125.     myGLCD.fillRect(30+(i*20), 70+(i*20), 90+(i*20), 130+(i*20));
  126.   }

  127.   delay(2000);
  128.   
  129.   myGLCD.setColor(0,0,0);
  130.   myGLCD.fillRect(1,15,238,304);

  131. // Draw some filled, rounded rectangles
  132.   for (int i=1; i<6; i++)
  133.   {
  134.     switch (i)
  135.     {
  136.       case 1:
  137.         myGLCD.setColor(255,0,255);
  138.         break;
  139.       case 2:
  140.         myGLCD.setColor(255,0,0);
  141.         break;
  142.       case 3:
  143.         myGLCD.setColor(0,255,0);
  144.         break;
  145.       case 4:
  146.         myGLCD.setColor(0,0,255);
  147.         break;
  148.       case 5:
  149.         myGLCD.setColor(255,255,0);
  150.         break;
  151.     }
  152.     myGLCD.fillRoundRect(150-(i*20),70+(i*20), 210-(i*20), 130+(i*20));
  153.   }
  154.   
  155.   delay(2000);
  156.   
  157.   myGLCD.setColor(0,0,0);
  158.   myGLCD.fillRect(1,15,238,304);

  159. // Draw some filled circles
  160.   for (int i=1; i<6; i++)
  161.   {
  162.     switch (i)
  163.     {
  164.       case 1:
  165.         myGLCD.setColor(255,0,255);
  166.         break;
  167.       case 2:
  168.         myGLCD.setColor(255,0,0);
  169.         break;
  170.       case 3:
  171.         myGLCD.setColor(0,255,0);
  172.         break;
  173.       case 4:
  174.         myGLCD.setColor(0,0,255);
  175.         break;
  176.       case 5:
  177.         myGLCD.setColor(255,255,0);
  178.         break;
  179.     }
  180.     myGLCD.fillCircle(60+(i*20),100+(i*20), 30);
  181.   }
  182.   
  183.   delay(2000);
  184.   
  185.   myGLCD.setColor(0,0,0);
  186.   myGLCD.fillRect(1,15,238,304);

  187. // Draw some lines in a pattern
  188.   myGLCD.setColor (255,0,0);
  189.   for (int i=15; i<304; i+=5)
  190.   {
  191.     myGLCD.drawLine(1, i, (i/1.22)-10, 304);
  192.   }
  193.   myGLCD.setColor (255,0,0);
  194.   for (int i=304; i>15; i-=5)
  195.   {
  196.     myGLCD.drawLine(238, i, (i/1.22)-11, 15);
  197.   }
  198.   myGLCD.setColor (0,255,255);
  199.   for (int i=304; i>15; i-=5)
  200.   {
  201.     myGLCD.drawLine(1, i, 251-(i/1.22), 15);
  202.   }
  203.   myGLCD.setColor (0,255,255);
  204.   for (int i=15; i<304; i+=5)
  205.   {
  206.     myGLCD.drawLine(238, i, 250-(i/1.22), 304);
  207.   }
  208.   
  209.   delay(2000);
  210.   
  211.   myGLCD.setColor(0,0,0);
  212.   myGLCD.fillRect(1,15,238,304);

  213. // Draw some random circles
  214.   for (int i=0; i<100; i++)
  215.   {
  216.     myGLCD.setColor(random(255), random(255), random(255));
  217.     x=32+random(175);
  218.     y=45+random(212);
  219.     r=random(30);
  220.     myGLCD.drawCircle(x, y, r);
  221.   }

  222.   delay(2000);
  223.   
  224.   myGLCD.setColor(0,0,0);
  225.   myGLCD.fillRect(1,15,238,304);

  226. // Draw some random rectangles
  227.   for (int i=0; i<100; i++)
  228.   {
  229.     myGLCD.setColor(random(255), random(255), random(255));
  230.     x=2+random(236);
  231.     y=16+random(287);
  232.     x2=2+random(236);
  233.     y2=16+random(287);
  234.     myGLCD.drawRect(x, y, x2, y2);
  235.   }

  236.   delay(2000);
  237.   
  238.   myGLCD.setColor(0,0,0);
  239.   myGLCD.fillRect(1,15,238,304);

  240. // Draw some random rounded rectangles
  241.   for (int i=0; i<100; i++)
  242.   {
  243.     myGLCD.setColor(random(255), random(255), random(255));
  244.     x=2+random(236);
  245.     y=16+random(287);
  246.     x2=2+random(236);
  247.     y2=16+random(287);
  248.     myGLCD.drawRoundRect(x, y, x2, y2);
  249.   }

  250.   delay(2000);
  251.   
  252.   myGLCD.setColor(0,0,0);
  253.   myGLCD.fillRect(2,16,238,304);

  254.   for (int i=0; i<100; i++)
  255.   {
  256.     myGLCD.setColor(random(255), random(255), random(255));
  257.     x=2+random(236);
  258.     y=16+random(289);
  259.     x2=2+random(236);
  260.     y2=16+random(289);
  261.     myGLCD.drawLine(x, y, x2, y2);
  262.   }

  263.   delay(2000);
  264.   
  265.   myGLCD.setColor(0,0,0);
  266.   myGLCD.fillRect(1,15,238,304);

  267.   for (int i=0; i<10000; i++)
  268.   {
  269.     myGLCD.setColor(random(255), random(255), random(255));
  270.     myGLCD.drawPixel(2+random(236), 16+random(289));
  271.   }

  272.   delay(2000);

  273.   myGLCD.fillScr(0, 0, 255);
  274.   myGLCD.setColor(255, 0, 0);
  275.   myGLCD.fillRoundRect(30, 100, 209, 219);
  276.   
  277.   myGLCD.setColor(255, 255, 255);
  278.   myGLCD.setBackColor(255, 0, 0);
  279.   myGLCD.print("That's it!", CENTER, 133);
  280.   myGLCD.print("Restarting in a", CENTER, 159);
  281.   myGLCD.print("few seconds...", CENTER, 172);
  282.   
  283.   myGLCD.setColor(0, 0, 0);
  284.   myGLCD.setBackColor(0, 0, 255);
  285.   myGLCD.print("Runtime: (msecs)", CENTER, 290);
  286.   myGLCD.printNumI(millis(), CENTER, 305);
  287.   
  288.   delay (10000);
  289. }
复制代码
所用到的库文件!


大家也把自己用过得,有什么问题的,都贴出来大家一起讨论,研究!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2012-4-16 18:10:24 | 显示全部楼层
感谢分享,学习了,我也有一块,商家焊好接口的,拿来试试。
回复 支持 1 反对 0

使用道具 举报

发表于 2014-6-1 12:52:42 | 显示全部楼层
我忽略了什么,不能编译通过(Mega256+TFT3.2)
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2012-4-16 10:00:11 | 显示全部楼层
沙发留给自己来坐了!
回复 支持 反对

使用道具 举报

发表于 2012-4-16 10:04:05 | 显示全部楼层
好帖!刷新速度如何?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-4-16 10:06:11 | 显示全部楼层
黑马 发表于 2012-4-16 10:04
好帖!刷新速度如何?

3秒左右刷新一次,具体没计算过!欢迎你们也试试!
回复 支持 反对

使用道具 举报

发表于 2012-4-16 12:28:11 | 显示全部楼层
好东西,只是线太夸张了,没有spi的吗?我印象tb有卖的。我没法确定尺寸,所以一直没买
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-4-16 13:37:52 | 显示全部楼层
thomas 发表于 2012-4-16 12:28
好东西,只是线太夸张了,没有spi的吗?我印象tb有卖的。我没法确定尺寸,所以一直没买

SPI,我没去查过,花点时间去了解一下!欢迎爆料!
回复 支持 反对

使用道具 举报

发表于 2012-4-16 14:47:59 | 显示全部楼层
连地板也没有了,只好围观咯.
回复 支持 反对

使用道具 举报

发表于 2012-4-16 15:39:33 | 显示全部楼层
我有一个MTK的山寨手机是TFT 3.2的如果可以用2560驱动就太完美了!
我马上研究研究!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-4-16 16:57:38 | 显示全部楼层
taotao71 发表于 2012-4-16 15:39
我有一个MTK的山寨手机是TFT 3.2的如果可以用2560驱动就太完美了!
我马上研究研究!

是的,有强大的库,别浪费了资源!期待你也把测评发上来看看!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-4-16 21:38:19 | 显示全部楼层
zhanggang1971 发表于 2012-4-16 18:10
感谢分享,学习了,我也有一块,商家焊好接口的,拿来试试。

试了有啥问题或者好的建议过来贴出来分享!
回复 支持 反对

使用道具 举报

发表于 2012-4-17 22:12:24 | 显示全部楼层
  不顶不行啊···
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-4-17 22:18:23 | 显示全部楼层
━__Neo_ˇ 发表于 2012-4-17 22:12
不顶不行啊···

谢谢支持,一起分享!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-4-18 08:37:14 | 显示全部楼层
黑马 发表于 2012-4-16 10:04
好帖!刷新速度如何?

今天发现,用UNO也是可以驱动的,只是不能实现触摸功能,因为I/O全部被占完,所以...
回复 支持 反对

使用道具 举报

发表于 2012-4-18 10:11:45 | 显示全部楼层
Randy 发表于 2012-4-18 08:37
今天发现,用UNO也是可以驱动的,只是不能实现触摸功能,因为I/O全部被占完,所以...

嗯~要是用串口芯片驱动的话倒是可以节省一些IO,不过估计那个刷新速度就更慢了
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-24 21:03 , Processed in 0.042375 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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