//测光照
void Read_Light()
{
unsigned int lx_data;
delay_nms(200); //延时200ms
Single_Write_BH1750(0x01); //初始化BH1750
Single_Write_BH1750(0x10); //H- resolution mode
delay_nms(180); //延时180ms
Multiple_Read_BH1750(); //连续读出数据,存储在BUF中
dis_data=BUF[0];
dis_data=(dis_data<<8)+BUF[1]; //合成数据
lx_data=dis_data/1.2;
BH_BUF[0] = lx_data/256;
BH_BUF[1] = lx_data%256;
}
//测温湿度
void RH(void)
{
AM_DATA=0; //主机拉低18ms
Delay(180);
AM_DATA=1; //总线由上拉电阻拉高 主机延时20us
delay10us(4);
AM_DATA=1; //主机设为输入 判断从机响应信号
if(!AM_DATA) //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
{
U8FLAG=2;
while((!AM_DATA)&&U8FLAG++); //判断从机是否发出 80us 的低电平响应信号是否结束
U8FLAG=2;
while((AM_DATA)&&U8FLAG++); //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
COM(); //数据接收状态
U8RH_data_H_temp=U8comdata;
COM();
U8RH_data_L_temp=U8comdata;
COM();
U8T_data_H_temp=U8comdata;
COM();
U8T_data_L_temp=U8comdata;
COM();
U8checkdata_temp=U8comdata;
AM_DATA=1;
U8temp = (U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); //数据校验
if(U8temp == U8checkdata_temp)
{
U8RH_data_H = U8RH_data_H_temp;
U8RH_data_L = U8RH_data_L_temp;
U8T_data_H = U8T_data_H_temp;
U8T_data_L = U8T_data_L_temp;
U8checkdata = U8checkdata_temp;
shidu = U8RH_data_H<<8;
shidu = shidu+U8RH_data_L;
wendu = U8T_data_H<<8;
wendu = wendu+U8T_data_L;
}
}
}
void main(void)
{
uint data_int = 0;
INIT_Time0();
Init_BH1750(); //初始化BH1750
WDTInit();
P1 = 0;
while(1)
{
WDT();
if(Flag_Time1 >= 0)
{
Flag_Time1 = 0;
RH(); //读取温湿度数据
TxBuf[0]=U8T_data_H;
TxBuf[1]=U8T_data_L;
TxBuf[2]=U8RH_data_H;
TxBuf[3]=U8RH_data_L;
//读取光照数据
Read_Light();
TxBuf[4]=BH_BUF[0];
TxBuf[5]=BH_BUF[1];
//读取CO2数据
Co2_Value(&TxBuf1[0],&TxBuf1[1]);
SroftFilter_data(&data_int);
TxBuf[6] = data_int/256;
TxBuf[7] = data_int%256;
TxBuf[8] = TxBuf1[0];
TxBuf[9] = TxBuf1[1];
Tx_Buf(TxBuf,10);
}
}
}
单步调试的时候,调试到测光照的函数Read_Light();时,进入此函数中调试,此函数调试结束,程序怎么突然跳到了测温湿度的函数RH()中的倒数第二句话wendu = U8T_data_H<<8;上(真奇怪!!)?接着调试,运行完RH()中的最后一句,程序又回到main函数开始处,一直这么循环,怎么回事呢??
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>