123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- #include "bh1750.h"
- #define SlaveAddress 0x46
- unsigned char BUF[4];
- void BH1750IO_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
- }
- void In_mode(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- }
- void Out_mode(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- }
- void BH1750_Start()
- {
- SDA_OUT();
- SETSDA;
- SETSCL;
- delay_us(4);
- CLRSDA;
- delay_us(4);
- CLRSCL;
- }
- void BH1750_Stop()
- {
- SDA_OUT();
- CLRSDA;
- SETSCL;
- delay_us(4);
- SETSDA;
- delay_us(4);
- }
- void BH1750_SendACK(unsigned char ack)
- {
- SDA_OUT();
- if(ack)
- {
- SETSDA;
- }
- else
- {
- CLRSDA;
- }
- SETSCL;
- delay_us(2);
- CLRSCL;
- delay_us(2);
- }
- unsigned char BH1750_RecvACK()
- {
- unsigned char data;
- SDA_IN();
- SETSCL;
- delay_us(2);
- data = READ_SDA;
- CLRSCL;
- delay_us(2);
- return data;
- }
- void BH1750_SendByte(unsigned char dat)
- {
- unsigned char i,bit;
- SDA_OUT();
- for (i=0; i<8; i++)
- {
- bit=dat&0x80;
- if(bit)
- {
- SETSDA;
- }
- else
- CLRSDA;
- dat <<= 1;
- SETSCL;
- delay_us(2);
- CLRSCL;
- delay_us(2);
- }
- BH1750_RecvACK();
- }
- unsigned char BH1750_RecvByte()
- {
- unsigned char i;
- unsigned char dat = 0;
- unsigned char a;
- SDA_IN();
- SETSDA;
- for(i=0; i<8; i++)
- {
- dat <<= 1;
- SETSCL;
- delay_us(2);
- a=READ_SDA;
- if(a==1)dat+=1;
- CLRSCL;
- delay_us(2);
- }
- return dat;
- }
- void Single_Write_BH1750( unsigned char REG_Address)
- {
- BH1750_Start();
- BH1750_SendByte(SlaveAddress);
- BH1750_SendByte(REG_Address);
- BH1750_Stop();
- }
- void Multiple_Read_BH1750(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();
- }
- void BH1750_Init()
- {
- BH1750IO_Init();
- Single_Write_BH1750(0x01);
- CLRADDR;
- }
- unsigned int data;
- unsigned int return_gz(void)
- {
- return data;
- }
- unsigned int Read_gz(void)
- {
- static float temp;
- static char ifg=0;
- int dis_data;
- switch(ifg)
- {
- case 0:
- Single_Write_BH1750(0x01);
- Single_Write_BH1750(0x10);
- ifg++;
- return 20;
-
- case 1:
- Multiple_Read_BH1750();
- dis_data=BUF[0];
- dis_data=(dis_data<<8)+BUF[1];
- temp=(float)dis_data/1.2;
- data=(int)temp;
- ifg=0;
- break;
- }
- return 100;
- }
- unsigned int Dispose(void)
- {
- static float temp_a;
- unsigned int data_a;
- int dis_data1 ;
- Single_Write_BH1750(0x01);
- Single_Write_BH1750(0x10);
- delay_ms(200);
- Multiple_Read_BH1750();
- delay_ms(150);
- dis_data1=BUF[0];
- dis_data1=(dis_data1<<8)+BUF[1];
- temp_a=(float)dis_data1/1.2;
- data_a=(int)temp_a;
- return data_a;
- }
|