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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm32f103zet6單片機BH1750光照傳感器程序 0.96OLED顯示

[復制鏈接]
跳轉到指定樓層
樓主
ID:1088465 發表于 2023-8-9 15:37 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
工程實現了在stm32f103zet6開發板上利用雙iic通信定時采集bh1750的光照信息(勒克斯),并將數據展示在0.96寸oled屏幕上,實現實時定量定性觀測環境光照強度大小。keil工程如下:
單片機源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "bh1750.h"
  4. #include "oled.h"
  5. /*

  6. BH1750

  7. SCL     PB10
  8. SDA     PB11
  9. VCC     3.3V
  10. GND     GND
  11. ADDR keyibujie.

  12. 0.96OLED    IIC

  13. SCL      PG12
  14. SDA      PD5
  15. VCC      3.3V
  16. GND      GND
  17. */
  18. int main(void)
  19. {               
  20.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//設置中斷優先級分組為組2:2位搶占優先級,2位響應優先級
  21.         delay_init();                     //延時函數初始化         
  22.         Light_Init();
  23.         bh_data_send(BHPowOn);   
  24.         bh_data_send(BHReset);
  25.         bh_data_send(BHModeH1); //選擇的是分辨率是4lx,測量時間是16ms的
  26.         delay_ms(100);
  27.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  28.                 OLED_Clear();
  29.         OLED_Init();
  30. OLED_ShowChinese(12,0,0,24,1);
  31.          OLED_ShowChinese(36,0,1,24,1);
  32.          OLED_ShowChinese(60,0,2,24,1);
  33.          OLED_ShowChinese(84,0,3,24,1);
  34.   while(1)
  35.         {
  36.                 printf("%d \n",bh_data_read());
  37.                 OLED_SHOW_BH1750();                //OLED動態顯示BH1750光照數值
  38.                 OLED_Refresh();
  39.                 delay_ms(100);
  40.         }
  41. }
