传感器资讯网<br>——最新最专业的物联网传感器资讯平台

传感器资讯网
——最新最专业的物联网传感器资讯平台
一起来关注各类工业传感器、工业自动化、工业互联网、物联网

发一个51的DS18B20温度传感器的程序

更新时间:2016-10-19 17:52:30人气:843

温度传感器

#include 51.H>
#include                         //信号端定义
#define jump_ROM 0xCC                   //跳过ROM命令
#define start    0x44               //启动转换命令
#define read_EEROM 0xBE  
sbit lcde="P2^7;sbit rw="P2^6;sbit rs="P2^5;  sbit DQ="P1^0;             " //读存储器命令
unsigned char TMPH,TMPL;                //温度值
unsigned int ds18b20_temp,ds_temp;
void get_temp(void);
void delayms(unsigned int t)   /*1MS左右*/
{
while (t!=0)
{
unsigned int i;
for(i="0;i<123;i++);t--;
}
}
void delay(unsigned int N) 
{
int i;
for(i="0;i}
void lcdwcom(unsigned char com)//写命令函数
{
rs="0;rw="0;P0=com;
delayms(5);
lcde="1;delayms(5);
lcde="0;}
void lcdwdate(unsigned char date)//写数据函数
{
rs="1;rw="0;P0=date;
delayms(5);
lcde="1;delayms(5);
lcde="0;}
void lcdinit()//液晶初始化函数
{
lcde="0;lcdwcom(0x38);
lcdwcom(0x08);
lcdwcom(0x01);
lcdwcom(0x06);
lcdwcom(0x0c);
lcdwcom(0x80+0x4);
}


//--------------------
// 函数名称: Reset
// 入口参数: 无
// 返回deceive_ready
// 函数功能:复位 
//--------------------
unsigned char Reset(void) 
{
   unsigned char deceive_ready;
   delay(10); 
   DQ="0;                              " //拉低DQ线 
   delay(29);                          //延时至少480us~960us
   DQ="1;                              " //将DQ线设置位逻辑高    
   delay(3);                           //延时等待deceive_ready响应 
   deceive_ready="DQ;                  " //采样deceive_ready信号
   delay(25);                          //等待时序结束
   return(deceive_ready);              //有deceive_ready信号时返回0,否则返回1
}


//---------------------------
// 函数名称:read_bit
// 入口参数: 无
// 返回接收的数据
// 函数功能:读一个bit子程序 
//---------------------------
unsigned char read_bit(void)
{
unsigned char i;
DQ="0;                                " //拉低DQ线开始时序
DQ="1;                                " //升高DQ线                        
for(i="0;i<3;i++);        " //延时至时序开始15us
return(DQ);                           //返回DQ值
}


//---------------------------
// 函数名称: write_bit
// 入口参数: bitval
// 函数功能:写一个bit子程序 
//---------------------------
void write_bit(unsigned char bitval)
{
DQ="0;                            " //拉低DQ线开始时序
if(bitval="=1)DQ="1;                            " //如果写逻辑为高
delay(5);                         //延时 
DQ="1;                            " //升高DQ线 
}


//----------------------------
// 函数名称: write_byte
// 入口参数: val
// 函数功能:写一个byte子程序 
//----------------------------
void write_byte(unsigned char val)
{
unsigned char i,temp;
for(i="0;i<8;i++){
    temp="val">>i;                        //将val位右移i位赋值给比temp
    temp="temp&0x01;                    " //取temp最低位
    write_bit(temp);
    delay(5);                           //延时至时序结束
}
}


//----------------------------
// 函数名称: read_byte
// 返回接收的数据 value
// 函数功能:读一个byte子程序 
//----------------------------
unsigned char read_byte(void)
{
unsigned char i,m,receive_data;
m="1;receive_data="0;                         " //初始化
for(i="0;i<8;i++){
    if(read_bit()) 
    {
      receive_data="receive_data+(m<    }                                          //每读一位数据据,左移一位 
    delay(6);                                  //延时至时序结束 

return(receive_data);                        //返回value
}


//---------------------------
// 函数名称: get_temp
// 返回接收的数据 TMPL, TMPH
// 函数功能:取出温度值ds_temp
//---------------------------
void get_temp(void)
{
Reset();
write_byte(jump_ROM);       //发跳过ROM命令
write_byte(start);          //发启动转换命令
//delay(1000);
Reset();
write_byte(jump_ROM);       //发跳过ROM命令
write_byte(read_EEROM);     //发跳过ROM命令
TMPL="read_byte();          " //读低8位温度值
TMPH="read_byte();          " //读高8位温度值
ds18b20_temp = TMPH<< 8; 
ds18b20_temp |=TMPL; 
ds_temp="ds18b20_temp*0.0625;}

 

PREVIOUS数控机床对传感器的使用有什么要求?

【中国机床商务网 读者问答】由于高精度、高速度、高效率及安全可靠的特点,在制造业技术设备更新中,数控机床正迅速地在企业得到普及。数控机床是一种装有程序控制系统的自动化机床,能够根据已编好的程序,使机床动作并加工零件。读者:数控机床综合了机械、自动化、计算机、...

广泛应用于传感器的电流输入型前置放大器电路及工作原理NEXT

本放大器又称电流-电压转换器,是OP放大器的有效应用实例,由于本电路反相输入端是作为假设地而工作的,可以作为输入电阻极低的电流测量,也可作为各种传感器的前置放大器使用。在本电路输出端增加一个模拟表头,把输入电流转换成电压。则可构成高灵敏度的电流计。电路工作原...

closense-els16