完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#include ***it DS =P1^7;//温度传感器接口6 ***it dian=P0^7;//小数点 unsigned int t;//温度值 unsigned char num;//延时函数入口参数 unsigned char table[]={0x00,0x00,0x00};//装温度转换值 unsigned code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39};//最后一个是温度符号 delay_us(unsigned char num)//微妙级延时 { while(num--); } delay_ms(unsigned char num)//毫秒级延时 { unsigned int j; for(;num>0;num--) for(j=0;j<121;j++); } void DS_18B20_start()//18B20初始化 { unsigned char x=0; DS = 1; //DQ复位 delay_us(8); //稍做延时 DS = 0; //单片机将DQ拉低 delay_us(80); //精确延时,大于480us DS = 1; //拉高总线 delay_us(14); x = DS; //稍做延时后,如果x=0则初始化成功,x=1则初始化失败 delay_us(20); } unsigned int Readonechar()//读取一个字节 { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DS = 0; // 给脉冲信号 dat>>=1; DS = 1; // 给脉冲信号 if(DS) dat|=0x80; delay_us(4); } return(dat); } void Writeonechar(unsigned char dat)//写一个字节 { unsigned char i=0; for (i=8; i>0; i--) { DS = 0; DS = dat&0x01; delay_us(5); DS = 1; dat>>=1; } } unsigned int Get_temperature(void)//温度获取 { unsigned char a=0; unsigned char b=0; unsigned char tt=0; unsigned char temp=0; DS_18B20_start(); Writeonechar(0xCC); //跳过读序号列号的操作 Writeonechar(0x44); //启动温度转换 DS_18B20_start(); Writeonechar(0xCC); //跳过读序号列号的操作 Writeonechar(0xBE); //读取温度寄存器 a=Readonechar(); //读低8位 b=Readonechar(); //读高8位 tt=b; tt<<=8; tt=tt|a; temp=tt*0.0625; t=temp*10+0.5; //放大10倍输出并四舍五入 t=temp*10; return(t); } void convdata()//温度转换 { unsigned int T; T=Get_temperature(); table[0]=T/1000; table[1]=T%1000/100; table[2]=T%1000%100; } void display()//温度显示 { P0=table1[table[0]];//十位 P3=0xfe; delay_ms(10); P3=0xff; P0=table1[table[1]];//个位 P3=0xfd; dian=1; delay_ms(10); P3=0xff; P0=table1[table[2]];//小数点后一位 P3=0xfb; delay_ms(10); P3=0xff; P0=table1[10];//单位 P3=0xf7; delay_ms(10); P3=0xff; } void main()//主函数 { unsigned char p,q; p=0; q=0; P0=0xff; P3=0xff; DS_18B20_start(); /* for(q=0;q<10;q++) { Get_temperature(); convdata(); display(); } */ while(1) { Get_temperature(); convdata(); for(p=0;p<50;p++) { display(); } } }
|
|
相关推荐
1个回答
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
298 浏览 1 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
309 浏览 0 评论
826 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1911 浏览 2 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1427 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12031 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 05:52 , Processed in 0.528612 second(s), Total 74, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号