基于ds18b20设计的温度计
发布网友
发布时间:2022-05-24 17:14
我来回答
共3个回答
热心网友
时间:2023-09-13 20:27
好吧 今天刚编出来 呵呵 分享给你了哦
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint);
uchar temp,tmph,tmpl;
sbit ds18b20=P3^3;
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
/////////////////////////////////////////////////////////
/////DS18B20部分////////////
///////////////////////////
//延时部分
void delayus(uint i)
{
while(i--);
}
void delay_600us(void)
{
uchar i;
for(i=0;i<180;i++);
}//延时600us
void delay_400us(void)
{
uchar i;
for(i=0;i<120;i++);
}
void delay_60us(void)
{
uchar i;
for(i=0;i<18;i++);
}//延时60us
void delay_15us(void)
{
uchar i;
for(i=0;i<3;i++);
}//延时15us
//复位脉冲
bit resetpulse(void)
{
ds18b20=0;
delay_600us();
ds18b20=1;
delay_60us();
return ds18b20;
}
//ds18b20初始化
void ds18b20_init(void)
{
while(1)
{
if(!resetpulse()) //收到ds18b20的低电平信号
{
ds18b20=1;
delay_400us();
break;
}
else
resetpulse(); //继续发送复位信号
}
}
void ds18b20_write_byte(uchar date)
{ uchar i;
for(i=0;i<8;i++)
{ds18b20=0;
ds18b20=date&0x01;
delayus(4);
ds18b20=1;
date=date>>1;
}
}
uchar ds18b20_read_byte()
{
uchar i,n,u;
for(i=0;i<8;i++)
{ds18b20=0;
ds18b20=1;
_nop_();
u=ds18b20;
n=(u<<7)|n>>1;
delayus(3);
}
return n;
}
uchar read_temperaturn()
{
ds18b20_init(); //初始化;
ds18b20_write_byte(0xcc); //跳过ram;
ds18b20_write_byte(0x44); //启动温度测量;
delay_600us();
ds18b20_init(); //初始化;
ds18b20_write_byte(0xcc); //跳过ram;
ds18b20_write_byte(0xbe); //采集温度
tmpl=ds18b20_read_byte(); //低位温度数据
tmph=ds18b20_read_byte(); //高位温度数据
tmph<<=4; //左移4位
tmph+=(tmpl&0xf0)>>4;
return(tmph);
}
void display()
{
P0=table[temp/100];
P2=0xfb;
delayms(5);
P0=table[temp%100/10];
P2=0xfd;
delayms(5);
P0=table[temp%10];
P2=0xfe;
delayms(5);
}
void main()
{ while(1)
{
temp=read_temperaturn();
display();
}
}
其实编写并不难 建议还是自己编一下 经过这样一个过程 也许你会学到很多的 (注;此程序只是简单的整数位显示)
热心网友
时间:2023-09-13 20:28
百度一下吧!!一大堆呢!!!
热心网友
时间:2023-09-13 20:28
就是一个1-wire协议,你网上搜一下就能搜到一堆DS18B20的驱动了,你稍微把引脚配置改一下就能直接调用了