找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 26051|回復: 30
打印 上一主題 下一主題
收起左側

IIC-OLED顯示屏資料(SSD1306) 用51單片機和stm32 Arduino驅(qū)動oled的例程

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:164476 發(fā)表于 2017-2-13 16:57 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
里面還有stm32的例程.


IIC方式的OLED顯示屏資料(SSD1306),里面有 用51單片機和stm32單片機還有Arduino驅(qū)動oled的例程:
IIC-OLED顯示屏資料(SSD1306).rar (7.84 MB, 下載次數(shù): 793)

部分程序預覽51的:
  1. /************************************************************************************
  2. *  Copyright (c), 2013, HelTec Automatic Technology co.,LTD.
  3. *            All rights reserved.
  4. * Email:   cn.heltec@gmail.com
  5. * WebShop: heltec.taobao.com
  6. *
  7. * File name: LQ12864.h
  8. * Project  : OLED
  9. * Processor: STC89C52
  10. * Compiler : Keil C51 Compiler
  11. *
  12. * Author : 小林
  13. * Version: 1.00
  14. * Date   : 2013.8.8
  15. * Email  : hello14blog@gmail.com
  16. * Modification: none
  17. *
  18. * Description:128*64點整OLED模塊驅(qū)動文件
  19. *
  20. * Others: none;
  21. *
  22. * Function List:
  23. *
  24. * 1. void delay(unsigned int z) -- 延時函數(shù),毫秒
  25. * 2. void IIC_Start() -- 開啟I2C總線
  26. * 3. void IIC_Stop() -- 關閉I2C總線
  27. * 4. void Write_IIC_Byte(unsigned char IIC_Byte) -- 通過I2C總線寫一個byte的數(shù)據(jù)
  28. * 5. void OLED_WrDat(unsigned char dat) -- 向OLED屏寫數(shù)據(jù)
  29. * 6. void OLED_WrCmd(unsigned char cmd) -- 向OLED屏寫命令
  30. * 7. void OLED_Set_Pos(unsigned char x, unsigned char y) -- 設置顯示坐標
  31. * 8. void OLED_Fill(unsigned char bmp_dat) -- 全屏顯示(顯示BMP圖片時才會用到此功能)
  32. * 9. void OLED_CLS(void) -- 復位/清屏
  33. * 10. void OLED_Init(void) -- OLED屏初始化程序,此函數(shù)應在操作屏幕之前最先調(diào)用
  34. * 11. void OLED_P6x8Str(unsigned char x, y,unsigned char ch[]) -- 6x8點整,用于顯示ASCII碼的最小陣列,不太清晰
  35. * 12. void OLED_P8x16Str(unsigned char x, y,unsigned char ch[]) -- 8x16點整,用于顯示ASCII碼,非常清晰
  36. * 13.void OLED_P16x16Ch(unsigned char x, y, N) -- 16x16點整,用于顯示漢字的最小陣列,可設置各種字體、加粗、傾斜、下劃線等
  37. * 14.void Draw_BMP(unsigned char x0, y0,x1, y1,unsigned char BMP[]) -- 將128x64像素的BMP位圖在取字軟件中算出字表,然后復制到codetab中,此函數(shù)調(diào)用即可
  38. *
  39. * History: none;
  40. *
  41. *************************************************************************************/

  42. #include "reg51.h"

  43. // ------------------------------------------------------------
  44. // IO口模擬I2C通信
  45. // SCL接P1^3
  46. // SDA接P1^2
  47. // ------------------------------------------------------------
  48. sbit SCL=P1^1; //串行時鐘
  49. sbit SDA=P1^0; //串行數(shù)據(jù)

  50. #define high 1
  51. #define low 0

  52. #define        Brightness        0xCF
  53. #define X_WIDTH         128
  54. #define Y_WIDTH         64
  55. /*********************OLED驅(qū)動程序用的延時程序************************************/
  56. void delay(unsigned int z)
  57. {
  58.         unsigned int x,y;
  59.         for(x=z;x>0;x--)
  60.                 for(y=110;y>0;y--);
  61. }

  62. /**********************************************
  63. //IIC Start
  64. **********************************************/
  65. void IIC_Start()
  66. {
  67.    SCL = high;               
  68.    SDA = high;
  69.    SDA = low;
  70.    SCL = low;
  71. }

  72. /**********************************************
  73. //IIC Stop
  74. **********************************************/
  75. void IIC_Stop()
  76. {
  77.    SCL = low;
  78.    SDA = low;
  79.    SCL = high;
  80.    SDA = high;
  81. }

  82. /**********************************************
  83. // 通過I2C總線寫一個字節(jié)
  84. **********************************************/
  85. void Write_IIC_Byte(unsigned char IIC_Byte)
  86. {
  87.         unsigned char i;
  88.         for(i=0;i<8;i++)
  89.         {
  90.                 if(IIC_Byte & 0x80)
  91.                         SDA=high;
  92.                 else
  93.                         SDA=low;
  94.                 SCL=high;
  95.                 SCL=low;
  96.                 IIC_Byte<<=1;
  97.         }
  98.         SDA=1;
  99.         SCL=1;
  100.         SCL=0;
  101. }

  102. /*********************OLED寫數(shù)據(jù)************************************/
  103. void OLED_WrDat(unsigned char IIC_Data)
  104. {
  105.         IIC_Start();
  106.         Write_IIC_Byte(0x78);
  107.         Write_IIC_Byte(0x40);                        //write data
  108.         Write_IIC_Byte(IIC_Data);
  109.         IIC_Stop();
  110. }
  111. /*********************OLED寫命令************************************/
  112. void OLED_WrCmd(unsigned char IIC_Command)
  113. {
  114.         IIC_Start();
  115.         Write_IIC_Byte(0x78);            //Slave address,SA0=0
  116.         Write_IIC_Byte(0x00);                        //write command
  117.         Write_IIC_Byte(IIC_Command);
  118.         IIC_Stop();
  119. }
  120. /*********************OLED 設置坐標************************************/
  121. void OLED_Set_Pos(unsigned char x, unsigned char y)
  122. {
  123.         OLED_WrCmd(0xb0+y);
  124.         OLED_WrCmd(((x&0xf0)>>4)|0x10);
  125.         OLED_WrCmd((x&0x0f)|0x01);
  126. }
  127. /*********************OLED全屏************************************/
  128. void OLED_Fill(unsigned char bmp_dat)
  129. {
  130.         unsigned char y,x;
  131.         for(y=0;y<8;y++)
  132.         {
  133.                 OLED_WrCmd(0xb0+y);
  134.                 OLED_WrCmd(0x01);
  135.                 OLED_WrCmd(0x10);
  136.                 for(x=0;x<X_WIDTH;x++)
  137.                 OLED_WrDat(bmp_dat);
  138.         }
  139. }
  140. /*********************OLED復位************************************/
  141. void OLED_CLS(void)
  142. {
  143.         unsigned char y,x;
  144.         for(y=0;y<8;y++)
  145.         {
  146.                 OLED_WrCmd(0xb0+y);
  147.                 OLED_WrCmd(0x01);
  148.                 OLED_WrCmd(0x10);
  149.                 for(x=0;x<X_WIDTH;x++)
  150.                 OLED_WrDat(0);
  151.         }
  152. }
  153. /*********************OLED初始化************************************/
  154. void OLED_Init(void)
  155. {
  156.         delay(500);//初始化之前的延時很重要!
  157.         OLED_WrCmd(0xae);//--turn off oled panel
  158.         OLED_WrCmd(0x00);//---set low column address
  159.         OLED_WrCmd(0x10);//---set high column address
  160.         OLED_WrCmd(0x40);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
  161.         OLED_WrCmd(0x81);//--set contrast control register
  162.         OLED_WrCmd(Brightness); // Set SEG Output Current Brightness
  163.         OLED_WrCmd(0xa0);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
  164.         OLED_WrCmd(0xc0);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常
  165.         OLED_WrCmd(0xa6);//--set normal display
  166.         OLED_WrCmd(0xa8);//--set multiplex ratio(1 to 64)
  167.         OLED_WrCmd(0x3f);//--1/64 duty
  168.         OLED_WrCmd(0xd3);//-set display offset        Shift Mapping RAM Counter (0x00~0x3F)
  169.         OLED_WrCmd(0x00);//-not offset
  170.         OLED_WrCmd(0xd5);//--set display clock divide ratio/oscillator frequency
  171.         OLED_WrCmd(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec
  172.         OLED_WrCmd(0xd9);//--set pre-charge period
  173.         OLED_WrCmd(0xf1);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
  174.         OLED_WrCmd(0xda);//--set com pins hardware configuration
  175.         OLED_WrCmd(0x12);
  176.         OLED_WrCmd(0xdb);//--set vcomh
  177.         OLED_WrCmd(0x40);//Set VCOM Deselect Level
  178.         OLED_WrCmd(0x20);//-Set Page Addressing Mode (0x00/0x01/0x02)
  179.         OLED_WrCmd(0x02);//
  180.         OLED_WrCmd(0x8d);//--set Charge Pump enable/disable
  181.         OLED_WrCmd(0x14);//--set(0x10) disable
  182.         OLED_WrCmd(0xa4);// Disable Entire Display On (0xa4/0xa5)
  183.         OLED_WrCmd(0xa6);// Disable Inverse Display On (0xa6/a7)
  184.         OLED_WrCmd(0xaf);//--turn on oled panel
  185.         OLED_Fill(0x00); //初始清屏
  186.         OLED_Set_Pos(0,0);
  187. }
  188. /***************功能描述:顯示6*8一組標準ASCII字符串        顯示的坐標(x,y),y為頁范圍0~7****************/
  189. void OLED_P6x8Str(unsigned char x, y,unsigned char ch[])
  190. {
  191.         unsigned char c=0,i=0,j=0;
  192.         while (ch[j]!='\0')
  193.         {
  194.                 c =ch[j]-32;
  195.                 if(x>126){x=0;y++;}
  196.                 OLED_Set_Pos(x,y);
  197.                 for(i=0;i<6;i++)
  198.                 OLED_WrDat(F6x8[c][i]);
  199.                 x+=6;
  200.                 j++;
  201.         }
  202. }
  203. /*******************功能描述:顯示8*16一組標準ASCII字符串         顯示的坐標(x,y),y為頁范圍0~7****************/
  204. void OLED_P8x16Str(unsigned char x, y,unsigned char ch[])
  205. {
  206.         unsigned char c=0,i=0,j=0;
  207.         while (ch[j]!='\0')
  208.         {
  209.                 c =ch[j]-32;
  210.                 if(x>120){x=0;y++;}
  211.                 OLED_Set_Pos(x,y);
  212.                 for(i=0;i<8;i++)
  213.                 OLED_WrDat(F8X16[c*16+i]);
  214.                 OLED_Set_Pos(x,y+1);
  215.                 for(i=0;i<8;i++)
  216.                 OLED_WrDat(F8X16[c*16+i+8]);
  217.                 x+=8;
  218.                 j++;
  219.         }
  220. }
  221. /*****************功能描述:顯示16*16點陣  顯示的坐標(x,y),y為頁范圍0~7****************************/
  222. void OLED_P16x16Ch(unsigned char x, y, N)
  223. {
  224.         unsigned char wm=0;
  225.         unsigned int adder=32*N;
  226.         OLED_Set_Pos(x , y);
  227.         for(wm = 0;wm < 16;wm++)
  228.         {
  229.                 OLED_WrDat(F16x16[adder]);
  230.                 adder += 1;
  231.         }
  232.         OLED_Set_Pos(x,y + 1);
  233.         for(wm = 0;wm < 16;wm++)
  234.         {
  235.                 OLED_WrDat(F16x16[adder]);
  236.                 adder += 1;
  237.         }                  
  238. }
  239. /***********功能描述:顯示顯示BMP圖片128×64起始點坐標(x,y),x的范圍0~127,y為頁的范圍0~7*****************/
  240. void Draw_BMP(unsigned char x0, y0,x1, y1,unsigned char BMP[])
  241. {
  242.         unsigned int j=0;
  243.         unsigned char x,y;

  244.   if(y1%8==0) y=y1/8;      
  245.   else y=y1/8+1;
  246.         for(y=y0;y<y1;y++)
  247.         {
  248.                 OLED_Set_Pos(x0,y);
  249.     for(x=x0;x<x1;x++)
  250.             {      
  251.                     OLED_WrDat(BMP[j++]);
  252.             }
  253.         }
  254. }
復制代碼


評分

參與人數(shù) 3黑幣 +21 收起 理由
溯行 + 6 贊一個!
609763691 + 10 很給力!
simonliu009 + 5 贊一個!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏10 分享淘帖 頂6 踩
回復

使用道具 舉報

沙發(fā)
ID:212240 發(fā)表于 2017-10-29 14:47 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

板凳
ID:280341 發(fā)表于 2018-1-28 08:52 | 只看該作者
想要學習,剛入門?纯丛趺磁。。!
回復

使用道具 舉報

地板
ID:139761 發(fā)表于 2018-2-3 21:37 | 只看該作者
剛好需要學習下
回復

使用道具 舉報

5#
ID:318060 發(fā)表于 2018-5-2 17:34 | 只看該作者
支持一下啦。。
回復

使用道具 舉報

6#
ID:374694 發(fā)表于 2018-7-19 11:22 | 只看該作者
很好,來看看這屏幕
回復

使用道具 舉報

7#
ID:294123 發(fā)表于 2018-7-22 16:19 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

8#
ID:280710 發(fā)表于 2018-7-31 16:35 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

9#
ID:136480 發(fā)表于 2018-10-29 23:27 | 只看該作者
xiexiefenxiang
回復

使用道具 舉報

10#
ID:184706 發(fā)表于 2019-2-12 11:35 | 只看該作者
很棒的  謝謝
回復

使用道具 舉報

11#
ID:364183 發(fā)表于 2019-3-4 20:49 | 只看該作者
分不夠啊
回復

使用道具 舉報

12#
ID:139329 發(fā)表于 2019-3-18 00:21 | 只看該作者
非常有用,謝謝分享
回復

使用道具 舉報

13#
ID:493214 發(fā)表于 2019-3-18 14:48 | 只看該作者
謝謝分享
回復

使用道具 舉報

14#
ID:497325 發(fā)表于 2019-3-28 14:07 | 只看該作者
1306怎么與51單片機連線呢
回復

使用道具 舉報

15#
ID:509843 發(fā)表于 2019-4-11 17:53 | 只看該作者
謝謝分享
回復

使用道具 舉報

16#
ID:348999 發(fā)表于 2019-5-16 17:01 | 只看該作者
這個好啊,很詳細,厲害
回復

使用道具 舉報

17#
ID:452731 發(fā)表于 2019-6-3 18:35 | 只看該作者
這個要贊!
回復

使用道具 舉報

18#
ID:472844 發(fā)表于 2019-7-20 18:46 | 只看該作者

贊一個!
回復

使用道具 舉報

19#
ID:474005 發(fā)表于 2019-7-23 19:34 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

20#
ID:521117 發(fā)表于 2019-9-30 22:04 | 只看該作者
學習下,感謝
回復

使用道具 舉報

21#
ID:647342 發(fā)表于 2019-11-22 16:39 | 只看該作者

學習下,感謝
回復

使用道具 舉報

22#
ID:79034 發(fā)表于 2019-11-23 23:33 | 只看該作者
剛好需要,感謝樓主
回復

使用道具 舉報

23#
ID:97678 發(fā)表于 2019-12-8 14:45 | 只看該作者
好東西!值得學習。
回復

使用道具 舉報

24#
ID:94642 發(fā)表于 2019-12-13 15:10 | 只看該作者
剛好需要,謝謝樓主分享
回復

使用道具 舉報

25#
ID:12397 發(fā)表于 2020-1-9 17:56 | 只看該作者
謝謝分享!正好需要這方面的資料!
回復

使用道具 舉報

26#
ID:307026 發(fā)表于 2020-2-21 04:41 | 只看該作者
thanks
回復

使用道具 舉報

27#
ID:518223 發(fā)表于 2020-3-1 17:54 | 只看該作者
主函數(shù)在哪個文件夾中?
回復

使用道具 舉報

28#
ID:631709 發(fā)表于 2020-3-6 09:45 | 只看該作者
感謝感謝
回復

使用道具 舉報

29#
ID:195740 發(fā)表于 2020-4-1 13:37 | 只看該作者
學習學習,剛好出個產(chǎn)品
回復

使用道具 舉報

30#
ID:518223 發(fā)表于 2020-4-18 14:19 | 只看該作者
老哥在不?
回復

使用道具 舉報

31#
ID:320097 發(fā)表于 2021-3-8 22:07 | 只看該作者
正需要這個,初始化的指令太復雜了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表