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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于stm32的0.96寸oled SPI例程_反白顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:234247 發(fā)表于 2019-1-26 02:17 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
基于stm32 的0.96寸oled

單片機(jī)源程序如下:
  1. //////////////////////////////////////////////////////////////////////////////////         
  2. //
  3. //  文 件 名   : main.c
  4. //  版 本 號(hào)   : v2.0
  5. //  作    者   : HuangKai
  6. //  生成日期   : 2014-0101
  7. //  最近修改   :
  8. //  功能描述   : OLED 4接口演示例程(51系列)
  9. //              說明:
  10. //              ----------------------------------------------------------------
  11. //              GND    電源地
  12. //              VCC  接5V或3.3v電源
  13. //              D0   接PD6(SCL)
  14. //              D1   接PD7(SDA)
  15. //              RES  接PD4
  16. //              DC   接PD5
  17. //              CS   接PD3               
  18. //              ----------------------------------------------------------------
  19. // 修改歷史   :
  20. // 日    期   :
  21. // 作    者   : HuangKai
  22. // 修改內(nèi)容   : 創(chuàng)建文件
  23. //版權(quán)所有,盜版必究。
  24. //Copyright(C) 中景園電子2014/3/16
  25. //All rights reserved
  26. //******************************************************************************/

  27. #include "oled.h"
  28. #include "stdlib.h"
  29. #include "oledfont.h"           
  30. #include "delay.h"
  31. //OLED的顯存
  32. //存放格式如下.
  33. //[0]0 1 2 3 ... 127        
  34. //[1]0 1 2 3 ... 127        
  35. //[2]0 1 2 3 ... 127        
  36. //[3]0 1 2 3 ... 127        
  37. //[4]0 1 2 3 ... 127        
  38. //[5]0 1 2 3 ... 127        
  39. //[6]0 1 2 3 ... 127        
  40. //[7]0 1 2 3 ... 127                           

  41. #if OLED_MODE==1
  42. //向SSD1106寫入一個(gè)字節(jié)。
  43. //dat:要寫入的數(shù)據(jù)/命令
  44. //cmd:數(shù)據(jù)/命令標(biāo)志 0,表示命令;1,表示數(shù)據(jù);
  45. void OLED_WR_Byte(u8 dat,u8 cmd)
  46. {
  47.         DATAOUT(dat);            
  48.         if(cmd)
  49.           OLED_DC_Set();
  50.         else
  51.           OLED_DC_Clr();                  
  52.         OLED_CS_Clr();
  53.         OLED_WR_Clr();         
  54.         OLED_WR_Set();
  55.         OLED_CS_Set();         
  56.         OLED_DC_Set();         
  57. }                        
  58. #else
  59. //向SSD1106寫入一個(gè)字節(jié)。
  60. //dat:要寫入的數(shù)據(jù)/命令
  61. //cmd:數(shù)據(jù)/命令標(biāo)志 0,表示命令;1,表示數(shù)據(jù);
  62. void OLED_WR_Byte(u8 dat,u8 cmd)
  63. {        
  64.         u8 i;                          
  65.         if(cmd)
  66.           OLED_DC_Set();
  67.         else
  68.           OLED_DC_Clr();                  
  69.         OLED_CS_Clr();
  70.         for(i=0;i<8;i++)
  71.         {                          
  72.                 OLED_SCLK_Clr();
  73.                 if(dat&0x80)
  74.                    OLED_SDIN_Set();
  75.                 else
  76.                    OLED_SDIN_Clr();
  77.                 OLED_SCLK_Set();
  78.                 dat<<=1;   
  79.         }                                                   
  80.         OLED_CS_Set();
  81.         OLED_DC_Set();            
  82. }

  83. void OLED_WR_Byte2(u8 dat,u8 cmd)
  84. {        
  85.         u8 i;                          
  86.         if(cmd)
  87.           OLED_DC_Set();
  88.         else
  89.           OLED_DC_Clr();                  
  90.         OLED_CS_Clr();
  91.         for(i=0;i<8;i++)
  92.         {                          
  93.                 OLED_SCLK_Clr();
  94.                 if(dat&0x80)
  95.                         OLED_SDIN_Clr();
  96.                   
  97.                 else
  98.                     OLED_SDIN_Set();
  99.                 OLED_SCLK_Set();
  100.                 dat<<=1;   
  101.         }                                                   
  102.         OLED_CS_Set();
  103.         OLED_DC_Set();            
  104. }
  105. #endif
  106.         void OLED_Set_Pos(unsigned char x, unsigned char y)
  107. {
  108.         OLED_WR_Byte(0xb0+y,OLED_CMD);
  109.         OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
  110.         OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD);
  111. }            
  112. //開啟OLED顯示   
  113. void OLED_Display_On(void)
  114. {
  115.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC命令
  116.         OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON
  117.         OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON
  118. }
  119. //關(guān)閉OLED顯示     
  120. void OLED_Display_Off(void)
  121. {
  122.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC命令
  123.         OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF
  124.         OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF
  125. }                                            
  126. //清屏函數(shù),清完屏,整個(gè)屏幕是黑色的!和沒點(diǎn)亮一樣!!!         
  127. void OLED_Clear(void)  
  128. {  
  129.         u8 i,n;                    
  130.         for(i=0;i<8;i++)  
  131.         {  
  132.                 OLED_WR_Byte (0xb0+i,OLED_CMD);    //設(shè)置頁地址(0~7)
  133.                 OLED_WR_Byte (0x00,OLED_CMD);      //設(shè)置顯示位置—列低地址
  134.                 OLED_WR_Byte (0x10,OLED_CMD);      //設(shè)置顯示位置—列高地址   
  135.                 for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
  136.         } //更新顯示
  137. }


  138. //在指定位置顯示一個(gè)字符,包括部分字符
  139. //x:0~127
  140. //y:0~63
  141. //反白顯示;         
  142. //size:選擇字體 16/12
  143. void OLED_ShowChar(u8 x,u8 y,u8 chr)
  144. {              
  145.         unsigned char c=0,i=0;        
  146.                 c=chr-' ';//得到偏移后的值                        
  147.                 if(x>Max_Column-1){x=0;y=y+2;}
  148.                 if(SIZE ==16)
  149.                         {
  150.                         OLED_Set_Pos(x,y);        
  151.                         for(i=0;i<8;i++)
  152.                         OLED_WR_Byte2(F8X16[c*16+i],OLED_DATA);
  153.                         OLED_Set_Pos(x,y+1);
  154.                         for(i=0;i<8;i++)
  155.                         OLED_WR_Byte2(F8X16[c*16+i+8],OLED_DATA);
  156.                         }
  157.                         else {        
  158.                                 OLED_Set_Pos(x,y+1);
  159.                                 for(i=0;i<6;i++)
  160.                                 OLED_WR_Byte2(F6x8[c][i],OLED_DATA);
  161.                                 
  162.                         }
  163. }
  164. //m^n函數(shù)
  165. u32 oled_pow(u8 m,u8 n)
  166. {
  167.         u32 result=1;         
  168.         while(n--)result*=m;   
  169.         return result;
  170. }                                 
  171. //顯示2個(gè)數(shù)字
  172. //x,y :起點(diǎn)坐標(biāo)         
  173. //len :數(shù)字的位數(shù)
  174. //size:字體大小
  175. //mode:模式        0,填充模式;1,疊加模式
  176. //num:數(shù)值(0~4294967295);                           
  177. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size)
  178. {                 
  179.         u8 t,temp;
  180.         u8 enshow=0;                                                   
  181.         for(t=0;t<len;t++)
  182.         {
  183.                 temp=(num/oled_pow(10,len-t-1))%10;
  184.                 if(enshow==0&&t<(len-1))
  185.                 {
  186.                         if(temp==0)
  187.                         {
  188.                                 OLED_ShowChar(x+(size/2)*t,y,' ');
  189.                                 continue;
  190.                         }else enshow=1;
  191.                           
  192.                 }
  193.                  OLED_ShowChar(x+(size/2)*t,y,temp+'0');
  194.         }
  195. }
  196. //顯示一個(gè)字符號(hào)串
  197. void OLED_ShowString(u8 x,u8 y,u8 *chr)
  198. {
  199.         unsigned char j=0;
  200.         while (chr[j]!='\0')
  201.         {                OLED_ShowChar(x,y,chr[j]);
  202.                         x+=8;
  203.                 if(x>120){x=0;y+=2;}
  204.                         j++;
  205.         }
  206. }
  207. //顯示漢字反白顯示
  208. void OLED_ShowCHinese(u8 x,u8 y,u8 no)
  209. {                                 
  210.         u8 t,adder=0;
  211.         OLED_Set_Pos(x,y);        
  212.     for(t=0;t<16;t++)
  213.                 {
  214.                                 OLED_WR_Byte2(Hzk[2*no][t],OLED_DATA);
  215.                                 adder+=1;
  216.      }        
  217.                 OLED_Set_Pos(x,y+1);        
  218.     for(t=0;t<16;t++)
  219.                         {        
  220.                                 OLED_WR_Byte2(Hzk[2*no+1][t],OLED_DATA);
  221.                                 adder+=1;
  222.       }                                       
  223. }
  224. /***********功能描述:顯示顯示BMP圖片128×64起始點(diǎn)坐標(biāo)(x,y),x的范圍0~127,y為頁的范圍0~7*****************/
  225. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
  226. {         
  227. unsigned int j=0;
  228. unsigned char x,y;
  229.   
  230.   if(y1%8==0) y=y1/8;      
  231.   else y=y1/8+1;
  232.         for(y=y0;y<y1;y++)
  233.         {
  234.                 OLED_Set_Pos(x0,y);
  235.     for(x=x0;x<x1;x++)
  236.             {      
  237.                     OLED_WR_Byte(BMP[j++],OLED_DATA);                    
  238.             }
  239.         }
  240. }


  241. //初始化SSD1306                                            
  242. void OLED_Init(void)
  243. {         

  244.          
  245.          GPIO_InitTypeDef  GPIO_InitStructure;
  246.          
  247.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOG, ENABLE);         //使能PC,D,G端口時(shí)鐘

  248.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_3|GPIO_Pin_8;         //PD3,PD6推挽輸出  
  249.          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽輸出
  250.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
  251.          GPIO_Init(GPIOD, &GPIO_InitStructure);          //初始化GPIOD3,6
  252.          GPIO_SetBits(GPIOD,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_3|GPIO_Pin_8);        //PD3,PD6 輸出高
  253.         
  254.         
  255.         //
  256.         

  257.         //

  258. #if OLED_MODE==1

  259.          GPIO_InitStructure.GPIO_Pin =0xFF; //PC0~7 OUT推挽輸出
  260.          GPIO_Init(GPIOC, &GPIO_InitStructure);
  261.          GPIO_SetBits(GPIOC,0xFF); //PC0~7輸出高

  262.          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;                                 //PG13,14,15 OUT推挽輸出
  263.          GPIO_Init(GPIOG, &GPIO_InitStructure);
  264.          GPIO_SetBits(GPIOG,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);                                                 //PG13,14,15 OUT  輸出高

  265. #else
  266.          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;                                 //PC0,1 OUT推挽輸出
  267.          GPIO_Init(GPIOC, &GPIO_InitStructure);
  268.          GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1);                                                 //PC0,1 OUT  輸出高

  269.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;                                 //PG15 OUT推挽輸出          RST
  270.          GPIO_Init(GPIOG, &GPIO_InitStructure);
  271.          GPIO_SetBits(GPIOG,GPIO_Pin_15);                                                 //PG15 OUT  輸出高


  272. #endif



  273.   OLED_RST_Set();
  274.         delay_ms(100);
  275.         OLED_RST_Clr();
  276. ……………………

  277. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
