找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 57079|回复: 88
收起左侧

OLED屏驱动程序源码(各平台都有) 原理图 教程等资料下载 学习oled有这个就够了

  [复制链接]
ID:189621 发表于 2017-4-22 19:55 | 显示全部楼层 |阅读模式
学习oled这个就够了,oled单片机驱动源码版本V6.0-S13-SPI
0.png
原理图
0.png

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

0.png
下面是例程都是有完整的源码(包含各种单片机及嵌入式系统的驱动源码):
(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

下面是教程的部分内容截图:
0.png 0.png 0.png 0.png
资料包里面还有(各种屏的详细资料):
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)

评分

参与人数 8黑币 +60 收起 理由
sad520ljh + 18 绝世好帖!
ghostjiang_78 + 5 绝世好帖!
lzp17771832625 + 5 共享资料的黑币奖励!
tieq1952 + 8 共享资料的黑币奖励!
飞飞猪 + 9 共享资料的黑币奖励!
LYC666 + 5 很给力!
tina242forever + 5 很给力!
darkly5251 + 5 绝世好帖!

查看全部评分

回复

使用道具 举报

ID:160506 发表于 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_
回复

使用道具 举报

ID:439460 发表于 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
回复

使用道具 举报

ID:475993 发表于 2019-7-22 23:20 | 显示全部楼层
???还我黑币?怎么跟描述的不一样啊,程序是软件iic?而且是复制LCD的,连函数名字都不改一下吗
回复

使用道具 举报

ID:64765 发表于 2017-4-24 21:01 | 显示全部楼层
好资料,下载学习。谢了。
回复

使用道具 举报

ID:64765 发表于 2017-4-24 21:02 | 显示全部楼层
下载学习,谢了。
回复

使用道具 举报

ID:206664 发表于 2017-6-1 21:43 来自手机 | 显示全部楼层
为什么我刷一次屏要20ms?
回复

使用道具 举报

ID:206954 发表于 2017-6-2 08:47 | 显示全部楼层
超详细!
回复

使用道具 举报

ID:68719 发表于 2017-6-13 09:41 | 显示全部楼层
楼主威武。谢谢
回复

使用道具 举报

ID:3212 发表于 2017-6-14 10:36 | 显示全部楼层
好资料,收藏收藏!
回复

使用道具 举报

ID:211851 发表于 2017-6-16 14:28 | 显示全部楼层
谢谢分享,正在学习OLED
回复

使用道具 举报

ID:216952 发表于 2017-7-4 01:50 | 显示全部楼层
谢谢分享 ,正好在研究OLED  受用了
回复

使用道具 举报

ID:91165 发表于 2017-7-4 10:26 | 显示全部楼层
黑币扣了电脑出问题了,没有下载下来IE闪退了

评分

参与人数 1黑币 +30 收起 理由
admin + 30 补偿

查看全部评分

回复

使用道具 举报

ID:217481 发表于 2017-7-5 21:23 | 显示全部楼层
不错,就看看究竟
回复

使用道具 举报

ID:206167 发表于 2017-7-29 11:58 | 显示全部楼层
谢楼主
回复

使用道具 举报

ID:153917 发表于 2017-7-30 21:22 | 显示全部楼层
太感谢了!谢谢分享!
回复

使用道具 举报

ID:220174 发表于 2017-8-30 18:14 | 显示全部楼层
谢了,学习学习
回复

使用道具 举报

ID:91378 发表于 2017-10-14 22:30 | 显示全部楼层
收藏OLED驱动
回复

使用道具 举报

ID:147587 发表于 2017-10-21 23:00 | 显示全部楼层
不错了
回复

使用道具 举报

ID:150856 发表于 2017-11-1 01:56 | 显示全部楼层
好人啊,最近弄了块屏正在研究怎么点亮呢。谢谢了。
回复

使用道具 举报

ID:246166 发表于 2017-11-8 18:35 | 显示全部楼层
楼主太强了,学习学习
回复

使用道具 举报

ID:196311 发表于 2017-11-12 17:47 | 显示全部楼层
这个值得收藏,谢谢啦
回复

使用道具 举报

ID:183763 发表于 2017-11-13 21:02 | 显示全部楼层
好文章,收下学习
回复

使用道具 举报

ID:250950 发表于 2017-11-19 02:12 | 显示全部楼层
好人啊,解决难题,每个函数都可以用
回复

使用道具 举报

ID:91165 发表于 2017-11-20 08:52 | 显示全部楼层
谢谢斑竹,给的补偿
回复

使用道具 举报

ID:252894 发表于 2017-11-23 23:13 | 显示全部楼层
好资料,学习下……
回复

使用道具 举报

ID:88406 发表于 2017-11-25 14:14 | 显示全部楼层
学习一下,谢谢
回复

使用道具 举报

ID:253710 发表于 2017-11-26 12:23 | 显示全部楼层
谢谢分享,区域清除是不是有问题啊?起始地址是不是要加上start_x
回复

使用道具 举报

ID:253898 发表于 2017-12-1 15:02 | 显示全部楼层
好资料,下载学习。谢了。
回复

使用道具 举报

ID:47634 发表于 2017-12-6 08:27 | 显示全部楼层
很好的资料,感谢楼主
回复

使用道具 举报

ID:258801 发表于 2017-12-7 20:21 | 显示全部楼层
很不错。
回复

使用道具 举报

ID:260185 发表于 2017-12-11 14:57 | 显示全部楼层
谢谢,非常给力
回复

使用道具 举报

ID:228697 发表于 2017-12-11 21:20 | 显示全部楼层
谢谢啦   
回复

使用道具 举报

ID:74618 发表于 2017-12-13 16:48 | 显示全部楼层

好资料,下载学习。谢了。
回复

使用道具 举报

ID:74618 发表于 2017-12-13 16:49 | 显示全部楼层
感谢楼主分享 !!!!
回复

使用道具 举报

ID:86020 发表于 2017-12-14 15:59 | 显示全部楼层
谢谢分享,正在学习
回复

使用道具 举报

ID:266551 发表于 2017-12-25 15:42 | 显示全部楼层
下载不了,坑了我10黑币了

评分

参与人数 1黑币 +50 收起 理由
admin + 50 等一下,刚可能是下的人多 服务停止了

查看全部评分

回复

使用道具 举报

ID:250287 发表于 2017-12-25 18:12 | 显示全部楼层
学习了 谢谢
回复

使用道具 举报

ID:265293 发表于 2017-12-26 11:49 | 显示全部楼层
正在学习,收下了
回复

使用道具 举报

ID:253767 发表于 2017-12-26 14:48 | 显示全部楼层
谢谢分享,正在学习
回复

使用道具 举报

ID:243748 发表于 2017-12-27 22:15 来自手机 | 显示全部楼层
收下再学习了
回复

使用道具 举报

ID:273635 发表于 2018-1-9 10:46 | 显示全部楼层
楼主威武
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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