极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 54067|回复: 57

arduino学习笔记32 - Arduino nokia 5110 PCD8544驱动实验

  [复制链接]
发表于 2012-3-31 10:40:20 | 显示全部楼层 |阅读模式
arduino配套的显示器淘宝上大多是 1602 和  12864 屏其中1602价格便宜,但液晶屏幕很小,而且不能显示英文,12864可以显示中文甚至有自带字库的,但价格相对比较贵
这时,我们还有另外一个选择,nokia 5110 液晶

这款屏幕分辨率为84x48,最多可以显示4行汉字,而且价格便宜,10几元钱就可以买到了

淘宝上卖的一般是带背光的,控制芯片位pcd8554,每家店里出售的可能多少有点小不同
这是显示效果。
Nokia/诺基亚5110 LCD原理应用资料PH7366 是NOKIA 公司生产的可用于其5110、6150,6100 等系列移动电话的液晶显示模块,国内厂家也生产有类似的兼容产品。该产品除应用于移动电话外,也可广泛应用于各类便携式设备的显示系统。与其它类型的产品相比,该模块具有以下特点:
●84x48 的点阵LCD,可以显示4 行汉字,
●采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,包括电源和地在内的信号线仅有9 条。支持多种串行通信协议(如AVR 单片机的SPI、MCS51 的串口模式0等),传输速率高达4Mbps,可全速写入显示数据,无等待时间。
●可通过导电胶连接模块与印制版,而不用连接电缆,用模块上的金属钩可将模块固定到印制板上,因而非常便于安装和更换。
●LCD 控制器/驱动器芯片已绑定到LCD 晶片上,模块的体积很小。
●采用低电压供电,正常显示时的工作电流在200μA 以下,且具有掉电模式。
LPH7366 的这些特点非常适合于电池供电的便携式通信设备和测试设备中

首先申明一下,我所使用的nokia 5110屏是8个引脚的。有些是9个脚的,方法相同,自己按照方法接就好了。

