极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 26748|回复: 25

驱动OLED,没用第三方库,处女作

[复制链接]
发表于 2015-3-29 11:51:05 | 显示全部楼层 |阅读模式
本帖最后由 butOn 于 2015-3-29 12:01 编辑

第一次写驱动!


用MCU驱动OLED屏幕,

我没有用网上现成的程序,没有用第三方库,
而是自己根据厂家的数据手册,分析初始化流程以及串行通讯时序,写出一套自己的驱动。好像程序员都喜欢“重新制造轮子”。

由于Linux没有图形取模软件,所以只好自己一个格子一个格子弄点阵……那可是128*64=8192个啊!弄完还要一个一个转成16进制的,一共128*8=1024个……我的妈呀,死一大片脑细胞不说,打完手都要断啦……

所以只做了两个字母“b” “u”
自行脑补后面的t0n吧。

bitmap做完,显存总是没法写入,后来才发现二维数组定义后要立即赋值,还有串口不知道哪抽了,烧个程序平均要插个五六遍才有反应。

下面是源码:

  1. /*
  2. * OLED_Arduino.ino
  3. *
  4. * Created by Jack, March 28, 2015.
  5. *
  6. * FUNCTION: This is a driver program to display some pics or words(传说中的中式英语)
  7. *                    on the OLED screen.
  8. *
  9. * OLED INFORMATION:
  10. *             96`    128*64,
  11. *        driver chip: SSD1306,所罗门的驱动IC,这款IC还有用于驱动E-ink电子纸!
  12. *
  13. * INTERFACE: 4-wire SPI.
  14. *
  15. */
  16. #define SDIN 9
  17. #define SCLK 10
  18. #define DC 11
  19. #define RST 13
  20. #define CS 12
  21. void OLED_INIT ();
  22. void w_cmd (uint8_t c);
  23. void w_data (uint8_t d);
  24. void refresh_GRAM ();
  25. void draw_point (uint8_t x, uint8_t y, uint8_t t);
  26. void draw_lineX (uint8_t x1, uint8_t y1, uint8_t L);
  27. void clear_display ();
  28. uint8_t OLED_GRAM[8][128] = {
  29. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  30. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  31. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  32. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  33. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  34. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  35. 0x00, 0xF8, 0x04, 0x02, 0x01, 0x01, 0x01, 0x01,
  36. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  37. 0x02, 0x04, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
  38. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  39. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  40. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  41. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  42. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  43. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  44. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  45. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  46. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  47. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  48. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  49. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  50. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  51. 0x00, 0x1F, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80,
  52. 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
  53. 0x40, 0x20, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00,
  54. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  55. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  56. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  57. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  58. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  59. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  60. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,


  61. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  62. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  63. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  64. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  65. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  66. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  67. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  68. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  69. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  70. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  71. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  72. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  73. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  74. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  75. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  76. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  77. 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
  78. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  79. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  80. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  81. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  82. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  83. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  84. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  85. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  86. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  87. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  88. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  89. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  90. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  91. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  92. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  93. 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
  94. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  95. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  96. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  97. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  98. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  99. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  100. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  101. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  102. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  103. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  104. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  105. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  106. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  107. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  108. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  109. 0x00, 0x00, 0x00, 0x00, 0xFF, 0x04, 0x02, 0x01,
  110. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  111. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0xFC,
  112. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  113. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  114. 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  115. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  116. 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
  117. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  118. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  119. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  120. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  121. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  122. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  123. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  124. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  125. 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
  126. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  127. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
  128. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  129. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  130. 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  131. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  132. 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
  133. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  134. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  135. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  136. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  137. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  138. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  139. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  140. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  141. 0x00, 0x00, 0x00, 0x00, 0x7F, 0x20, 0x40, 0x40,
  142. 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
  143. 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x20, 0x1F,
  144. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  145. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  146. 0x00, 0x1F, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40,
  147. 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
  148. 0x40, 0x20, 0x1F, 0x20, 0x40, 0x00, 0x00, 0x00,
  149. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  150. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  151. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  152. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  153. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  154. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  155. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  156. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,


  157. };

  158. void setup (){
  159.         OLED_INIT ();
  160.         }

  161. void loop (){
  162. //clear_display ();


  163.         refresh_GRAM ();
  164. delay (100);
  165. while (1){}//不停的游荡~

  166.         }

  167.         void OLED_INIT (){
  168.         pinMode (SDIN, OUTPUT);
  169.         pinMode (SCLK, OUTPUT);
  170.         pinMode (DC, OUTPUT);
  171.         pinMode (RST, OUTPUT);
  172.         pinMode (CS, OUTPUT);
  173. // You can find  Initial Sequence on the datasheet
  174.         digitalWrite (RST, HIGH);  // Set RES# as High
  175.         delay (1);                           // 3us Delay Recommended
  176.         digitalWrite (RST, LOW);  // Reset
  177.         delay(10);
  178.         digitalWrite (RST, HIGH);
  179.         w_cmd (0xAE);  // 1.Set Display Off
  180.         w_cmd (0xD5); // 2.Set display Clock Divide Ratio/Oscillator Frequency
  181.         w_cmd (0x80);
  182.         w_cmd (0xA8); // 3.Set Multiplex Ratio
  183.         w_cmd (0x3F);
  184.         w_cmd (0xD3); // 4.Set Display Offset
  185.         w_cmd (0x00);
  186.         w_cmd (0x40); // 5.Set Display Start Line
  187.         // 6.Set Segment Re-Map     0xA1     ***
  188. // 7.Set COM Output Scan Direction     0xC8      ***
  189. // 8.Set COM Pins Hardware Configurartion     0xDA, 0x12      ***
  190. // 9.Set Contrast Control     0x81, 0x66      **^
  191. // 10.Set Pre-Charge Period     0xD9, 0xF1       ***
  192. // 11.Set VCOMH Deselect Level      0xDB, 0x30      **^
  193. // 12.Set Entire Display On/Off      0xA4      ***
  194. // 13.Set Normal/Inverse Display     0xA6    ***
  195. // Clear Screen
  196. //                  w_cmd (0x8D);// 14.Set Charge Pump
  197. //                  w_cmd (0x14);
  198.         // 15.Set Display On    0xAF     ***
  199.         w_cmd (0x20);
  200.         w_cmd (0x10); //0x00
  201.         w_cmd (0xA1); // 6.Set Segment Re-Map
  202.         w_cmd (0xC8); // 7.Set COM Output Scan Direction
  203.         w_cmd (0xDA); // 8.Set COM Pins Hardware Configurartion
  204.         w_cmd (0x12);
  205.         w_cmd (0x81); // 9.Set Contrast Control   0x66
  206.         w_cmd (0x66); // 0xCF
  207.         w_cmd (0xD9); // 10.Set Pre-Charge Period
  208.         w_cmd (0xF1);
  209.         w_cmd (0xDB); // 11.Set VCOMH Deselect Level  0x30
  210.         w_cmd (0x30); // 0x40
  211.         w_cmd (0xA4); // 12.Set Entire Display On/Off
  212.         w_cmd (0xA6); // 13.Set Normal/Inverse Display
  213.         w_cmd (0x8D);// 14.Set Charge Pump
  214.         w_cmd (0x14);
  215.         w_cmd (0xAF); // 15.Set Display On
  216.         }
  217.         void w_cmd (uint8_t c){
  218.         digitalWrite (CS, HIGH);
  219.         digitalWrite (DC, LOW); // Command
  220.         digitalWrite (CS, LOW);
  221.         shiftOut (SDIN, SCLK, MSBFIRST, c);
  222.         digitalWrite (CS, HIGH);
  223.         }
  224.         void w_data (uint8_t d){
  225.         digitalWrite (CS, HIGH);
  226.         digitalWrite (DC, HIGH); // Data
  227.         digitalWrite (CS, LOW);
  228.         shiftOut (SDIN, SCLK, MSBFIRST, d);
  229.         digitalWrite (CS, HIGH);
  230.         }
  231.         void refresh_GRAM (){
  232.         uint8_t x, y; // x = SEG  [0:127]    y = PAGE  [0:7]
  233.         for (y = 0; y < 8; y++){
  234.         w_cmd (0xB0 + y);  // Set Page Number
  235.         w_cmd (0x00);  //  Set Low  (4bit)
  236.         w_cmd (0x10);  //  Set High (4bit)
  237.         for (x = 0; x<128; x++)
  238.         w_data (OLED_GRAM[y][x]);
  239.         }
  240.         }
  241.         void clear_display (){
  242.         memset (OLED_GRAM, 0x00, sizeof (OLED_GRAM));
  243.         }
