久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2046|回復: 0
打印 上一主題 下一主題
收起左側

自己寫的傳感器代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:347687 發表于 2018-6-8 16:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
void Single_Write_BH1750(uint8_t REG_Data)
{
while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY)!=RESET);//檢測是否總線忙
I2C_TransferHandling(I2C1,SlaveAddress,1,I2C_SoftEnd_Mode,I2C_Generate_Start_Write);
while(I2C_GetFlagStatus(I2C1,I2C_FLAG_TXIS)==RESET);//檢測發送
I2C_SendData(I2C1,REG_Data);
while(I2C_GetFlagStatus(I2C1,I2C_FLAG_TC)==RESET);
I2C_GenerateSTOP(I2C1,ENABLE);
while(I2C_GetFlagStatus(I2C1,I2C_FLAG_STOPF)==RESET);//是否停止
}
uint16_t Read_BH1750()
{
uint16_t Recev=0x00;//光強為16位。先發送高8后低8
while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY)!=RESET);//IFBUSY
I2C_TransferHandling(I2C1,SlaveAddress+1,2,I2C_AutoEnd_Mode,I2C_Generate_Start_Read);
while(I2C_GetFlagStatus(I2C1,I2C_FLAG_RXNE)==RESET);
Recev|=I2C_ReceiveData(I2C1);Recev<<=8;
while(I2C_GetFlagStatus(I2C1,I2C_FLAG_RXNE)==RESET);
Recev|=I2C_ReceiveData(I2C1);
while(I2C_GetFlagStatus(I2C1,I2C_FLAG_STOPF)==RESET);
return Recev;
}
void BH1750_Get_Guang(float*Zhaodu)
#include"stm32f10x_lib.h"
#define uchar unsigned char
#define uint unsigned int
#define DataPort P0//LCD1602數據端口
#define SlaveAddress 0x46#define BH1750_SCL GPIO_Pin_14
#define BH1750_SDA GPIO_Pin_15
#define GPIO_I2C GPIOB
#defineBH1750_SCL_0()GPIOF->BRR=BH1750_SCL
#define BH1750_SCL_1()GPIOF->BSRR=BH1750_SCL
#define BH1750_SDA_0()GPIOF->BRR=BH1750_SDA
#define BH1750_SDA_1()GPIOF->BSRR=BH1750_SDA
#define BH1750_SDA_STATE()(GPIOF->IDR&BH1750_SDA)
return(GPIOB->IDR typedefunsigned char BYTE;
typedef unsigned short WORD;BYTE BUF[8];//接收數據緩存區
uchar ge,shi,bai,qian,wan;//顯示變量
int dis_data;//變量
void Init_BH1750(void);
void conversion(uint temp_data);void Single_Write_BH1750(ucharREG_Address); uchar Single_Read_BH1750(uchar REG_Address);
void Multiple_Read_BH1750(void);//連續的讀取內部寄存器數據
u8BH1750_Start(void);
void BH1750_Stop(void);
u8 BH1750_SendByte(u8 Data);
u8 BH1750_ReceiveByte(void);
void BH1750_SendACK(void);
void BH1750_SendNACK(void);
void BH1750_Nop
(void voidBH1750_Delay(unsigned int u8BH1750_ACK u8BH1750_READYu8BH1750_NACK
u8BH1750_BUS_BUSY
u8BH1750_BUS_ERROR u8BH1750_RETRY_COUNT//重試次數
void BH1750_Nop(void)u8i=50;
while(i)
voidBH1750_Delay(unsigned
int unsignedintu8BH1750_Start(void)BH1750_SDA_1();BH1750_Nop();
BH1750_SCL_1();BH1750_Nop();
if(!BH1750_SDA_STATE())//
//DebugPrint("TWI_START:BUSY\n");
return BH1750_BUS_BUSY;
BH1750_SDA_0();
BH1750_Nop();
BH1750_SCL_0();BH1750_Nop();
if(BH1750_SDA_STATE())//
//DebugPrint("TWI_START:BUSERROR\n");
return BH1750_BUS_ERROR;
returnBH1750_READY;
voidBH1750_Stop(void)
BH1750_SDA_0();BH1750_Nop();
BH1750_SCL_1();BH1750_Nop();
BH1750_SDA_1();BH1750_Nop();//
//DebugPrint("TWI_STOP\n");
voidBH1750_SendACK(void)BH1750_SDA_0();
BH1750_Nop();
BH1750_SCL_1();
BH1750_Nop();
BH1750_SCL_0();
BH1750_Nop();
BH1750_SDA_1();
//DebugPrint("TWI_SendACK\n");
voidBH1750_SendNACK(void)BH1750_SDA_1();
BH1750_Nop();
BH1750_SCL_1();
BH1750_Nop();
BH1750_SCL_0();
BH1750_Nop();//
//DebugPrint("TWI_SendNACK\n");
//---------數據建立----------if(Data&0x80)Data<<=1;BH1750_Nop();//---數據建立保持一定延時----//
BH1750_SCL_1();
BH1750_Nop();
BH1750_SCL_0();
BH1750_Nop();//延時,防止SCL還沒變成低時改變SDA,從而產生START/STOP信號//接收從機的應答BH1750_SDA_1();
BH1750_Nop();
BH1750_SCL_1();
BH1750_Nop();
if(BH1750_SDA_STATE())BH1750_SCL_0();BH1750_SDA_1();//
//DebugPrint("TWI_NACK!n");return BH1750_NACK;
BH1750_SCL_0();
BH1750_SDA_1();//
//DebugPrint("TWI_ACK!n");
return BH1750_ACK;
u8BH1750_ReceiveByte(void)u8i,Dat;
BH1750_SDA_1();
BH1750_SCL_0();
Dat=0;BH1750_SCL_1();//產生時鐘上升沿[正脈沖],讓從機準備好數據BH1750_Nop();
Dat<<=1;if(BH1750_SDA_STATE())//讀引腳狀態BH1750_SCL_0();//準備好再次接收數據BH1750_Nop();//等待數據準備好//
//DebugPrint("TWI_Dat:%xn",Dat);
return Dat;
//voidconversion(uint temp_data)temp_data=temp_data%10000;
//取余運算
temp_data=temp_data%1000;//取余運算
temp_data=temp_data%100;//取余運算
temp_data=temp_data%10;//取余運算
voidSingle_Write_BH1750(uchar
REG_Address)BH1750_Start();//起始信號
BH1750_SendByte(SlaveAddress);//發送設備地址+寫信號
BH1750_SendByte(REG_Address);//內部寄存器地址,
BH1750_SendByte(REG_data);//內部寄存器數據,
BH1750_Stop();//發送停止信號
ucharSingle_Read_BH1750(uchar REG_Address)
ucharREG_data;BH1750_Start();//起始信號
BH1750_SendByte(SlaveAddress);//發送設備地址+寫信號
BH1750_SendByte(REG_Address);//發送存儲單元地址,從0開始
BH1750_Start();//起始信號
BH1750_SendByte(SlaveAddress+1);//發送設備地址+讀信號
REG_data=BH1750_RecvByte();//讀出寄存器數
BH1750_SendACK(1);BH1750_Stop();//停止信號
return REG_data;//連續讀出BH1750內部數據
voidMultiple_Read_BH1750(void)BH1750_Start();
//起始信號
BH1750_SendByte(SlaveAddress+1);//發送設備地址+讀信號
BH1750_ReceiveByte();//BUF[0]存儲0x32地址中的數據
BH1750_SendNACK();//最后一個數據需要回NOACK
BH1750_SendACK();//回應
ACK BH1750_Stop();//停止信號//
Delay5ms();BH1750_Delay(500)//初始化BH1750,
void Init_BH1750()
voidBH1750_Get_Guang(float*Zhaodu)//延時100ms
Init_BH1750();//初始化BH1750
Single_Write_BH1750(0x01);
resolutionmode BH1750_Delay(200)//延時180ms
Multiple_Read_BH1750();//連續讀出數據,存儲在BUF dis_data=BUF[0];
dis_data=(dis_data<<8)+BUF[1];
//合成數據,即光照數據
*Zhaodu=(float)dis_data/1.2;

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天堂av中文在线 | 黄色小视频入口 | 亚洲v日韩v综合v精品v | 国产精品美女久久久久久久久久久 | 成人在线免费视频 | 精品一区国产 | 人人干人人艹 | 久久av一区二区三区 | 色婷婷国产精品综合在线观看 | 中文字幕一区二区三区四区 | 欧美日韩国产一区二区三区不卡 | 日韩一区在线观看视频 | 久久国产香蕉 | 亚洲天堂成人在线视频 | 韩三级在线观看 | 99久久婷婷国产综合精品 | 日日草夜夜草 | 日日天天| 看片一区| 亚洲欧洲精品在线 | 在线免费观看一区二区 | 黑人巨大精品欧美一区二区免费 | 91精品国产美女在线观看 | 九九久久精品 | a欧美 | 国产内谢| 中文字幕在线观看 | 在线一区二区三区 | 免费欧美 | 狠狠干天天干 | 操夜夜| 国产精品 欧美精品 | 国产午夜亚洲精品不卡 | 国产1区 | av看片网站| 天天射夜夜操 | 成人免费视频观看视频 | 久久精品99久久 | 欧美国产一区二区 | 三级黄色片在线播放 | 国产日韩一区二区三区 |