php网站开发干嘛的,搜索引擎推广一般包括( ),网站建设交接协议书,基于 seajs 的高性能网站开发和优化实践_王保平(淘宝)目录 一.元件介绍及原理
二#xff0c;应用#xff1a;DS18B20读取温度 一.元件介绍及原理
1.元件
2.内部介绍 本次元件使用的是单总线
以下为单总线的介绍 时序结构 操作流程 本次需要使用的是SKIP ROM 跳过#xff0c; CONVERT T温度变化#xff0c;READ SCRATCHPAD…目录 一.元件介绍及原理
二应用DS18B20读取温度 一.元件介绍及原理
1.元件
2.内部介绍 本次元件使用的是单总线
以下为单总线的介绍 时序结构 操作流程 本次需要使用的是SKIP ROM 跳过 CONVERT T温度变化READ SCRATCHPAD读
数据帧 数据存储 根据上图所示原理所需要的延时值为绝对数值可以在STC中生成 二应用DS18B20读取温度
先根据单线的时序结构写好对应的五个函数功能再在DS18B20数据帧中调用单线的函数实现数据帧的功能最后在main函数中调用LCD1602和其他功能函数显示温度
1.单线功能函数
#include REGX52.H//引脚定义
sbit OneWire_DQP3^7;/*** brief 单总线初始化* param 无* retval 从机响应位0为响应1为未响应*/
unsigned char OneWire_Init(void)
{unsigned char i;unsigned char AckBit;OneWire_DQ1;OneWire_DQ0;i 247;while (--i); //Delay 500usOneWire_DQ1;i 32;while (--i); //Delay 70usAckBitOneWire_DQ;i 247;while (--i); //Delay 500usreturn AckBit;
}/*** brief 单总线发送一位* param Bit 要发送的位* retval 无*/
void OneWire_SendBit(unsigned char Bit)
{unsigned char i;OneWire_DQ0;i 4;while (--i); //Delay 10usOneWire_DQBit;i 24;while (--i); //Delay 50usOneWire_DQ1;
}/*** brief 单总线接收一位* param 无* retval 读取的位*/
unsigned char OneWire_ReceiveBit(void)
{unsigned char i;unsigned char Bit;OneWire_DQ0;i 2;while (--i); //Delay 5usOneWire_DQ1;i 2;while (--i); //Delay 5usBitOneWire_DQ;i 24;while (--i); //Delay 50usreturn Bit;
}/*** brief 单总线发送一个字节* param Byte 要发送的字节* retval 无*/
void OneWire_SendByte(unsigned char Byte)
{unsigned char i;for(i0;i8;i){OneWire_SendBit(Byte(0x01i));}
}/*** brief 单总线接收一个字节* param 无* retval 接收的一个字节*/
unsigned char OneWire_ReceiveByte(void)
{unsigned char i;unsigned char Byte0x00;for(i0;i8;i){if(OneWire_ReceiveBit()){Byte|(0x01i);}}return Byte;
}2.DS18B20函数
#include REGX52.H
#include OneWire.h//DS18B20指令
#define DS18B20_SKIP_ROM 0xCC
#define DS18B20_CONVERT_T 0x44
#define DS18B20_READ_SCRATCHPAD 0xBE/*** brief DS18B20开始温度变换* param 无* retval 无*/
void DS18B20_ConvertT(void)
{OneWire_Init();OneWire_SendByte(DS18B20_SKIP_ROM);OneWire_SendByte(DS18B20_CONVERT_T);
}/*** brief DS18B20读取温度* param 无* retval 温度数值*/
float DS18B20_ReadT(void)
{unsigned char TLSB,TMSB;int Temp;float T;OneWire_Init();OneWire_SendByte(DS18B20_SKIP_ROM);OneWire_SendByte(DS18B20_READ_SCRATCHPAD);TLSBOneWire_ReceiveByte();TMSBOneWire_ReceiveByte();Temp(TMSB8)|TLSB;TTemp/16.0;return T;
}3.main函数
#include REGX52.H
#include LCD1602.h
#include DS18B20.h
#include Delay.hfloat T;void main()
{DS18B20_ConvertT(); //上电先转换一次温度防止第一次读数据错误Delay(1000); //等待转换完成LCD_Init();LCD_ShowString(1,1,Temperature:);while(1){DS18B20_ConvertT(); //转换温度TDS18B20_ReadT(); //读取温度if(T0) //如果温度小于0{LCD_ShowChar(2,1,-); //显示负号T-T; //将温度变为正数}else //如果温度大于等于0{LCD_ShowChar(2,1,); //显示正号}LCD_ShowNum(2,2,T,3); //显示温度整数部分LCD_ShowChar(2,5,.); //显示小数点LCD_ShowNum(2,6,(unsigned long)(T*10000)%10000,4);//显示温度小数部分}
}
效果显示 原理图