欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STM32的BH1750程序
[打印本頁]
作者:
@yy
時間:
2019-10-12 20:44
標題:
STM32的BH1750程序
單片機源程序如下:
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "usart.h"
#include "hard_i2c_driver.h"
#include "arc_lcd.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
extern I2C_INIT_INFO I2C_Info; ///<I2C控制器相關信息
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/**
* @brief 延時函數
* @param Time 延時時間參數
* @retval None
*/
void Delay(uint32_t Time)
{
while(Time--);
}
/**
* @brief 串口打印輸出溫度和濕度
* @param None
* @retval None
*/
int main(void)
{
uint8_t I2C_Data[10],ret;
uint8_t DataString[100];
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x4000); //重新映射中斷向量表
SystemInit();//系統時鐘初始化
USART_Configuration(115200);//串口1初始化
printf("\x0c\0");printf("\x0c\0");//超級終端清屏
printf("\033[1;40;32m");//設置超級終端背景為黑色,字符為綠色
printf("\r\n*******************************************************************************");
printf("\r\n************************ Copyright 2009-2012, ViewTool ************************");
printf("\r\n************************* viewtoolcom *************************");
printf("\r\n***************************** All Rights Reserved *****************************");
printf("\r\n*******************************************************************************");
printf("\r\n");
ARC_LCD_Init();//初始化LCD
ARC_LCD_Clear(LCD_COLOR_BLACK);
//根據BH1750FVI傳感器設置I2C初始化數據
I2C_Info.controlMode = 1;//硬件控制
I2C_Info.speed=100000;//100K
I2C_Info.subAddrMode=2;//無子地址模式
I2C_Info.subAddrWidth=0;//子地址為0字節寬度
I2C_Info.slaveAddr=0x46;//BH1750FVI傳感器I2C地址
I2C_Info.channel=1;//使用I2C2
VT_I2C_HardInit(&I2C_Info);
I2C_Data[0]=0x01;
VT_I2C_HardWriteNByte(I2C2,0,I2C_Data,1);//傳感器芯片上電命令
while(1)
{
I2C_Data[0]=0x11;
ret = VT_I2C_HardWriteNByte(I2C2,0,I2C_Data,1);//發送測量命令
if(ret){
printf("I2C寫數據錯誤 %d\n\r",ret);
}
Delay(3000000);//等待大于120ms,必須加這個延時,否則傳感器沒準備好數據會出現讀數據錯誤
ret = VT_I2C_HardReadNByte(I2C2,0,I2C_Data,2);//讀取光照強度值
if(ret){
printf("I2C讀數據錯誤 %d\n\r",ret);
}else{
printf("光強度:%f lx\n\r",((I2C_Data[0]<<8)+I2C_Data[1])/(1.2*2));
sprintf((char *)DataString,"%0.1f",((I2C_Data[0]<<8)+I2C_Data[1])/(1.2*2));
ARC_LCD_DispMyString(0,70,DataString);//將測得的溫度值在LCD上顯示
}
Delay(1000000);
}
}
#ifdef USE_FULL_ASSERT
/**
* @brief 報告在檢查參數發生錯誤時的源文件名和錯誤行數
* @param file 源文件名
* @param line 錯誤所在行數
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* 用戶可以增加自己的代碼用于報告錯誤的文件名和所在行數,
例如:printf("錯誤參數值: 文件名 %s 在 %d行\r\n", file, line) */
/* 無限循環 */
while (1)
{
}
}
#endif
/*********************************END OF FILE**********************************/
復制代碼
所有資料51hei提供下載:
光照.7z
(732.92 KB, 下載次數: 54)
2019-10-12 21:56 上傳
點擊文件名下載附件
32的BH1750程序
下載積分: 黑幣 -5
作者:
admin
時間:
2019-10-12 23:47
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
作者:
@yy
時間:
2019-10-13 21:25
#include "BH1750.h"
#include "stdio.h"
uchar BUF[8];
int mcy;
uint date[4];
uint dis_data;
void GPIOConfig(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Pin = sda | scl;
void Delay_5us(void)
{
uint16_t i=0;
uint16_t timer = 5;
while(timer--)
{
i=10;
while(i--);
}
}
void Delay_mms(uint16_t tmp)
{
uint16_t i=0;
while(tmp--)
{
i=12000;
while(i--);
}
}
void BH1750_Start()
{
GPIO_SetBits(GPIOB, sda);
GPIO_SetBits(GPIOB, scl);
Delay_5us();
GPIO_ResetBits(GPIOB, sda);
Delay_5us();
}
void BH1750_Stop()
{
GPIO_ResetBits(GPIOB, scl);
GPIO_ResetBits(GPIOB, sda);
GPIO_SetBits(GPIOB, scl);
Delay_5us();
GPIO_SetBits(GPIOB, sda);
Delay_5us();
}
void BH1750_SendACK(int ack)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Pin = sda;
GPIO_Init(GPIOB, &GPIO_InitStruct);
if(ack == 1)
GPIO_SetBits(GPIOB, sda);
else if(ack == 0)
GPIO_ResetBits(GPIOB, sda);
else
return;
GPIO_SetBits(GPIOB, scl);
Delay_5us();
GPIO_ResetBits(GPIOB, scl);
Delay_5us();
}
int BH1750_RecvACK()
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Pin = sda;
GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_SetBits(GPIOB, scl);
Delay_5us();
if(GPIO_ReadInputDataBit( GPIOB, sda ) ==1 )
mcy = 1 ;
else
mcy = 0 ;
GPIO_ResetBits(GPIOB, scl);
Delay_5us();
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init( GPIOB, &GPIO_InitStruct );
return mcy;
}
void BH1750_SendByte(uchar dat)
{
uchar i;
for (i=0; i<8; i++)
{
if( 0X80 & dat )
GPIO_SetBits( GPIOB, sda);
else
GPIO_ResetBits( GPIOB, sda);
dat <<= 1;
GPIO_SetBits(GPIOB, scl);
Delay_5us();
GPIO_ResetBits(GPIOB, scl);
Delay_5us();
}
BH1750_RecvACK();
}
uchar BH1750_RecvByte()
{
uchar i;
uchar dat = 0;
uchar bit;
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Pin = sda;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init( GPIOB, &GPIO_InitStruct );
GPIO_SetBits( GPIOB, sda);
for (i=0; i<8; i++)
{
dat <<= 1;
GPIO_SetBits( GPIOB, scl);
Delay_5us();
if( SET == GPIO_ReadInputDataBit( GPIOB, sda ) )
bit = 0X01;
else
bit = 0x00;
dat |= bit;
GPIO_ResetBits( GPIOB, scl);
Delay_5us();
}
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init( GPIOB, &GPIO_InitStruct );
return dat;
}
void Single_Write_BH1750(uchar REG_Address)
{
BH1750_Start();
BH1750_SendByte(SlaveAddress);
BH1750_SendByte(REG_Address);
// BH1750_SendByte(REG_data);
BH1750_Stop();
}
void Init_BH1750()
{
//Single_Write_BH1750(0x01);
Single_Write_BH1750(0x01);
Single_Write_BH1750(0x10);
Delay_mms(180);
}
void mread(void)
{
uchar i;
BH1750_Start();
BH1750_SendByte(SlaveAddress+1);
for (i=0; i<3; i++)
{
BUF[i] = BH1750_RecvByte();
dis_data=BUF[i];
date[i]=(dis_data<<8)+BUF[i];
if (i == 3)
{
BH1750_SendACK(1);
}
else
{
BH1750_SendACK(0);
}
Delay_mms(5);
}
date[0]=(date[0]+date[1]+date[2])/3;
BH1750_Stop();
Delay_mms(5);
}
BH1750光強傳感器.pdf
2019-10-13 21:11 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
433.63 KB, 下載次數: 12, 下載積分: 黑幣 -5
模塊詳細資料
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1