📄 18b20.c
字号:
#include <reg51.h>
#include <Intrins.h>
#include <absacc.h>
#include <my.h>
#define uchar unsigned char
#define uint unsigned int
#define WriteDeviceAddress 0xa0
#define ReadDviceAddress 0xa1
uint ff;
uchar shuj;
uchar csh_flag;
uchar data_flag;
uchar sec_1;
uchar sec;
uchar time;
uchar shuju;
sbit sstb=P3^2;
sbit csh=P3^4;
sbit run=P3^5;
uchar tm[3];
uchar data prn_buf[8];
sbit DQ =P1^0;//根据实际情况定义端口
sbit dog=P1^2;
typedef unsigned char byte;
typedef unsigned int word;
void htobcd(uchar dd)
{
uint div;
uchar i;
div=100;
for (i=0;i<3;i++)
{
tm[i]=dd/div;
dd%=div;
div/=10;
}
}
void m_send(uchar f)
{ ES=0;
SBUF=f;
while (TI==0)
dog=~dog;
TI=0;
ES=1;
}
uchar Msec(uint x)
{uchar j;
while(x--)
{for(j=0;j<125;j++)
{dog=~dog;}
}
}
void delay(word useconds)
{
for(;useconds>0;useconds--);
}
byte ow_reset(void)
{
byte presence;
DQ = 0;
delay(60);
DQ = 1;
delay(6);
presence = DQ;
delay(50);
return(presence);
}
byte read_byte(void)
{
byte i;
byte value = 0;
for (i=8;i>0;i--)
{
value>>=1;
DQ = 0;
DQ = 1;
delay(2);
if(DQ)value|=0x80;
delay(12);
}
return(value);
}
void write_byte(char val)
{
byte i;
for (i=8; i>0; i--)
{
DQ = 0; //
DQ = val&0x01;
delay(10);
DQ = 1;
val=val/2;
}
delay(10);
}
//读取温度
char Read_Temperature(void)
{uchar x,y;
union{
uchar c[2];
int x;
}temp;
ow_reset();
write_byte(0xCC);
write_byte(0xBE);
temp.c[1]=read_byte();
temp.c[0]=read_byte();
ow_reset();
write_byte(0xCC);
write_byte(0x44);
x=temp.c[0];
y=temp.c[1];
x=x<<4;
x=x&0xf0;
y=y>>4;
y=y&0x0f;
x=x+y;
htobcd(x);
m_send(tm[0]+0x30);
m_send(tm[1]+0x30);
m_send(tm[2]+0x30);
m_send(0xa1);
m_send(0xe6);
m_send(0x0d);
//return temp.x/2;
}
void main( )
{
uchar t,i;
TMOD=0x21;
SCON=0x50;
serial_baund_9600;
PS=0;
ES=1;
dog=~dog;
EA=1;
do{dog=~dog;
Read_Temperature( );
//m_send(i);
Msec(2000);
}while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -