单片机学习小组
直播中

武梨格

7年用户 230经验值
私信 关注

为什么我的驱动程序不能实时显示温湿度?

这是我自己写的,芯片采用stc12c5a60s2。最大的问题就是不能实时显示温湿度,单片机掉电后无法保存。
/*--------------------延时(10us级)------------------*/
void delay_us(uint i)
{
while(i--);
}
/*--------------------延时(ms级)------------------*/
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
/*--------------温湿度初始化(准备传送数据)----------*/
void dht_init()
{
//delay(1000); //延时一会,避开不稳定区域
dht=0;  //拉低延时800微秒,发送开始信号
delay(5);
dht=1;  //释放总线,延时80微秒
delay_us(40);
while(!dht); //拉低等待
while(dht); //拉高等待,即将传送数据
}
uchar read_byte()
{
uchar n,byte=0,dat;
for(n=0;n<8;n++)
{
   while(!dht);
delay_us(40);   //理论上28us<延时<70us,此处写2--6都可以
dat=0;
if(dht)  
dat=1;
while(dht);
byte<<=1;
byte|=dat;
//byte=(byte<<=1)|dat; //0
}
return byte;
}   
/*----------------------读40位数据---------------------*/
void read_hum_temp()
{
   
hum_h=read_byte(); //读湿度
hum_l=read_byte();
temp_h=read_byte();  //读温度
temp_l=read_byte();
check=read_byte(); //读校验
while(!dht);  //等待低电平结束
dht=1;//最后拉高总线
}
void zhuanhuan() //提取各位数字
{    uint hum,temp;
uchar a;
a=hum_h+hum_l+temp_h+temp_l;
if(a==check)
{
hum=temp=0;   //hum湿度 temp温度  全局
hum=((hum|hum_h)<<8)|hum_l;
temp=((temp|temp_h)<<8)|temp_l;
bai3=hum/100;
shi3=hum%100/10;
ge3=hum%100%10;
bai4=temp/100;
shi4=temp%100/10;
ge4=temp%100%10;
}
else bai3=shi3=ge3=bai4=shi4=ge4=1;
   
}

回帖(2)

阿信509

2019-7-12 17:21:59
你的温湿度能实时采集回来吗?需要确定一下
举报

人中狼

2019-7-14 10:46:42
要看你的主程序了,要实时显示,通常都要在主程序里不停的检测温度,才能实时显示
举报

更多回帖

发帖
×
20
完善资料,
赚取积分