久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: IIC-OLED顯示屏資料(SSD1306) 用51單片機和stm32 Arduino驅動oled的例程 [打印本頁]

作者: chengyu123456    時間: 2017-2-13 16:57
標題: IIC-OLED顯示屏資料(SSD1306) 用51單片機和stm32 Arduino驅動oled的例程
里面還有stm32的例程.


IIC方式的OLED顯示屏資料(SSD1306),里面有 用51單片機和stm32單片機還有Arduino驅動oled的例程:
IIC-OLED顯示屏資料(SSD1306).rar (7.84 MB, 下載次數: 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模塊驅動文件
  19. *
  20. * Others: none;
  21. *
  22. * Function List:
  23. *
  24. * 1. void delay(unsigned int z) -- 延時函數,毫秒
  25. * 2. void IIC_Start() -- 開啟I2C總線
  26. * 3. void IIC_Stop() -- 關閉I2C總線
  27. * 4. void Write_IIC_Byte(unsigned char IIC_Byte) -- 通過I2C總線寫一個byte的數據
  28. * 5. void OLED_WrDat(unsigned char dat) -- 向OLED屏寫數據
  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屏初始化程序,此函數應在操作屏幕之前最先調用
  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中,此函數調用即可
  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; //串行數據

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

  52. #define        Brightness        0xCF
  53. #define X_WIDTH         128
  54. #define Y_WIDTH         64
  55. /*********************OLED驅動程序用的延時程序************************************/
  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總線寫一個字節
  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寫數據************************************/
  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. }
復制代碼



作者: 猜猜me    時間: 2017-10-29 14:47
謝謝樓主分享

作者: dulai    時間: 2018-1-28 08:52
想要學習,剛入門。看看怎么弄!!!!
作者: 後輪追前輪    時間: 2018-2-3 21:37
剛好需要學習下
作者: rockze    時間: 2018-5-2 17:34
支持一下啦!!!
作者: nb44444    時間: 2018-7-19 11:22
很好,來看看這屏幕
作者: hahaqinyou    時間: 2018-7-22 16:19
謝謝樓主分享
作者: 拖拉機戰士    時間: 2018-7-31 16:35
謝謝樓主分享
作者: singasin    時間: 2018-10-29 23:27
xiexiefenxiang
作者: mtk1625    時間: 2019-2-12 11:35
很棒的  謝謝
作者: shijimiaopu    時間: 2019-3-4 20:49
分不夠啊

作者: asd2002061    時間: 2019-3-18 00:21
非常有用,謝謝分享
作者: 誠興通訊電器    時間: 2019-3-18 14:48
謝謝分享
作者: 123wer煩    時間: 2019-3-28 14:07
1306怎么與51單片機連線呢
作者: kangcy    時間: 2019-4-11 17:53
謝謝分享
作者: lgspace    時間: 2019-5-16 17:01
這個好啊,很詳細,厲害
作者: azi197417    時間: 2019-6-3 18:35
這個要贊!
作者: zhongzl728    時間: 2019-7-20 18:46

贊一個!
作者: Lenv    時間: 2019-7-23 19:34
謝謝樓主分享

作者: mobicity    時間: 2019-9-30 22:04
學習下,感謝
作者: 18982855587    時間: 2019-11-22 16:39

學習下,感謝
作者: 邰夏留    時間: 2019-11-23 23:33
剛好需要,感謝樓主
作者: jovew    時間: 2019-12-8 14:45
好東西!值得學習。
作者: 917106794    時間: 2019-12-13 15:10
剛好需要,謝謝樓主分享
作者: zmz_0312    時間: 2020-1-9 17:56
謝謝分享!正好需要這方面的資料!
作者: lephuocthe    時間: 2020-2-21 04:41
thanks

作者: 小鍵    時間: 2020-3-1 17:54
主函數在哪個文件夾中?

作者: nameYTG    時間: 2020-3-6 09:45
感謝感謝
作者: w494143467    時間: 2020-4-1 13:37
學習學習,剛好出個產品
作者: 小鍵    時間: 2020-4-18 14:19
老哥在不?

作者: 歐陽云天    時間: 2021-3-8 22:07
正需要這個,初始化的指令太復雜了




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久天天躁狠狠躁夜夜躁2014 | 一级特黄aaaaaa大片 | 日韩免费大片 | 久久久九九 | 国产午夜精品一区二区三区四区 | 色呦呦国产精品 | 免费黄色小视频 | 亚洲在线观看视频 | 毛片视频网站 | 91精品在线免费观看 | 在线日韩 | 在线一区视频 | 五月综合激情网 | 国产精品日日摸天天碰 | 欧美日韩国产精品 | 日日夜夜精品免费 | 日日干天天干 | 97视频| 欧美色噜噜 | 中文字幕一区在线观看 | 婷婷91| 六月色婷婷 | 午夜国产一区 | 日本在线免费观看视频 | 国产一级片在线播放 | 亚洲免费在线观看视频 | 91资源在线观看 | 激情一区二区三区 | 亚洲成人国产 | 国产一级网站 | 91精品国自产在线观看 | 亚洲一区影院 | 亚洲精品久 | 国产精品99久久久久久www | 亚洲激情一区二区 | 日韩精品第一页 | 国产精品亚洲综合 | 视频在线一区二区 | 欧美精品99久久久 | 日本一区二区三区精品 | 精品欧美日韩 |