极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: thomas

Arduino驱动OLED显示屏试验

  [复制链接]
发表于 2012-3-20 18:04:11 | 显示全部楼层
要是有I2C的库就好了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-21 09:30:04 | 显示全部楼层
黑马 发表于 2012-3-20 17:14
请教一下,我用4线SPI连接到MEGA,你的库文件,发现刷新一次数据要220ms左右,怎么都觉得不应该这么慢啊…… ...

没道理啊,我没用过MEGA那么高档的东西
SS1306的驱动,特别流畅,超过了很多LED屏的显示速度
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-21 09:45:31 | 显示全部楼层
悠然小调 发表于 2012-3-20 18:04
要是有I2C的库就好了。

实在抱歉,我还不会自己写裤,只能改改。
这个裤驱动spi响应速度很快,做图形不错
回复 支持 反对

使用道具 举报

发表于 2012-4-2 12:44:57 | 显示全部楼层
哪位大师会用指令调节这个视频?
回复 支持 反对

使用道具 举报

发表于 2012-4-2 23:33:32 | 显示全部楼层
哪位大师会用指令调节这个OLED的亮度?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-4-3 09:06:55 | 显示全部楼层
本帖最后由 thomas 于 2012-4-3 09:17 编辑

ssd1306说明书上查的指令,这个库里好像不带,396行写了功能,但空着。需要高人加入
//Set Fade Out and Blinking
//OLED_Send_Comm(0x23);
//OLED_Send_Comm(0x30);
回复 支持 反对

使用道具 举报

发表于 2012-4-3 16:46:45 | 显示全部楼层
我ssd1306.CCP里看到的是这行,可也是空的,郁闷
void SSD1306::ssd1306_set_brightness(uint8_t val) {
  
}
回复 支持 反对

使用道具 举报

发表于 2012-4-9 14:47:00 | 显示全部楼层
thomas 发表于 2012-3-21 09:30
没道理啊,我没用过MEGA那么高档的东西
SS1306的驱动,特别流畅,超过了很多LED屏的显示速度

