📄 修改.c
字号:
#include "reg51.h"
#include "intrins.h"
#include "static.c"
#include "del_us.c"
#define uint unsigned int
#define uchar unsigned char
sbit DQ = P3^4;
bit FLAG;
void Rest_1820(void)
{
uchar i;
FLAG = 0;
DQ = 1;
_nop_();
DQ = 0;
Delay_300us(); //建立的时间在480-960us
Delay_300us();
DQ = 1;
for(i=4;i>0;i--)
{
Delay_15us(); //等待的时间在15-60us
if(DQ==0)
{
FLAG = 1; //表示DS1820存在
break;
}
else
{
FLAG = 0;
}
}
if(FLAG==1)
{
Delay_60us(); //延时240us
Delay_60us();
Delay_60us();
Delay_60us();
}
Delay_300us(); //延时300us准备主机接收存在信号
}
void Write_1820(uchar value)
{
uchar i;
for(i=8;i>0;i--)
{
DQ = 1;
_nop_();
DQ = 0;
Delay_15us(); //延时15us
DQ = value&0x01;
Delay_60us(); //延时60us
DQ = 1;
value>>=1;
}
}
uint Read_1820(void)
{
uchar i;
uint value = 0;
for(i=16;i>0;i--)
{
value>>=1;
DQ = 1;
_nop_();
DQ = 0;
_nop_();
DQ = 1;
Delay_15us();
if(DQ) value |= 0x8000;
else value &= 0x7fff;
Delay_60us(); //采样后需要延时60us
}
DQ = 1;
return(value);
}
void main(void)
{
uchar i;
uint temp;
float t;
while(1)
{
Rest_1820(); //初始化
if(FLAG==1)
{
Write_1820(0xcc); //写入跳过序列号命令字 Skip Rom
Write_1820(0x44); //写入温度转换命令字 Convert T
for(i=20;i>0;i--)
{
Delay_300us();
Delay_300us();
Delay_300us();
}
Rest_1820(); //初始化
if(FLAG==1)
{
Write_1820(0xcc); //写入跳过序列号命令字 Skip Rom
Write_1820(0xbe); //写入读取数据命令字 Read Scratchpad
temp = Read_1820(); //读出温度
t = temp*0.0625;
temp = t*100;
Static_Disp(temp);
//while(1);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -