色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32+BH1750光敏傳感器獲取光照強度

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2022-03-25 09:26 ? 次閱讀

?

一、環境介紹

MCU:STM32F103ZET6

光敏傳感器:BH1750數字傳感器(IIC接口)

開發軟件:Keil5

代碼說明:使用IIC模擬時序驅動,方便移植到其他平臺,采集的光照度比較靈敏. 合成的光照度返回值范圍是 0~255。 0表示全黑 255表示很亮。

實測: 手機閃光燈照著的狀態返回值是245左右,手捂著的狀態返回值是10左右.

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

二、BH1750介紹

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

三、核心代碼

BH1750說明: ADDR引腳接地,地址就是0x46

完整工程代碼下載:https://download.csdn.net/download/xiaolong1126626497/18500653

3.1 iic.c

#include "iic.h"

/*
函數功能:IIC接口初始化
硬件連接:
SDA:PB7
SCL:PB6
*/
void IIC_Init(void)
{
	RCC->APB2ENR|=1<<3;//PB
	GPIOB->CRL&=0x00FFFFFF;
	GPIOB->CRL|=0x33000000;
	GPIOB->ODR|=0x3<<6;
}

/*
函數功能:IIC總線起始信號
*/
void IIC_Start(void)
{
		IIC_SDA_OUTMODE(); //初始化SDA為輸出模式
		IIC_SDA_OUT=1; 		 //數據線拉高
		IIC_SCL=1;     		 //時鐘線拉高
		DelayUs(4);        //電平保持時間
		IIC_SDA_OUT=0; 		 //數據線拉低
		DelayUs(4);        //電平保持時間
		IIC_SCL=0;     		 //時鐘線拉低
}


/*
函數功能:IIC總線停止信號
*/
void IIC_Stop(void)
{
		IIC_SDA_OUTMODE(); //初始化SDA為輸出模式
		IIC_SDA_OUT=0; 		 //數據線拉低
		IIC_SCL=0;     		 //時鐘線拉低
		DelayUs(4);        //電平保持時間
		IIC_SCL=1;     		 //時鐘線拉高
		DelayUs(4);        //電平保持時間
		IIC_SDA_OUT=1; 		 //數據線拉高
}

/*
函數功能:獲取應答信號
返 回 值:1表示失敗,0表示成功
*/
u8 IIC_GetACK(void)
{
		u8 cnt=0;
		IIC_SDA_INPUTMODE();//初始化SDA為輸入模式
		IIC_SDA_OUT=1; 		  //數據線上拉
	  DelayUs(2);         //電平保持時間
		IIC_SCL=0;     		  //時鐘線拉低,告訴從機,主機需要數據
		DelayUs(2);         //電平保持時間,等待從機發送數據
	  IIC_SCL=1;     		  //時鐘線拉高,告訴從機,主機現在開始讀取數據
		while(IIC_SDA_IN)   //等待從機應答信號
		{
				cnt++;
				if(cnt>250)return 1;
		}
		IIC_SCL=0;     		  //時鐘線拉低,告訴從機,主機需要數據
		return 0;
}

/*
函數功能:主機向從機發送應答信號
函數形參:0表示應答,1表示非應答
*/
void IIC_SendACK(u8 stat)
{
		IIC_SDA_OUTMODE(); //初始化SDA為輸出模式
		IIC_SCL=0;     		 //時鐘線拉低,告訴從機,主機需要發送數據
		if(stat)IIC_SDA_OUT=1; //數據線拉高,發送非應答信號
		else IIC_SDA_OUT=0; 	 //數據線拉低,發送應答信號
		DelayUs(2);            //電平保持時間,等待時鐘線穩定
		IIC_SCL=1;     		     //時鐘線拉高,告訴從機,主機數據發送完畢
		DelayUs(2);            //電平保持時間,等待從機接收數據
		IIC_SCL=0;     		  	 //時鐘線拉低,告訴從機,主機需要數據
}