我实验的结果也是刷新一次耗时约200多ms.
Oled.display() 这函数,就占了200ms了.
乞求善心人士能提供8080的驱动...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-4-9 18:18:46 | 显示全部楼层
我有8080的例子,谁会改

  1. /**********************************************************************************************
  2.    Project Code   : LM096-128064
  3.    Dot Matrix     : 128X64
  4.    Driver IC      : SSD1306Z
  5.    Interface      : 8080
  6.    MCU                      : AT89C52
  7.    Revision       : A
  8.    Date           : 2011/9/18
  9.    Editor         : Frank chen

  10.    Copyright (c)  : Li Yuan Electronics Co.,Ltd.  
  11.    Contact us           : Tel: +86 755 26523608  Email: [email protected]
  12. **********************************************************************************************/
  13. #include "reg52.h"
  14. #define high 1
  15. #define low 0
  16. #define DBL P0
  17. /*************Pin Define***************/
  18. sbit R_D=P1^2;
  19. sbit W_R=P1^3;
  20. sbit DC=P1^4;
  21. sbit CS=P1^5;
  22. sbit RES=P1^6;
  23. /****************************************************/
  24. void Initial_LY096BG30();
  25. void Delay_50ms(unsigned int Del_50ms);
  26. void Delay_1ms(unsigned int Del_1ms);
  27. void Write_Command(unsigned char IIC_Command);
  28. void Write_Data(unsigned char IIC_Data);
  29. void fill_picture(unsigned char fill_Data);
  30. void Picture_1();
  31. /***********************Initial code*********************/
  32. void Initial_LY096BG30()
  33. {
  34.         Write_Command(0xAE);   //display off
  35.         Write_Command(0x20);        //Set Memory Addressing Mode       
  36.         Write_Command(0x10);        //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
  37.         Write_Command(0xb0);        //Set Page Start Address for Page Addressing Mode,0-7
  38.         Write_Command(0xc8);        //Set COM Output Scan Direction
  39.         Write_Command(0x00);//---set low column address
  40.         Write_Command(0x10);//---set high column address
  41.         Write_Command(0x40);//--set start line address
  42.         Write_Command(0x81);//--set contrast control register
  43.         Write_Command(0x7f);
  44.         Write_Command(0xa1);//--set segment re-map 0 to 127
  45.         Write_Command(0xa6);//--set normal display
  46.         Write_Command(0xa8);//--set multiplex ratio(1 to 64)
  47.         Write_Command(0x3F);//
  48.         Write_Command(0xa4);//0xa4,Output follows RAM content;0xa5,Output ignores RAM content
  49.         Write_Command(0xd3);//-set display offset
  50.         Write_Command(0x00);//-not offset
  51.         Write_Command(0xd5);//--set display clock divide ratio/oscillator frequency
  52.         Write_Command(0xf0);//--set divide ratio
  53.         Write_Command(0xd9);//--set pre-charge period
  54.         Write_Command(0x22); //
  55.         Write_Command(0xda);//--set com pins hardware configuration
  56.         Write_Command(0x12);
  57.         Write_Command(0xdb);//--set vcomh
  58.         Write_Command(0x20);//0x20,0.77xVcc
  59.         Write_Command(0x8d);//--set DC-DC enable
  60.         Write_Command(0x14);//
  61.         Write_Command(0xaf);//--turn on oled panel
  62. }
  63. /***********************Picture Code**************************/
  64. unsigned char code show1[]=
  65. {
  66. 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0xFF,0x01,0x01,0x00,0x00,0x00,0x00,0x20,0xF1,
  67. 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x07,0x19,0xE0,0x10,0x0D,0x03,0x01,0x01,
  68. 0x10,0xF0,0x00,0x00,0x10,0xF0,0x00,0x00,0x20,0x90,0x90,0x50,0xE0,0x00,0x20,0xF0,
  69. 0x20,0x10,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0xFF,0x21,0x21,0x21,0x71,
  70. 0x03,0x00,0x02,0xFF,0x00,0x00,0xE0,0x50,0x50,0x50,0x60,0x00,0x00,0xE0,0x10,0x10,
  71. 0x10,0x20,0x00,0x10,0xFC,0x10,0x10,0x20,0xF0,0x20,0x10,0x10,0x00,0xC0,0x20,0x10,
  72. 0x10,0x20,0xC0,0x00,0x20,0xF0,0x20,0x10,0x10,0xE0,0x00,0x20,0xF1,0x00,0x00,0xE0,
  73. 0x10,0x10,0x10,0x20,0x00,0x00,0x60,0x90,0x90,0x30,0x00,0x00,0x00,0x00,0x00,0x00,
  74. 0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0x06,0x01,0x04,0x07,
  75. 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x04,0x04,0x00,0x00,0x00,
  76. 0x00,0x03,0x04,0x04,0x02,0x07,0x02,0x00,0x07,0x04,0x04,0x02,0x07,0x04,0x04,0x07,
  77. 0x04,0x00,0x04,0x07,0x04,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x04,0x04,0x04,0x04,
  78. 0x06,0x01,0x04,0x07,0x04,0x00,0x03,0x04,0x04,0x04,0x02,0x00,0x00,0x03,0x04,0x04,
  79. 0x04,0x02,0x00,0x00,0x07,0x04,0x02,0x04,0x07,0x04,0x00,0x00,0x00,0x01,0x02,0x04,
  80. 0x04,0x02,0x01,0x00,0x04,0x07,0x04,0x00,0x04,0x07,0x04,0x04,0x07,0x04,0x00,0x03,
  81. 0x04,0x04,0x04,0x02,0x00,0x00,0x06,0x04,0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
  82. 0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,
  83. 0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
  84. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
  85. 0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,
  86. 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
  87. 0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,
  88. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,
  89. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  90. 0x00,0x00,0x00,0x7F,0x80,0x80,0x80,0x7F,0x00,0x00,0x80,0x00,0x8F,0x90,0x50,0x30,
  91. 0x1F,0x00,0x7C,0x8A,0x85,0x84,0x78,0x00,0x88,0xFC,0x80,0x88,0xFC,0x88,0x04,0x84,
  92. 0xF8,0x80,0x00,0x78,0x84,0x84,0x4C,0x00,0x81,0xFF,0x88,0x04,0x84,0xF8,0x80,0x00,
  93. 0x00,0x00,0x3E,0x41,0x80,0x80,0x80,0x80,0x41,0x3E,0x00,0x80,0xFF,0x80,0x80,0x80,
  94. 0x80,0x40,0x80,0xFF,0x88,0x88,0x9C,0x81,0x40,0x80,0xFF,0x80,0x80,0x80,0x80,0x41,
  95. 0x3E,0x00,0x00,0x00,0x00,0x80,0xFF,0x81,0x0E,0x70,0x80,0x70,0x0E,0x81,0xFF,0x80,
  96. 0x00,0x00,0x78,0x84,0x84,0x84,0x78,0x00,0x00,0x78,0x84,0x84,0x49,0xFF,0x40,0x04,
  97. 0x7C,0x80,0x80,0x44,0xFC,0x40,0x81,0xFF,0x80,0x00,0x78,0x94,0x94,0x58,0x00,0x00,
  98. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x40,0x40,0x80,0xC0,0x00,
  99. 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  100. 0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xC0,0x40,
  101. 0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  102. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  103. 0x00,0x80,0x40,0x40,0x40,0x80,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  104. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,
  105. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  106. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x22,0x42,0x44,0x44,0x39,0x00,
  107. 0x44,0x7E,0x40,0x44,0x7E,0x44,0x02,0x42,0x7C,0x40,0x00,0xEC,0x52,0x52,0x52,0x4E,
  108. 0x82,0x40,0x7F,0x40,0x00,0x3C,0x4A,0x4A,0x2C,0x00,0x00,0x00,0x00,0x40,0x7F,0x44,
  109. 0x04,0x04,0x03,0x00,0x00,0x3C,0x42,0x42,0x42,0x3C,0x00,0x02,0x1E,0x60,0x12,0x1E,
  110. 0x62,0x18,0x06,0x02,0x00,0x3C,0x4A,0x4A,0x2C,0x00,0x44,0x7E,0x44,0x02,0x00,0x00,
  111. 0x00,0x71,0x22,0x42,0x44,0x44,0x39,0x00,0x02,0x3E,0x40,0x40,0x22,0x7E,0x20,0x04,
  112. 0xFE,0x24,0x42,0x42,0x3C,0x00,0x04,0xFE,0x24,0x42,0x42,0x3C,0x00,0x40,0x7F,0x40,
  113. 0x02,0x0E,0x32,0xC0,0x3A,0x06,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  114. 0x00,0x00,0x80,0x40,0x40,0x40,0x80,0x00,0x80,0x40,0x40,0x40,0x80,0x00,0x80,0x40,
  115. 0x40,0x40,0x80,0x00,0x80,0x40,0x40,0x40,0x80,0x00,0x00,0x01,0x02,0xC2,0x22,0x02,
  116. 0x81,0x40,0x40,0xC0,0x00,0x00,0x80,0x40,0x40,0x40,0x80,0x00,0x80,0x40,0x40,0x40,
  117. 0x80,0x00,0x80,0x40,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,
  118. 0xC0,0x40,0x40,0x00,0x80,0x40,0x40,0x40,0x80,0x00,0x80,0x40,0x40,0x40,0xC0,0x00,
  119. 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0xC2,
  120. 0x23,0x02,0x00,0x00,0x80,0xC0,0x02,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x80,0x40,
  121. 0x42,0x42,0xC3,0x00,0x40,0xC0,0x40,0x40,0x80,0x00,0x40,0x40,0xC0,0x40,0x40,0x00,
  122. 0x00,0x00,0x1D,0x22,0x22,0x22,0x1D,0x00,0x1F,0x20,0x20,0x20,0x1F,0x00,0x1D,0x22,
  123. 0x22,0x22,0x1D,0x00,0x1F,0x20,0x20,0x20,0x1F,0x00,0x40,0x38,0x06,0x01,0x00,0x00,
  124. 0x1F,0x22,0x22,0x22,0x1C,0x00,0x1D,0x22,0x22,0x22,0x1D,0x00,0x1F,0x20,0x20,0x20,
  125. 0x1F,0x00,0x1F,0x20,0x20,0x20,0x1F,0x00,0x80,0x60,0x00,0x00,0x00,0x00,0x20,0x20,
  126. 0x3F,0x20,0x20,0x00,0x31,0x28,0x24,0x22,0x21,0x00,0x1F,0x20,0x20,0x20,0x10,0x00,
  127. 0x80,0x60,0x00,0x00,0x00,0x00,0x10,0x20,0x22,0x22,0x1D,0x00,0x40,0x38,0x06,0x01,
  128. 0x00,0x00,0x04,0x0B,0x08,0x3F,0x28,0x00,0x02,0x02,0x02,0x02,0x02,0x00,0x31,0x22,
  129. 0x22,0x24,0x18,0x00,0x20,0x3F,0x22,0x02,0x01,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,
  130. };
  131. /**********************************************
  132. // Write Command
  133. **********************************************/
  134. void Write_Command(unsigned char RegisterName)
  135. {
  136.   R_D=1;       
  137.   CS=0;
  138.   DC=0;
  139.   DBL=RegisterName;
  140.   W_R=0;
  141.   W_R=1;
  142.   CS=1;
  143.   R_D=0;
  144. }

  145. /**********************************************
  146. // Write Data
  147. **********************************************/
  148. void Write_Data(unsigned char RegisterValue)
  149. {
  150.   R_D=1;
  151.   CS=0;
  152.   DC=1;
  153.   DBL=RegisterValue;
  154.   W_R=0;
  155.   W_R=1;
  156.   CS=1;
  157.   R_D=0;
  158. }
  159. /********************************************
  160. // fill_Picture
  161. ********************************************/
  162. void fill_picture(unsigned char fill_Data)
  163. {
  164.         unsigned char m,n;
  165.         for(m=0;m<8;m++)
  166.         {
  167.                 Write_Command(0xb0+m);                //page0-page1
  168.                 Write_Command(0x00);                //low column start address
  169.                 Write_Command(0x10);                //high column start address
  170.                 for(n=0;n<128;n++)
  171.                         {
  172.                                 Write_Data(fill_Data);
  173.                         }
  174.         }
  175. }
  176. /******************************************
  177. // picture
  178. ******************************************/
  179. void picture_1()
  180. {
  181.   unsigned char x,y;
  182.   unsigned int i=0;
  183.   for(y=0;y<8;y++)
  184.     {
  185.       Write_Command(0xb0+y);
  186.       Write_Command(0x00);
  187.       Write_Command(0x10);
  188.       for(x=0;x<128;x++)
  189.         {
  190.           Write_Data(show1[i++]);
  191.         }
  192.     }
  193. }
  194. /***********************Delay****************************************/
  195. void Delay_50ms(unsigned int Del_50ms)                //delay50ms
  196. {
  197.         unsigned int m;
  198.         for(;Del_50ms>0;Del_50ms--)
  199.                 for(m=6245;m>0;m--);
  200. }

  201. void Delay_1ms(unsigned int Del_1ms)                //delay1ms
  202. {
  203.         unsigned char j;
  204.         while(Del_1ms--)
  205.         {       
  206.                 for(j=0;j<123;j++);
  207.         }
  208. }
  209. /*******************************Main*******************************/
  210. void main(void)
  211. {
  212.         RES=0;
  213.         Delay_1ms(10);
  214.         RES=1;
  215.         Delay_1ms(10);
  216.         Initial_LY096BG30();
  217.         Delay_1ms(5);
  218.         R_D=1;
  219.         while(1)
  220.         {
  221.                 fill_picture(0xff);        Delay_50ms(40);
  222.                 fill_picture(0xf0);        Delay_50ms(40);
  223.                 Picture_1();                Delay_50ms(100);
  224.         }
  225. }

