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

📄 my_ds18b20.i

📁 ATmega128L+CC2420的单片机源程序
💻 I
字号:


/* maximum number of DS18B20 connected to the 1 Wire bus */

#pragma used+
void DS18B20_Init(void);
float GetTemperature(void);
unsigned char Get_ALL_DS18B20_Num(void);
void Show_ALL_DS18B20_ROM_Codes(void);
void Set_ALL_DS18B20(void);
void Get_ALL_DS18B20_Temperature(void);
#pragma used-


/*
  CodeVisionAVR C Compiler
  (C) 1998-2000 Pavel Haiduc, HP InfoTech S.R.L.

  Prototypes for Dallas Semiconductor
  1 Wire protocol functions

  BEFORE #include -ING THIS FILE YOU
  MUST DECLARE THE I/O ADDRESS OF THE
  DATA REGISTER OF THE PORT AT WHICH
  THE 1 WIRE BUS IS CONNECTED AND
  THE DATA BIT USED

  EXAMPLE FOR PORTB:

    #asm
        .equ __w1_port=0x18
        .equ __w1_bit=3
    #endasm
    #include <1wire.h>
*/


#pragma used+
unsigned char w1_init(void);
unsigned char w1_read(void);
unsigned char w1_write(unsigned char data);
unsigned char w1_search(unsigned char cmd,void *p);
unsigned char w1_dow_crc8(void *p,unsigned char n);
#pragma used-


/*
  CodeVisionAVR C Compiler
  (C) 1998-2005 Pavel Haiduc, HP InfoTech S.R.L.

  Prototypes for Dallas Semiconductor
  DS18B20 1 Wire bus temperature sensor
  functions

  BEFORE #include -ING THIS FILE YOU
  MUST DECLARE THE I/O ADDRESS OF THE
  DATA REGISTER OF THE PORT AT WHICH
  THE 1 WIRE BUS IS CONNECTED AND
  THE DATA BIT USED

  EXAMPLE FOR PORTB:

    #asm
        .equ __w1_port=0x18
        .equ __w1_bit=3
    #endasm
    #include <ds1820.h>
*/


/*
  CodeVisionAVR C Compiler
  (C) 1998-2000 Pavel Haiduc, HP InfoTech S.R.L.

  Prototypes for Dallas Semiconductor
  1 Wire protocol functions

  BEFORE #include -ING THIS FILE YOU
  MUST DECLARE THE I/O ADDRESS OF THE
  DATA REGISTER OF THE PORT AT WHICH
  THE 1 WIRE BUS IS CONNECTED AND
  THE DATA BIT USED

  EXAMPLE FOR PORTB:

    #asm
        .equ __w1_port=0x18
        .equ __w1_bit=3
    #endasm
    #include <1wire.h>
*/







#pragma used+
extern struct __ds18b20_scratch_pad_struct
       {
       unsigned char temp_lsb,temp_msb,
                temp_high,temp_low,
                conf_register,
                res1,
                res2,
                res3,
                crc;
       } __ds18b20_scratch_pad;

unsigned char ds18b20_select(unsigned char *addr);
unsigned char ds18b20_read_spd(unsigned char *addr);
float ds18b20_temperature(unsigned char *addr);
unsigned char ds18b20_init(unsigned char *addr,signed char temp_low,signed char temp_high,
unsigned char resolution);
#pragma used-

#pragma library ds18b20.lib


/* CodeVisionAVR C Compiler
   Prototypes for standard library functions

   (C) 1998-2003 Pavel Haiduc, HP InfoTech S.R.L.
*/




#pragma used+

int atoi(char *str);
long int atol(char *str);
float atof(char *str);
void itoa(int n,char *str);
void ltoa(long int n,char *str);
void ftoa(float n,unsigned char decimals,char *str);
void ftoe(float n,unsigned char decimals,char *str);
void srand(int seed);
int rand(void);
void *malloc(unsigned int size);
void *calloc(unsigned int num, unsigned int size);
void *realloc(void *ptr, unsigned int size); 
void free(void *ptr);

#pragma used-
#pragma library stdlib.lib


// CodeVisionAVR C Compiler
// (C) 1998-2006 Pavel Haiduc, HP InfoTech S.R.L.

// Prototypes for standard I/O functions


// CodeVisionAVR C Compiler
// (C) 1998-2002 Pavel Haiduc, HP InfoTech S.R.L.

// Variable length argument list macros



typedef char *va_list;





#pragma used+

char getchar(void);
void putchar(char c);
void puts(char *str);
void putsf(char flash *str);

char *gets(char *str,unsigned int len);

void printf(char flash *fmtstr,...);
void sprintf(char *str, char flash *fmtstr,...);
void snprintf(char *str, unsigned int size, char flash *fmtstr,...);
void vprintf (char flash * fmtstr, va_list argptr);
void vsprintf (char *str, char flash * fmtstr, va_list argptr);
void vsnprintf (char *str, unsigned int size, char flash * fmtstr, va_list argptr);
signed char scanf(char flash *fmtstr,...);
signed char sscanf(char *str, char flash *fmtstr,...);




                                   

            


#pragma used-

#pragma library stdio.lib



//============================ DS18B20接PC7脚 ==============================================
// 1 Wire Bus functions
#asm
   .equ __w1_port=0x1B ;PORTA
   .equ __w1_bit=0
#endasm
//==========================================================================================


unsigned char rom_code[8][9];     // DS18B20 devices ROM code storage area 
unsigned char devices;  //how many DS18B20 devices are connected to the 1 Wire bus 

char lcd_buffer[33];


/***********************************************
* DS18B20初始化函数
************************************************/ 
void DS18B20_Init(void)
{
    w1_init();          // 1 Wire Bus initialization
}


/***********************************************
* 获取温度函数
************************************************/ 
float GetTemperature(void)
{
    float temp;
    unsigned char temp_char[10];
    
    temp=ds18b20_temperature(0);
    
    ftoa(temp,5,temp_char);     //转换浮点数temp为字符串temp_char,其中第二位参数指定四舍五入保留小数位(最多五位)。
    
    sprintf(lcd_buffer,"%s\xdfC",temp_char);
    //LCD_Clear(); 
    //LCD_write_stringXY(0,0,lcd_buffer);
    
    return temp;
}


/**************************************************************
* 获取总线上18b20个数的函数,并取得18b20的ID号存入rom_code中
**************************************************************/ 
unsigned char Get_ALL_DS18B20_Num(void)
{
    // detect how many DS18B20 devices are connected to the 1 Wire bus 
    devices=w1_search(0xf0,rom_code);
    sprintf(lcd_buffer,"%u DS18B20 Device",devices);
    //LCD_Clear();
    //LCD_write_stringXY(0,0,lcd_buffer);
    delay_ms(2000);
    return  devices; 
} 


/***********************************************
* 显示所有18b20的ID号函数
************************************************/ 
void Show_ALL_DS18B20_ROM_Codes(void)
{
    unsigned char i,j;
    
    // display the ROM codes for each device 
    if (devices)
    {
        for(i=0;i<devices;i++)
        {
            sprintf(lcd_buffer,"#%u Code:",i+1);
            //LCD_Clear();
            //LCD_write_stringXY(0,0,lcd_buffer);
            delay_ms(2000);
            for (j=0;j<8;j++)
            {
                sprintf(lcd_buffer,"%02X ",rom_code[i][j]);
                //LCD_write_string(lcd_buffer);
                if (j==2); 
                    //LCD_set_xy(0,1);
            }
            delay_ms(5000);
        }
    }
    else    // stop here if no devices were found 
    {   
        //while (1);
        sprintf(lcd_buffer,"no devices were found");
        //LCD_Clear();
        //LCD_write_stringXY(0,0,lcd_buffer);
    } 
} 


/***********************************************
* 设置所有18b20的函数
************************************************/ 
void Set_ALL_DS18B20(void)
{
    unsigned char i;
      
    // configure each DS18B20 device for 12 bit temperature measurement resolution 
    for (i=0;i<devices;)
        if (!ds18b20_init(&rom_code[i++][0],20,30,3 )) // stop here if init error 
        {
            sprintf(lcd_buffer,"Init error for\ndevice #%u",i);
            //LCD_Clear();
            //LCD_write_stringXY(0,0,lcd_buffer);
            //while (1);
        };
}



/***********************************************
* 获得所有18b20温度的函数
************************************************/ 
void Get_ALL_DS18B20_Temperature(void)
{
    unsigned char i;
    
    float temp;
    unsigned char temp_char[10];

    // measure and display the temperature(s) */       
    for (i=0;i<devices;i++)
    {
        temp=ds18b20_temperature(&rom_code[i][0]);
        ftoa(temp,5,temp_char); 
            
        sprintf(lcd_buffer,"t%u=%s\xdfC",i+1,temp_char); 
        //LCD_Clear();
        //LCD_write_stringXY(0,0,lcd_buffer);
        delay_ms(500);
    }
}    

⌨️ 快捷键说明

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