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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32F1之4線IIC_OLED源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:663607 發(fā)表于 2021-8-2 01:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
修改對應端口即可
  1. #include "oled.h"
  2. #include "codetab.h"
  3. #include "delay.h"

  4. /**************************實現(xiàn)函數(shù)********************************************
  5. *函數(shù)原型:                void IIC_Start(void)
  6. *功  能:                產生IIC起始信號
  7. *******************************************************************************/
  8. void OLED_IIC_Start(void)
  9. {

  10.         OLED_IIC_SDA=1;
  11.         OLED_IIC_SCL=1;
  12.         delay_us(1);
  13.         OLED_IIC_SDA=0;
  14.         delay_us(1);
  15.         OLED_IIC_SCL=0;//鉗住I2C總線,準備發(fā)送或接收數(shù)據(jù)
  16. }


  17. /**************************實現(xiàn)函數(shù)********************************************
  18. *函數(shù)原型:                void IIC_Stop(void)
  19. *功  能:            //產生IIC停止信號
  20. *******************************************************************************/          
  21. void  OLED_IIC_Stop(void)
  22. {

  23.         OLED_IIC_SCL=0;
  24.         OLED_IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
  25.         delay_us(1);
  26.         OLED_IIC_SCL=1;
  27.         OLED_IIC_SDA=1;//發(fā)送I2C總線結束信號
  28.         delay_us(1);                                                                  
  29. }


  30. void Write_IIC_Byte(unsigned char IIC_Byte)
  31. {
  32.         unsigned char i;
  33.   for(i=0;i<8;i++)
  34.         {
  35.                 if(IIC_Byte & 0x80)
  36.                         OLED_IIC_SDA=1;
  37.                 else
  38.                         OLED_IIC_SDA=0;
  39.                         OLED_IIC_SCL=1;
  40.       delay_us(1);  //必須有保持SCL脈沖的延時
  41.                         OLED_IIC_SCL=0;
  42.                         IIC_Byte<<=1;
  43.         }
  44.                         OLED_IIC_SDA = 1;//原程序這里有一個拉高SDA,根據(jù)OLED的DATASHEET,此句必須去掉。
  45.                         OLED_IIC_SCL=1;
  46.                         delay_us(1);
  47.                         OLED_IIC_SCL=0;
  48. }


  49. /*********************OLED寫數(shù)據(jù)************************************/
  50. void OLED_WrDat(unsigned char IIC_Data)
  51. {
  52.         OLED_IIC_Start();
  53.         Write_IIC_Byte(0x78);
  54.         Write_IIC_Byte(0x40);                        //write data
  55.         Write_IIC_Byte(IIC_Data);
  56.         OLED_IIC_Stop();
  57. }
  58. /*********************OLED寫命令************************************/
  59. void OLED_WrCmd(unsigned char IIC_Command)
  60. {
  61.         OLED_IIC_Start();
  62.         Write_IIC_Byte(0x78);            //Slave address,SA0=0
  63.         Write_IIC_Byte(0x00);                        //write command
  64.         Write_IIC_Byte(IIC_Command);
  65.         OLED_IIC_Stop();
  66. }
  67. /*********************OLED 設置坐標************************************/
  68. void OLED_Set_Pos(unsigned char x, unsigned char y)
  69. {
  70.         OLED_WrCmd(0xb0+y);
  71.         OLED_WrCmd(((x&0xf0)>>4)|0x10);
  72.         OLED_WrCmd((x&0x0f)|0x01);
  73. }
  74. /*********************OLED全屏************************************/
  75. void OLED_Fill(unsigned char bmp_dat)
  76. {
  77.         unsigned char y,x;
  78.         for(y=0;y<8;y++)
  79.         {
  80.                 OLED_WrCmd(0xb0+y);
  81.                 OLED_WrCmd(0x01);
  82.                 OLED_WrCmd(0x10);
  83.                 for(x=0;x<X_WIDTH;x++)
  84.                 OLED_WrDat(bmp_dat);
  85.         }
  86. }
  87. /*********************OLED復位************************************/
  88. void OLED_CLS(void)
  89. {
  90.         unsigned char y,x;
  91.         for(y=0;y<8;y++)
  92.         {
  93.                 OLED_WrCmd(0xb0+y);
  94.                 OLED_WrCmd(0x01);
  95.                 OLED_WrCmd(0x10);
  96.                 for(x=0;x<X_WIDTH;x++)
  97.                 OLED_WrDat(0);
  98.         }
  99. }

  100. //--------------------------------------------------------------
  101. // Prototype      : void OLED_OFF(void)
  102. // Calls          :
  103. // Parameters     : none
  104. // Description    : 讓OLED休眠 -- 休眠模式下,OLED功耗不到10uA
  105. //--------------------------------------------------------------
  106. void OLED_OFF(void)
  107. {
  108.         OLED_WrCmd(0X8D);  //設置電荷泵
  109.         OLED_WrCmd(0X10);  //關閉電荷泵
  110.         OLED_WrCmd(0XAE);  //OLED休眠
  111. }


  112. //--------------------------------------------------------------
  113. // Prototype      : void OLED_ON(void)
  114. // Calls          :
  115. // Parameters     : none
  116. // Description    : 將OLED從休眠中喚醒
  117. //--------------------------------------------------------------
  118. void OLED_ON(void)
  119. {
  120.         OLED_WrCmd(0X8D);  //設置電荷泵
  121.         OLED_WrCmd(0X14);  //開啟電荷泵
  122.         OLED_WrCmd(0XAF);  //OLED喚醒
  123. }


  124. /*********************OLED初始化************************************/
  125. void OLED_IIC_Init(void)
  126. {
  127.         GPIO_InitTypeDef GPIO_InitStructure;
  128.        
  129.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口時鐘
  130.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  131.         GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
  132.        
  133.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4;        //端口配置
  134.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      //推挽輸出
  135.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //50M
  136.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  137.        
  138.         delay_ms(500);//       
  139.         OLED_WrCmd(0xae);//--turn off oled panel
  140.         OLED_WrCmd(0x00);//---set low column address
  141.         OLED_WrCmd(0x10);//---set high column address
  142.         OLED_WrCmd(0x40);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
  143.         OLED_WrCmd(0x81);//--set contrast control register
  144.         OLED_WrCmd(0xFF); // Set SEG Output Current Brightness 亮度調節(jié) 0x00~0xff
  145.         OLED_WrCmd(0xa1);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
  146.         OLED_WrCmd(0xc8);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常
  147.         OLED_WrCmd(0xa6);//--set normal display
  148.         OLED_WrCmd(0xa8);//--set multiplex ratio(1 to 64)
  149.         OLED_WrCmd(0x3f);//--1/64 duty
  150.         OLED_WrCmd(0xd3);//-set display offset        Shift Mapping RAM Counter (0x00~0x3F)
  151.         OLED_WrCmd(0x00);//-not offset
  152.         OLED_WrCmd(0xd5);//--set display clock divide ratio/oscillator frequency
  153.         OLED_WrCmd(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec
  154.         OLED_WrCmd(0xd9);//--set pre-charge period
  155.         OLED_WrCmd(0xf1);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
  156.         OLED_WrCmd(0xda);//--set com pins hardware configuration
  157.         OLED_WrCmd(0x12);
  158.        
  159.         OLED_WrCmd(0xdb);//--set vcomh
  160.         OLED_WrCmd(0x40);//Set VCOM Deselect Level
  161.         OLED_WrCmd(0x20);//-Set Page Addressing Mode (0x00/0x01/0x02)
  162.         OLED_WrCmd(0x02);//
  163.         OLED_WrCmd(0x8d);//--set Charge Pump enable/disable
  164.         OLED_WrCmd(0x14);//--set(0x10) disable
  165.        
  166.         OLED_WrCmd(0xa4);// Disable Entire Display On (0xa4/0xa5)
  167.         OLED_WrCmd(0xa6);// Disable Inverse Display On (0xa6/a7)
  168.         OLED_WrCmd(0xaf);//--turn on oled panel
  169.        
  170.         OLED_Fill(0x00); //初始清屏
  171.         OLED_Set_Pos(0,0);
  172. }

  173. //在指定位置顯示一個字符,包括部分字符
  174. //x:0~127
  175. //y:0~63
  176. //mode:0,反白顯示;1,正常顯示                                 
  177. //size:選擇字體 16/12
  178. void OLED_ShowChar(u8 x,u8 y,u8 chr)
  179. {             
  180.         unsigned char c=0,i=0;       
  181.                 c=chr-' ';//得到偏移后的值                       
  182.                 if(x>Max_Column-1)
  183.                 {
  184.                         x=0;y=y+2;
  185.                 }
  186.                 OLED_Set_Pos(x,y+1);
  187.                 for(i=0;i<6;i++)
  188.                 OLED_WrDat(F6x8[c][i]);
  189. }
  190. /***************功能描述:顯示6*8一組標準ASCII字符串        顯示的坐標(x,y),y為頁范圍0~7****************/
  191. void OLED_P6x8Str(unsigned char x,unsigned char y,unsigned char ch[])
  192. {
  193.         unsigned char c=0,i=0,j=0;
  194.         while (ch[j]!='\0')
  195.         {
  196.                 c =ch[j]-32;
  197.                 if(x>126){x=0;y++;}
  198.                 OLED_Set_Pos(x,y);
  199.                 for(i=0;i<6;i++)
  200.                 OLED_WrDat(F6x8[c][i]);
  201.                 x+=6;
  202.                 j++;
  203.         }
  204. }

  205. /*******************功能描述:顯示8*16一組標準ASCII字符串         顯示的坐標(x,y),y為頁范圍0~7****************/
  206. void OLED_P8x16Str(unsigned char x,unsigned  char y,unsigned char ch[])
  207. {
  208.         unsigned char c=0,i=0,j=0;
  209.         while (ch[j]!='\0')
  210.         {
  211.                 c =ch[j]-32;
  212.                 if(x>120){x=0;y++;}
  213.                 OLED_Set_Pos(x,y);
  214.                 for(i=0;i<8;i++)
  215.                 OLED_WrDat(F8X16[c*16+i]);
  216.                 OLED_Set_Pos(x,y+1);
  217.                 for(i=0;i<8;i++)
  218.                 OLED_WrDat(F8X16[c*16+i+8]);
  219.                 x+=8;
  220.                 j++;
  221.         }
  222. }

復制代碼

代碼工程: IIC_OLED.7z (200.52 KB, 下載次數(shù): 46)

評分

參與人數(shù) 1黑幣 +10 收起 理由
xjx51 + 10 很給力!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:584195 發(fā)表于 2021-8-6 18:14 | 只看該作者
學習了,感覺樓主分享!
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲美女视频 | 亚洲欧美在线一区 | 成人精品系列 | www久久爱 | 成人久久网 | 99久久免费精品国产男女高不卡 | 成人在线欧美 | 91精品国产手机 | 久久亚洲国产精品日日av夜夜 | 蜜桃特黄a∨片免费观看 | 日韩在线视频一区 | 免费毛片网站在线观看 | 亚洲成人精品免费 | 亚洲视频在线观看 | a国产视频 | 免费久久网 | 久久狼人天堂 | 日韩靠逼 | www.日本在线 | 久久国产成人午夜av影院武则天 | 色婷婷综合久久久中文字幕 | 日日摸夜夜爽人人添av | 91免费电影| 99资源| 超碰av免费| 欧美在线观看一区 | 黄网站在线播放 | 欧美中文字幕一区二区三区 | 精品美女在线观看 | 一级大黄色片 | 亚洲最大成人综合 | 淫片一级国产 | 波多野结衣精品在线 | 国产一区二 | 欧美激情亚洲激情 | 91中文字幕在线 | 亚洲精品免费观看 | 久久久久久久电影 | 欧美一区二区在线播放 | 国产一区三区视频 | 奇米四色在线观看 |