📄 ds1820v2.c
字号:
/**************************************
** Filename: 18b20v2.c
**************************************/
#include "config.h"
unsigned char wmh,wml,flag,count; //flag??????,count?????
void init_1820(void)
{
SET_DIR_1WIRE; //??PC2 ???
SET_OP_1WIRE;
CLR_OP_1WIRE;
delay_us(480); //480us??
SET_OP_1WIRE;
CLR_DIR_1WIRE;
delay_us(20); //15~60us
while(CHECK_IP_1WIRE);
SET_DIR_1WIRE;
SET_OP_1WIRE;
delay_us(140); //60~240us
}
void write_1820(unsigned char x)
{
unsigned char m;
for(m=0;m<8;m++)
{
CLR_OP_1WIRE;
if(x&(1<<m)) //????,?????!
SET_OP_1WIRE;
else
{CLR_OP_1WIRE;}
delay_us(40); //15~60us
SET_OP_1WIRE;
}
SET_OP_1WIRE;
}
unsigned char read_1820(void)
{
unsigned char temp,k,n;
temp=0;
for(n=0;n<8;n++)
{
CLR_OP_1WIRE;
SET_OP_1WIRE;
CLR_DIR_1WIRE;
k=(CHECK_IP_1WIRE); //???,?????
if(k)
temp|=(1<<n);
else
temp&=~(1<<n);
delay_us(50); //60~120us
SET_DIR_1WIRE;
}
return (temp);
}
void gettemp(void) //?????
{
unsigned char temh,teml,wm0,wm1,wm2,wm3;
init_1820(); //??18b20
write_1820(0xcc); // ??????
write_1820(0x44);
// delay_nms(800); //??????,???????!
init_1820();
write_1820(0xcc); //?????
write_1820(0xbe);
teml=read_1820(); //???
temh=read_1820();
wm0=teml>>4; //???8???????8?????,????0~99?!
wm1=temh<<4;
//count=(temh*256+teml)*6.25; //??????
if((temh&0xF8) == 0xF8)
{
flag=1;
count=((0xFF-temh)*256+(0xFF-teml))*6.25;
//count=((0xFF-temh)*256+(0xFF-teml))*625;
}
else
{
flag=0;
count=(temh*256+teml)*6.25;
//count=(temh*256+teml)*625; //??????
}
wm2=wm1+wm0; //16???10??
wm3=wm2/100;
wmh=(wm2%100)/10; //?????!wmh??????,wml??????
wml=(wm2%100)%10;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -