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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2708|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩一级电影免费观看 | 伊人精品在线视频 | 亚洲精品一区国产精品 | 久久亚洲一区二区三区四区 | 91精品久久久 | 日日爱av | 搞黄视频免费看 | 久久久免费电影 | 久久久久久久久蜜桃 | 国产区精品视频 | 国精产品一品二品国精在线观看 | 亚洲视频国产 | 一区二区三区免费在线观看 | 三级av在线 | 国产精品黄色 | 欧美日韩国产在线观看 | 欧美精品一区二区在线观看 | 日本免费视频 | 成人字幕网zmw | 国产日韩精品在线 | 亚洲欧美日韩国产综合 | 亚洲精品免费视频 | 99久久99久久精品国产片果冰 | 国产美女在线精品免费 | 精品99久久 | 亚洲瑟瑟 | 三级av网址 | 日日操日日干 | 天天操天天干天天曰 | 玖玖色在线视频 | 成人一区二区三区 | 一区二区三区四区五区在线视频 | 国内自拍偷拍一区 | 日韩欧美专区 | 日韩视频高清 | 成人3d动漫一区二区三区91 | www.99re| 草草草草视频 | 日韩伦理一区二区三区 | 在线伊人网 | 亚洲综合国产 |