完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#define uint unsigned int #define uchar unsigned char uchar temp,shi,ge; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 显示段码值0123456789 void DelayUs2x(uchar t); void DelayMs(uchar t); bit Init_DS18B20(void); ***it DQ=P3^2; ***it dula=P2^0; ***it wela=P2^1; uchar ReadOneChar(void); void WriteOneChar(uchar dat); void display(uchar a,b,c); uint ReadTemperature(void); void main() { while(1) { temp=ReadTemperature(); temp=temp>>4; shi=temp/10; ge=temp%10; display(shi,ge,0); } } bit Init_DS18B20(void) { bit dat; DQ=1; DelayUs2x(5); DQ=0; //单片机将DQ拉低 DelayUs2x(200); //精确延时 大于 480us 小于960us DelayUs2x(200); DQ = 1; //拉高总线 DelayUs2x(50); //15~60us 后 接收60-240us的存在脉冲 dat=DQ; //如果x=0则初始化成功, x=1则初始化失败 DelayUs2x(25); //稍作延时返回 return dat; } /*------------------------------------------------ 读取一个字节 ------------------------------------------------*/ uchar ReadOneChar(void) { uchar i=0; uchar dat = 0; for (i=8;i>0;i--) { DQ = 0; // 给脉冲信号 dat>>=1; DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; DelayUs2x(33); } return(dat); } /*------------------------------------------------ 写入一个字节 ------------------------------------------------*/ void WriteOneChar(unsigned dat) { uchar i=0; for (i=8; i>0; i--) { DQ = 0; DQ = dat&0x01; DelayUs2x(33); DQ = 1; dat>>=1; } DelayUs2x(25); } /*------------------------------------------------ 读取温度 ------------------------------------------------*/ uint ReadTemperature(void) { uchar a=0; uint b=0; uint t=0; Init_DS18B20(); WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 DelayMs(50); Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度 a=ReadOneChar(); //低位 b=ReadOneChar(); //高位 b<<=8; t=a+b; return(t); } void display(uchar a,b,c) { while(1) { wela=1; P0=0xfd; wela=0; dula=1; P0=table[a]; dula=0; DelayMs(10); wela=1; P0=0xfb; wela=0; dula=1; P0=table[b]|0x80; dula=0; DelayMs(10); wela=1; P0=0xf7; wela=0; dula=1; P0=table[c]; dula=0; DelayMs(10); } } void DelayUs2x(uchar t) { while(--t); } void DelayMs(uchar t) { while(t--) { //大致延时1mS DelayUs2x(245); DelayUs2x(245); } }
|
|
相关推荐
1个回答
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
7 浏览 0 评论
26 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
13 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
644 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1000 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11771 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 16:56 , Processed in 0.540878 second(s), Total 74, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号