📄 ds18b20.c
字号:
/***********************************************************************************
; *
; 实验平台: YH51-II单片机学习开发板 *
; MCU 类型: STC89XxX FOSC:11.0592MHZ *
; 实验内容: ds18b20温度采集,数码管显示 *
; 实验说明: 在实验前请先确认J23是否已插上跳冒 *
; 详细说明请看YH51-II单片机学习开发板使用手册 *
; 文 件 名: lcd12864.c *
; 创 建 者: 宇航工作室 *
; 创建日期: 2008-01-23 *
; *
; 网站: http://www.eldiy.net *
; 版权: Copyright(c)宇航工作室 *
; 声明: 此程序仅用于学习与参考,引用请注明版权和作者信息! *
; *
;**********************************************************************************/
#include < reg52.h >
#include < intrins.h >
#define uchar unsigned char
#define uint unsigned int
#define nop5() _nop_();_nop_();_nop_();_nop_();_nop_();
#define nop() nop5();nop5();nop5();nop5()
sbit DQ = P2^7; //定义DS18B20数据端口
uchar temp_h,temp_l;
uchar code ab[8] = {0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00};
uchar TemperatureBuff[5];
uchar code ditab[16] = {
0x00,0x01,0x01,0x02,
0x03,0x03,0x04,0x04,
0x05,0x06,0x06,0x07,
0x08,0x08,0x09,0x09
};
//=========== 延时函数 =============
void delay(uint num)
{
uchar i;
while( --num )
{
for(i=0;i<10;i++);
}
}
//============== 初始化ds1820 ================
bit init_ds18b20(void)
{
bit flag;
DQ = 1;
delay(8);
DQ = 0;
delay(90); // 480us
DQ = 1;
delay(8);
flag = DQ;
delay(100);
DQ = 1;
return flag; //0表示18b20存在,1表示不存在
}
//============== 读一个字节 ================
uchar read_byte(void)
{
uchar i;
uchar dat = 0;
for (i = 8; i > 0; i--)
{
DQ = 0; // 给脉冲信号
dat >>= 1;
//nop5();
DQ = 1; // 给脉冲信号
if(DQ)
{
dat |= 0x80;
}
delay(4);
}
return (dat);
}
//============== 写一个字节 ================
void write_byte(uchar dat)
{
uchar i;
for (i=8;i>0;i--)
{
DQ = 0;
DQ = dat & 0x01;
delay(5);
DQ = 1;
dat>>=1;
}
}
//=========== 读温度与显示数据转换函数 ====================
void read_temp(void)
{
init_ds18b20();
write_byte(0xcc); // 跳过读序号列号的操作
write_byte(0x44); // 启动温度转换
init_ds18b20();
write_byte(0xcc); //跳过读序号列号的操作
write_byte(0xbe); //读取温度寄存器
temp_l = read_byte(); //温度低8位
temp_h = read_byte(); //温度高8位
TemperatureBuff[4]=temp_l&0x0f;
TemperatureBuff[0]=ditab[TemperatureBuff[4]];//+0x30; //查表得小数位的值
TemperatureBuff[4]=((temp_l&0xf0)>>4)|((temp_h&0x0f)<<4);
TemperatureBuff[3]=TemperatureBuff[4]/100;
TemperatureBuff[1]=TemperatureBuff[4]%100;
TemperatureBuff[2]=TemperatureBuff[1]/10;
TemperatureBuff[1]=TemperatureBuff[1]%10;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -