123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- #include <REG52.h>
- #include <BH1750.h> //Keil library
- #include <INTRINS.H>
- #define SlaveAddress 0x46
-
- typedef unsigned char BYTE;
- typedef unsigned short WORD;
- BYTE BUF[8];
- void IICdelay_xms(unsigned int k);
- void Init_BH1750(void);
- void Single_Write_BH1750(uchar REG_Address);
- uchar Single_Read_BH1750(uchar REG_Address);
- void Multiple_Read_BH1750();
- void Delay5us();
- void Delay5ms();
- void BH1750_Start();
- void BH1750_Stop();
- void BH1750_SendACK(bit ack);
- bit BH1750_RecvACK();
- void BH1750_SendByte(BYTE dat);
- BYTE BH1750_RecvByte();
- void IICdelay_xms(unsigned int k)
- {
- unsigned int i,j;
- for(i=0;i<k;i++)
- {
- for(j=0;j<121;j++)
- {;}
- }
- }
- void Delay5us()
- {
- unsigned char i;
- _nop_();
- i = 11;
- while (--i);
- }
- void Delay5ms()
- {
- unsigned char i, j;
- i = 54;
- j = 199;
- do
- {
- while (--j);
- } while (--i);
- }
- void BH1750_Start()
- {
- SDA_BH1750 = 1;
- SCL_BH1750 = 1;
- Delay5us();
- SDA_BH1750 = 0;
- Delay5us();
- SCL_BH1750 = 0;
- }
- void BH1750_Stop()
- {
- SDA_BH1750 = 0;
- SCL_BH1750 = 1;
- Delay5us();
- SDA_BH1750 = 1;
- Delay5us();
- }
- void BH1750_SendACK(bit ack)
- {
- SDA_BH1750 = ack;
- SCL_BH1750 = 1;
- Delay5us();
- SCL_BH1750 = 0;
- Delay5us();
- }
- bit BH1750_RecvACK()
- {
- SCL_BH1750 = 1;
- Delay5us();
- CY = SDA_BH1750;
- SCL_BH1750 = 0;
- Delay5us();
- return CY;
- }
- void BH1750_SendByte(BYTE dat)
- {
- BYTE i;
- for (i=0; i<8; i++)
- {
- dat <<= 1;
- SDA_BH1750 = CY;
- SCL_BH1750 = 1;
- Delay5us();
- SCL_BH1750 = 0;
- Delay5us();
- }
- BH1750_RecvACK();
- }
- BYTE BH1750_RecvByte()
- {
- BYTE i;
- BYTE dat = 0;
- SDA_BH1750 = 1;
- for (i=0; i<8; i++)
- {
- dat <<= 1;
- SCL_BH1750 = 1;
- Delay5us();
- dat |= SDA_BH1750;
- SCL_BH1750 = 0;
- Delay5us();
- }
- return dat;
- }
- void Single_Write_BH1750(uchar REG_Address)
- {
- BH1750_Start();
- BH1750_SendByte(SlaveAddress);
- BH1750_SendByte(REG_Address);
-
- BH1750_Stop();
- }
- void Multiple_read_BH1750(void)
- {
-
- uchar i;
- BH1750_Start();
- BH1750_SendByte(SlaveAddress+1);
- EA=0;
- for (i=0; i<3; i++)
- {
- BUF[i] = BH1750_RecvByte();
- if (i == 3)
- {
- BH1750_SendACK(1);
- }
- else
- {
- BH1750_SendACK(0);
- }
- }
- EA=1;
- BH1750_Stop();
- Delay5ms();
- }
- void Init_BH1750()
- {
- Single_Write_BH1750(0x01);
- }
- unsigned int BH1750_temp(void)
- {
- unsigned int dis_data;
- Init_BH1750();
- Single_Write_BH1750(0x01);
- Single_Write_BH1750(0x10);
- IICdelay_xms(200);
- Multiple_Read_BH1750();
- dis_data=BUF[0];
- dis_data=(dis_data<<8)+BUF[1];
- return dis_data;
- }
|