復制代碼
  1. #include "delay.h"
  2. #include "bh1750.h"
  3. #include "oled.h"


  4. typedef   unsigned char BYTE;
  5. //BYTE    BUF[8];                         //接收數據緩存區   
  6. //iic接口初始化

  7. void Single_Write_BH1750(uchar REG_Address)
  8. {
  9.    IIC_Start();                  //起始信號
  10.    IIC_Send_Byte(BHAddWrite);   //發送設備地址+寫信號
  11.    IIC_Send_Byte(REG_Address);    //內部寄存器地址,
  12.   //  BH1750_SendByte(REG_data);       //內部寄存器數據,
  13.    IIC_Stop();                   //發送停止信號
  14. }

  15. void Light_Init(void)
  16. {
  17.         GPIO_InitTypeDef  GPIO_InitStructure;
  18.          

  19.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);         //使能A端口時鐘
  20.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;         
  21.          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽輸出
  22.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
  23.          GPIO_Init(GPIOB, &GPIO_InitStructure);          //初始化GPIOB10,11
  24.          GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11);        

  25.         Single_Write_BH1750(0x01);
  26. }


  27. /*************************************************************************************/
  28. void bh_data_send(u8 command)
  29. {
  30.     do{
  31.     IIC_Start();                      //iic起始信號
  32.     IIC_Send_Byte(BHAddWrite);       //發送器件地址
  33.     }while(IIC_Wait_Ack());           //等待從機應答
  34.     IIC_Send_Byte(command);          //發送指令
  35.     IIC_Wait_Ack();                   //等待從機應答
  36.     IIC_Stop();                       //iic停止信號
  37. }

  38. u16 bh_data_read(void)
  39. {
  40.         u16 buf;
  41.         IIC_Start();                       //iic起始信號
  42.         IIC_Send_Byte(BHAddRead);         //發送器件地址+讀標志位
  43.         IIC_Wait_Ack();                     //等待從機應答
  44.         buf=IIC_Read_Byte(1);              //讀取數據
  45.         buf=buf<<8;                        //讀取并保存高八位數據
  46.         buf+=0x00ff&IIC_Read_Byte(0);      //讀取并保存第八位數據
  47.         IIC_Stop();                        //發送停止信號
  48.         return buf;
  49. }

  50. void OLED_SHOW_BH1750(void)
  51. {
  52.                 OLED_ShowChar(40,26,'L',16,1);
  53.                 OLED_ShowChar(48,26,'U',16,1);
  54.                 OLED_ShowChar(58,26,'X',16,1);

  55.                
  56.                 if(bh_data_read() > 65200)
  57.                 {        
  58.                         OLED_ShowChar(32,0,'E',16,0);
  59.                         OLED_ShowChar(40,0,'R',16,0);
  60.                         OLED_ShowChar(48,0,'R',16,0);
  61.                         OLED_ShowChar(56,0,'O',16,0);
  62.                         OLED_ShowChar(64,0,'R',16,0);
  63.                         delay_ms(500);
  64.                         OLED_Clear();
  65.                 }
  66.                 else if(bh_data_read() > 10000 && bh_data_read() < 65200)        
  67.                 {                OLED_ShowChinese(70,38,7,24,1);
  68.                         OLED_ShowChinese(94,38,7,24,1);
  69.                         OLED_ShowNum(0,26,bh_data_read() % 100000 / 10000,1,16,1);
  70.                         OLED_ShowNum(8,26,bh_data_read() % 10000  / 1000 ,1,16,1);
  71.                         OLED_ShowNum(16,26,bh_data_read() % 1000   / 100  ,1,16,1);
  72.                         OLED_ShowNum(24,26,bh_data_read() % 100    / 10   ,1,16,1);
  73.                         OLED_ShowNum(32,26,bh_data_read() % 10            ,1,16,1);
  74.                         OLED_ShowChinese(70,38,4,24,1);
  75.                         OLED_ShowChinese(94,38,2,24,1);
  76.                 }
  77.                
  78.                 else if(bh_data_read() > 1000 && bh_data_read() < 10000)        
  79.                 {        OLED_ShowChinese(70,38,7,24,1);
  80.                         OLED_ShowChinese(94,38,7,24,1);
  81.                         OLED_ShowChar(0,26,' ',16,1);
  82.                         OLED_ShowNum(8,26,bh_data_read() % 10000  / 1000 ,1,16,1);
  83.                         OLED_ShowNum(16,26,bh_data_read() % 1000   / 100  ,1,16,1);
  84.                         OLED_ShowNum(24,26,bh_data_read() % 100    / 10   ,1,16,1);
  85.                         OLED_ShowNum(32,26,bh_data_read() % 10            ,1,16,1);
  86.                         OLED_ShowChinese(70,38,2,24,1);
  87.                         
  88.                 }
  89.                 else if(bh_data_read() > 100 && bh_data_read() < 1000)        
  90.                 {                OLED_ShowChinese(70,38,7,24,1);
  91.                         OLED_ShowChinese(94,38,7,24,1);
  92.                         OLED_ShowChar(0,26,' ',16,1);
  93.                         OLED_ShowChar(8,26,' ',16,1);
  94.                         OLED_ShowNum(16,26,bh_data_read() % 1000   / 100  ,1,16,1);
  95.                         OLED_ShowNum(24,26,bh_data_read() % 100    / 10   ,1,16,1);
  96.                         OLED_ShowNum(32,26,bh_data_read() % 10            ,1,16,1);
  97.                         OLED_ShowChinese(70,38,5,24,1);
  98.                         OLED_ShowChinese(94,38,8,24,1);
  99.                 }
  100.                 else if(bh_data_read() > 10 && bh_data_read() < 100)        
  101.                 {                OLED_ShowChinese(70,38,7,24,1);
  102.                         OLED_ShowChinese(94,38,7,24,1);
  103.                         OLED_ShowChar(0,26,' ',16,1);
  104.                         OLED_ShowChar(8,26,' ',16,1);
  105.                         OLED_ShowChar(16,26,' ',16,1);
  106.                         OLED_ShowNum(24,26,bh_data_read() % 100    / 10   ,1,16,1);
  107.                         OLED_ShowNum(32,26,bh_data_read() % 10            ,1,16,1);
  108.                         OLED_ShowChinese(70,38,6,24,1);
  109.                 }
  110.                 else if(bh_data_read()  < 10)        
  111.                 {                OLED_ShowChinese(70,38,7,24,1);
  112.                         OLED_ShowChinese(94,38,7,24,1);
  113.                         OLED_ShowChar(0,26,' ',16,1);
  114.                         OLED_ShowChar(8,26,' ',16,1);
  115.                         OLED_ShowChar(16,26,' ',16,1);
  116.                         OLED_ShowChar(24,26,' ',16,1);
  117.                         OLED_ShowNum(32,26,bh_data_read() % 10            ,1,16,1);
  118.                         OLED_ShowChinese(70,38,4,24,1);
  119.                         OLED_ShowChinese(94,38,6,24,1);
  120.                 }
  121. //                else break;

  122.                
  123.                 delay_ms(100);
  124. }
復制代碼

原理圖:無
仿真:無
代碼: 程序.7z (201.55 KB, 下載次數: 40)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:1138353 發表于 2024-12-21 20:55 | 只看該作者
不能用
回復

使用道具 舉報

板凳
ID:1145583 發表于 2025-3-17 08:23 來自手機 | 只看該作者
謝謝分享,我也正在自己學習編程,學習了!
回復

使用道具 舉報

地板
ID:66862 發表于 2025-4-8 23:14 | 只看該作者
有網友驗證過以上程序能用嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产探花 | 亚洲一区有码 | 97色在线视频 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 日本在线免费视频 | 羞羞视频网站免费看 | 9191av| 99久久精品一区二区成人 | 欧美黄色一区 | 亚洲精品2区| 网色| 亚洲午夜精品视频 | 超碰精品在线 | a级片在线观看 | 国产精品久久久久久影院8一贰佰 | 亚洲精选久久 | 一区二区视频 | 欧美在线视频网站 | 久久久久国产一区二区三区 | 一级黄色毛片免费 | 欧美日韩中文字幕 | 久久久久久亚洲 | 日本天天操 | 日韩在线小视频 | 天天操天天摸天天干 | 国产成人精品一区二区三区在线 | 亚洲精品视频在线看 | 91精品国产高清一区二区三区 | 人人干在线| 国产午夜精品久久久久免费视高清 | 欧美精品一区二区三区在线 | 在线视频 亚洲 | 一级毛片播放 | 亚洲综合婷婷 | 中文字幕高清av | 欧美视频一区二区三区 | 欧美小视频在线观看 | 在线视频99 | 久久人 | 国产香蕉视频在线播放 | 一区二区三区欧美 |