/*
函數功能:IIC發送1個字節數據
函數形參:將要發送的數據
*/
void IIC_WriteOneByteData(u8 data)
{
		u8 i;
		IIC_SDA_OUTMODE(); //初始化SDA為輸出模式
		IIC_SCL=0;     		 //時鐘線拉低,告訴從機,主機需要發送數據
		for(i=0;i<8;i++)
		{
				if(data&0x80)IIC_SDA_OUT=1; //數據線拉高,發送1
				else IIC_SDA_OUT=0; 	 //數據線拉低,發送0
				IIC_SCL=1;     		     //時鐘線拉高,告訴從機,主機數據發送完畢
				DelayUs(2);            //電平保持時間,等待從機接收數據
				IIC_SCL=0;     		 		 //時鐘線拉低,告訴從機,主機需要發送數據
				DelayUs(2);            //電平保持時間,等待時鐘線穩定
				data<<=1;              //先發高位
		}
}


/*
函數功能:IIC接收1個字節數據
返 回 值:收到的數據
*/
u8 IIC_ReadOneByteData(void)
{
		u8 i,data;
		IIC_SDA_INPUTMODE();//初始化SDA為輸入模式
	  for(i=0;i<8;i++)
	  {
			 	IIC_SCL=0;     		  //時鐘線拉低,告訴從機,主機需要數據
				DelayUs(2);         //電平保持時間,等待從機發送數據
				IIC_SCL=1;     		  //時鐘線拉高,告訴從機,主機現在正在讀取數據
				data<<=1;           
				if(IIC_SDA_IN)data|=0x01;
				DelayUs(2);         //電平保持時間,等待時鐘線穩定
	  }
		IIC_SCL=0;     		  		//時鐘線拉低,告訴從機,主機需要數據 (必須拉低,否則將會識別為停止信號)
		return data;
}


poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.2 iic.h

#ifndef _IIC_H
#define _IIC_H
#include "stm32f10x.h"
#include "sys.h"
#include "delay.h"
#define IIC_SDA_OUTMODE() {GPIOB->CRL&=0x0FFFFFFF;GPIOB->CRL|=0x30000000;}
#define IIC_SDA_INPUTMODE() {GPIOB->CRL&=0x0FFFFFFF;GPIOB->CRL|=0x80000000;}
#define IIC_SDA_OUT PBout(7)  //數據線輸出
#define IIC_SDA_IN PBin(7)  //數據線輸入
#define IIC_SCL PBout(6)  //時鐘線

void IIC_Init(void);
void IIC_Start(void);
void IIC_Stop(void);
u8 IIC_GetACK(void);
void IIC_SendACK(u8 stat);
void IIC_WriteOneByteData(u8 data);
u8 IIC_ReadOneByteData(void);
#endif

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.3 BH1750.h

#ifndef _BH1750_H
#define _BH1750_H
#include "delay.h"
#include "iic.h"
#include "usart.h"
u8 Read_BH1750_Data(void);
#endif
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.4 BH1750.c

#include "bh1750.h"
u8 Read_BH1750_Data()
{
    unsigned char t0;
    unsigned char t1;
    unsigned char t;
    u8 r_s=0;
    IIC_Start(); //發送起始信號
    IIC_WriteOneByteData(0x46);
    r_s=IIC_GetACK();//獲取應答
    if(r_s)printf("error:1\r\n");
    IIC_WriteOneByteData(0x01);
    r_s=IIC_GetACK();//獲取應答
     if(r_s)printf("error:2\r\n");
    IIC_Stop(); //停止信號 
    
    IIC_Start(); //發送起始信號
    IIC_WriteOneByteData(0x46);
    r_s=IIC_GetACK();//獲取應答
    if(r_s)printf("error:3\r\n");
    IIC_WriteOneByteData(0x01);
    r_s=IIC_GetACK();//獲取應答
    if(r_s)printf("error:4\r\n");
    IIC_Stop(); //停止信號 
    
    IIC_Start(); //發送起始信號
    IIC_WriteOneByteData(0x46);
    r_s=IIC_GetACK();//獲取應答
    if(r_s)printf("error:5\r\n");
    IIC_WriteOneByteData(0x10);
    r_s=IIC_GetACK();//獲取應答
    if(r_s)printf("error:6\r\n");
    IIC_Stop(); //停止信號 
    
    DelayMs(300); //等待
    
    IIC_Start(); //發送起始信號
    IIC_WriteOneByteData(0x47);
    r_s=IIC_GetACK();//獲取應答
    if(r_s)printf("error:7\r\n");
    
    t0=IIC_ReadOneByteData(); //接收數據
    IIC_SendACK(0); //發送應答信號
    t1=IIC_ReadOneByteData(); //接收數據
    IIC_SendACK(1); //發送非應答信號
    IIC_Stop(); //停止信號
    
     t=(((t0<<8)|t1)/1.2);
     return t;  
}

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.5 main.c

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include "at24c02.h"
#include "bh1750.h"