复制代码

我会在Github上更新,如果感兴趣可以移步http://github.com/but0n
回复

使用道具 举报

发表于 2015-3-29 16:42:10 | 显示全部楼层
    显示结果是什么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-29 22:21:07 | 显示全部楼层
suoma 发表于 2015-3-29 16:42
显示结果是什么?

发不了图。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2015-4-7 22:31:38 | 显示全部楼层

能够显示了,但是不是这样

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-8 00:32:10 | 显示全部楼层
布列松 发表于 2015-4-7 22:31
能够显示了,但是不是这样

对就是这样
代码我更新了,移植了字库,视频:http://v.youku.com/v_show/id_XOTI4NTExMTky.html?x
回复 支持 反对

使用道具 举报

发表于 2015-4-8 09:19:15 | 显示全部楼层
butOn 发表于 2015-4-8 00:32
对就是这样
代码我更新了,移植了字库,视频:http://v.youku.com/v_show/id_XOTI4NTExMTky.html?x

代码在那里?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-8 10:43:45 | 显示全部楼层
布列松 发表于 2015-4-8 09:19
代码在那里?

这是3.0版的,我会在我的Github更新
  1. /*
  2. * OLED_Arduino-3.0.ino
  3. *
  4. * Created by Jack, April 7, 2015.
  5. *
  6. * FUNCTION: This is a driver program to display some pics or words
  7. *                    on the OLED screen.
  8. *
  9. * OLED INFORMATION:
  10. *             96`    128*64,
  11. *        driver chip: SSD1306,
  12. *
  13. * INTERFACE: 4-wire SPI.
  14. *
  15. */
  16. #define SDIN 9  //D1
  17. #define SCLK 10  //D0
  18. #define DC 11  
  19. #define RST 13
  20. #define CS 12

  21. typedef struct insert {
  22. uint8_t page;
  23. uint8_t start;
  24. }insert;
  25. insert in = {0, 0};
  26. void OLED_INIT ();
  27. void w_cmd (uint8_t c);
  28. void w_data (uint8_t d);
  29. void clear_display ();
  30. void oprint (uint8_t w, insert *in);
  31. void oled_printf (char text[]);
  32. void prtpage (char c1[], char c2[], char c3[], char c4[]);

  33. //  ASCII  -  buff


  34. uint8_t buff_0[2][8] = {
  35. 0xF0, 0xF8, 0x0C, 0xC4, 0x0C, 0xF8, 0xF0, 0x00,
  36. 0x03, 0x07, 0x0C, 0x08, 0x0C, 0x07, 0x03, 0x00
  37. };
  38. uint8_t buff_1[2][8] = {
  39. 0x00, 0x10, 0x18, 0xFC, 0xFC, 0x00, 0x00, 0x00,
  40. 0x00, 0x08, 0x08, 0x0F, 0x0F, 0x08, 0x08, 0x00
  41. };
  42. uint8_t buff_2[2][8] = {
  43. 0x08, 0x0C, 0x84, 0xC4, 0x64, 0x3C, 0x18, 0x00,
  44. 0x0E, 0x0F, 0x09, 0x08, 0x08, 0x0C, 0x0C, 0x00
  45. };
  46. uint8_t buff_3[2][8] = {
  47. 0x08, 0x0C, 0x44, 0x44, 0x44, 0xFC, 0xB8, 0x00,
  48. 0x04, 0x0C, 0x08, 0x08, 0x08, 0x0F, 0x07, 0x00
  49. };
  50. uint8_t buff_4[2][8] = {
  51. 0xC0, 0xE0, 0xB0, 0x98, 0xFC, 0xFC, 0x80, 0x00,
  52. 0x00, 0x00, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x00
  53. };
  54. uint8_t buff_5[2][8] = {
  55. 0x7C, 0x7C, 0x44, 0x44, 0x44, 0xC4, 0x84, 0x00,
  56. 0x04, 0x0C, 0x08, 0x08, 0x08, 0x0F, 0x07, 0x00
  57. };
  58. uint8_t buff_6[2][8] = {
  59. 0xF0, 0xF8, 0x4C, 0x44, 0x44, 0xC0, 0x80, 0x00,
  60. 0x07, 0x07, 0x08, 0x08, 0x08, 0x0F, 0x07, 0x00
  61. };
  62. uint8_t buff_7[2][8] = {
  63. 0x0C, 0x0C, 0x04, 0x84, 0xC4, 0x7C, 0x3C, 0x00,
  64. 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00
  65. };
  66. uint8_t buff_8[2][8] = {
  67. 0xB8, 0xFC, 0x44, 0x44, 0x44, 0xFC, 0xB8, 0x00,
  68. 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07, 0x00
  69. };
  70. uint8_t buff_9[2][8] = {
  71. 0x38, 0x7C, 0x44, 0x44, 0x44, 0xFC, 0xF8, 0x00,
  72. 0x00, 0x08, 0x08, 0x08, 0x0C, 0x07, 0x03, 0x00
  73. };

  74. uint8_t buff_a[2][8] = {
  75. 0x00, 0xA0, 0xA0, 0xA0, 0xE0, 0xC0, 0x00, 0x00,
  76. 0x07, 0x0F, 0x08, 0x08, 0x07, 0x0F, 0x08, 0x00
  77. };
  78. uint8_t buff_b[2][8] = {
  79. 0x04, 0xFC, 0xFC, 0x20, 0x60, 0xC0, 0x80, 0x00,
  80. 0x00, 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x07, 0x00
  81. };
  82. uint8_t buff_c[2][8] = {
  83. 0xC0, 0xE0, 0x20, 0x20, 0x20, 0x60, 0x40, 0x00,
  84. 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0C, 0x04, 0x00
  85. };
  86. uint8_t buff_d[2][8] = {
  87. 0x80, 0xC0, 0x60, 0x24, 0xFC, 0xFC, 0x00, 0x00,
  88. 0x07, 0x0F, 0x08, 0x08, 0x07, 0x0F, 0x08, 0x00
  89. };
  90. uint8_t buff_e[2][8] = {
  91. 0xC0, 0xE0, 0xA0, 0xA0, 0xA0, 0xE0, 0xC0, 0x00,
  92. 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0C, 0x04, 0x00
  93. };
  94. uint8_t buff_f[2][8] = {
  95. 0x40, 0xF8, 0xFC, 0x44, 0x0C, 0x18, 0x00, 0x00,
  96. 0x08, 0x0F, 0x0F, 0x08, 0x00, 0x00, 0x00, 0x00
  97. };
  98. uint8_t buff_g[2][8] = {
  99. 0xC0, 0xE0, 0x20, 0x20, 0xC0, 0xE0, 0x20, 0x00,
  100. 0x27, 0x6F, 0x48, 0x48, 0x7F, 0x3F, 0x00, 0x00
  101. };
  102. uint8_t buff_h[2][8] = {
  103. 0x04, 0xFC, 0xFC, 0x40, 0x20, 0xE0, 0xC0, 0x00,
  104. 0x08, 0x0F, 0x0F, 0x00, 0x00, 0x0F, 0x0F, 0x00
  105. };
  106. uint8_t buff_i[2][8] = {
  107. 0x00, 0x00, 0x20, 0xEC, 0xEC, 0x00, 0x00, 0x00,
  108. 0x00, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x00, 0x00
  109. };
  110. uint8_t buff_j[2][8] = {
  111. 0x00, 0x00, 0x00, 0x00, 0x20, 0xEC, 0xEC, 0x00,
  112. 0x00, 0x30, 0x70, 0x40, 0x40, 0x7F, 0x3F, 0x00
  113. };
  114. uint8_t buff_k[2][8] = {
  115. 0x04, 0xFC, 0xFC, 0x80, 0xC0, 0x60, 0x20, 0x00,
  116. 0x08, 0x0F, 0x0F, 0x01, 0x03, 0x0E, 0x0C, 0x00
  117. };
  118. uint8_t buff_l[2][8] = {
  119. 0x00, 0x00, 0x04, 0xFC, 0xFC, 0x00, 0x00, 0x00,
  120. 0x00, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x00, 0x00
  121. };
  122. uint8_t buff_m[2][8] = {
  123. 0xE0, 0xE0, 0x60, 0xC0, 0x60, 0xE0, 0xC0, 0x00,
  124. 0x0F, 0x0F, 0x00, 0x07, 0x00, 0x0F, 0x0F, 0x00
  125. };
  126. uint8_t buff_n[2][8] = {
  127. 0x20, 0xE0, 0xC0, 0x20, 0x20, 0xE0, 0xC0, 0x00,
  128. 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x0F, 0x0F, 0x00
  129. };
  130. uint8_t buff_o[2][8] = {
  131. 0xC0, 0xE0, 0x20, 0x20, 0x20, 0xE0, 0xC0, 0x00,
  132. 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07, 0x00
  133. };
  134. uint8_t buff_p[2][8] = {
  135. 0x20, 0xE0, 0xC0, 0x20, 0x20, 0xE0, 0xC0, 0x00,
  136. 0x40, 0x7F, 0x7F, 0x48, 0x08, 0x0F, 0x07, 0x00
  137. };
  138. uint8_t buff_q[2][8] = {
  139. 0xC0, 0xE0, 0x20, 0x20, 0xC0, 0xE0, 0x20, 0x00,
  140. 0x07, 0x0F, 0x08, 0x48, 0x7F, 0x7F, 0x40, 0x00
  141. };
  142. uint8_t buff_r[2][8] = {
  143. 0x20, 0xE0, 0xC0, 0x60, 0x20, 0xE0, 0xC0, 0x00,
  144. 0x08, 0x0F, 0x0F, 0x08, 0x00, 0x00, 0x00, 0x00
  145. };
  146. uint8_t buff_s[2][8] = {
  147. 0x40, 0xE0, 0xA0, 0x20, 0x20, 0x60, 0x40, 0x00,
  148. 0x04, 0x0C, 0x09, 0x09, 0x0B, 0x0E, 0x04, 0x00
  149. };
  150. uint8_t buff_t[2][8] = {
  151. 0x20, 0x20, 0xF8, 0xFC, 0x20, 0x20, 0x00, 0x00,
  152. 0x00, 0x00, 0x07, 0x0F, 0x08, 0x0C, 0x04, 0x00
  153. };
  154. uint8_t buff_u[2][8] = {
  155. 0xE0, 0xE0, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00,
  156. 0x07, 0x0F, 0x08, 0x08, 0x07, 0x0F, 0x08, 0x00
  157. };
  158. uint8_t buff_v[2][8] = {
  159. 0x00, 0xE0, 0xE0, 0x00, 0x00, 0xE0, 0xE0, 0x00,
  160. 0x00, 0x03, 0x07, 0x0C, 0x0C, 0x07, 0x03, 0x00
  161. };
  162. uint8_t buff_w[2][8] = {
  163. 0xE0, 0xE0, 0x00, 0x80, 0x00, 0xE0, 0xE0, 0x00,
  164. 0x07, 0x0F, 0x0C, 0x07, 0x0C, 0x0F, 0x07, 0x00
  165. };
  166. uint8_t buff_x[2][8] = {
  167. 0x20, 0x60, 0xC0, 0x80, 0xC0, 0x60, 0x20, 0x00,
  168. 0x08, 0x0C, 0x07, 0x03, 0x07, 0x0C, 0x08, 0x00
  169. };
  170. uint8_t buff_y[2][8] = {
  171. 0xE0, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00,
  172. 0x47, 0x4F, 0x48, 0x48, 0x68, 0x3F, 0x1F, 0x00
  173. };
  174. uint8_t buff_z[2][8] = {
  175. 0x60, 0x60, 0x20, 0xA0, 0xE0, 0x60, 0x20, 0x00,
  176. 0x0C, 0x0E, 0x0B, 0x09, 0x08, 0x0C, 0x0C, 0x00
  177. };

  178.     void setup (){
  179.       
  180.       OLED_INIT ();
  181.       clear_display ();//一切好像总是等待那里,指向着同样的事情...
  182.     }

  183.     void loop (){
  184. prtpage ("", "      but0n", "", "");
  185. prtpage ("", "    knowledge", "       is", "     power");
  186. prtpage ("       qq", "", "    32700567", "");
  187. //while (1){}
  188.     }

  189.           void OLED_INIT (){
  190.                   pinMode (SDIN, OUTPUT);
  191.                   pinMode (SCLK, OUTPUT);   
  192.                   pinMode (DC, OUTPUT);
  193.                   pinMode (RST, OUTPUT);
  194.                   pinMode (CS, OUTPUT);
  195. // You can find  Initial Sequence on the datasheet
  196.                   
  197.                   digitalWrite (RST, HIGH);  // Set RES# as High
  198.                   delay (1);                           // 3us Delay Recommended
  199.                   
  200.                   digitalWrite (RST, LOW);  // Reset
  201.                   delay(10);
  202.                   
  203.                   digitalWrite (RST, HIGH);
  204.                   
  205.                   w_cmd (0xAE);  // 1.Set Display Off
  206.                   
  207.                   w_cmd (0xD5); // 2.Set display Clock Divide Ratio/Oscillator Frequency
  208.                   w_cmd (0x80);
  209.                   
  210.                   w_cmd (0xA8); // 3.Set Multiplex Ratio
  211.                   w_cmd (0x3F);
  212.                   
  213.                   w_cmd (0xD3); // 4.Set Display Offset
  214.                   w_cmd (0x00);
  215.                   
  216.                   w_cmd (0x40); // 5.Set Display Start Line
  217.                   
  218.   // 6.Set Segment Re-Map     0xA1     ***
  219.   // 7.Set COM Output Scan Direction     0xC8      ***
  220.   // 8.Set COM Pins Hardware Configurartion     0xDA, 0x12      ***
  221.   // 9.Set Contrast Control     0x81, 0x66      **^
  222.   // 10.Set Pre-Charge Period     0xD9, 0xF1       ***
  223.   // 11.Set VCOMH Deselect Level      0xDB, 0x30      **^
  224.   // 12.Set Entire Display On/Off      0xA4      ***
  225.   // 13.Set Normal/Inverse Display     0xA6    ***
  226.   // Clear Screen
  227.   
  228. //                  w_cmd (0x8D);// 14.Set Charge Pump
  229. //                  w_cmd (0x14);
  230.                   
  231. // 15.Set Display On    0xAF     ***
  232.                   w_cmd (0x20);
  233.                   w_cmd (0x10); //0x00
  234.                   
  235.                   w_cmd (0xA1); // 6.Set Segment Re-Map
  236.                   
  237.                   w_cmd (0xC8); // 7.Set COM Output Scan Direction
  238.                   
  239.                   w_cmd (0xDA); // 8.Set COM Pins Hardware Configurartion
  240.                   w_cmd (0x12);
  241.                   
  242.                   w_cmd (0x81); // 9.Set Contrast Control   0x66
  243.                   w_cmd (0x66); // 0xCF
  244.                   
  245.                   w_cmd (0xD9); // 10.Set Pre-Charge Period
  246.                   w_cmd (0xF1);
  247.                   
  248.                   w_cmd (0xDB); // 11.Set VCOMH Deselect Level  0x30
  249.                   w_cmd (0x30); // 0x40
  250.                   
  251.                   w_cmd (0xA4); // 12.Set Entire Display On/Off
  252.                   
  253.                   w_cmd (0xA6); // 13.Set Normal/Inverse Display
  254.                   
  255.                   w_cmd (0x8D);// 14.Set Charge Pump
  256.                   w_cmd (0x14);
  257.                   
  258.                   w_cmd (0xAF); // 15.Set Display On
  259.                   
  260.                   
  261.           }
  262.               void w_cmd (uint8_t c){
  263.                 digitalWrite (CS, HIGH);
  264.                 digitalWrite (DC, LOW); // Command
  265.                 digitalWrite (CS, LOW);
  266.                     shiftOut (SDIN, SCLK, MSBFIRST, c);
  267.                 digitalWrite (CS, HIGH);
  268.               }
  269.               
  270.               void w_data (uint8_t d){
  271.                 digitalWrite (CS, HIGH);
  272.                 digitalWrite (DC, HIGH); // Data
  273.                 digitalWrite (CS, LOW);
  274.                     shiftOut (SDIN, SCLK, MSBFIRST, d);
  275.                 digitalWrite (CS, HIGH);
  276.               }
  277.                     
  278.                     void clear_display (){
  279.                             w_cmd (0xAE);
  280.                             in = {0, 0};
  281.                             uint8_t x, y; // x = SEG  [0:127]    y = PAGE  [0:7]
  282.                             for (y = 0; y < 8; y++){
  283.                                     w_cmd (0xB0 + y);  // Set Page Number
  284.                                     w_cmd (0x00);  //  Set Low  (4bit)
  285.                                     w_cmd (0x10);  //  Set High (4bit)
  286.                                     for (x = 0; x<128; x++)
  287.                                             w_data (0x00);
  288.                            
  289.                             }
  290. w_cmd (0xAF);
  291.                     }
  292.                     
  293.                     
  294.                     
  295.            
  296.     void oprint (uint8_t w, struct insert *in){
  297.                   if (in->page > 7 ){
  298.                           *in = {0, 0};
  299.                           delay (500);
  300.                           clear_display ();
  301.                   }
  302.                 uint8_t t, n;
  303.                 for (t = 0; t < 2; t++){
  304.                             w_cmd (0xB0 + in->page + t);
  305.                             w_cmd (in->start & 0x0F);
  306.                             w_cmd (((in->start >> 4) & 0x0F) | 0x10);
  307.                             for (n = 0; n < 8; n++){
  308.                                             switch (w){
  309.                                              
  310.                                               case '0':  
  311.                                               w_data (buff_0[t][n]);
  312.                                               break;
  313.                                               case '1':  
  314.                                               w_data (buff_1[t][n]);
  315.                                               break;
  316.                                               case '2':  
  317.                                               w_data (buff_2[t][n]);
  318.                                               break;
  319.                                               case '3':  
  320.                                               w_data (buff_3[t][n]);
  321.                                               break;
  322.                                               case '4':  
  323.                                               w_data (buff_4[t][n]);
  324.                                               break;
  325.                                               case '5':  
  326.                                               w_data (buff_5[t][n]);
  327.                                               break;
  328.                                               case '6':  
  329.                                               w_data (buff_6[t][n]);
  330.                                               break;
  331.                                               case '7':  
  332.                                               w_data (buff_7[t][n]);
  333.                                               break;
  334.                                               case '8':  
  335.                                               w_data (buff_8[t][n]);
  336.                                               break;
  337.                                               case '9':  
  338.                                               w_data (buff_9[t][n]);
  339.                                               break;
  340.                                               case 'a':  
  341.                                               w_data (buff_a[t][n]);
  342.                                               break;
  343.                                               case 'b':  
  344.                                               w_data (buff_b[t][n]);
  345.                                               break;
  346.                                               case 'c':  
  347.                                               w_data (buff_c[t][n]);
  348.                                               break;
  349.                                               case 'd':  
  350.                                               w_data (buff_d[t][n]);
  351.                                               break;
  352.                                               case 'e':  
  353.                                               w_data (buff_e[t][n]);
  354.                                               break;
  355.                                               case 'f':  
  356.                                               w_data (buff_f[t][n]);
  357.                                               break;
  358.                                               case 'g':  
  359.                                               w_data (buff_g[t][n]);
  360.                                               break;
  361.                                               case 'h':  
  362.                                               w_data (buff_h[t][n]);
  363.                                               break;
  364.                                               case 'i':  
  365.                                               w_data (buff_i[t][n]);
  366.                                               break;
  367.                                               case 'j':  
  368.                                               w_data (buff_j[t][n]);
  369.                                               break;
  370.                                               case 'k':  
  371.                                               w_data (buff_k[t][n]);
  372.                                               break;
  373.                                               case 'l':  
  374.                                               w_data (buff_l[t][n]);
  375.                                               break;
  376.                                               case 'm':  
  377.                                               w_data (buff_m[t][n]);
  378.                                               break;
  379.                                               case 'n':  
  380.                                               w_data (buff_n[t][n]);
  381.                                               break;
  382.                                               case 'o':  
  383.                                               w_data (buff_o[t][n]);
  384.                                               break;
  385.                                               case 'p':  
  386.                                               w_data (buff_p[t][n]);
  387.                                               break;
  388.                                               case 'q':  
  389.                                               w_data (buff_q[t][n]);
  390.                                               break;
  391.                                               case 'r':  
  392.                                               w_data (buff_r[t][n]);
  393.                                               break;
  394.                                               case 's':  
  395.                                               w_data (buff_s[t][n]);
  396.                                               break;
  397.                                               case 't':  
  398.                                               w_data (buff_t[t][n]);
  399.                                               break;
  400.                                               case 'u':  
  401.                                               w_data (buff_u[t][n]);
  402.                                               break;
  403.                                               case 'v':  
  404.                                               w_data (buff_v[t][n]);
  405.                                               break;
  406.                                               case 'w':  
  407.                                               w_data (buff_w[t][n]);
  408.                                               break;
  409.                                               case 'x':  
  410.                                               w_data (buff_x[t][n]);
  411.                                               break;
  412.                                               case 'y':  
  413.                                               w_data (buff_y[t][n]);
  414.                                               break;
  415.                                               case 'z':  
  416.                                               w_data (buff_z[t][n]);
  417.                                               break;
  418.                                               default:
  419.                                               case ' ':  
  420.                                               w_data (0x00);
  421.                                               break;                                       


  422.                                             }  //switch
  423.                             }//for
  424.                   }
  425.                   in->start += 8;
  426.                   if (in->start >= 128){
  427.                           in->start = 0;
  428.                           in->page += 2;
  429.                   }

  430.    
  431.     }

  432. void oled_printf(char text[]) {
  433. int c, q;
  434. for (c = 0; text[c] != NULL; c++)
  435. oprint (text[c], &in);
  436. for (q = 0; q < (16 - c); q++)
  437. oprint (' ', &in);
  438. }
  439. void prtpage (char c1[], char c2[], char c3[], char c4[]) {
  440.       w_cmd (0xAE);
  441.       oled_printf (c1);
  442.       oled_printf (c2);
  443.       oled_printf (c3);
  444.       oled_printf (c4);
  445.       w_cmd (0xAF);
  446.       delay (3000);
  447.       clear_display ();
  448.       delay (800);
  449. }
  450.                                           
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-8 10:50:42 | 显示全部楼层
布列松 发表于 2015-4-8 09:19
代码在那里?

