⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.c

📁 avr基础程序大全
💻 C
字号:
//包含所需头文件
#include "Com_header.h"


#define CLR_DIR_1WIRE  DDRD&=~BIT(7)     // 设置总线为输出口  
#define SET_DIR_1WIRE  DDRD|=BIT(7)     // 设置总线为输入口  
#define CLR_OP_1WIRE   PORTD&=~BIT(7)   // 总线清0 
#define SET_OP_1WIRE   PORTD|=BIT(7)   // 总线置1    
#define CHECK_IP_1WIRE (PIND&BIT(7))     // 检测总线状态  








unsigned int ms_count; 
unsigned char wmh,wml;  
unsigned long int WenDu; 





//************************************************************************ 
//===初始化18B20=== 
//************************************************************************ 
void init_18b20()   
{   
    SET_DIR_1WIRE;     // 设置总线为输出  
    SET_OP_1WIRE;    
    CLR_OP_1WIRE;   
    Delay_us(250);      
    Delay_us(250);     // 等待500us 
     
    SET_OP_1WIRE;   
    CLR_DIR_1WIRE;   
    Delay_us(20);      // 15~60us   
    while(CHECK_IP_1WIRE);   
    SET_DIR_1WIRE;   
    SET_OP_1WIRE;   
    Delay_us(140);     // 60~240us   
}  
//************************************************************************ 
//===写入一个字节到18B20=== 
//************************************************************************ 
void write_18b20(unsigned char x)   
{      
    unsigned char m;   
    for(m=0;m<8;m++)   
    {   
       CLR_OP_1WIRE;   
       if(x&(1<<m))    // 先写低位数据  
       SET_OP_1WIRE;   
       else   
       {CLR_OP_1WIRE;}   
       Delay_us(40);   // 15~60us   
       SET_OP_1WIRE;   
    }   
//     SET_OP_1WIRE;   
}   
//************************************************************************ 
//===从18B20读取一个字节=== 
//************************************************************************ 
unsigned char read_18b20()   
{       
    unsigned char temp,k,n;   
    temp=0;   
    for(n=0;n<8;n++)   
    {   
        CLR_OP_1WIRE;   
        SET_OP_1WIRE;   
        CLR_DIR_1WIRE;   
        k=(CHECK_IP_1WIRE);    // 从低位开始读数据   
        if(k)   
            temp|=(1<<n);   
        else   
            temp&=~(1<<n);   
        Delay_us(50);          // 60~120us       
        SET_DIR_1WIRE;   
   }   
   return (temp);   
}    
//************************************************************************ 
//===读取温度值=== 
//************************************************************************ 
void gettemp()                   //读取温度值  
{   
    unsigned char tem_h,tem_l;//,wm0,wm1,wm2,wm3; 
     
    init_18b20();        // 复位18b20   
    write_18b20(0xcc);   // 跳过ROM命令   
    write_18b20(0x44);   // 启动温度转换 
    //__delay_cycles(6400000); 
    Delay_ms(200);       // 不延时也好使,不知道怎么回事! 
    Delay_ms(200);       // 不延时也好使,不知道怎么回事! 
    Delay_ms(200);       // 不延时也好使,不知道怎么回事! 
    Delay_ms(200);       // 不延时也好使,不知道怎么回事! 
     
    init_18b20();
    write_18b20(0xcc);   // 发送跳过ROM命令 
    write_18b20(0xbe);   // 发送读数据命令 
    tem_l=read_18b20();   // 读温度低字节   
    tem_h=read_18b20();   // 读温度高字节 

    WenDu=tem_h; 
    WenDu<<=8; 
    WenDu+=tem_l; 
    WenDu=6.25*WenDu; 
}    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -