完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
硬件:
BH1750.c #include “BH1750.h” void GPIOConfig( void ) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE ); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Pin = sda | scl; GPIO_Init( GPIOA, &GPIO_InitStruct ); } void Delay_5us( void ) { delay_us(5); } void Delay_mms( unsigned int tmp ) { unsigned int i = 0; 而 (tmp--) { delay_ms (1); } } void BH1750_Start() { GPIO_SetBits(GPIOA, sda); GPIO_SetBits(GPIOA, scl); Delay_5us(); GPIO_ResetBits(GPIOA, sda); Delay_5us(); GPIO_ResetBits( GPIOA, scl ); } void BH1750_Stop() { GPIO_ResetBits(GPIOA, sda); GPIO_SetBits(GPIOA, scl); Delay_5us(); GPIO_SetBits(GPIOA, sda); Delay_5us(); } void BH1750_SendACK( unsigned 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( GPIOA, &GPIO_InitStruct ); if ( ack == 1 ) GPIO_SetBits( GPIOA, sda ); 否则 if ( ack == 0 ) GPIO_ResetBits( GPIOA, sda ); 否则 返回; GPIO_SetBits(GPIOA, scl); Delay_5us(); GPIO_ResetBits( GPIOA, scl ); Delay_5us(); } unsigned 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( GPIOA, &GPIO_InitStruct ); GPIO_SetBits(GPIOA, scl); Delay_5us(); if ( GPIO_ReadInputDataBit( GPIOA, sda ) == 1 ) mcy = 1; 否则 mcy = 0; GPIO_ResetBits( GPIOA, scl ); Delay_5us(); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init( GPIOA, &GPIO_InitStruct ); 返回(mcy); } |
|
|
|
void BH1750_SendByte( unsigned char dat )
{ unsigned char i; for ( i = 0; i 《 8; i++ ) { if ( 0X80 & dat ) GPIO_SetBits( GPIOA, sda ); 否则 GPIO_ResetBits( GPIOA, sda ); 数据《《= 1; GPIO_SetBits(GPIOA, scl); Delay_5us(); GPIO_ResetBits( GPIOA, scl ); Delay_5us(); } BH1750_RecvACK(); } 无符号字符 BH1750_RecvByte() { 无符号字符 i; 无符号字符数据 = 0; 无符号字符位; 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( GPIOA, &GPIO_InitStruct ); GPIO_SetBits(GPIOA, sda); for ( i = 0; i 《 8; i++ ) { dat 《《= 1; GPIO_SetBits(GPIOA, scl); Delay_5us(); 如果(SET == GPIO_ReadInputDataBit(GPIOA,sda)) 位= 0X01; 其他 位 = 0x00; 数据 |= 位; GPIO_ResetBits( GPIOA, scl ); Delay_5us(); } GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init( GPIOA, &GPIO_InitStruct ); 返回(数据); } void Single_Write_BH1750( unsigned char REG_Address ) { BH1750_Start(); BH1750_SendByte(从地址); BH1750_SendByte( REG_Address ); /* BH1750_SendByte(REG_data); BH1750_停止(); } void Init_BH1750() { GPIOConfig(); Single_Write_BH1750(0x01); } void mread( void ) { unsigned char i; BH1750_Start(); BH1750_SendByte(SlaveAddress + 1); for ( i = 0; i 《 3; i++ ) { BUF[i] = BH1750_RecvByte(); if ( i == 3 ) { BH1750_SendACK( 1 ); }else { BH1750_SendACK(0); } } BH1750_Stop(); 延迟时间(5); } BH1750.h #ifndef __BH1750_H__ #define __BH1750_H__ #include “sys.h” #define sda GPIO_Pin_4 #define scl GPIO_Pin_3 #define SlaveAddress 0x46 extern unsigned char BUF[8]; extern int dis_data; 外部国际; 无效Init_BH1750(无效); void 转换( unsigned int temp_data ); void Single_Write_BH1750( unsigned char REG_Address ); unsigned char Single_Read_BH1750( unsigned char REG_Address ); 无效mread(无效); 无效延迟_5us(无效); void Delay_mms( unsigned int tmp ); 无效GPIO配置(无效); #万一 使用: 在main.c里面#include “BH1750.h” 在main.c里声明下面几个控件 无符号字符BUF[8]; int dis_data; 国际化; 浮光功率; 在main.c里初始化Init_BH1750(); /* 初始化 BH1750 */ 在while(1)里面,结果的lightPower就是光亮的单位是lx 延迟毫秒(5); t++; 如果 (t 》 40) { mread(); dis_data = BUF[0]; dis_data = (dis_data 《《 8) + BUF[1]; lightPower = (float) dis_data / 1.2; Single_Write_BH1750(0x01); Single_Write_BH1750(0x10); 展示(); t = 0; } 参考main.c #include “sys.h” #include “delay.h” #include “usart.h” #include “timer.h” #include “oled.h” /* oled */ #include 《stdio.h 》 #include 《stdlib.h》 #include 《string.h》 #include “BH1750.h” unsigned char BUF[8]; int dis_data; 国际化; 浮光功率; 外部结构 ds1302time 时间; 字符贤士[30]; u8 tmp_buf[33]; void display( void ) { memset( xianshi, 0, sizeof(xianshi) ); sprintf( 先是, “%02d:%02d:%02d”, time.hour, time.minute, time.second ); OLED_P8x16Str( 0, 2, xianshi, 0 ); memset(xianshi, 0, sizeof(xianshi) ); sprintf( 先是, “%.1f”, lightPower ); OLED_P8x16Str( 0, 4, xianshi, 0 ); } int main( void ) { u8 t = 0; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 延迟初始化(); RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO, ENABLE ); GPIO_PinRemapConfig( GPIO_Remap_SWJ_JTAGDisable, ENABLE); 串口初始化(9600); Init_BH1750(); while ( 1 ) { delay_ms( 5 ); t++; 如果 ( t 》 40 ) { 读(); dis_data = BUF[0]; dis_data = (dis_data 《《 8) + BUF[1]; lightPower = (float) dis_data / 1.2; Single_Write_BH1750(0x01); Single_Write_BH1750(0x10); 展示(); t = 0; } } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1781 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1085 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1680 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
732浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
596浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
559浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 12:04 , Processed in 1.149582 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号