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

📄 ds18b20-2.c

📁 msp430x14单片机芯片采集DS18B20的温度,C语言编写。调试过。
💻 C
字号:
#include <msp430x14x.h>
//#define DQ1 P1OUT|=BIT2
//#define DQ0 P1OUT&=~BIT2
unsigned int m,k,ii,j=0; 
static const char led_tab[]=
		{0x7E,0x30,0x6D,0x79,
		0x33,0x5B,0x5F,0x70,
		0X7F,0x7B,0x80};   //7段显示数据表,0-9,"."



#define DQ1 P4OUT|=BIT4
#define DQ0 P4OUT&=~BIT4

float   Temper=0.0;
int     temperature=0;
unsigned char Error = 0;
//----------------------------------
//功能:us 级别延时
// n=10,则延时10*5+6=56uS
//----------------------------------
void DelayNus(unsigned int n)
{
    while(n--){};
}
//-----------------------------------
//功能:写18B20
//-----------------------------------
void Write_18B20(unsigned char n)
{
    unsigned char i;
    for(i=0;i<8;i++)
    {
        DQ0;
        DelayNus(1);//延时13us 左右
        if((n&0X01)==0X01)  DQ1;
        else DQ0;
        n=n>>1;
        DelayNus(9);//延时50us 以上
        DQ1;
    }
}
//------------------------------------
//功能:读取18B20
//------------------------------------
unsigned char Read_18B20(void)
{
    unsigned char i;
    unsigned char temp;
    for(i=0;i<8;i++)
    {
        temp=temp>>1;
        DQ0;
        _NOP();//延时1us
        DQ1;
        _NOP();_NOP();//延时5us
        _NOP();_NOP();_NOP();
        P4DIR&=~BIT4;
        if((P4IN&BIT4)==0)
        {
            temp=temp&0x7F;
        }else
        {
            temp=temp|0x80;
        }
        DelayNus(7);//延时40us
        P4DIR|=BIT4;
        DQ1;
    }
    return    temp;
}
//-----------------------------------
void Init (void)
{
    DQ1;
    DelayNus(10);//延时500us
    DQ0;    
    DelayNus(60);//延时90us
    DQ1;
    DelayNus(10);//延时500us
    P4DIR&=~BIT4;
    if((P4IN&BIT4)==BIT4)        //0001 1111b=1f
    {
        Error =1;    //失败1
        P4DIR|=BIT4;
    }else
    {
        Error = 0;//初始化成功
        P4DIR|=BIT4;
        DQ1;
    }
}
//----------------------------------
void Skip(void)
{
    Write_18B20(0xcc);
}
//----------------------------------
void Convert (void)
{
    Write_18B20(0x44);
}

//----------------------------------
void ReadDo (void)
{
    Write_18B20(0xbe);
}
//----------------------------------

void ReadTemp (void)
{
    char temp_low,temp_high; //温度值
    temp_low=Read_18B20(); //读低位
    temp_high=Read_18B20(); //读高位
    temperature=(temp_high&0x0f);
    temperature<<=8;
    temperature|=temp_low;
    Temper=temperature*0.0625;
}

void GetTemp(void){
        Init();
        Skip();
        Convert();
        DelayNus(60000);
        DelayNus(60000);
        DelayNus(60000);//延时1s以上
        Init();
        Skip();
        ReadDo();
        ReadTemp();
}



void main(void)
{
    WDTCTL = WDTPW + WDTHOLD; // 停狗
    P4DIR |=BIT4;
    DQ1;
    
     P2DIR |=0xFF;
     P3DIR |=0xFF; 
     P3OUT=0XFF;
    while(1)
        {
        GetTemp();
        
        j=Temper*100;

for(k=0;k<400;k++)
{

P2OUT=led_tab[j/1000];  //千位
P3OUT&=~BIT1;
P3OUT|=BIT2;
P3OUT|=BIT3;
P3OUT|=BIT4;
for(ii=0;ii<=100;ii++);  //显示短暂停顿

m=j%1000;
P2OUT=led_tab[m/100];  //百位
P3OUT|=BIT1;
P3OUT&=~BIT2;
P3OUT|=BIT3;
P3OUT|=BIT4;
for(ii=0;ii<=100;ii++);

m=j%100;
P2OUT=led_tab[m/10]; //十位
P3OUT|=BIT1;
P3OUT|=BIT2;
P3OUT&=~BIT3;
P3OUT|=BIT4;
for(ii=0;ii<=100;ii++);

m=j%10;
P2OUT=led_tab[m]; //个位
P3OUT|=BIT1;
P3OUT|=BIT2;
P3OUT|=BIT3;
P3OUT&=~BIT4;
for(ii=0;ii<=100;ii++);

P2OUT=led_tab[10];  //小数点
P3OUT|=BIT1;
P3OUT&=~BIT2;
P3OUT|=BIT3;
P3OUT|=BIT4;
for(ii=0;ii<=100;ii++);

}
}
}

  

⌨️ 快捷键说明

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