📄 温度.c
字号:
/**************************************************************************
程序功能: 用温度传感器DS18B20读取外界温度,然后用单片机读取传感器里面的两个装
有温度值的寄存器温度.最后用单片机处理,将数值显示在数码管上.
制作人: 陈小宝 成玉燕
魏永瑜 杨 阳
****************************************************************************/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit dq=P0^0;//数据线
uchar m,n,k,l;//这几个变量用来传递数码管显示的数据
uchar init_flag=0;//初始化成功与否的标志
/*
void delay(uchar m1,uchar n1)
{
uchar i,j;
for(i=0;i<m1;i++)
for(j=0;j<n1;j++);
}
/***************************数据处理函数*****************************/
void date_convert(uint t)//对显示数据进行处理;
{
t=(t*100)/16;
m=(t/1000);//千位
n=(t%1000)/100;//百位
k=(t%100)/10;//十位
l=t%10;
}
/*
void display()//LED显示内容
{
P2=led_show_date[m];
P0=0xf7;
delay(10,25);
P0=0xfb;
P2=(led_show_date[n])&0x7f;//将小数点显示
delay(10,25);
P0=0xfd;
P2=led_show_date[k];
delay(10,25);
P0=0xfe;
P2=led_show_date[l];
delay(10,25);
}*/
/*****************DS18B20初始化*************/
void init_ds18b20()
{
uint i;
dq=1;//先将数据线复位
dq=0;//然后数据线拉低
for(i=0;i<65;i++);//延时大于480us
dq=1;//然后再将数据线拉高
for(i=0;i<8;i++);//延时14us后读取数据
if(dq==0)
{
init_flag=1;
}
while(!dq);//等待传感器的低电平结束
}
/*****************写一个数据*************/
void writeonechar(uchar dat)
{
uchar i,j;
for(i=0;i<8;i++)
{
dq=0;//将数据线拉低
dq=dat&0x01;
for(j=0;j<8;j++);//延时60us
dq=1;//再将数据线拉高
dat>>=1;
for(j=0;j<1;j++);//小延时
}
}
/*****************读一个数据*************/
uchar readonechar(void)
{
uchar i,j;
uchar dat=0;
for(i=0;i<8;i++)
{
dq=0;//拉低数据线产生读时序
dat>>=1;
for(j=0;j<1;j++);//小延时
dq=1;//重新拉高数据线
if(dq)
{
dat|=0x80;
}
for(j=0;j<8;j++);//延时60us等待读时序过去
dq=1;//再次拉高数据线
for(j=0;j<1;j++);//小延时
}
return(dat);
}
/******************读取温度函数***************/
void ReadTemperature(void)
{
uchar a=0;
uchar b=0;
uint t=0;
init_ds18b20();
if(init_flag)
{
writeonechar(0xcc); // 跳过读序号列号的操作
writeonechar(0x44); // 启动温度转换
init_flag=0;
}
init_ds18b20();
if(init_flag)
{
writeonechar(0xcc); //跳过读序号列号的操作
writeonechar(0xbe); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
a=readonechar();
b=readonechar();
t=b&(0x07);//将高5位去掉
t<<=8;
t=t|a;
date_convert(t);//对采集的温度进行转换
init_flag=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -