极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 36632|回复: 18

驱动1.5寸彩色OLED 128*128(RGB) 代码原创

[复制链接]
发表于 2015-4-16 13:20:04 | 显示全部楼层 |阅读模式
本帖最后由 butOn 于 2015-4-16 23:29 编辑

成功驱动128*64的双色OLED之后,我把目光放在了这款彩色OLED上。

有了上次驱动SSD1306的经验,驱动这款屏幕上的的SSD1351丝毫没有压力,
看了看通信波形,发现它和SSD1306完全一样,于是我还是使用了软件SPI。
注意!和SSD1306不同的是,SSD1351命令的参数是以数据的形式发送的。
然后就是初始化,按照数据手册的时序做好,按自己的喜好改了一个配置就完成了。

  1. /*
  2. *
  3. * SSD1351.ino
  4. *
  5. * Created by Jack, April 12, 2015.
  6. *
  7. *
  8. * OLED INFORMATION:
  9. * ------------->1.5' 128*128 (RGB)
  10. * ------------->Driver IC: SSD1351
  11. *
  12. * INTERFACE :       4-wire SPI.
  13. *
  14. * E-mail          :       [email][email protected][/email]
  15. *
  16. * Copyright <c> Jack
  17. *
  18. */
  19. #define SCLK 2  //D0
  20. #define SDIN 3 //D1
  21. #define DC 4
  22. #define RST 5
  23. #define CS 6

  24. void OLED_init ();
  25. void w_cmd (uint8_t c);
  26. void w_data (uint8_t d);
  27. void fill_ram (uint8_t h, uint8_t l);
  28. //=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=

  29. void setup () {OLED_init ();}
  30. void loop () {
  31.           fill_ram (0x00,0x1F);while (1) {}
  32. }

  33. //=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
  34. //                 OLED_init
  35. //=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=

  36. void OLED_init (){
  37.                   pinMode (SDIN, OUTPUT);
  38.                   pinMode (SCLK, OUTPUT);   
  39.                   pinMode (DC, OUTPUT);
  40.                   pinMode (RST, OUTPUT);
  41.                   pinMode (CS, OUTPUT);
  42.                   
  43.                   digitalWrite (RST, HIGH);
  44.                   delay (1);
  45.                   
  46.                   digitalWrite (RST, LOW);
  47.                   delay(10);
  48.                   
  49.                   digitalWrite (RST, HIGH);
  50.                   
  51.                     //Command Lock
  52.                     w_cmd (0xFD);
  53.                     w_data (0x12);
  54.                     
  55.                     //Command Lock
  56.                     w_cmd (0xFD);
  57.                     w_data (0xB1);
  58.                     
  59.                     //Set Sleep Mode On
  60.                     w_cmd (0xAE);
  61.                     
  62.                     //Set Display Clock Divide Ratio/Oscillator Frequency
  63.                     w_cmd (0xB3);
  64.                     w_data (0xF1);
  65.                     
  66.                     //Set Multiplex Ratio
  67.                     w_cmd (0xCA);
  68.                     w_data (0x7F);
  69.                     
  70.                     //Set Display Offset
  71.                     w_cmd (0xA2);
  72.                     w_data (0x00);
  73.                     
  74.                     //Set Display Start Line
  75.                     w_cmd (0xA1);
  76.                     w_data (0x00);
  77.                     
  78.                     //Set Re-Map & Color Depth
  79.                     w_cmd (0xA0);
  80.                     w_data (0x74);
  81.                     
  82.                     //Set GPIO
  83.                     w_cmd (0xB5);
  84.                     w_data (0x00);
  85.                     
  86.                     
  87.                     //Function Selection
  88.                     w_cmd (0xAB);
  89.                     w_data (0x01);
  90.                     
  91.                     //Set Segment Low Voltage
  92.                     w_cmd (0xB4);
  93.                     w_data (0xA0);
  94.                     w_data (0xB5);
  95.                     w_data (0x55);
  96.                     
  97.                     //Set Contrast Current
  98.                     w_cmd (0xC1);
  99.                     w_data (0xC8);
  100.                     w_data (0x80);
  101.                     w_data (0xC8);
  102.                     
  103.                     //Set Master Current Control
  104.                     w_cmd (0xC7);
  105.                     w_data (0x0F);
  106.                     
  107.                     //Gamma Look up Table
  108.                     w_cmd (0xB8);
  109.                     w_data (0x02);
  110.                     w_data (0x03);
  111.                     w_data (0x04);
  112.                     w_data (0x05);
  113.                     w_data (0x06);
  114.                     w_data (0x07);
  115.                     w_data (0x08);
  116.                     w_data (0x09);
  117.                     w_data (0x0A);
  118.                     w_data (0x0B);
  119.                     w_data (0x0C);
  120.                     w_data (0x0D);
  121.                     w_data (0x0E);
  122.                     w_data (0x0F);
  123.                     w_data (0x10);
  124.                     w_data (0x11);
  125.                     w_data (0x12);
  126.                     w_data (0x13);
  127.                     w_data (0x15);
  128.                     w_data (0x17);
  129.                     w_data (0x19);
  130.                     w_data (0x1B);
  131.                     w_data (0x1D);
  132.                     w_data (0x1F);
  133.                     w_data (0x21);
  134.                     w_data (0x23);
  135.                     w_data (0x25);
  136.                     w_data (0x27);
  137.                     w_data (0x2A);
  138.                     w_data (0x2D);
  139.                     w_data (0x30);
  140.                     w_data (0x33);
  141.                     w_data (0x36);
  142.                     w_data (0x39);
  143.                     w_data (0x3C);
  144.                     w_data (0x3F);
  145.                     w_data (0x42);
  146.                     w_data (0x45);
  147.                     w_data (0x48);
  148.                     w_data (0x4C);
  149.                     w_data (0x50);
  150.                     w_data (0x54);
  151.                     w_data (0x58);
  152.                     w_data (0x5C);
  153.                     w_data (0x60);
  154.                     w_data (0x64);
  155.                     w_data (0x68);
  156.                     w_data (0x6C);
  157.                     w_data (0x70);
  158.                     w_data (0x74);
  159.                     w_data (0x78);
  160.                     w_data (0x7D);
  161.                     w_data (0x82);
  162.                     w_data (0x87);
  163.                     w_data (0x8C);
  164.                     w_data (0x91);
  165.                     w_data (0x96);
  166.                     w_data (0x9B);
  167.                     w_data (0xA0);
  168.                     w_data (0xA5);
  169.                     w_data (0xAA);
  170.                     w_data (0xAF);
  171.                     w_data (0xB4);
  172.                     w_data (0x00);
  173.                     
  174.                     //Set Phase Length
  175.                     w_cmd (0xB1);
  176.                     w_data (0x32);
  177.                     
  178.                     
  179.                     //Enhance Driving Scheme Capability
  180.                     w_cmd (0xB2);
  181.                     w_data (0xA4);
  182.                     w_data (0x00);
  183.                     w_data (0x00);
  184.                     
  185.                     //Set Pre-Charge Voltage
  186.                     w_cmd (0xBB);
  187.                     w_data (0x17);
  188.                     
  189.                     //Set Second Pre-Charge Period
  190.                     w_cmd (0xB6);
  191.                     w_data (0x01);
  192.                     
  193.                     //Set VCOMH Voltage
  194.                     w_cmd (0xBE);
  195.                     w_data (0x05);
  196.                     
  197.                     //Set Display Mode
  198.                     w_cmd (0xA6);
  199.                     
  200.                     //Clear Screen
  201.                     fill_ram (0x00, 0x00);
  202.                     
  203.                     //Set Sleep Mode Off
  204.                     w_cmd (0xAF);

  205. }

  206. //=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
  207. //
  208. //                   Write Data & Command
  209. //
  210. //=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
  211. void w_cmd (uint8_t c) {
  212.           digitalWrite (CS,LOW);
  213.           digitalWrite (DC,LOW);
  214.           shiftOut (SDIN, SCLK, MSBFIRST, c);
  215.           digitalWrite (CS,HIGH);
  216. }
  217. void w_data (uint8_t d) {
  218.           digitalWrite (CS,LOW);
  219.           digitalWrite (DC,HIGH);
  220.           shiftOut (SDIN, SCLK, MSBFIRST, d);
  221.           digitalWrite (CS,HIGH);
  222. }
  223. //=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
  224. //
  225. //                 Fill Screen
  226. //                 
  227. //                 h ---------> High Byte Of Data
  228. //                 l ---------> Low Byte Of Data
  229. //
  230. //                 Data mode:
  231. //                                    RRRRRGGG
  232. //                                    GGGBBBBB
  233. //
  234. //                 Mode Select With Command "0xA0"
  235. //
  236. //=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
  237. void fill_ram (uint8_t h, uint8_t l) {
  238.               int i, c;
  239.               w_cmd (0x15);
  240.               w_data (0x00);
  241.               w_data (0x7F);
  242.               
  243.               w_cmd (0x75);
  244.               w_data (0x00);
  245.               w_data (0x7F);
  246.               
  247.               w_cmd (0x5C);
  248.               
  249.               for (i = 0; i < 128; i++) {
  250.                       for (c = 0; c < 128; c++) {
  251.                                 w_data (h);
  252.                                 w_data (l);
  253.                       }
  254.               }

  255. }