int main()
{
	u8 val;
	LED_Init();
	BEEP_Init();
	KeyInit();
  USARTx_Init(USART1,72,115200);
  IIC_Init();
  
	while(1)
	{
		val=KeyScan();
		if(val)
		{
            val=Read_BH1750_Data();
            printf("光照強度=%d\r\n",val);
//			 BEEP=!BEEP;
			 LED0=!LED0;
			 LED1=!LED1;
		}
	}
}

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.6 運行效果圖

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png審核編輯:符乾江
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2552

    文章

    51325

    瀏覽量

    755370
  • STM32
    +關注

    關注

    2270

    文章

    10918

    瀏覽量

    356838
收藏 人收藏

    評論

    相關推薦

    光敏電阻與其他傳感器的聯合應用

    光敏電阻作為一種能夠根據光照強度變化而改變電阻值的傳感器,在與其他傳感器聯合應用時,能夠拓展出更多元化的應用場景和功能。以下是對光敏電阻與其
    的頭像 發表于 01-13 09:39 ?110次閱讀

    光敏電阻與光電傳感器的區別

    在現代電子技術中,光傳感器是一類非常重要的傳感器,它們能夠將光信號轉換為電信號,從而實現對光強度的檢測和控制。光敏電阻和光電傳感器是兩種常見
    的頭像 發表于 01-13 09:11 ?172次閱讀

    【CW32模塊使用】BH1750光照強度傳感器

    采用ROHM原裝BH1750FVI芯片供電電源:3-5V,光照度范圍:0-65535lx傳感器內置16bitAD轉換,直接數字輸出,省略復雜的計算,省略標定,不區分環境光源接近于視覺
    的頭像 發表于 12-30 11:17 ?169次閱讀
    【CW32模塊使用】<b class='flag-5'>BH1750</b><b class='flag-5'>光照強度</b><b class='flag-5'>傳感器</b>

    外設移植 Ai-WB2+BH1750 光照強度傳感器

    以下作品由安信可社區用戶 WangChong制作 外設介紹 BH1750是一種基于光電二極管的數字光強傳感器,能夠測量環境中的光照強度,并將其轉換為數字信號。它采用 I2C 接口進行通信,適合
    的頭像 發表于 12-05 14:32 ?232次閱讀
    外設移植 Ai-WB2+<b class='flag-5'>BH1750</b> <b class='flag-5'>光照強度</b><b class='flag-5'>傳感器</b>

    光照傳感器光敏電阻區別在哪

    光照傳感器光敏電阻是兩種不同的光電元件,它們在光電領域中有著廣泛的應用。雖然它們都對光有響應,但它們在工作原理、結構、性能、應用等方面存在顯著差異。 一、工作原理 光照
    的頭像 發表于 10-12 14:34 ?729次閱讀

    光照傳感器光敏傳感器一樣嗎

    光照傳感器光敏傳感器并不完全一樣 ,它們在工作原理、應用場景以及優缺點上都有所不同。 一、工作原理 光照
    的頭像 發表于 10-12 14:22 ?1136次閱讀

    CW32模塊使用:光敏電阻光照傳感器

    光敏電阻是用硫化隔或硒化隔等半導體材料制成的特殊電阻,其工作原理是基于內光電效應。隨著光照強度的升高,電阻值迅速降低,由于光照產生的載流子都參與導電,在外加電場的作用下作漂移運動,電
    的頭像 發表于 09-18 11:54 ?1325次閱讀
    CW32模塊使用:<b class='flag-5'>光敏</b>電阻<b class='flag-5'>光照</b><b class='flag-5'>傳感器</b>

    16位數字輸出型環境光強度傳感器集成電路bh1750FVI中文數據手冊

    電子發燒友網站提供《16位數字輸出型環境光強度傳感器集成電路bh1750FVI中文數據手冊.pdf》資料免費下載
    發表于 09-11 14:26 ?4次下載

    光敏電阻在光照下阻值是減小還是增大

    光敏電阻是一種特殊的電阻元件,其電阻值會隨著光照強度的變化而發生變化。在光照下,光敏電阻的阻值是減小還是增大,取決于光敏電阻的類型和材料。
    的頭像 發表于 08-27 10:50 ?1906次閱讀

    光敏電阻在無光照射時呈什么狀態

    光敏電阻是一種特殊的電阻,其電阻值會隨著光照強度的變化而變化。在無光照射時,光敏電阻的電阻值會顯著增大,表現出高阻抗的特性。 一、
    的頭像 發表于 08-27 10:39 ?666次閱讀

    光敏電阻隨光照強度的變化規律

    光敏電阻是一種半導體材料,其電阻值會隨著光照強度的變化而變化。這種特性使得光敏電阻在許多領域得到廣泛應用,如光控開關、光度計、自動控制等。 一、光敏電阻的工作原理
    的頭像 發表于 08-27 10:31 ?2576次閱讀

    光敏電阻與光照強度的關系是什么

    光敏電阻是一種特殊的電阻元件,其電阻值會隨著光照強度的變化而變化。 一、光敏電阻的工作原理 光敏電阻是一種半導體材料制成的電阻元件,其電阻值會隨著
    的頭像 發表于 08-27 10:29 ?1740次閱讀

    【外設移植】I2C 光照傳感器BH1750)M61開發板驅動

    本作品由安信可社區用戶 制作 IC光度傳感器模塊種類很多,我選擇一種比較常用的模塊(BH1750)做外設移植。BH1750的優點如下: 1、支持標準快速模式的IIC通信 2、模塊IIC通信地址可以
    的頭像 發表于 03-21 11:24 ?1052次閱讀
    【外設移植】I2C <b class='flag-5'>光照</b>度<b class='flag-5'>傳感器</b>(<b class='flag-5'>BH1750</b>)M61開發板驅動

    I2C光照傳感器BH1750)M61開發板驅動步驟

    IC光度傳感器模塊種類很多,我選擇一種比較常用的模塊(BH1750)做外設移植。
    的頭像 發表于 03-17 16:00 ?2587次閱讀
    I2C<b class='flag-5'>光照</b>度<b class='flag-5'>傳感器</b>(<b class='flag-5'>BH1750</b>)M61開發板驅動步驟

    光敏傳感器的組成 光敏傳感器的應用

    光敏傳感器的組成 光敏傳感器的應用 光敏傳感器是一種能夠檢測和測量光能的設備,廣泛應用于光電變換
    的頭像 發表于 03-08 15:32 ?2335次閱讀
    主站蜘蛛池模板: 午夜A级理论片左线播放| www.精品视频| 京香在线观看| 98色精品视频在线| 四虎永久在线精品免费A| 精品AV国产一区二区三区| 3DNagoonimation动漫| 色欲AV精品一区二区入口| 精品久久久亚洲精品中文字幕| 97 sese| 神马伦理2019影院不卡片| 久久99国产视频| 成人无码精品1区2区3区免费看| 我的奶头被客人吸的又肿又红| 黄色片软件大全| xart欧美一区在线播放| 亚洲乱码AV久久久久久久| 欧美精品一卡二卡| 国产伦子沙发午休系列资源曝光| 折磨比基尼美女挠肚子| 天海翼精品久久中文字幕| 快播理伦片| 国产乱码伦人偷精品视频| 91精品国产入口| 午夜精品久久久久久99热蜜桃| 免费的黄直播| 黄色日本女人| 国产精品成人观看视频免费| 99久久免费看少妇高潮A片| 亚洲国产欧美日本大妈| 秋霞电影院兔费理论观频84mb| 精品第一国产综合精品蜜芽| 俄罗斯XXXXXL18| 95国产欧洲精华液| 亚洲绝美精品一区二区| 日韩免费一区| 免费看黄色一级| 九九99热久久精品在线6| 国产第一页浮力影院| https黄视| 5g在视影讯天天5g免费观看|