?? 18b20.h
字號:
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
void WriteData(uchar *p);
uchar s[4];
//sbit SID=P2^6;
//sbit SCK=P2^5; //12864
//sbit feng=P1^4; //蜂鳴
sbit DQ= P2^2; //18b20 入口
uchar data temp_data[]={0x00,0x00};
uchar tempdata=25;
bit fu_flag; //負溫度標志
/*******11us延時程序***********/
void delay(uint t)
{
for(;t>0;t--);
}
/*******DS18B20復位程序*******/
void ow_reset(void)
{
char presence=1;
while(presence)
{
while(presence)
{
DQ=1;_nop_();_nop_();
DQ=0;
delay11us(50);
DQ=1;
delay11us(6);
presence=DQ;
}
delay11us(45);
presence=~DQ;
}
DQ=1;
}
/**********DS18B20寫字節函數**********/
void write_byte(uchar val)
{
uchar i;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_();
DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();
DQ=val&0x01;
delay11us(6);
val=val/2;
}
DQ=1;
delay(1);
}
/**********DS18B20讀字節函數**********/
uchar read_byte(void)
{
uchar i;
uchar value=0;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_();
value>>=1;
DQ=0;_nop_();_nop_();_nop_();_nop_();
DQ=1;_nop_();_nop_();_nop_();_nop_();
if(DQ)value|=0x80;
delay11us(6);
}
DQ=1;
return(value);
}
/*************讀溫度數據函數***********/
void read_temp(void)
{
ow_reset();
write_byte(0xcc);
write_byte(0xbe);
temp_data[0]=read_byte();
temp_data[1]=read_byte();
ow_reset();
write_byte(0xcc);
write_byte(0x44);
}
/***************溫度數值處理***************/
void work_temp(void)
{
uchar zheng;
if(temp_data[1]>127) //負溫度取補碼,標志位置位
{
temp_data[1]=(256-temp_data[1]);
temp_data[0]=(256-temp_data[0]);
fu_flag=1;
}
zheng=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4); //整數數值(三數位)
tempdata=zheng;
}
/***************溫度測量函數**************/
void temperture(void)
{
read_temp();
work_temp();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -