#include <reg52.h>
#include <intrins.h>//头文件
sbit DS =P1^7;//温度传感器接口6
sbit dian=P0^7;//小数点
unsigned int t;//温度值
unsigned char num;//延时函数入口参数
unsigned char table[]={0x00,0x00,0x00};//装温度转换值
unsigned code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39};//最后一个是温度符号
delay_us(unsigned char num)//微妙级延时
{
while(num--);
}
delay_ms(unsigned char num)//毫秒级延时
{
unsigned int j;
for(;num>0;num--)
for(j=0;j<121;j++);
}
void DS_18B20_start()//18B20初始化
{
unsigned char x=0;
DS = 1; //DQ复位
delay_us(8); //稍做延时
DS = 0; //
单片机将DQ拉低
delay_us(80); //精确延时,大于480us
DS = 1; //拉高总线
delay_us(14);
x = DS; //稍做延时后,如果x=0则初始化成功,x=1则初始化失败
delay_us(20);
}
unsigned int Readonechar()//读取一个字节
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DS = 0; // 给脉冲信号
dat>>=1;
DS = 1; // 给脉冲信号
if(DS)
dat|=0x80;
delay_us(4);
}
return(dat);
}
void Writeonechar(unsigned char dat)//写一个字节
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DS = 0;
DS = dat&0x01;
delay_us(5);
DS = 1;
dat>>=1;
}
}
unsigned int Get_temperature(void)//温度获取
{
unsigned char a=0;
unsigned char b=0;
unsigned char tt=0;
unsigned char temp=0;
DS_18B20_start();
Writeonechar(0xCC); //跳过读序号列号的操作
Writeonechar(0x44); //启动温度转换
DS_18B20_start();
Writeonechar(0xCC); //跳过读序号列号的操作
Writeonechar(0xBE); //读取温度寄存器
a=Readonechar(); //读低8位
b=Readonechar(); //读高8位
tt=b;
tt<<=8;
tt=tt|a;
temp=tt*0.0625;
t=temp*10+0.5; //放大10倍输出并四舍五入
t=temp*10;
return(t);
}
void convdata()//温度转换
{
unsigned int T;
T=Get_temperature();
table[0]=T/1000;
table[1]=T%1000/100;
table[2]=T%1000%100;
}
void display()//温度显示
{
P0=table1[table[0]];//十位
P3=0xfe;
delay_ms(10);
P3=0xff;
P0=table1[table[1]];//个位
P3=0xfd;
dian=1;
delay_ms(10);
P3=0xff;
P0=table1[table[2]];//小数点后一位
P3=0xfb;
delay_ms(10);
P3=0xff;
P0=table1[10];//单位
P3=0xf7;
delay_ms(10);
P3=0xff;
}
void main()//主函数
{
unsigned char p,q;
p=0;
q=0;
P0=0xff;
P3=0xff;
DS_18B20_start();
/* for(q=0;q<10;q++)
{
Get_temperature();
convdata();
display();
} */
while(1)
{
Get_temperature();
convdata();
for(p=0;p<50;p++)
{
display();
}
}
}
-
-
-
TRY_DS.rar
下载积分: 积分 -1 分
64.61 KB, 下载次数: 10, 下载积分: 积分 -1 分
P0口为输出
一周热门 更多>