中景園電子0.96OLED顯示屏_STM32ZET系列_SPI_例程_反白顯示.7z (193.47 KB, 下載次數(shù): 35)



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

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2019-1-26 03:07 | 只看該作者
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产欧美精品区一区二区三区 | 成人在线视频网址 | 欧美成人免费电影 | 成人网在线看 | 久久精品成人 | 国产成人在线视频免费观看 | 9191成人精品久久 | 日韩精品成人网 | 亚洲人人 | 黄色成人国产 | 国产在线观看av | 久久久久国产一区二区三区四区 | 欧美一区二区三区,视频 | 成人一级毛片 | 久久精品黄色 | 亚洲欧洲色视频 | 欧美一区二区三区视频 | 国产视频精品在线观看 | 欧美一区二区在线观看视频 | 五月天婷婷久久 | 日本不卡免费新一二三区 | 欧美美乳 | 午夜精品久久久久久久久久久久 | 国产 日韩 欧美 中文 在线播放 | 91精品久久久久久综合五月天 | 99久久婷婷国产亚洲终合精品 | 九九亚洲 | 日韩精品成人 | 在线观看精品 | 视频二区 | 日韩在线中文 | 国产精品久久久av | 一区二区中文字幕 | 夜夜精品浪潮av一区二区三区 | 国产在线网址 | 成人精品一区 | 丝袜一区二区三区 | 免费久久视频 | 婷婷久久网 | 国产一级片网站 | 国产欧美一级二级三级在线视频 |