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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2781|回復: 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 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一二区 | 国产精品一区三区 | 日韩精品网站 | 日韩精品区 | 日韩hd | www.国产.com| 黄色免费观看网站 | 日本黄a三级三级三级 | 成年视频在线观看 | 丁香av| 午夜精品久久久久久 | 亚洲激情综合网 | 欧洲美一区二区三区亚洲 | 国产精品无遮挡 | 亚洲麻豆视频 | 中文字幕理论片 | 久国产| 黄视频在线播放 | 成人国产在线观看 | 国产91免费 | 亚洲激情中文字幕 | 成人a视频| 国产精品视频一区二区三区 | 色综合欧美 | 天天操操操操 | 狠狠干婷婷 | 久久久久久国产精品 | 国产精品久久久久久99 | 亚洲国产激情 | 欧美激情小视频 | 欧美理论在线观看 | av在线播放免费 | 国产精品海角社区 | 日本精品视频在线观看 | 日韩av导航| 国产精品久久免费 | 成人影 | 欧美日韩国产精品 | 国产超碰人人模人人爽人人添 | 黄色综合网 | 不卡在线视频 |