标题: OLED屏驱动程序源码(各平台都有) 原理图 教程等资料下载 学习oled有这个就够了 [打印本页]

作者: wujing0    时间: 2017-4-22 19:55
标题: OLED屏驱动程序源码(各平台都有) 原理图 教程等资料下载 学习oled有这个就够了
学习oled这个就够了,oled单片机驱动源码版本V6.0-S13-SPI

原理图


下面这些平台的源码都有:


下面是例程都是有完整的源码(包含各种单片机及嵌入式系统的驱动源码):
(01)OLED_stm32 显示例程
(02)OLED_XS128 用PA0123
(03)OLED_K60演示
(04)OLED_STC&52
(05)OLED_LQ-XS128用PE2345
(06)OLED_XS128-SPI采用标准SPI总线
(07)OLED_demo52259正式版
(08)OLED_arduino_SPI_例程
(09)OLED_C51系列_SPI_例程
(10)OLED_MSP430系列_SPI_例程
(11)OLED_PIC系列_SPI_例程

资料还包含
OLED裸屏用户资料\
原理图\
取模软件\
程序例程\
OLED 模块 使用说明.pdf
字模软件的使用.pdf

下面是教程的部分内容截图:

资料包里面还有(各种屏的详细资料):
OLED开发设计说明-研发必读-100309(1).pdf
SAS1-9046-B UG-2864HSWEG01-Univision.pdf
SSD1306-Revision 1.1 (Charge Pump).pdf
UG-2864HSWEG01 Drawing - 090120B.pdf
UG-2864HSWEG01 user guide.pdf

下面分享个stm32单片机的源码:

1、该代码已经经过实测验证OK
2、单片机采有stm32f103zevt
3、晶振为8M,总线时钟为24M(/* PLLCLK = 8MHz / 2 * 6 = 24 MHz */),若你的环境与该代码不一样,请自行修改spi通信部分延时
4、管脚定义:
//-----------------OLED端口定义----------------                                             

#define LCD_SCL_CLR()        GPIO_ResetBits(GPIOB,GPIO_Pin_1)
#define LCD_SCL_SET()        GPIO_SetBits(GPIOB,GPIO_Pin_1)

#define LCD_SDA_CLR()        GPIO_ResetBits(GPIOB,GPIO_Pin_2)
#define LCD_SDA_SET()        GPIO_SetBits(GPIOB,GPIO_Pin_2)

#define LCD_RST_CLR()        GPIO_ResetBits(GPIOB,GPIO_Pin_3)
#define LCD_RST_SET()        GPIO_SetBits(GPIOB,GPIO_Pin_3)

#define LCD_DC_CLR()        GPIO_ResetBits(GPIOB,GPIO_Pin_4)
#define LCD_DC_SET()        GPIO_SetBits(GPIOB,GPIO_Pin_4)

5、电路连接:
VCC接3.3V,IO口直接单片机,不需要上拉电阻或串联电阻