复制代码
回复 支持 反对

使用道具 举报

发表于 2012-4-14 10:36:57 | 显示全部楼层
thomas 发表于 2012-3-11 16:04
编辑帖子老出错。先说接线图。
由于OLED多工作于3.3v,因此为了匹配输入端电压,用了一块缓冲器CD4050.
介 ...

4050的1脚接5V?感觉不太对呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-4-14 10:55:30 | 显示全部楼层
本帖最后由 thomas 于 2012-4-14 10:57 编辑

应该对吧。我最近尝试在数据线串了100r电阻,工作正常

什么时候教教我烧mega8吧,调到天亮都没弄出来
回复 支持 反对

使用道具 举报

发表于 2012-4-14 12:16:36 | 显示全部楼层
哈哈我的最小系统还在理论阶段呢,准备在成品板上调试好了再研究
回复 支持 反对

使用道具 举报

发表于 2012-4-18 13:30:06 | 显示全部楼层
thomas 发表于 2012-4-14 10:55
应该对吧。我最近尝试在数据线串了100r电阻,工作正常

什么时候教教我烧mega8吧,调到天亮都没弄出来

128064也是接1脚,那岂不是5V给oled供电?
回复 支持 反对

使用道具 举报

发表于 2012-4-18 13:56:54 | 显示全部楼层
thomas 发表于 2012-4-14 10:55
应该对吧。我最近尝试在数据线串了100r电阻,工作正常

什么时候教教我烧mega8吧,调到天亮都没弄出来

mega8 的bootloader吗?这个弘毅不是写出来怎么烧了吗?还是什么问题!
回复 支持 反对

使用道具 举报

发表于 2012-4-18 14:02:33 | 显示全部楼层
8L也木问题。。。我改造了一个8L的。。。今天做完事情,明天补充个帖子。
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 17:21 , Processed in 0.047798 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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