📄 ds18b20-2.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 + -