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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2829|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

stm32單片機(jī)源碼分享,0.68英寸OLED源碼,模擬I2C。

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:402207 發(fā)表于 2018-9-25 15:41 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
單片機(jī)資料分享,0.68英寸OLED源碼,模擬I2C。
  1. #include "stm32f10x.h"

  2. #include "oled.h"
  3. #include "delay.h"
  4. #include "font.h"

  5. /**
  6. **  初始化IIC接口
  7. **/
  8. void IIC_Init(void)
  9. {
  10.     GPIO_InitTypeDef GPIO_InitStructer;
  11.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  12.     GPIO_InitStructer.GPIO_Pin=GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2; //1--SCL   2--SDA
  13.     GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz;
  14.     GPIO_InitStructer.GPIO_Mode=GPIO_Mode_Out_PP;

  15.     GPIO_Init(GPIOB, &GPIO_InitStructer);
  16. }

  17. /**
  18. **  設(shè)置SDA為輸出
  19. **/
  20. void SDA_OUT(void)
  21. {
  22.     GPIO_InitTypeDef GPIO_InitStructer;
  23.     GPIO_InitStructer.GPIO_Pin= GPIO_Pin_2;
  24.     GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz;
  25.     GPIO_InitStructer.GPIO_Mode=GPIO_Mode_Out_PP;
  26.     GPIO_Init(GPIOB, &GPIO_InitStructer);
  27. }


  28. /**
  29. **  設(shè)置SDA為輸入
  30. **/
  31. void SDA_IN(void)
  32. {
  33.     GPIO_InitTypeDef GPIO_InitStructer;
  34.     GPIO_InitStructer.GPIO_Pin= GPIO_Pin_2;
  35.     GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz;
  36.     GPIO_InitStructer.GPIO_Mode=GPIO_Mode_IPU;
  37.     GPIO_Init(GPIOB, &GPIO_InitStructer);
  38. }

  39. //開始信號(hào)
  40. void IIC_Start(void)
  41. {
  42.     SDA_OUT();
  43.     IIC_SDA_1;
  44.     IIC_SCL_1;
  45.     delay_us(2);
  46.     IIC_SDA_0;
  47.     delay_us(2);
  48.     IIC_SCL_0;
  49.     delay_us(2);
  50. }

  51. void IIC_Stop(void)
  52. {
  53.     IIC_SCL_1;
  54.     IIC_SDA_0;
  55.     delay_us(2);
  56.     IIC_SDA_1;
  57.     delay_us(2);
  58. }


  59. /*
  60. *   返回1--應(yīng)答出錯(cuò)
  61. *   放回0--應(yīng)答正確
  62. */
  63. u8 IIC_Wait_Ask(void)
  64. {
  65.     int count=0;
  66.     SDA_IN();
  67.     IIC_SCL_1;
  68.     delay_us(2);
  69.     while( READ_SDA )
  70.     {
  71.         count++;
  72.         if(count>250)
  73.         {
  74.             IIC_Stop();
  75.             return 1;
  76.         }   
  77.     }
  78.     IIC_SCL_0;
  79.     delay_us(2);
  80.     return 0;
  81. }

  82. //寫一個(gè)字節(jié)
  83. void IIC_WriteByte(u8 data)
  84. {
  85.     u8 i;
  86.     SDA_OUT();
  87.     for(i=0;i<8;i++)
  88.     {
  89.         IIC_SCL_0;
  90.         delay_us(2);
  91.         if(data & 0x80)     //MSB,從高位開始一位一位傳輸
  92.             IIC_SDA_1;
  93.         else
  94.             IIC_SDA_0;
  95.         IIC_SCL_1;
  96.         delay_us(2);
  97.         IIC_SCL_0;
  98.         data<<=1;

  99.     }
  100. }


  101. u8 IIC_ReadByte(void)
  102. {
  103.     u8 data,i;
  104.     IIC_SDA_1;
  105.     delay_us(2);
  106.     for(i=0;i<8;i++)
  107.     {
  108.         data<<=1;
  109.         IIC_SCL_0;
  110.         delay_us(2);
  111.         IIC_SCL_1;
  112.         delay_us(2);
  113.         if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7))
  114.             data=data | 0x01;
  115.         else
  116.             data=data & 0xFE;

  117.     }
  118.     IIC_SCL_0;
  119.     delay_us(2);
  120.     return data;

  121. }


  122. void WriteCmd(u8 command)
  123. {
  124.     IIC_Start();
  125.     IIC_WriteByte(0x78);//OLED地址
  126.     IIC_Wait_Ask();
  127.     IIC_WriteByte(0x00);//寄存器地址
  128.     IIC_Wait_Ask();
  129.     IIC_WriteByte(command);
  130.     IIC_Wait_Ask();
  131.     IIC_Stop();
  132. }


  133. void WriteDat(u8 data)
  134. {
  135.     IIC_Start();
  136.     IIC_WriteByte(0x78);//OLED地址
  137.     IIC_Wait_Ask();
  138.     IIC_WriteByte(0x40);//寄存器地址
  139.     IIC_Wait_Ask();
  140.     IIC_WriteByte(data);
  141.     IIC_Wait_Ask();
  142.     IIC_Stop();
  143. }

  144. void OLED_Init(void)
  145. {
  146.     delay_ms(100); //這里的延時(shí)很重要

  147.     WriteCmd(0xAE); //display off
  148.     WriteCmd(0x20); //Set Memory Addressing Mode   
  149.     WriteCmd(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
  150.     WriteCmd(0xb0); //Set Page Start Address for Page Addressing Mode,0-7
  151.     WriteCmd(0xc8); //Set COM Output Scan Direction
  152.     WriteCmd(0x00); //---set low column address
  153.     WriteCmd(0x10); //---set high column address
  154.     WriteCmd(0x40); //--set start line address
  155.     WriteCmd(0x81); //--set contrast control register
  156.     WriteCmd(0xff); //亮度調(diào)節(jié) 0x00~0xff
  157.     WriteCmd(0xa1); //--set segment re-map 0 to 127
  158.     WriteCmd(0xa6); //--set normal display
  159.     WriteCmd(0xa8); //--set multiplex ratio(1 to 64)
  160.     WriteCmd(0x3F); //
  161.     WriteCmd(0xa4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content
  162.     WriteCmd(0xd3); //-set display offset
  163.     WriteCmd(0x00); //-not offset
  164.     WriteCmd(0xd5); //--set display clock divide ratio/oscillator frequency
  165.     WriteCmd(0xf0); //--set divide ratio
  166.     WriteCmd(0xd9); //--set pre-charge period
  167.     WriteCmd(0x22); //
  168.     WriteCmd(0xda); //--set com pins hardware configuration
  169.     WriteCmd(0x12);
  170.     WriteCmd(0xdb); //--set vcomh
  171.     WriteCmd(0x20); //0x20,0.77xVcc
  172.     WriteCmd(0x8d); //--set DC-DC enable
  173.     WriteCmd(0x14); //
  174.     WriteCmd(0xaf); //--turn on oled panel

  175. //                WriteCmd(0xAE); //display off
  176. //    WriteCmd(0x00); //Set Memory Addressing Mode   
  177. //    WriteCmd(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
  178. //    WriteCmd(0x40); //Set Page Start Address for Page Addressing Mode,0-7
  179. //    WriteCmd(0x81); //Set COM Output Scan Direction
  180. //    WriteCmd(0xff); //---set low column address
  181. //    WriteCmd(0xa1); //---set high column address
  182. //    WriteCmd(0xc8); //--set start line address
  183. //    WriteCmd(0xa6); //--set contrast control register
  184. //    WriteCmd(0xa8); //亮度調(diào)節(jié) 0x00~0xff
  185. //    WriteCmd(0x3f); //--set segment re-map 0 to 127
  186. //    WriteCmd(0xd3); //--set normal display
  187. //    WriteCmd(0x00); //--set multiplex ratio(1 to 64)
  188. //    WriteCmd(0xd5); //
  189. //    WriteCmd(0x80); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content
  190. //    WriteCmd(0xd9); //-set display offset
  191. //    WriteCmd(0xf1); //-not offset
  192. //    WriteCmd(0xda); //--set display clock divide ratio/oscillator frequency
  193. //    WriteCmd(0x12); //--set divide ratio
  194. //    WriteCmd(0xdb); //--set pre-charge period
  195. //    WriteCmd(0x40); //
  196. //    WriteCmd(0x20); //--set com pins hardware configuration
  197. //    WriteCmd(0x02);
  198. //    WriteCmd(0x8d); //--set vcomh
  199. //    WriteCmd(0x14); //0x20,0.77xVcc
  200. //    WriteCmd(0xa4); //--set DC-DC enable
  201. //    WriteCmd(0xa6); //
  202. //    WriteCmd(0xaf); //--turn on oled panel
  203. //                OLED_Fill(0x00);
  204. //                OLED_SetPos(0,0);
  205.                
  206. }


  207. /**
  208.   * @brief  OLED_ON,將OLED從休眠中喚醒
  209.   * @param  無
  210.     * @retval 無
  211.   */
  212. void OLED_ON(void)
  213. {
  214.     WriteCmd(0X8D);  //設(shè)置電荷泵
  215.     WriteCmd(0X14);  //開啟電荷泵
  216.     WriteCmd(0XAF);  //OLED喚醒
  217. }


  218. /**
  219.   * @brief  OLED_SetPos,設(shè)置光標(biāo)
  220.   * @param  x,光標(biāo)x位置
  221.     *                   y,光標(biāo)y位置
  222.   * @retval 無
  223.   */
  224. void OLED_SetPos(unsigned char x, unsigned char y) //設(shè)置起始點(diǎn)坐標(biāo)
  225. {
  226.     WriteCmd(0xb0+y);
  227.     WriteCmd(((x&0xf0)>>4)|0x10);
  228.     WriteCmd((x&0x0f)|0x01);
  229. }

  230. /**
  231.   * @brief  OLED_Fill,填充整個(gè)屏幕
  232.   * @param  fill_Data:要填充的數(shù)據(jù)
  233.     * @retval 無
  234.   */
  235. void OLED_Fill(unsigned char fill_Data)//全屏填充
  236. {
  237.     unsigned char m,n;
  238.     for(m=0;m<8;m++)
  239.     {
  240.         WriteCmd(0xb0+m);       //page0-page1
  241.         WriteCmd(0x00);     //low column start address
  242.         WriteCmd(0x10);     //high column start address
  243.         for(n=0;n<128;n++)
  244.             {
  245.                 WriteDat(fill_Data);
  246.             }
  247.     }
  248. }

  249. void OLED_CLS(void)//清屏
  250. {
  251.     OLED_Fill(0x00);
  252. }

  253. /**
  254.   * @brief  OLED_ShowStr,顯示codetab.h中的ASCII字符,有6*8和8*16可選擇
  255.   * @param  x,y : 起始點(diǎn)坐標(biāo)(x:0~127, y:0~7);
  256.     *                   ch[] :- 要顯示的字符串;
  257.     *                   TextSize : 字符大小(1:6*8 ; 2:8*16)
  258.     * @retval 無
  259.   */
  260. void OLED_ShowStr(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize)
  261. {
  262.     unsigned char c = 0,i = 0,j = 0;
  263.     switch(TextSize)
  264.     {
  265.         case 1:
  266.         {
  267.             while(ch[j] != '\0')
  268.             {
  269.                 c = ch[j] - 32;
  270.                 if(x > 126)
  271.                 {
  272.                     x = 0;
  273.                     y++;
  274.                 }
  275.                 OLED_SetPos(x,y);
  276.                 for(i=0;i<6;i++)
  277.                     WriteDat(F8x16[c][i]); //6*8
  278.                 x += 6;
  279.                 j++;
  280.             }
  281.         }break;
  282. //        case 2:
  283. //        {
  284. //            while(ch[j] != '\0')
  285. //            {
  286. //                c = ch[j] - 32;
  287. //                if(x > 120)
  288. //                {
  289. //                    x = 0;
  290. //                    y++;
  291. //                }
  292. //                OLED_SetPos(x,y);
  293. //                for(i=0;i<8;i++)
  294. //                    WriteDat(F8X16[c*16+i]);
  295. //                OLED_SetPos(x,y+1);
  296. //                for(i=0;i<8;i++)
  297. //                    WriteDat(F8X16[c*16+i+8]);
  298. //                x += 8;
  299. //                j++;
  300. //            }
  301. //        }break;
  302.     }
  303. }



復(fù)制代碼



oled.rar

2.3 KB, 下載次數(shù): 48, 下載積分: 黑幣 -5

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产欧美一区二区三区久久手机版 | 色资源在线视频 | 亚洲精品一区二区在线 | 成人视屏在线观看 | 天天拍天天操 | 日本在线观看网址 | 97视频在线观看网站 | 国产精品亚洲视频 | 一区二区三区国产精品 | av福利网| 亚洲国产一区二区在线 | 中文字幕在线观看一区二区 | 日韩在线观看中文字幕 | 日本欧美国产在线观看 | 国产网站在线免费观看 | 综合久久99 | 亚洲午夜精品 | 中文字幕在线观看视频网站 | 免费av直接看 | 欧美日韩国产一区二区三区 | 欧美精品久久久 | av免费看片 | 亚洲国产精品一区二区www | 国产精品久久久久久吹潮 | 日韩 欧美 综合 | 欧美人成在线视频 | 在线播放中文字幕 | 亚洲成人一区二区三区 | 成人在线视| 亚洲视频在线看 | 欧美精品91 | 午夜精品久久久久久久久久久久久 | 国产精品久久久久久久久久久新郎 | 99久久精品国产一区二区三区 | 精品久久ai电影 | 在线播放一区二区三区 | 亚洲一区二区三区免费视频 | 一区二区三区免费 | 午夜资源 | 亚洲毛片 | 精品欧美一区二区三区久久久 |