一、硬件链接
在元件库中搜索DS18B20,按下图的连接方式链接。
二、驱动代码
#define uchar unsigned char
#define uint unsigned int
sbit DS1820_dat=P2^3;
void DS18B20_delay(uint T) //????
{
while(T--);
}
void Initial()
{
DS1820_dat=1;
DS18B20_delay(8); //??16??
DS1820_dat=0;
DS18B20_delay(80);
DS1820_dat=1;
DS18B20_delay(15);
}
void Input(uchar f) //18B20???????
{
uchar j;
for (j=0;j<8;j++)
{
DS1820_dat=0;
DS1820_dat=f&0x01;
DS18B20_delay(10);
DS1820_dat=1;
f>>=1;
}
}
uchar Output() //18b20 ????????
{
uchar j,b;
for (j=0;j<8;j++)
{
DS1820_dat=0;
b>>=1;
DS1820_dat=1;
if (DS1820_dat)
{
b=b|0x80;
}
DS18B20_delay(10);
}
return(b);
}
int Temper()
{
EA = 0; // 打开总中断
int Store;
int Store_2,Store_1;
Initial(); //对 DS18B20 复位
Input(0xcc); //跳过 ROM
Input(0x44); //启动温度转换
Initial(); //对 DS18B20 复位
Input(0xcc); //跳过 ROM
Input(0xbe); //读 RAM 命令
Store_1=Output(); //读温度的低字节
Store_2=Output(); //读温度的高字节
Store_2=(Store_2*256)+Store_1; //合起来为温度的整数部分
Store=(int) Store_2*0.625;
EA = 1; // 打开总中断
return Store;
}
三、软件示例
完整代码功能为51单片机温度控制系统,proteus仿真资料
功能:
1、低于设定最低温度时加热丝加热,高于最高温度时停止加热。可用按键设置高低温度。
2、显示当前时间,时间可设置。
3、DAC液位监测,液位低于10%开启电机上水,高于90%关闭电机上水,百分比可在程序中修改
/*****************主函数********************/
void main()
{
beep = 0; //开机蜂鸣器叫一声
delay_1ms(200);
P0 = P1 = P2 = P3 = 0xff; //初始化IO口
init_time0(); //初始化定时器
init_1602(); //lcd1602初始化
init_1602_dis_csf(); //lcd1602初始化显示
do
{
temp=Temper();
}
while(temp==850); //因为DS18B20上电之后会读出来850,但不是温度值,所以等待读出温度值
delay_1ms(100);
while(1)
{
key(); //按键程序
if(key_can > 0)
{
beep = 0;
delay_1ms(50);
beep = 1;
key_with();
}
if(flag_200ms == 1)
{
flag_200ms = 0;
if(menu_1 == 0)
{
read_time(); //读时间
init_1602_ds1302(); //显示时钟
vol_value=VOL_VAL*A_D()/256; //获取模拟电压值
percent = 100.0*vol_value/VOL_VAL;
display_temp(55);
}
}
delay_1ms(1);
}
}
关注下方公众号,回复公众号“204”获取完整工程文件