复制代码

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2015-4-16 13:22:51 | 显示全部楼层
视频:http://v.youku.com/v_show/id_XOTM0NzUyNTU2.html?x
回复 支持 反对

使用道具 举报

发表于 2015-4-16 14:35:20 | 显示全部楼层
好贴要顶。
回复 支持 反对

使用道具 举报

发表于 2015-4-16 15:31:23 | 显示全部楼层
很好,简洁明了,值得学习。
回复 支持 反对

使用道具 举报

发表于 2015-4-16 15:57:31 | 显示全部楼层
fill_ram (0x00,0x1F);while (1)全部打开,全部都是操作的寄存器,膜拜一下
回复 支持 反对

使用道具 举报

发表于 2015-4-16 20:28:18 来自手机 | 显示全部楼层
这个不是oled吧?应该是lcd。可以读点数据吗?之前我用的一个1.44寸的tft彩屏,spi接口,结果发现不能读数据,郁闷。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-16 22:08:14 | 显示全部楼层
ofourme 发表于 2015-4-16 20:28
这个不是oled吧?应该是lcd。可以读点数据吗?之前我用的一个1.44寸的tft彩屏,spi接口,结果发现不能读数据 ...

这个就是OLED,理论上可以读数据
回复 支持 反对

使用道具 举报