先上实物图和连接图!
1111.jpg 20120331240.jpg
下面就是把驱动代码给附上了,有什么问题欢迎大家提问发言!
  1. // The pins to use on the arduino
  2. #define PIN_SCE   7
  3. #define PIN_RESET 6
  4. #define PIN_DC    5
  5. #define PIN_SDIN  4
  6. #define PIN_SCLK  3

  7. // COnfiguration for the LCD
  8. #define LCD_C     LOW
  9. #define LCD_D     HIGH
  10. #define LCD_CMD   0

  11. // Size of the LCD
  12. #define LCD_X     84
  13. #define LCD_Y     48

  14. int scrollPosition = -10;

  15. static const byte ASCII[][5] =
  16. {
  17. {0x00, 0x00, 0x00, 0x00, 0x00} // 20
  18. ,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 !
  19. ,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 "
  20. ,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 #
  21. ,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $
  22. ,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 %
  23. ,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 &
  24. ,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 '
  25. ,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 (
  26. ,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29 )
  27. ,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a *
  28. ,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b +
  29. ,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c ,
  30. ,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d -
  31. ,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e .
  32. ,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f /
  33. ,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0
  34. ,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1
  35. ,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2
  36. ,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3
  37. ,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4
  38. ,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5
  39. ,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6
  40. ,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7
  41. ,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8
  42. ,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9
  43. ,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a :
  44. ,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ;
  45. ,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c <
  46. ,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d =
  47. ,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e >
  48. ,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ?
  49. ,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @
  50. ,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A
  51. ,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B
  52. ,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C
  53. ,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D
  54. ,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E
  55. ,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F
  56. ,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G
  57. ,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H
  58. ,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I
  59. ,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J
  60. ,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K
  61. ,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L
  62. ,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M
  63. ,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N
  64. ,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O
  65. ,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P
  66. ,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q
  67. ,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R
  68. ,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S
  69. ,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T
  70. ,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U
  71. ,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V
  72. ,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W
  73. ,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X
  74. ,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y
  75. ,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z
  76. ,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [
  77. ,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c &yen;
  78. ,{0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ]
  79. ,{0x04, 0x02, 0x01, 0x02, 0x04} // 5e ^
  80. ,{0x40, 0x40, 0x40, 0x40, 0x40} // 5f _
  81. ,{0x00, 0x01, 0x02, 0x04, 0x00} // 60 `
  82. ,{0x20, 0x54, 0x54, 0x54, 0x78} // 61 a
  83. ,{0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b
  84. ,{0x38, 0x44, 0x44, 0x44, 0x20} // 63 c
  85. ,{0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d
  86. ,{0x38, 0x54, 0x54, 0x54, 0x18} // 65 e
  87. ,{0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f
  88. ,{0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g
  89. ,{0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h
  90. ,{0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i
  91. ,{0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j
  92. ,{0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k
  93. ,{0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l
  94. ,{0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m
  95. ,{0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n
  96. ,{0x38, 0x44, 0x44, 0x44, 0x38} // 6f o
  97. ,{0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p
  98. ,{0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q
  99. ,{0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r
  100. ,{0x48, 0x54, 0x54, 0x54, 0x20} // 73 s
  101. ,{0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t
  102. ,{0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u
  103. ,{0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v
  104. ,{0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w
  105. ,{0x44, 0x28, 0x10, 0x28, 0x44} // 78 x
  106. ,{0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y
  107. ,{0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z
  108. ,{0x00, 0x08, 0x36, 0x41, 0x00} // 7b {
  109. ,{0x00, 0x00, 0x7f, 0x00, 0x00} // 7c |
  110. ,{0x00, 0x41, 0x36, 0x08, 0x00} // 7d }
  111. ,{0x10, 0x08, 0x08, 0x10, 0x08} // 7e ←
  112. ,{0x00, 0x06, 0x09, 0x09, 0x06} // 7f →
  113. };

  114. void LcdCharacter(char character)
  115. {
  116.   LcdWrite(LCD_D, 0x00);
  117.   for (int index = 0; index < 5; index++)
  118.   {
  119.     LcdWrite(LCD_D, ASCII[character - 0x20][index]);
  120.   }
  121.   LcdWrite(LCD_D, 0x00);
  122. }

  123. void LcdClear(void)
  124. {
  125.   for (int index = 0; index < LCD_X * LCD_Y / 8; index++)
  126.   {
  127.     LcdWrite(LCD_D, 0x00);
  128.   }
  129. }

  130. void LcdInitialise(void)
  131. {
  132.   pinMode(PIN_SCE,   OUTPUT);
  133.   pinMode(PIN_RESET, OUTPUT);
  134.   pinMode(PIN_DC,    OUTPUT);
  135.   pinMode(PIN_SDIN,  OUTPUT);
  136.   pinMode(PIN_SCLK,  OUTPUT);

  137.   digitalWrite(PIN_RESET, LOW);
  138.   digitalWrite(PIN_RESET, HIGH);

  139.   LcdWrite(LCD_CMD, 0x21);  // LCD Extended Commands.
  140.   LcdWrite(LCD_CMD, 0xBf);  // Set LCD Vop (Contrast). //B1
  141.   LcdWrite(LCD_CMD, 0x04);  // Set Temp coefficent. //0x04
  142.   LcdWrite(LCD_CMD, 0x14);  // LCD bias mode 1:48. //0x13
  143.   LcdWrite(LCD_CMD, 0x0C);  // LCD in normal mode. 0x0d for inverse
  144.   LcdWrite(LCD_C, 0x20);
  145.   LcdWrite(LCD_C, 0x0C);
  146. }

  147. void LcdString(char *characters)
  148. {
  149.   while (*characters)
  150.   {
  151.     LcdCharacter(*characters++);
  152.   }
  153. }

  154. void LcdWrite(byte dc, byte data)
  155. {
  156.   digitalWrite(PIN_DC, dc);
  157.   digitalWrite(PIN_SCE, LOW);
  158.   shiftOut(PIN_SDIN, PIN_SCLK, MSBFIRST, data);
  159.   digitalWrite(PIN_SCE, HIGH);
  160. }

  161. /**
  162. * gotoXY routine to position cursor
  163. * x - range: 0 to 84
  164. * y - range: 0 to 5
  165. */
  166. void gotoXY(int x, int y)
  167. {
  168.   LcdWrite( 0, 0x80 | x);  // Column.
  169.   LcdWrite( 0, 0x40 | y);  // Row.
  170. }

  171. void drawBox(void)
  172. {
  173.   int j;
  174.   for(j = 0; j < 84; j++) // top
  175.   {
  176.     gotoXY(j, 0);
  177.     LcdWrite(1, 0x01);
  178.   }

  179.   for(j = 0; j < 84; j++) //Bottom
  180.   {
  181.     gotoXY(j, 5);
  182.     LcdWrite(1, 0x80);
  183.   }

  184.   for(j = 0; j < 6; j++) // Right
  185.   {
  186.     gotoXY(83, j);
  187.     LcdWrite(1, 0xff);
  188.   }

  189.   for(j = 0; j < 6; j++) // Left
  190.   {
  191.     gotoXY(0, j);
  192.     LcdWrite(1, 0xff);
  193.   }
  194. }

  195. void Scroll(String message)
  196. {
  197.   for (int i = scrollPosition; i < scrollPosition + 11; i++)
  198.   {
  199.     if ((i >= message.length()) || (i < 0))
  200.     {
  201.       LcdCharacter(' ');
  202.     }
  203.     else
  204.     {
  205.       LcdCharacter(message.charAt(i));
  206.     }
  207.   }
  208.   scrollPosition++;
  209.   if ((scrollPosition >= message.length()) && (scrollPosition > 0))
  210.   {
  211.     scrollPosition = -10;
  212.   }
  213. }

  214. void setup(void)
  215. {
  216.   LcdInitialise();
  217.   LcdClear();
  218.   drawBox();

  219.   gotoXY(7,1);
  220.   LcdString("Nokia 5110");
  221.   gotoXY(4,2);
  222.   LcdString("Scroll Demo");
  223. }

  224. void loop(void)
  225. {
  226.   gotoXY(4,4);
  227.   Scroll("for maore products please visit www.geeetech.com");
  228.   delay(200);
  229. }  
复制代码
nokia5110_nokia3310中文数据手册.pdf (753.32 KB, 下载次数: 1085)
回复

使用道具 举报

 楼主| 发表于 2012-3-31 10:42:05 | 显示全部楼层
欢迎大家提问,这个屏的资料在网上已经很多了,但是用arduino来驱动的还是蛮少的。接下来研究一下arduino驱动TFT3.2寸屏,有兴趣的大家一起研究啊!我还是小白!
回复 支持 反对

使用道具 举报

发表于 2012-3-31 12:30:44 | 显示全部楼层
显示整数或小数怎么办呢?
回复 支持 反对

使用道具 举报

发表于 2012-3-31 12:32:50 | 显示全部楼层
用arduino驱动感觉很占FLASH,用arduino328驱动好像不能超过10个汉字数组,超过了就没显示了。有什么办法解决呢?
回复 支持 反对

使用道具 举报

发表于 2012-3-31 12:36:04 | 显示全部楼层
我试过还有两个5110的库都可用。

nokia5110.rar

9.54 KB, 下载次数: 897

LCD5110_Basic.rar

57.47 KB, 下载次数: 692

回复 支持 反对

使用道具 举报

发表于 2012-3-31 12:43:32 | 显示全部楼层
悠然小调 发表于 2012-3-31 12:32
用arduino驱动感觉很占FLASH,用arduino328驱动好像不能超过10个汉字数组,超过了就没显示了。有什么办法解 ...

用关键字const,把编码定义成常量,存储在flash中,32k的flash可以存很多字了吧
或者加个外部存储器,I2C读写,几十k~几百K的都有
回复 支持 反对

使用道具 举报

发表于 2012-3-31 21:51:43 | 显示全部楼层
+U,
我等着你的"arduino驱动TFT3.2寸屏"
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-4-1 08:40:14 | 显示全部楼层
wing 发表于 2012-3-31 21:51
+U,
我等着你的"arduino驱动TFT3.2寸屏"

我的屏还没回来,你现在也在玩吗?
回复 支持 反对

使用道具 举报

发表于 2012-4-1 22:54:43 | 显示全部楼层
搞過幾個低分辨率的TFT,不過按照"arduino驱动TFT3.2寸屏"的思路來說我不算玩過.
現在的TFT工藝非常精緻,3.2的分辨率和色彩可以很變態,
一般來說最少也有320*240,如果您能用328之類的輕量級的解決方案實現有效控制的話會是一個很酷的設計
如果您願意分享的話,我想有很多人都很感興趣
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-4-5 08:41:40 | 显示全部楼层
wing 发表于 2012-4-1 22:54
搞過幾個低分辨率的TFT,不過按照"arduino驱动TFT3.2寸屏"的思路來說我不算玩過.
現在的TFT工藝非常精緻,3. ...

我也是正在研究,目前对arduino驱动的库还是不会写,研究研究,出来就共享给您们!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-4-18 13:52:08 | 显示全部楼层
来一个给力点的程序,是带测距模块的程序!
  1. //端口定义

  2. int LCD_CE=2;
  3. int LCD_RST=3;
  4. int SCLK=4;
  5. int SDIN=5;
  6. int LCD_DC=6;
  7. int inputPin=8;  // 定义超声波信号接收接口
  8. int outputPin=9; // 定义超声波信号发出接口
  9. /****************************************************************/
  10. void setup()
  11. {
  12.   pinMode(inputPin, INPUT);
  13.   pinMode(outputPin, OUTPUT);
  14. }
  15. //****************************定义ASCII字符**********************//

  16. /**********************************
  17. 6 x 8 font
  18. 1 pixel space at left and bottom
  19. index = ASCII - 32
  20. ***********************************/
  21. const unsigned char font6x8[][6] =
  22. {
  23.     { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },   // sp
  24.     { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },   // !
  25.     { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
  26.     { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
  27.     { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
  28.     { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 },   // %
  29.     { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
  30.     { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
  31.     { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
  32.     { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
  33.     { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
  34.     { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
  35.     { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 },   // ,
  36.     { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 },   // -
  37.     { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
  38.     { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
  39.     { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
  40.     { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
  41.     { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
  42.     { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
  43.     { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
  44.     { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
  45.     { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
  46.     { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
  47.     { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
  48.     { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
  49.     { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
  50.     { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
  51.     { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
  52.     { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
  53.     { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
  54.     { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
  55.     { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
  56.     { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },   // A
  57.     { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
  58.     { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
  59.     { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
  60.     { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
  61.     { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
  62.     { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
  63.     { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
  64.     { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
  65.     { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
  66.     { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
  67.     { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
  68.     { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
  69.     { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
  70.     { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
  71.     { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
  72.     { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
  73.     { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
  74.     { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
  75.     { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
  76.     { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
  77.     { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
  78.     { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
  79.     { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
  80.     { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
  81.     { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
  82.     { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
  83.     { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // 55
  84.     { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
  85.     { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
  86.     { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
  87.     { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
  88.     { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
  89.     { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
  90.     { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
  91.     { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
  92.     { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
  93.     { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
  94.     { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C },   // g
  95.     { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
  96.     { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
  97.     { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 },   // j
  98.     { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
  99.     { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
  100.     { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
  101.     { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
  102.     { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
  103.     { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 },   // p
  104.     { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC },   // q
  105.     { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
  106.     { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
  107.     { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
  108.     { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
  109.     { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
  110.     { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
  111.     { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
  112.     { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C },   // y
  113.     { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 },   // z
  114.     { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }    // horiz lines
  115. };
  116. /************************LCD初始化函数********************************/  
  117. void LCD_init(void)
  118. {
  119.     //先设置为输出
  120.      pinMode(SCLK,OUTPUT);
  121.      pinMode(SDIN,OUTPUT);
  122.      pinMode(LCD_DC,OUTPUT);
  123.      pinMode(LCD_CE,OUTPUT);
  124.      pinMode(LCD_RST,OUTPUT);
  125.    
  126.     // 产生一个让LCD复位的低电平脉冲
  127.      digitalWrite( LCD_RST, LOW);
  128.    
  129.      delayMicroseconds(1);
  130.      digitalWrite( LCD_RST, HIGH);
  131.      
  132.     // 关闭LCD
  133.      digitalWrite( LCD_CE, LOW);
  134.      delayMicroseconds(1);

  135.     // 使能LCD
  136.      digitalWrite( LCD_CE, HIGH); //LCD_CE = 1;
  137.      delayMicroseconds(1);
  138.     LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式
  139.     LCD_write_byte(0xc8, 0); // 设置偏置电压
  140.     LCD_write_byte(0x06, 0); // 温度校正
  141.     LCD_write_byte(0x13, 0); // 1:48
  142.     LCD_write_byte(0x20, 0); // 使用基本命令
  143.     LCD_clear();             // 清屏
  144.     LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示
  145.          
  146.     // 关闭LCD
  147.    digitalWrite( LCD_CE, LOW);  //LCD_CE = 0;
  148. }
  149. /************************LCD清屏函数*******************************/
  150. void LCD_clear(void)
  151. {
  152.     unsigned int i;
  153.     LCD_write_byte(0x0c, 0);  
  154.     LCD_write_byte(0x80, 0);
  155.     for (i=0; i<504; i++)
  156.       {
  157.         LCD_write_byte(0, 1);
  158.       }   
  159. }
  160. /*************************设置字符位置函数**************************/
  161. void LCD_set_XY(unsigned char X, unsigned char Y)
  162. {
  163.     LCD_write_byte(0x40 | Y, 0);// column
  164.     LCD_write_byte(0x80 | X, 0);// row
  165. }
  166. /*************************ASCII字符显示函数*************************/
  167. void LCD_write_char(unsigned char c)
  168. {
  169.     unsigned char line;
  170.     c -= 32;
  171.     for (line=0; line<6; line++)
  172.     {
  173.         LCD_write_byte(font6x8[c][line], 1);
  174.     }
  175. }
  176. /*******************************************************************/
  177. /*-------------------------------------------------
  178. LCD_write_english_String  : 英文字符串显示函数
  179. 输入参数:*s      :英文字符串指针;
  180.           X、Y    : 显示字符串的位置,x 0-83 ,y 0-5
  181. --------------------------------------------------*/
  182. void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
  183. {
  184.     LCD_set_XY(X,Y);
  185.     while (*s)  
  186.     {
  187.      LCD_write_char(*s);
  188.      s++;
  189.     }
  190. }
  191. /******************************************************************/
  192. /*---------------------------------------------
  193. LCD_write_byte    : 写数据到LCD
  194. 输入参数:data    :写入的数据;
  195.           command :写数据/命令选择;
  196. ---------------------------------------------*/
  197. void LCD_write_byte(unsigned char dat, unsigned char command)
  198. {
  199.     unsigned char i;
  200.    digitalWrite( LCD_CE, LOW); // 使能LCD_CE = 0
  201.     if (command == 0)
  202.     {
  203.      digitalWrite( LCD_DC, LOW);// 传送命令 LCD_DC = 0;
  204.     }
  205.     else
  206.     {
  207.       digitalWrite( LCD_DC, HIGH);// 传送数据LCD_DC = 1;
  208.     }

  209.   for(i=0;i<8;i++)
  210.   {
  211.      if(dat&0x80)
  212.      {
  213.         digitalWrite( SDIN, HIGH);//SDIN = 1;
  214.      }
  215.     else
  216.     {
  217.      digitalWrite( SDIN, LOW);//SDIN = 0;
  218.      }
  219.    digitalWrite( SCLK, LOW);//SCLK = 0;
  220.    dat = dat << 1;
  221.    digitalWrite( SCLK, HIGH);//SCLK = 1;
  222.   }
  223.     digitalWrite( LCD_CE, HIGH);//LCD_CE = 1;
  224.         
  225. }

  226. /*************************以下为主函数*****************************/

  227. void loop()
  228. {
  229.   LCD_init();//初始化液晶     
  230.   LCD_clear();

  231.     LCD_write_english_string(0,0," --Arduino-- ");
  232.     LCD_write_english_string(0,2,"Renge:");
  233.    
  234.     LCD_write_english_string(0,4,"DESIGN BY KENT");
  235.     LCD_write_english_string(0,5,"    2010.6    ");
  236.    
  237.     while(1)
  238.     {
  239.       digitalWrite(outputPin, LOW); // 使发出发出超声波信号接口低电平2μs
  240.       delayMicroseconds(2);
  241.       digitalWrite(outputPin, HIGH); // 使发出发出超声波信号接口高电平10μs,这里是至少10μs
  242.       delayMicroseconds(10);
  243.       digitalWrite(outputPin, LOW);    // 保持发出超声波信号接口低电平
  244.       int distance = pulseIn(inputPin, HIGH);  // 读出脉冲时间
  245.       distance= distance/58;           // 将脉冲时间转化为距离(单位:厘米)
  246.          if(distance>120)
  247.        {
  248.       
  249.          LCD_write_english_string(35,2,"???");
  250.         }
  251.          else
  252.         {
  253.           LCD_write_english_string(60,2,"cm");
  254.           LCD_set_XY(35, 2);
  255.           LCD_write_char( 0x30+distance%1000/100); //显示百位数
  256.           LCD_write_char( 0x30+distance%100/10);   //显示十位数
  257.           LCD_write_char( 0x30+distance%10);       //显示个位数
  258.             
  259.         
  260.          }
  261.         delay(10);
  262.       }         
  263.    
  264. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-4-26 15:47:11 | 显示全部楼层
wing 发表于 2012-4-1 22:54
搞過幾個低分辨率的TFT,不過按照"arduino驱动TFT3.2寸屏"的思路來說我不算玩過.
現在的TFT工藝非常精緻,3. ...

Arduino 328也可以驱动了,我试验过了,只是不能做触摸效果!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-4-28 10:28:06 | 显示全部楼层
bg7idj 发表于 2012-4-27 16:05
非常期待,上图看看

试试.jpg
回复 支持 反对

使用道具 举报

发表于 2012-5-17 16:58:31 | 显示全部楼层
原来都是用mega16驱动的5110.现在Arduino也可以了啊,非常好
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-17 17:29:26 | 显示全部楼层
tigerdawn 发表于 2012-5-17 16:58
原来都是用mega16驱动的5110.现在Arduino也可以了啊,非常好

呵呵,表示没压力的哦,有什么和本帖相关的问题,欢迎提出来让大家看看!
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2019-12-13 06:27 , Processed in 0.053486 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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