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

標(biāo)題: STM32F1之4線IIC_OLED源程序 [打印本頁(yè)]

作者: lllei    時(shí)間: 2021-8-2 01:34
標(biāo)題: STM32F1之4線IIC_OLED源程序
修改對(duì)應(yīng)端口即可
  1. #include "oled.h"
  2. #include "codetab.h"
  3. #include "delay.h"

  4. /**************************實(shí)現(xiàn)函數(shù)********************************************
  5. *函數(shù)原型:                void IIC_Start(void)
  6. *功  能:                產(chǎn)生IIC起始信號(hào)
  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總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)
  16. }


  17. /**************************實(shí)現(xiàn)函數(shù)********************************************
  18. *函數(shù)原型:                void IIC_Stop(void)
  19. *功  能:            //產(chǎn)生IIC停止信號(hào)
  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總線結(jié)束信號(hào)
  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脈沖的延時(shí)
  41.                         OLED_IIC_SCL=0;
  42.                         IIC_Byte<<=1;
  43.         }
  44.                         OLED_IIC_SDA = 1;//原程序這里有一個(gè)拉高SDA,根據(jù)OLED的DATASHEET,此句必須去掉。
  45.                         OLED_IIC_SCL=1;
  46.                         delay_us(1);
  47.                         OLED_IIC_SCL=0;
  48. }


  49. /*********************OLED寫(xiě)數(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寫(xiě)命令************************************/
  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 設(shè)置坐標(biāo)************************************/
  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復(fù)位************************************/
  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);  //設(shè)置電荷泵
  109.         OLED_WrCmd(0X10);  //關(guān)閉電荷泵
  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);  //設(shè)置電荷泵
  121.         OLED_WrCmd(0X14);  //開(kāi)啟電荷泵
  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端口時(shí)鐘
  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 亮度調(diào)節(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. //在指定位置顯示一個(gè)字符,包括部分字符
  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一組標(biāo)準(zhǔn)ASCII字符串        顯示的坐標(biāo)(x,y),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一組標(biāo)準(zhǔn)ASCII字符串         顯示的坐標(biāo)(x,y),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. }

復(fù)制代碼

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

作者: zyluglugl    時(shí)間: 2021-8-6 18:14
學(xué)習(xí)了,感覺(jué)樓主分享!




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产一区二区三区在线 | 亚洲一区二区三区在线播放 | 黄视频免费在线 | 91色站 | 99精品国产成人一区二区 | 亚洲精品视频在线播放 | 日韩国产一区二区三区 | 成人精品系列 | 日韩中文字幕 | 综合五月婷 | 国产视频精品视频 | 在线一区视频 | 免费观看www7722午夜电影 | 亚洲国产精品成人无久久精品 | 成人久久久| 在线观看特色大片免费网站 | 在线观看国产网站 | 91精品国产一区二区三区 | 日韩伦理电影免费在线观看 | 91五月婷蜜桃综合 | 玖玖综合网 | 成人精品一区二区三区 | 国产在线精品一区二区三区 | 九九热精品在线 | 国产精品视频中文字幕 | 亚洲国产精品久久久久秋霞不卡 | 日韩一区二区在线视频 | 美女黄网 | 欧美人妖网站 | 亚洲精品中文字幕av | 操操操操操 | 国产91久久久久蜜臀青青天草二 | 天天天操 | 欧美精品三区 | 国产精品一区二区三区四区 | 欧美国产视频一区二区 | 中文字幕日韩欧美 | 亚洲成人一级 | 伊人伊人 | 婷婷丁香在线视频 | 欧美精品在线视频 |