发表于 2015-4-17 18:06:32 | 显示全部楼层
不错 支持 请问楼主 能不能为 mind+ 写几个 oled 的模块呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-17 23:13:49 | 显示全部楼层
布列松 发表于 2015-4-17 18:06
不错 支持 请问楼主 能不能为 mind+ 写几个 oled 的模块呢

可以,不太了解Mind+,刚才百度了下,感觉他的作者好有个性,我就没有他那种勇气,怕被边缘化
回复 支持 反对

使用道具 举报

发表于 2015-4-17 23:19:34 | 显示全部楼层
butOn 发表于 2015-4-17 23:13
可以,不太了解Mind+,刚才百度了下,感觉他的作者好有个性,我就没有他那种勇气,怕被边缘化

mind+ 有自己的模块建立软件的,应该很容易上手的,来这里下载:www.mindplus.cc
回复 支持 反对

使用道具 举报

发表于 2015-4-17 23:21:36 | 显示全部楼层
butOn 发表于 2015-4-17 23:13
可以,不太了解Mind+,刚才百度了下,感觉他的作者好有个性,我就没有他那种勇气,怕被边缘化

MindplusV096dwin_绿色版 下载
http://pan.baidu.com/s/1jG5RjuQ
回复 支持 反对

使用道具 举报

发表于 2015-4-17 23:23:21 | 显示全部楼层
butOn 发表于 2015-4-17 23:13
可以,不太了解Mind+,刚才百度了下,感觉他的作者好有个性,我就没有他那种勇气,怕被边缘化

模块建立软件 BlockMaker 下载:

http://www.mindplus.cc/download/BlockMaker1.5.zip
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-17 23:32:03 | 显示全部楼层
布列松 发表于 2015-4-17 23:19
mind+ 有自己的模块建立软件的,应该很容易上手的,来这里下载:www.mindplus.cc

我目前的开发平台是用手机的VNC客户端连接cubieboard烧写Arduino,没有电脑,不太方便

我正在着手新的屏幕,源码都会发在Github上,你可以用我的源码做模块
回复 支持 反对

使用道具 举报

发表于 2015-4-18 07:55:50 | 显示全部楼层
谢谢分享学习一下
回复 支持 反对

使用道具 举报

发表于 2015-4-18 10:44:50 | 显示全部楼层
不错不错 这才叫精实。网上买了块oled,给的驱动库资源占用太高,有空了好好研究下。
感觉最缺的就是时间,买了本AVR的书,零零落落看了几章,到现在也忘了一大半 呃。
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-20 01:58 , Processed in 0.040014 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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