t18b20.c
来自「18B20 测温度的C程序代码,经过测试保证可用,注意调整延时时间」· C语言 代码 · 共 102 行
C
102 行
/*
#include "C8051F330.h"
#include "absacc.h"
#include "string.h"
#include "stdlib.h"
*/
xdata unsigned int sdata;//测温度的整数部分
xdata unsigned char xiaoshu1;//小数第一位
xdata unsigned char xiaoshu2;//小数第二位
xdata unsigned char xiaoshu;// 二位小数
void delay2(unsigned int i) //时间片延时
{ while(i--);
}
void init_DS18b20(void) //初始化
{ unsigned char x=0;
DQ=1; //DQ复位
delay2(80);
DQ=0; //单片机将DQ拉低
delay2(80); //精确延时大于480um
DQ=1; //拉高总线
delay2(14);
x=DQ; //延时后 如果x=0则初始化成功 x=1则初始化失败
delay2(20);
}
unsigned char readonechar(void) // 读一个字节
{ unsigned char i=0;
unsigned char dat=0;
for(i=8;i>0;i--)
{ DQ=0; //给脉冲信号
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay2(50);
}
return(dat);
}
void writeonechar(unsigned char dat) //写一个字节
{ unsigned char i=0;
for(i=8;i>0;i--)
{ DQ=0;
DQ=dat&0x01;
delay2(50);
DQ=1;
dat>>=1;
}
}
void readtemperature(void)
{
unsigned char a=0;
unsigned char b=0;
sdata=0;//测温度的整数部分
xiaoshu1=0;//小数第一位
xiaoshu2=0;//小数第二位
xiaoshu=0;// 二位小数
init_DS18b20();
writeonechar(0xCC); //跳过读序列号
writeonechar(0x44); //启动温度转换
init_DS18b20();
writeonechar(0xCC); //
writeonechar(0xBE); // 读温度积存器
a=readonechar(); //低位
b=readonechar(); //高位
sdata=a/16+b*16; //整数
xiaoshu1=(a&0x0f)*10/16; //小数第一位
xiaoshu2=(a&0x0f)*100/16%10; //小数第二位
xiaoshu=xiaoshu1*10+xiaoshu2; //小数
TEMP= sdata*10+xiaoshu/10;
}
/*
void main()
{
PCA0MD &= ~0x40;
P1MDOUT = 0x40;
XBR1 = 0x40;
while(1)
{
readtemperature();
}
}
*/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?