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

📄 ds18b20.c~

📁 C语言编写的DS18B20温度传感器的程序
💻 C~
字号:
#include<mega16.h>  
#include<delay.h> 
#include<stdlib.h> 
#include<string.h>
#asm
        .equ __lcd_port=0x1b  //端口A
    #endasm
#include <lcd.h>
#define uchar unsigned char
//char flash string[]="date:";
//char flash s[]="time:";
char flash s1[]="wendu:" ;
//char flash s2[]="\xdfC" ; 
char tempstr[5];  
//char s3[]="set tempature"; 
//char s4[]="temparature is" ;
//char s5[]="too high";
#define QD_PORT PORTC
#define QD_DDR DDRC
#define QD_PIN PINC
#define QD_H   QD_PORT|=0x01    //PC0置高
#define QD_L   QD_PORT&=~0x01 //下拉
#define QD_DDRL QD_DDR&=~0x01
#define QD_DDRH QD_DDR|=0x01    
float tempa ;
/*void lcd_xianshiflash(uchar x,uchar y,char flash *string)
{
     lcd_gotoxy(x,y);
     lcd_putsf(string);
} */
void b20_init(void)     //初始化
{   
      
   QD_DDRH;
   QD_H; 
   delay_us(4);
   QD_L;
   delay_us(500);
   QD_H;
   QD_DDRL;  delay_us(5); 
   while(QD_PIN&0x01);
   while(!QD_PIN&0x01);  
   QD_DDRH;
   QD_H;
   delay_us(20);
}
void b20_write_byte(uchar data) //写时间隙
{   
    uchar i;
    for(i=0;i<8;i++)
    { 
         if(data&0x01)
        { 
           QD_L;
           delay_us(7);
           QD_H;
           delay_us(55);
        }
       else
       {
            QD_L;
            delay_us(60);
            QD_H;
            delay_us(8);
        }
        data=data>>1;
    }
}
uchar b20_read_byte(void)  //读时间隙
{
    uchar data,i;
    data=0x00;
    for(i=0;i<8;i++)
    {  
        QD_L;
        delay_us(5);
        QD_H;
        delay_us(2);
        if(QD_PIN&0x01)
         { 
            data|=(0x01<<i);
         }
        delay_us(45); 
    }
    return (data);
}  
void b20_write_command(uchar command)
{   
    b20_init(); 
    delay_ms(1);   
    b20_write_byte(0xCC);
    b20_write_byte(command);
}
void b20_read_temparater(void)
{     
     
    
     int temp;  
     uchar templ,temph; 
     
     b20_write_command(0x44);//开始温度转换
     b20_write_command(0xBE);//读取暂存器和CRC字节 
     templ=b20_read_byte();
     temph=b20_read_byte();//高字节        
     lcd_gotoxy(1,1);   
     lcd_puts(0);
     if(temph&0x80)
     {
         temp=temph;
         temp=(temp<<8)|templ;
         temp=(-1)*temp;
         lcd_gotoxy(9,1);
         lcd_putchar('-');
     }  
     else  {
          temp=temph;
          temp=(temp<<8)|templ;
         }  
     tempa=(temp>>4)+(temp&0x0F)/16.0;        
     
     
}  
void main()
{
    
    if(lcd_init(16))                                    
    {
        lcd_clear(); 
        while(1)
        {
         b20_read_temparater(); 
         ftoa(tempa,1,tempstr);//将浮点通过ftoa函数转为一个字符串,然后把字符串中的每一个字符依次发送出去。  
         lcd_gotoxy(0,0);
         lcd_putsf(s1);
         lcd_gotoxy(7,0) ;
           lcd_puts(tempstr) ; //该函数将在从当前的显示位置开始,显示定义在SRAM中的字符串      
           delay_ms(1000);
         }
     }      
}

⌨️ 快捷键说明

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