6、程序如果没有调通,液晶是无显示的,也就是黑屏,请耐心调试,有疑问可以跟我们联系,谢谢
  1. /*OLED底层驱动
  2. *@采用列行式,分辨率为128*64
  3. *存放格式如下.
  4. *[0]0 1 2 3 ... 127        
  5. *[1]0 1 2 3 ... 127        
  6. *[2]0 1 2 3 ... 127        
  7. *[3]0 1 2 3 ... 127        
  8. *[4]0 1 2 3 ... 127        
  9. *[5]0 1 2 3 ... 127        
  10. *[6]0 1 2 3 ... 127        
  11. *[7]0 1 2 3 ... 127
  12. */
  13. #include "stm32f10x_lib.h"
  14. #include "stdlib.h"
  15. #include "userinc/OLED.h"



  16. #define XLevelL                0x00
  17. #define XLevelH                0x10
  18. #define XLevel                ((XLevelH&0x0F)*16+XLevelL)
  19. #define Max_Column        128
  20. #define Max_Row                  64
  21. #define        Brightness        0xCF


  22. #define X_WIDTH 128
  23. #define Y_WIDTH 64
  24. //======================================
  25. const u8 F6x8[] =
  26. {
  27.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ,   // sp
  28.     …………限于本文篇幅 字库请从51黑电子论坛下载附件…………
  29.     0x14, 0x14, 0x14, 0x14, 0x14, 0x14     // horiz lines
  30. };

  31. const u8 F16x16_Idx[] =
  32. {
  33.         "测距离周长面积度高坡亩仪搜索卫星大小查记录删除系统值设单价公顷元询每电池压经纬°㎡型号版本剩余空间返回退出"
  34. };

  35. const u8 F16x16[] =
  36. {
  37.         0x10,0x60,0x02,0x8C,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0xFF,0x00,0x00,
  38.         0x04,0x04,0x7E,0x01,0x80,0x47,0x30,0x0F,0x10,0x27,0x00,0x47,0x80,0x7F,0x00,0x00,//测0,
  39.         …………限于本文篇幅 字库请从51黑电子论坛下载附件…………

  40. };
  41. //======================================================
  42. // 128X64I液晶底层驱动[8X16]字体库
  43. // 设计者: powerint
  44. // 描  述: [8X16]西文字符的字模数据 (纵向取模,字节倒序)
  45. // !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
  46. //======================================================
  47. const u8 F8X16[]=
  48. {
  49.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
  50.         0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//!1
  51.         …………限于本文篇幅 字库请从51黑电子论坛下载附件…………

  52. };
  53. /* 生成实心菱形图标的16*16点阵*/
  54. const u8 nonside[] =
  55. {
  56.         0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,
  57.         0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,//◆0,
  58. };

  59. void LCD_WrDat(u8 data)
  60. {
  61.         u8 i=8;
  62.         //LCD_CS=0;;
  63.         LCD_DC_SET();
  64.   LCD_SCL_CLR();
  65.   //asm("nop");   
  66.   while(i--)
  67.   {
  68.     if(data&0x80){LCD_SDA_SET();}
  69.     else{LCD_SDA_CLR();}
  70.     LCD_SCL_SET();
  71.     //asm("nop");;
  72.                 //asm("nop");            
  73.     LCD_SCL_CLR();   
  74.     data<<=1;   
  75.   }
  76.         //LCD_CS=1;
  77. }
  78. void LCD_WrCmd(u8 cmd)
  79. {
  80.         u8 i=8;
  81.         
  82.         //LCD_CS=0;;
  83.         LCD_DC_CLR();
  84.   LCD_SCL_CLR();
  85.   //asm("nop");   
  86.   while(i--)
  87.   {
  88.     if(cmd&0x80){LCD_SDA_SET();}
  89.     else{LCD_SDA_CLR();}
  90.     LCD_SCL_SET();
  91.     //asm("nop");;
  92.                 //asm("nop");            
  93.     LCD_SCL_CLR();   
  94.     cmd<<=1;;   
  95.   }         
  96.         //LCD_CS=1;
  97. }

  98. /*设置起始地址
  99. *Y轴是按8格递进的,y轴0~63,只能按8格的倍数显示,
  100. *因为列行式只能按8个字节进行
  101. */
  102. void LCD_Set_Pos(u8 x, u8 y)
  103. {
  104.   LCD_WrCmd(0xb0+(y>>3));
  105.   LCD_WrCmd(((x&0xf0)>>4)|0x10);
  106.   LCD_WrCmd((x&0x0f)|0x01);
  107. }
  108. void LCD_Fill(u8 bmp_data)
  109. {
  110.         u8 y,x;
  111.         
  112.         for(y=0;y<8;y++)
  113.         {
  114.                 LCD_WrCmd(0xb0+y);
  115.                 LCD_WrCmd(0x01);
  116.                 LCD_WrCmd(0x10);
  117.                 for(x=0;x<X_WIDTH;x++)
  118.                         LCD_WrDat(bmp_data);
  119.         }
  120. }
  121. void LCD_CLS(void)
  122. {
  123.         u8 y,x;        
  124.         for(y=0;y<8;y++)
  125.         {
  126.                 LCD_WrCmd(0xb0+y);
  127.                 LCD_WrCmd(0x01);
  128.                 LCD_WrCmd(0x10);
  129.                 for(x=0;x<X_WIDTH;x++)
  130.                         LCD_WrDat(0);
  131.         }
  132. }
  133. //清除一行0-63
  134. void LCD_CLS_y(char y)
  135. {
  136.         u8 x;        
  137.         
  138.         LCD_WrCmd(0xb0+(y>>3));
  139.         LCD_WrCmd(0x01);
  140.         LCD_WrCmd(0x10);
  141.         for(x=0;x<X_WIDTH;x++)
  142.         {
  143.                 LCD_WrDat(0);
  144.         }
  145.         
  146. }

  147. //清除一行上的一块区域y=0-63
  148. void LCD_CLS_line_area(u8 start_x,u8 start_y,u8 width)
  149. {
  150.         u8 x;        
  151.         
  152.         LCD_WrCmd(0xb0+(start_y>>3));
  153.         LCD_WrCmd(0x01);
  154.         LCD_WrCmd(0x10);
  155.         for(x=start_x;x<width;x++)
  156.         {
  157.                 LCD_WrDat(0);
  158.         }
  159.         
  160. }


  161. void LCD_DLY_ms(u16 ms)
  162. {                        
  163.   u16 a;
  164.   while(ms)
  165.   {
  166.     a=1335;
  167.     while(a--);
  168.     ms--;
  169.   }
  170.   return;
  171. }

  172. void LCD_Init(void)        
  173. {
  174.   //DDRA=0XFF;
  175.   
  176.         LCD_SCL_SET();
  177.         //LCD_CS=1;        //预制SLK和SS为高电平           
  178.         
  179.         LCD_RST_CLR();
  180.         LCD_DLY_ms(50);
  181.         LCD_RST_SET();

  182.   LCD_WrCmd(0xae);//--turn off oled panel
  183.   LCD_WrCmd(0x00);//---set low column address
  184.   LCD_WrCmd(0x10);//---set high column address
  185.   LCD_WrCmd(0x40);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
  186.   LCD_WrCmd(0x81);//--set contrast control register
  187.   LCD_WrCmd(0xcf); // Set SEG Output Current Brightness
  188.   LCD_WrCmd(0xa1);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
  189.   LCD_WrCmd(0xc8);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常
  190.   LCD_WrCmd(0xa6);//--set normal display
  191.   LCD_WrCmd(0xa8);//--set multiplex ratio(1 to 64)
  192.   LCD_WrCmd(0x3f);//--1/64 duty
  193.   LCD_WrCmd(0xd3);//-set display offset        Shift Mapping RAM Counter (0x00~0x3F)
  194.   LCD_WrCmd(0x00);//-not offset
  195.   LCD_WrCmd(0xd5);//--set display clock divide ratio/oscillator frequency
  196.   LCD_WrCmd(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec
  197.   LCD_WrCmd(0xd9);//--set pre-charge period
  198.   LCD_WrCmd(0xf1);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
  199.   LCD_WrCmd(0xda);//--set com pins hardware configuration
  200.   LCD_WrCmd(0x12);
  201.   LCD_WrCmd(0xdb);//--set vcomh
  202.   LCD_WrCmd(0x40);//Set VCOM Deselect Level
  203.   LCD_WrCmd(0x20);//-Set Page Addressing Mode (0x00/0x01/0x02)
  204.   LCD_WrCmd(0x02);//
  205.   LCD_WrCmd(0x8d);//--set Charge Pump enable/disable
  206.   LCD_WrCmd(0x14);//--set(0x10) disable
  207.   LCD_WrCmd(0xa4);// Disable Entire Display On (0xa4/0xa5)
  208.   LCD_WrCmd(0xa6);// Disable Inverse Display On (0xa6/a7)
  209.   LCD_WrCmd(0xaf);//--turn on oled panel
  210.   LCD_Fill(0x00);  //初始清屏
  211.   LCD_Set_Pos(0,0);  
  212.         
  213. }
  214. //==============================================================
  215. //函数名: void LCD_PutPixel(u8 x,u8 y)
  216. //功能描述:绘制一个点(x,y)
  217. //参数:真实坐标值(x,y),x的范围0~127,y的范围0~64
  218. //返回:无
  219. //==============================================================
  220. void LCD_PutPixel(u8 x,u8 y)
  221. {
  222.         u8 data1;  //data1当前点的数据
  223.          
  224.     //LCD_Set_Pos(x,y);
  225.         data1 = 0x01<<(y%8);         
  226.         LCD_WrCmd(0xb0+(y>>3));
  227.         LCD_WrCmd(((x&0xf0)>>4)|0x10);
  228.         LCD_WrCmd((x&0x0f)|0x00);
  229.         LCD_WrDat(data1);                  
  230. }
  231. //==============================================================
  232. //函数名: void LCD_Put_Column(u8 x,u8 y,u8 data)
  233. //功能描述:操作一列显示,一列全显示0XFF,清除一列0X00;
  234. //参数:真实坐标值(x,y),x的范围0~127,y的范围0~64
  235. //返回:无
  236. //==============================================================
  237. void LCD_Put_Column(u8 x,u8 y,u8 data)
  238. {        
  239.         LCD_WrCmd(0xb0+(y>>3));
  240.         LCD_WrCmd(((x&0xf0)>>4)|0x10);
  241.         LCD_WrCmd((x&0x0f)|0x00);
  242.         LCD_WrDat(data);                  
  243. }


  244. //==============================================================
  245. //函数名: void LCD_Rectangle(u8 x1,u8 y1,
  246. //                   u8 x2,u8 y2,u8 color,u8 gif)
  247. //功能描述:绘制一个实心矩形


  248.                   

  249. …………限于本文篇幅 完整源码请从51黑论坛下载附件…………

复制代码

全部资料下载:
V6.0-S13-SPI.rar (13.28 MB, 下载次数: 867)


作者: lyl_420819    时间: 2017-4-24 21:01
好资料,下载学习。谢了。
作者: lyl_420819    时间: 2017-4-24 21:02
下载学习,谢了。
作者: 单片机讨论者    时间: 2017-6-1 21:43
为什么我刷一次屏要20ms?
作者: ZHANGJING_ZJ    时间: 2017-6-2 08:47
超详细!
作者: alala2643    时间: 2017-6-13 09:41
楼主威武。谢谢
作者: middfat    时间: 2017-6-14 10:36
好资料,收藏收藏!
作者: GUS777    时间: 2017-6-16 14:28
谢谢分享,正在学习OLED
作者: wyx99727101    时间: 2017-7-4 01:50
谢谢分享 ,正好在研究OLED  受用了
作者: HWL0541    时间: 2017-7-4 10:26
黑币扣了电脑出问题了,没有下载下来IE闪退了
作者: 风清扬0375    时间: 2017-7-5 21:23
不错,就看看究竟
作者: ztf1873625    时间: 2017-7-29 11:58
谢楼主
作者: zb02373    时间: 2017-7-30 21:22
太感谢了!谢谢分享!
作者: neilperry    时间: 2017-8-8 11:13
垃圾,PIC的程序打开后居然看到
#include "reg52.h"
#include<intrins.h>
#define high 1
#define low 0
/*************Pin Define***************/
sbit RES=P1^2;
sbit DC=P1^3;
sbit SCL=P1^0;
sbit SDA=P1^1;
/****************************************************/
void Initial_LY096BG30();
void Delay_50ms(unsigned int Del_
作者: yqwzb1014    时间: 2017-8-30 18:14
谢了,学习学习
作者: 北极光2015    时间: 2017-10-14 22:30
收藏OLED驱动
作者: yuyuzj    时间: 2017-10-21 23:00
不错了
作者: libohao85    时间: 2017-11-1 01:56
好人啊,最近弄了块屏正在研究怎么点亮呢。谢谢了。
作者: xwnc    时间: 2017-11-8 18:35
楼主太强了,学习学习
作者: jxdianqi    时间: 2017-11-12 17:47
这个值得收藏,谢谢啦
作者: A17094430    时间: 2017-11-13 21:02
好文章,收下学习
作者: 哈哈哈哈1211    时间: 2017-11-19 02:12
好人啊,解决难题,每个函数都可以用
作者: HWL0541    时间: 2017-11-20 08:52
谢谢斑竹,给的补偿
作者: laoshiyuan    时间: 2017-11-23 23:13
好资料,学习下……
作者: 梁鸿飞    时间: 2017-11-25 14:14
学习一下,谢谢

作者: felix_tao    时间: 2017-11-26 12:23
谢谢分享,区域清除是不是有问题啊?起始地址是不是要加上start_x
作者: leo121    时间: 2017-12-1 15:02
好资料,下载学习。谢了。
作者: robter    时间: 2017-12-6 08:27
很好的资料,感谢楼主
作者: katty    时间: 2017-12-7 20:21
很不错。
作者: wangd6658    时间: 2017-12-11 14:57
谢谢,非常给力
作者: xiaojia    时间: 2017-12-11 21:20
谢谢啦   
作者: O_and_L    时间: 2017-12-13 16:48

好资料,下载学习。谢了。
作者: O_and_L    时间: 2017-12-13 16:49
感谢楼主分享 !!!!
作者: dhii1234    时间: 2017-12-14 15:59
谢谢分享,正在学习
作者: 269698226    时间: 2017-12-25 15:42
下载不了,坑了我10黑币了

作者: 15796245    时间: 2017-12-25 18:12
学习了 谢谢
作者: genwar    时间: 2017-12-26 11:49
正在学习,收下了
作者: tieq1952    时间: 2017-12-26 14:48
谢谢分享,正在学习
作者: wuxishun    时间: 2017-12-27 22:15
收下再学习了
作者: 520meinv    时间: 2018-1-9 10:46
楼主威武

作者: nizhendeshiyige    时间: 2018-1-16 12:17
下载了,一定好好学习,谢了!
作者: dhii1234    时间: 2018-1-16 21:26
楼主威武。谢谢
作者: burstonthewing    时间: 2018-1-17 09:44
正需要这个东西学习一下OLED原理,多谢多谢
作者: burstonthewing    时间: 2018-1-17 09:45
好资料,下载学习。谢了。
作者: LCY30520    时间: 2018-1-18 14:51
很有用,已学习
作者: 865802820    时间: 2018-1-22 09:01
好资料,谢谢了
作者: 一缕清辉    时间: 2018-1-22 14:10
感谢楼主分享!
作者: pp1234ll    时间: 2018-1-29 16:13

谢谢分享,正在学习OLED
作者: 混沌未开    时间: 2018-2-20 11:22
谢谢,好资料,下载学习
作者: 嗨电子    时间: 2018-3-30 11:49
谢谢楼主
作者: yubo2007    时间: 2018-4-13 08:59
好资料,收藏收藏!
作者: yuhud    时间: 2018-4-25 15:18
资料很不错
作者: 太阳黑子1    时间: 2018-5-21 15:39
实在是太好了!
作者: Road    时间: 2018-5-26 16:20
谢谢楼主分享
作者: TKJT    时间: 2018-6-4 07:38
感谢分享
作者: xiebaichao    时间: 2018-6-6 20:28
谢谢楼主,福报无量
作者: lucksonli    时间: 2018-6-20 15:07
好资料,下载
作者: lucksonli    时间: 2018-6-20 15:07

谢谢楼主分享
作者: 弹丸大哥    时间: 2018-6-20 17:03
非常感谢楼主分享
作者: keneng    时间: 2018-6-25 17:07
这个也是我要用到的,记号一下先。
作者: 星星snow    时间: 2018-7-11 08:54
围观学习下
作者: lxsbb    时间: 2018-7-11 14:49
32的程序编译为啥不成功
作者: dvxchen    时间: 2018-7-16 10:37
请问有BCP板源文件吗
作者: a574637947    时间: 2018-7-18 09:48
资料很全 下载试试
作者: vision7    时间: 2018-7-18 14:44
正好工作需要学习yi'xia
作者: tnhbsr    时间: 2018-8-21 22:58
楼主太强了,学习学习
作者: lany    时间: 2018-8-22 12:38
不错的资料,下载了好好学习
作者: 杨海健    时间: 2018-10-22 17:32
感谢 先下为敬~
作者: csy010101    时间: 2018-10-22 21:15
我也有用到 感谢分享!!
作者: 明记冷气    时间: 2018-11-2 03:32
学习了
作者: leiyongzhe    时间: 2018-11-2 21:24
学习了!!!!!!
作者: wxyz    时间: 2018-11-4 17:54
非常感谢楼主分享的资料。
作者: 这一生只为你    时间: 2018-11-5 20:17
非常好的资料。感谢楼主分享!!!
作者: zhongxing138    时间: 2018-11-10 09:48
有新唐 N76E003的例程吗
作者: xtz333    时间: 2018-12-18 15:18
学习学习
作者: xtz333    时间: 2018-12-18 15:19
楼主威武,下来学习一下
作者: ifree8    时间: 2019-1-22 11:05
这么好的资料!
作者: yuren1984    时间: 2019-1-22 14:50
51  SPI程序编译的时候为什么会提示
Program Size: data=20.0 xdata=0 code=5840
LINK/LOCATE RUN COMPLETE.  2 WARNING(S),  0 ERROR(S)
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?OLED_DISPLAY_ON?OLED
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?OLED_DISPLAY_OFF?OLED
*** FATAL ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED
    MODULE:  D:\KEIL\C51\LIB\C51S.LIB (-----)
    LIMIT:   0800H BYTES
Target not created
作者: oozhimeng    时间: 2019-3-11 18:15
好资料,好想下载下来,可是我没有积分
作者: crabnar    时间: 2019-3-17 14:59
感谢分享
作者: lf8013    时间: 2019-4-11 08:34
收下再学习了,谢谢分享,可惜是SPI的,如果是IIC的就好了
作者: 温xyz    时间: 2019-4-24 00:07
谢谢分享,楼主大好人。
作者: fhf990316    时间: 2019-5-6 08:38
正好在用oled试试,谢谢楼主
作者: dlwlrma111    时间: 2019-7-20 15:59
看起来很不错
作者: sad520ljh    时间: 2019-7-22 23:20
???还我黑币?怎么跟描述的不一样啊,程序是软件iic?而且是复制LCD的,连函数名字都不改一下吗
作者: jxchen    时间: 2019-11-10 21:15
很好~~~~~~~~~~~~~~~
作者: wanglx    时间: 2020-4-13 18:17
资料很多,楼主辛苦
作者: LGH850    时间: 2021-9-15 13:53
PIC的OLED屏资料不好找才下的,里面是51内核的,文件夹写的是PIC,打开里面是51的!//******************************************************************************/ #include "reg52.h" #include<intrins.h> #define high 1 #define low 0  /*************Pin Define***************/ sbit RES=P1^2; sbit DC=P1^3; sbit SCL=P1^0; sbit SDA=P1^1; /****************************************************/ void Initial_LY096BG30(); void Delay_50ms(unsigned int Del_50ms); void Delay_1ms(unsigned int Del_1ms); void fill_picture(unsigned char fill_Data); void Picture_1(); void Write_SPI_Command(unsigned char ucCmd); void Write_SPI_Data(unsigned char ucData); /***********************Initial code*********************/ void Initial_LY096BG30() {
作者: GEECGYJ    时间: 2022-2-10 20:38
这个比较适用,下载试用下,谢谢!!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1