当前位置: 首页 > news >正文

单片机精进之路-9ds18b20温度传感器

ds18b20复位时序图,先将b20的数据引脚拉低至少480us,然后再将数据引脚拉高15-60us,再去将测传感器的数据引脚是不是变低电平并保持60-240us,如果是,则说明检测到温度传感器,并正常工作。需要在240us后才能检测温度值

 发送数据时序:主机将总线拉低60-120us,然后释放总线,表示发送0;主机将总线拉低1-15us,然后释放总线,表示发送1。从机将在总线拉低30us后(典型值)读取电平,整个时间片应大于60us。

接收数据时许:主机将总线拉低1-15us,然后释放总线,并在拉低后15us内读取总线电平(尽量贴近15us的末尾),读取为低电平则为接收0,读取为高电平则为接收1,整个时间片应大于60us。

/*****************************************************************************程序功能:实时采集当前环境温度值,并显示于数码管上。
*****************************************************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned intsbit DS=P2^2;           //define interface
uint temp;             // variable of temperature
bit flag;            // sign of the result positive or negative
sbit dula=P2^6;
sbit wela=P2^7;unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};void delay(uint count)      //delay
{uint i;while(count){i=200;while(i>0)i--;count--;}
}bit dsreset(void)       //发送复位和初始化命令
{uint i;DS=0;i=103;while(i>0)i--;DS=1;i=4;while(i>0)i--;flag = DS;for (i = 0; i < 200; i ++);return flag;
}bit tmpreadbit(void)       //读取一个比特
{uint i;bit dat;DS=0;i++;          //i++ for delayDS=1;i++;i++;dat=DS;i=8;while(i>0)i--;return (dat);
}uchar tmpread(void)   //读取一个字节数据
{uchar i,j,dat;dat=0;for(i=1; i<=8; i++){j=tmpreadbit();dat=(j<<7) | (dat>>1);   //读出的数据最低位在最前面,这样刚好一个字节在DAT里}return(dat);
}void tmpwritebyte(uchar dat)   //向ds18b20写一个字节
{uint i;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb)     //write 1{DS=0;i++;i++;DS=1;i=8;while(i>0)i--;}else{DS=0;       //write 0i=8;while(i>0)i--;DS=1;i++;i++;}}
}void tmpchange(void)  //DS18B20 begin change
{dsreset();delay(1);tmpwritebyte(0xcc);  // address all drivers on bustmpwritebyte(0x44);  //  initiates a single temperature conversion
}uint tmp()               //get the temperature
{float tt;uchar a,b;dsreset();delay(1);tmpwritebyte(0xcc);tmpwritebyte(0xbe);a=tmpread();b=tmpread();temp=b;temp<<=8;             //two byte  compose a int variabletemp=temp|a;tt=temp*0.0625;temp=tt*10+0.5;return temp;
}void display(uint temp)			//显示程序
{uchar A1,A2,A2t,A3;A1=temp/100;A2t=temp%100;A2=A2t/10;A3=A2t%10;dula=0;P0=table[A1];		//显示百位dula=1;dula=0;wela=0;P0=0x7e;wela=1;wela=0;delay(1);dula=0;P0=table1[A2];		//显示十位dula=1;dula=0;wela=0;P0=0x7d;wela=1;wela=0;delay(1);P0=table[A3];		//显示个位dula=1;dula=0;P0=0x7b;wela=1;wela=0;delay(1);
}void main()
{uchar a;do{tmpchange();for(a=10; a>0; a--){   display(tmp());}}while(1);
}

http://www.lryc.cn/news/312907.html

相关文章:

  • 支部管理系统微信小程序(管理端+用户端)flask+vue+mysql+微信小程序
  • 4、Linux-常用命令(二)
  • golang实现openssl自签名双向认证
  • 【学习】torchvision.datasets.ImageFolder()
  • pyinstaller打包的exe运行报错 No module named path
  • Vue3中Vuex状态管理库学习笔记
  • React富文本编辑器开发(二)
  • nginx代理minio客户端
  • 将ppt里的视频导出来
  • Spring Boot 3核心技术与最佳实践
  • redis缓存更新策略
  • 【操作系统学习笔记】文件管理1.4
  • 快递包装展|2024上海国际电商物流包装产业展览会
  • vue页面刷新问题:返回之前打开的页面,走了create方法(解决)
  • IJCAI23 - Continual Learning Tutorial
  • 【YOLO v5 v7 v8 v9小目标改进】HTA:自注意力 + 通道注意力 + 重叠交叉注意力,提高细节识别、颜色表达、边缘清晰度
  • 外包干了10天,技术退步明显。。。。。
  • 如何在Win系统本地部署Jupyter Notbook交互笔记并结合内网穿透实现公网远程使用
  • 【自动化测试】之PO模式介绍及案例
  • 3D-Genome | Hi-C互作矩阵归一化指南
  • 【设计者模式】单例模式
  • Windows7缺失api-ms-win-crt-runtime-l1-1-0.dll的解决方法
  • coqui-ai/TTS 安装使用
  • Spring AOP相关注解及执行顺序
  • C++从零开始的打怪升级之路(day44)
  • [C++核心编程](七):类和对象——运算符重载*
  • 什么是MVC和MVVM
  • 物体检测-系列教程23:YOLOV5 源码解析13 (SPP层、Flatten模块、Concat模块、Classify模块)
  • 2024.3.6每日一题
  • YOLOSHOW - YOLOv5 / YOLOv7 / YOLOv8 / YOLOv9 基于 Pyside6 的图形化界面