完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这是我自己写的,芯片采用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个回答
|
|
你的温湿度能实时采集回来吗?需要确定一下
|
|
|
|
要看你的主程序了,要实时显示,通常都要在主程序里不停的检测温度,才能实时显示
|
|
|
|
只有小组成员才能发言,加入小组>>
3274 浏览 9 评论
2949 浏览 16 评论
3449 浏览 1 评论
8971 浏览 16 评论
4042 浏览 18 评论
1088浏览 3评论
563浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
558浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2296浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1853浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-15 02:22 , Processed in 1.612277 second(s), Total 83, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号