能不能帮我把那个视频挂上,我不会弄

源码地址:http://github.com/but0n/OLED_Arduino
回复 支持 反对

使用道具 举报

发表于 2015-4-8 12:05:56 | 显示全部楼层
butOn 发表于 2015-4-8 10:50
能不能帮我把那个视频挂上,我不会弄

源码地址:http://github.com/but0n/OLED_Arduino


帮你弄视频,自己写的很不错,最好能够封装起库来,可以让人使用方便嘛!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-8 12:36:43 | 显示全部楼层
code-AR 发表于 2015-4-8 12:05
帮你弄视频,自己写的很不错,最好能够封装起库来,可以让人使用方便嘛!

嗯,谢谢!
回复 支持 反对

使用道具 举报

发表于 2015-4-9 11:35:26 | 显示全部楼层
butOn 发表于 2015-4-8 10:43
这是3.0版的,我会在我的Github更新
/*
* OLED_Arduino-3.0.ino

编译有误 上传不了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-9 12:35:16 | 显示全部楼层
布列松 发表于 2015-4-9 11:35
编译有误 上传不了

错误信息是什么?
回复 支持 反对

使用道具 举报

发表于 2015-4-10 00:02:36 | 显示全部楼层
butOn 发表于 2015-4-9 12:35
错误信息是什么?

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-10 13:20:54 | 显示全部楼层
布列松 发表于 2015-4-10 00:02


  1. /*
  2. * OLED_Arduino-3.0.ino
  3. *
  4. * Created by Jack, April 5, 2015.
  5. *
  6. * FUNCTION: This is a driver program to display some pics or words
  7. *                    on the OLED screen.
  8. *
  9. * OLED INFORMATION:
  10. *             96`    128*64,
  11. *        driver chip: SSD1306,
  12. *
  13. * INTERFACE: 4-wire SPI.
  14. *
  15. */
  16. #define SDIN 9  //D1
  17. #define SCLK 10  //D0
  18. #define DC 11  
  19. #define RST 13
  20. #define CS 12

  21. typedef struct insert {
  22. uint8_t page;
  23. uint8_t start;
  24. }insert;
  25. insert in = {0, 0};
  26. void OLED_INIT ();
  27. void w_cmd (uint8_t c);
  28. void w_data (uint8_t d);
  29. void clear_display ();
  30. void oprint (uint8_t w, insert *in);
  31. void oled_printf (char text[]);
  32. void prtpage (char c1[], char c2[], char c3[], char c4[]);

  33. //  ASCII  -  buff


  34. uint8_t buff_0[2][8] = {
  35. 0xF0, 0xF8, 0x0C, 0xC4, 0x0C, 0xF8, 0xF0, 0x00,
  36. 0x03, 0x07, 0x0C, 0x08, 0x0C, 0x07, 0x03, 0x00
  37. };
  38. uint8_t buff_1[2][8] = {
  39. 0x00, 0x10, 0x18, 0xFC, 0xFC, 0x00, 0x00, 0x00,
  40. 0x00, 0x08, 0x08, 0x0F, 0x0F, 0x08, 0x08, 0x00
  41. };
  42. uint8_t buff_2[2][8] = {
  43. 0x08, 0x0C, 0x84, 0xC4, 0x64, 0x3C, 0x18, 0x00,
  44. 0x0E, 0x0F, 0x09, 0x08, 0x08, 0x0C, 0x0C, 0x00
  45. };
  46. uint8_t buff_3[2][8] = {
  47. 0x08, 0x0C, 0x44, 0x44, 0x44, 0xFC, 0xB8, 0x00,
  48. 0x04, 0x0C, 0x08, 0x08, 0x08, 0x0F, 0x07, 0x00
  49. };
  50. uint8_t buff_4[2][8] = {
  51. 0xC0, 0xE0, 0xB0, 0x98, 0xFC, 0xFC, 0x80, 0x00,
  52. 0x00, 0x00, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x00
  53. };
  54. uint8_t buff_5[2][8] = {
  55. 0x7C, 0x7C, 0x44, 0x44, 0x44, 0xC4, 0x84, 0x00,
  56. 0x04, 0x0C, 0x08, 0x08, 0x08, 0x0F, 0x07, 0x00
  57. };
  58. uint8_t buff_6[2][8] = {
  59. 0xF0, 0xF8, 0x4C, 0x44, 0x44, 0xC0, 0x80, 0x00,
  60. 0x07, 0x07, 0x08, 0x08, 0x08, 0x0F, 0x07, 0x00
  61. };
  62. uint8_t buff_7[2][8] = {
  63. 0x0C, 0x0C, 0x04, 0x84, 0xC4, 0x7C, 0x3C, 0x00,
  64. 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00
  65. };
  66. uint8_t buff_8[2][8] = {
  67. 0xB8, 0xFC, 0x44, 0x44, 0x44, 0xFC, 0xB8, 0x00,
  68. 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07, 0x00
  69. };
  70. uint8_t buff_9[2][8] = {
  71. 0x38, 0x7C, 0x44, 0x44, 0x44, 0xFC, 0xF8, 0x00,
  72. 0x00, 0x08, 0x08, 0x08, 0x0C, 0x07, 0x03, 0x00
  73. };

  74. uint8_t buff_a[2][8] = {
  75. 0x00, 0xA0, 0xA0, 0xA0, 0xE0, 0xC0, 0x00, 0x00,
  76. 0x07, 0x0F, 0x08, 0x08, 0x07, 0x0F, 0x08, 0x00
  77. };
  78. uint8_t buff_b[2][8] = {
  79. 0x04, 0xFC, 0xFC, 0x20, 0x60, 0xC0, 0x80, 0x00,
  80. 0x00, 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x07, 0x00
  81. };
  82. uint8_t buff_c[2][8] = {
  83. 0xC0, 0xE0, 0x20, 0x20, 0x20, 0x60, 0x40, 0x00,
  84. 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0C, 0x04, 0x00
  85. };
  86. uint8_t buff_d[2][8] = {
  87. 0x80, 0xC0, 0x60, 0x24, 0xFC, 0xFC, 0x00, 0x00,
  88. 0x07, 0x0F, 0x08, 0x08, 0x07, 0x0F, 0x08, 0x00
  89. };
  90. uint8_t buff_e[2][8] = {
  91. 0xC0, 0xE0, 0xA0, 0xA0, 0xA0, 0xE0, 0xC0, 0x00,
  92. 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0C, 0x04, 0x00
  93. };
  94. uint8_t buff_f[2][8] = {
  95. 0x40, 0xF8, 0xFC, 0x44, 0x0C, 0x18, 0x00, 0x00,
  96. 0x08, 0x0F, 0x0F, 0x08, 0x00, 0x00, 0x00, 0x00
  97. };
  98. uint8_t buff_g[2][8] = {
  99. 0xC0, 0xE0, 0x20, 0x20, 0xC0, 0xE0, 0x20, 0x00,
  100. 0x27, 0x6F, 0x48, 0x48, 0x7F, 0x3F, 0x00, 0x00
  101. };
  102. uint8_t buff_h[2][8] = {
  103. 0x04, 0xFC, 0xFC, 0x40, 0x20, 0xE0, 0xC0, 0x00,
  104. 0x08, 0x0F, 0x0F, 0x00, 0x00, 0x0F, 0x0F, 0x00
  105. };
  106. uint8_t buff_i[2][8] = {
  107. 0x00, 0x00, 0x20, 0xEC, 0xEC, 0x00, 0x00, 0x00,
  108. 0x00, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x00, 0x00
  109. };
  110. uint8_t buff_j[2][8] = {
  111. 0x00, 0x00, 0x00, 0x00, 0x20, 0xEC, 0xEC, 0x00,
  112. 0x00, 0x30, 0x70, 0x40, 0x40, 0x7F, 0x3F, 0x00
  113. };
  114. uint8_t buff_k[2][8] = {
  115. 0x04, 0xFC, 0xFC, 0x80, 0xC0, 0x60, 0x20, 0x00,
  116. 0x08, 0x0F, 0x0F, 0x01, 0x03, 0x0E, 0x0C, 0x00
  117. };
  118. uint8_t buff_l[2][8] = {
  119. 0x00, 0x00, 0x04, 0xFC, 0xFC, 0x00, 0x00, 0x00,
  120. 0x00, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x00, 0x00
  121. };
  122. uint8_t buff_m[2][8] = {
  123. 0xE0, 0xE0, 0x60, 0xC0, 0x60, 0xE0, 0xC0, 0x00,
  124. 0x0F, 0x0F, 0x00, 0x07, 0x00, 0x0F, 0x0F, 0x00
  125. };
  126. uint8_t buff_n[2][8] = {
  127. 0x20, 0xE0, 0xC0, 0x20, 0x20, 0xE0, 0xC0, 0x00,
  128. 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x0F, 0x0F, 0x00
  129. };
  130. uint8_t buff_o[2][8] = {
  131. 0xC0, 0xE0, 0x20, 0x20, 0x20, 0xE0, 0xC0, 0x00,
  132. 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07, 0x00
  133. };
  134. uint8_t buff_p[2][8] = {
  135. 0x20, 0xE0, 0xC0, 0x20, 0x20, 0xE0, 0xC0, 0x00,
  136. 0x40, 0x7F, 0x7F, 0x48, 0x08, 0x0F, 0x07, 0x00
  137. };
  138. uint8_t buff_q[2][8] = {
  139. 0xC0, 0xE0, 0x20, 0x20, 0xC0, 0xE0, 0x20, 0x00,
  140. 0x07, 0x0F, 0x08, 0x48, 0x7F, 0x7F, 0x40, 0x00
  141. };
  142. uint8_t buff_r[2][8] = {
  143. 0x20, 0xE0, 0xC0, 0x60, 0x20, 0xE0, 0xC0, 0x00,
  144. 0x08, 0x0F, 0x0F, 0x08, 0x00, 0x00, 0x00, 0x00
  145. };
  146. uint8_t buff_s[2][8] = {
  147. 0x40, 0xE0, 0xA0, 0x20, 0x20, 0x60, 0x40, 0x00,
  148. 0x04, 0x0C, 0x09, 0x09, 0x0B, 0x0E, 0x04, 0x00
  149. };
  150. uint8_t buff_t[2][8] = {
  151. 0x20, 0x20, 0xF8, 0xFC, 0x20, 0x20, 0x00, 0x00,
  152. 0x00, 0x00, 0x07, 0x0F, 0x08, 0x0C, 0x04, 0x00
  153. };
  154. uint8_t buff_u[2][8] = {
  155. 0xE0, 0xE0, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00,
  156. 0x07, 0x0F, 0x08, 0x08, 0x07, 0x0F, 0x08, 0x00
  157. };
  158. uint8_t buff_v[2][8] = {
  159. 0x00, 0xE0, 0xE0, 0x00, 0x00, 0xE0, 0xE0, 0x00,
  160. 0x00, 0x03, 0x07, 0x0C, 0x0C, 0x07, 0x03, 0x00
  161. };
  162. uint8_t buff_w[2][8] = {
  163. 0xE0, 0xE0, 0x00, 0x80, 0x00, 0xE0, 0xE0, 0x00,
  164. 0x07, 0x0F, 0x0C, 0x07, 0x0C, 0x0F, 0x07, 0x00
  165. };
  166. uint8_t buff_x[2][8] = {
  167. 0x20, 0x60, 0xC0, 0x80, 0xC0, 0x60, 0x20, 0x00,
  168. 0x08, 0x0C, 0x07, 0x03, 0x07, 0x0C, 0x08, 0x00
  169. };
  170. uint8_t buff_y[2][8] = {
  171. 0xE0, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00,
  172. 0x47, 0x4F, 0x48, 0x48, 0x68, 0x3F, 0x1F, 0x00
  173. };
  174. uint8_t buff_z[2][8] = {
  175. 0x60, 0x60, 0x20, 0xA0, 0xE0, 0x60, 0x20, 0x00,
  176. 0x0C, 0x0E, 0x0B, 0x09, 0x08, 0x0C, 0x0C, 0x00
  177. };

  178.     void setup (){
  179.       
  180.       OLED_INIT ();
  181.       clear_display ();//一切好像总是等待那里,指向着同样的事情...
  182.     }

  183.     void loop (){
  184. prtpage ("", "      but0n", "", "");
  185. prtpage ("", "    knowledge", "       is", "     power");
  186. prtpage ("       qq", "", "    32700567", "");
  187. //while (1){}
  188.     }

  189.           void OLED_INIT (){
  190.                   pinMode (SDIN, OUTPUT);
  191.                   pinMode (SCLK, OUTPUT);   
  192.                   pinMode (DC, OUTPUT);
  193.                   pinMode (RST, OUTPUT);
  194.                   pinMode (CS, OUTPUT);
  195. // You can find  Initial Sequence on the datasheet
  196.                   
  197.                   digitalWrite (RST, HIGH);  // Set RES# as High
  198.                   delay (1);                           // 3us Delay Recommended
  199.                   
  200.                   digitalWrite (RST, LOW);  // Reset
  201.                   delay(10);
  202.                   
  203.                   digitalWrite (RST, HIGH);
  204.                   
  205.                   w_cmd (0xAE);  // 1.Set Display Off
  206.                   
  207.                   w_cmd (0xD5); // 2.Set display Clock Divide Ratio/Oscillator Frequency
  208.                   w_cmd (0x80);
  209.                   
  210.                   w_cmd (0xA8); // 3.Set Multiplex Ratio
  211.                   w_cmd (0x3F);
  212.                   
  213.                   w_cmd (0xD3); // 4.Set Display Offset
  214.                   w_cmd (0x00);
  215.                   
  216.                   w_cmd (0x40); // 5.Set Display Start Line
  217.                   
  218.   // 6.Set Segment Re-Map     0xA1     ***
  219.   // 7.Set COM Output Scan Direction     0xC8      ***
  220.   // 8.Set COM Pins Hardware Configurartion     0xDA, 0x12      ***
  221.   // 9.Set Contrast Control     0x81, 0x66      **^
  222.   // 10.Set Pre-Charge Period     0xD9, 0xF1       ***
  223.   // 11.Set VCOMH Deselect Level      0xDB, 0x30      **^
  224.   // 12.Set Entire Display On/Off      0xA4      ***
  225.   // 13.Set Normal/Inverse Display     0xA6    ***
  226.   // Clear Screen
  227.   
  228. //                  w_cmd (0x8D);// 14.Set Charge Pump
  229. //                  w_cmd (0x14);
  230.                   
  231. // 15.Set Display On    0xAF     ***
  232.                   w_cmd (0x20);
  233.                   w_cmd (0x10); //0x00
  234.                   
  235.                   w_cmd (0xA1); // 6.Set Segment Re-Map
  236.                   
  237.                   w_cmd (0xC8); // 7.Set COM Output Scan Direction
  238.                   
  239.                   w_cmd (0xDA); // 8.Set COM Pins Hardware Configurartion
  240.                   w_cmd (0x12);
  241.                   
  242.                   w_cmd (0x81); // 9.Set Contrast Control   0x66
  243.                   w_cmd (0x66); // 0xCF
  244.                   
  245.                   w_cmd (0xD9); // 10.Set Pre-Charge Period
  246.                   w_cmd (0xF1);
  247.                   
  248.                   w_cmd (0xDB); // 11.Set VCOMH Deselect Level  0x30
  249.                   w_cmd (0x30); // 0x40
  250.                   
  251.                   w_cmd (0xA4); // 12.Set Entire Display On/Off
  252.                   
  253.                   w_cmd (0xA6); // 13.Set Normal/Inverse Display
  254.                   
  255.                   w_cmd (0x8D);// 14.Set Charge Pump
  256.                   w_cmd (0x14);
  257.                   
  258.                   w_cmd (0xAF); // 15.Set Display On
  259.                   
  260.                   
  261.           }
  262.               void w_cmd (uint8_t c){
  263.                 digitalWrite (CS, HIGH);
  264.                 digitalWrite (DC, LOW); // Command
  265.                 digitalWrite (CS, LOW);
  266.                     shiftOut (SDIN, SCLK, MSBFIRST, c);
  267.                 digitalWrite (CS, HIGH);
  268.               }
  269.               
  270.               void w_data (uint8_t d){
  271.                 digitalWrite (CS, HIGH);
  272.                 digitalWrite (DC, HIGH); // Data
  273.                 digitalWrite (CS, LOW);
  274.                     shiftOut (SDIN, SCLK, MSBFIRST, d);
  275.                 digitalWrite (CS, HIGH);
  276.               }
  277.                     
  278.                     void clear_display (){
  279.                             w_cmd (0xAE);
  280.                             in = {0, 0};
  281.                             uint8_t x, y; // x = SEG  [0:127]    y = PAGE  [0:7]
  282.                             for (y = 0; y < 8; y++){
  283.                                     w_cmd (0xB0 + y);  // Set Page Number
  284.                                     w_cmd (0x00);  //  Set Low  (4bit)
  285.                                     w_cmd (0x10);  //  Set High (4bit)
  286.                                     for (x = 0; x<128; x++)
  287.                                             w_data (0x00);
  288.                            
  289.                             }
  290. w_cmd (0xAF);
  291.                     }
  292.                     
  293.                     
  294.                     
  295.            
  296.     void oprint (uint8_t w, struct insert *in){
  297.                   if (in->page > 7 ){
  298.                           *in = {0, 0};
  299.                           delay (500);
  300.                           clear_display ();
  301.                   }
  302.                 uint8_t t, n;
  303.                 for (t = 0; t < 2; t++){
  304.                             w_cmd (0xB0 + in->page + t);
  305.                             w_cmd (in->start & 0x0F);
  306.                             w_cmd (((in->start >> 4) & 0x0F) | 0x10);
  307.                             for (n = 0; n < 8; n++){
  308.                                             switch (w){
  309.                                              
  310.                                               case '0':  
  311.                                               w_data (buff_0[t][n]);
  312.                                               break;
  313.                                               case '1':  
  314.                                               w_data (buff_1[t][n]);
  315.                                               break;
  316.                                               case '2':  
  317.                                               w_data (buff_2[t][n]);
  318.                                               break;
  319.                                               case '3':  
  320.                                               w_data (buff_3[t][n]);
  321.                                               break;
  322.                                               case '4':  
  323.                                               w_data (buff_4[t][n]);
  324.                                               break;
  325.                                               case '5':  
  326.                                               w_data (buff_5[t][n]);
  327.                                               break;
  328.                                               case '6':  
  329.                                               w_data (buff_6[t][n]);
  330.                                               break;
  331.                                               case '7':  
  332.                                               w_data (buff_7[t][n]);
  333.                                               break;
  334.                                               case '8':  
  335.                                               w_data (buff_8[t][n]);
  336.                                               break;
  337.                                               case '9':  
  338.                                               w_data (buff_9[t][n]);
  339.                                               break;
  340.                                               case 'a':  
  341.                                               w_data (buff_a[t][n]);
  342.                                               break;
  343.                                               case 'b':  
  344.                                               w_data (buff_b[t][n]);
  345.                                               break;
  346.                                               case 'c':  
  347.                                               w_data (buff_c[t][n]);
  348.                                               break;
  349.                                               case 'd':  
  350.                                               w_data (buff_d[t][n]);
  351.                                               break;
  352.                                               case 'e':  
  353.                                               w_data (buff_e[t][n]);
  354.                                               break;
  355.                                               case 'f':  
  356.                                               w_data (buff_f[t][n]);
  357.                                               break;
  358.                                               case 'g':  
  359.                                               w_data (buff_g[t][n]);
  360.                                               break;
  361.                                               case 'h':  
  362.                                               w_data (buff_h[t][n]);
  363.                                               break;
  364.                                               case 'i':  
  365.                                               w_data (buff_i[t][n]);
  366.                                               break;
  367.                                               case 'j':  
  368.                                               w_data (buff_j[t][n]);
  369.                                               break;
  370.                                               case 'k':  
  371.                                               w_data (buff_k[t][n]);
  372.                                               break;
  373.                                               case 'l':  
  374.                                               w_data (buff_l[t][n]);
  375.                                               break;
  376.                                               case 'm':  
  377.                                               w_data (buff_m[t][n]);
  378.                                               break;
  379.                                               case 'n':  
  380.                                               w_data (buff_n[t][n]);
  381.                                               break;
  382.                                               case 'o':  
  383.                                               w_data (buff_o[t][n]);
  384.                                               break;
  385.                                               case 'p':  
  386.                                               w_data (buff_p[t][n]);
  387.                                               break;
  388.                                               case 'q':  
  389.                                               w_data (buff_q[t][n]);
  390.                                               break;
  391.                                               case 'r':  
  392.                                               w_data (buff_r[t][n]);
  393.                                               break;
  394.                                               case 's':  
  395.                                               w_data (buff_s[t][n]);
  396.                                               break;
  397.                                               case 't':  
  398.                                               w_data (buff_t[t][n]);
  399.                                               break;
  400.                                               case 'u':  
  401.                                               w_data (buff_u[t][n]);
  402.                                               break;
  403.                                               case 'v':  
  404.                                               w_data (buff_v[t][n]);
  405.                                               break;
  406.                                               case 'w':  
  407.                                               w_data (buff_w[t][n]);
  408.                                               break;
  409.                                               case 'x':  
  410.                                               w_data (buff_x[t][n]);
  411.                                               break;
  412.                                               case 'y':  
  413.                                               w_data (buff_y[t][n]);
  414.                                               break;
  415.                                               case 'z':  
  416.                                               w_data (buff_z[t][n]);
  417.                                               break;
  418.                                               default:
  419.                                               case ' ':  
  420.                                               w_data (0x00);
  421.                                               break;                                       


  422.                                             }  //switch
  423.                             }//for
  424.                   }
  425.                   in->start += 8;
  426.                   if (in->start >= 128){
  427.                           in->start = 0;
  428.                           in->page += 2;
  429.                   }

  430.    
  431.     }

  432. void oled_printf(char text[]) {
  433. int c, q;
  434. for (c = 0; text[c] != NULL; c++)
  435. oprint (text[c], &in);
  436. for (q = 0; q < (16 - c); q++)
  437. oprint (' ', &in);
  438. }
  439. void prtpage (char c1[], char c2[], char c3[], char c4[]) {
  440.       w_cmd (0xAE);
  441.       oled_printf (c1);
  442.       oled_printf (c2);
  443.       oled_printf (c3);
  444.       oled_printf (c4);
  445.       w_cmd (0xAF);
  446.       delay (3000);
  447.       clear_display ();
  448.       delay (800);
  449. }
  450.                                           
复制代码

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2015-4-10 14:02:39 | 显示全部楼层
本帖最后由 布列松 于 2015-4-10 15:40 编辑
butOn 发表于 2015-4-10 13:20
/*
* OLED_Arduino-3.0.ino
*


ok 成功上传了 正确显示




奇怪的是我的oled 是少了一个脚的,另外我有一个4脚的oled 那个就显示不了的

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-23 14:19 , Processed in 0.056628 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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