产品选型

ds18b20与51单片机 5151单片机第9课:DS18B20温度检测系统

小编 2024-10-06 产品选型 23 0

5151单片机第9课:DS18B20温度检测系统

#include <reg51.h>//头文件

#define uint unsigned int//宏定义

#define uchar unsigned char //宏定义

sbit DQ=P3^2;//18B20的2脚与单片机P3.2口相接

sbit P10=P1^0;//数码管位选引脚P1.0

sbit P11=P1^1;//数码管位选引脚P1.1

uchar temp;

code unsigned char sz []={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0-9数组

void delay (uint t);//延时函数声明

void delayms(uint a);//for语句延时函数声明

void init();//18B20初始化程序声明

void write (uchar dat);//写1字节程序声明

uchar read ();//读1字节程序声明

void display();//显示程序声明

uchar readtemp();//读温度程序声明

void delay (uint t)//延时函数

{

while(t--);

}

void delayms(uint a) //for语句延时函数

{

uint x,y;

for(x=a;x>0;x--)

for(y=110;y>0;y--);

}

void init ()//18B20初始化程序

{

uchar n;

DQ=1;

delay(8);

DQ=0;

delay(80);

DQ=1;

delay(8);

n=DQ;

delay(4);

}

void write (uchar dat)//写1字节程序

{

uchar i;

for (i=0;i<8;i++)

{

DQ=0;

DQ=dat&0x01;

delay (4);

DQ=1;

dat>>=1;//dat=dat>>1

}

delay(4);

}

uchar read ()//读1字节程序

{

uchar i,value;

for (i=0;i<8;i++)

{

DQ=0;

value>>=1;

DQ=1;

if(DQ)

value|=0x80;

delay(4);

}

return value;

}

uchar readtemp()//读温度程序

{

uchar a,b;

init();

write (0xcc);

write (0x44);

delay (300);

init ();

write (0xcc);

write (0xbe);

a=read();

b=read();

b<<=4;

b+=(a&0xf0)>>4;

return b;

}

void display ()//显示程序

{

P10=0;

P0=sz[temp/10];

delayms(2);

P10=1;

P11=0;

P0=sz[temp%10];

delayms(2);

P11=1;

}

void main()//主程序

{

while(1)

{

temp=readtemp();

display ();

}

}

51单片机学习31-DS18B20

这篇讲DS18B20温度传感器

仿真图用的是我自己做的一个51单片机开发板 图纸比较大,截图可能看不清,需要的话可以私信联系我。

程序:

源代码:

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

sbit DQ=P2^2;

sbit smg1=P2^4;

sbit smg2=P2^5;

sbit smg3=P2^6;

uchar temp; unsigned char code smg_du[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77, 0x7c,

0x39,0x5e,0x79,0x71,0x00};

unsigned char code smg_we[]={

0x08,0x18,0x28,0x38,

0x48,0x58,0x68,0x78};

void init_ds18b20(void);

void write_byte(uchar dat);

uchar read_byte(void);

uchar readtemperature(void);

void display(void);

void delay(uint t);

void delay_50us(uint t);

//************************************************//延时函数,在12MHz 的晶振频率下//大约50us 的延时//************************************************

void delay_50us(uint t)

{

uchar j;

for(;t>0;t--)

for(j=19;j>0;j--);

}

///////////////////////////////

void delay(uint t)

{ while(t--); }

////////////////////////////

void main(void)

{

while(1)

{

temp=readtemperature();

display();

}

}

/////////////////////////

void init_ds18b20(void)

{

uchar n;

DQ=1;

delay(8);

DQ=0;

delay(80);

DQ=1;

delay(8);

n=DQ;

delay(14);

}

///////////////////////////////

void write_byte(uchar dat)

{

uchar i;

for(i=0;i<8;i++)

{

DQ=0;

DQ=dat&0x01;

delay(8);

DQ=1;

dat>>=1;

}

delay(8);

}

uchar read_byte(void)

{

uchar i,value;

for(i=0;i<8;i++)

{

DQ=0;

value>>=1;

DQ=1;

if(DQ)

value|=0x80;

delay(4);

}

return value;

}

////////////////////////////

uchar readtemperature(void)

{

uchar a,b;

init_ds18b20();

write_byte(0xcc); //跳过ROM

write_byte(0x44); // 启动温度测量

delay(300);

init_ds18b20();

write_byte(0xcc);

write_byte(0xbe);

a=read_byte();

b=read_byte();

b<<=4;

b+=(a&0xf0)>>4;

return b;

}

void display(void)

{

smg3=0;

smg2=0;

smg1=0;

P1=smg_du[temp/10];

delay_50us(20);

smg2=0;

smg1=1;

P1=smg_du[temp%10];

delay_50us(20);

}

仿真结果:

数码管显示的数字就是温度传感器的温度,数码显示的跟实际的温度位置相反,这个可以程序里面的数码管的位定义即可。

相关问答

用一个 DS18B20 传感器和一个 单片机 最小系统和四位共阳极数码...

我有。51单片机开发板使用例程,你找找,里面有一百个C的程序,有一个是关于这个的。这个挺简单的,网上搜搜一大把DS18B20的程序。

英语翻译本设计是基于 单片机 AT89 S51 的数字温度计的设计,采用...

[最佳回答]Thepresentdesignisbasedonthenumberofsingle-chipAT89S51thermometerinthedesign,usedasa...

DS18B20 温度传感器如何 与单片机 相连接_汽配人问答

[最佳回答]1、DS18B20温度传感器与单片机的一个IO口连接。2、温度传感器(temperaturetransducer)是指能感受温度并转换成可用输出信号的传感器。温度传感器...

肿么通过蓝牙模块把 DS18B20 温度传感器在 单片机 上显示的温度...

51单片机直接用串口把数据发给蓝牙串口模块,模块就可以把数据发给电脑。卖模块...write_date(table[a/100]);write_date(table[a%100/10]);wr...

51单片机 温感报警器原理?

本设计由STC89C52单片机电路+数字温度传感器DS18B20电路+按键电路+蜂鸣器报警电路+继电器控制电路+LCD1602液晶显示电路+电源电路组成。1、LCD1602液晶实时显...

单片机 ,两个系统肿么合并成一个系统?-ZOL问答

做了一个DS18B20的温度报警系统,一个用滑动变阻器模拟的红外报警系统。单个运...另一个操作系统下直接删掉格式化掉就行了,然后把boot.ini文件中另一个的相关项...

DS18B20 温度传感器 与单片机 间的通信线(延长线)可以多长 - 17...

50-100用5V供电没没问题,只接一支DS18B20最远可以达到500m,18B20单线传输抗干扰能力本来就不高,线最长就几厘米,不管你用什么线延长都没有用的。长...

单片机 中如何将 DS18b20 测得的温度通过串口发送到上位机VB中?

你的一位十进制数据+0x30,不就变成字符的数字了吗例如:TN是十进制温度fasong[0]=TN/10+0x30;fasong[1]=TN%10+0x30;DS18B20采集到的数据你可以在单片机中...

单片机 p2.0口外接 ds18b20 为什么要加10k上拉电阻?

这个为啥要加上拉电阻,上啦电阻是多少,这个都是DS18B20手册告诉你加多少就是多少,这个是设计者提供的最佳参数,DS18B20是单线通信,即接收和发送都是这个通...

51单片机 开发板有什么用,对初学单片机有什么帮助?

51单片机开发板对初学单片机的帮助,就像学步车对于刚学走路的儿童一样,可以帮助它少摔跤,快速学会走路。一、单片机学习板的重要性单片机的学习,包含两大方...

猜你喜欢