分享好友 天南地北首页 网站导航

用8051单片机设计一数字式温度计

网友发布 2023-07-31 00:42 · 头闻号仪器机械

这个电路很简单,我说一下就可以了。数字式温度传感器用最常用的DS18B20,它只有3个管脚,一个接电源,一个接地,另一个接8051单片机就可以了。温度值用数码管显示。这样整个电路就接好了。如果楼主觉得我回答的可以别忘了给我加分哦,为了你的问题我花费了半天的时间啊。程序如下:

#include<reg52.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

#define Self_Define_ISP_Download_Command 0x3D

sfr IAP_ConTR=0xE7;

sbit DQ = P3^5; //DS18B20接入口

uchar code table[]={ 0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,0x80,0x90} ;

char bai,shi,ge; //定义变量

void Init_Com(void)

{

TMOD = 0x20;

SM0=0;

SM1=1;

REN=1;

TH1 = 0xFd;

TL1 = 0xFd;

TR1 = 1;

EA=1;

ES=1;

}

void delay(uint num)

{

while(num--) ;

}

Init_DS18B20(void) //传感器初始化

{

uchar x=0;

DQ = 1; //DQ复位

delay(10); //稍做延时

DQ = 0; //单片机将DQ拉低

delay(80); //精确延时 大于 480us //450

DQ= 1; //拉高总线

delay(20);

x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败

delay(30);

}

//读一个字节

ReadOneChar(void)

{

uchar i=0;

uchar dat = 0;

for (i=8;i>0;i--)

{

DQ = 0; // 给脉冲信号

dat>>=1;

DQ = 1; // 给脉冲信号

if(DQ)

dat|=0x80;

delay(8);

}

return(dat);

}

//写一个字节

WriteOneChar(unsigned char dat)

{

uchar i=0;

for (i=8; i>0; i--)

{

DQ = 0;

DQ = dat&0x01;

delay(10);

DQ = 1;

dat>>=1;

}

delay(8);

}

//读取温度

int ReadTemperature(void)

{

uchar a,b;

uint t;

float tt;

Init_DS18B20();

WriteOneChar(0xCC); // 跳过读序号列号的操作

WriteOneChar(0x44); // 启动温度转换

Init_DS18B20();

WriteOneChar(0xCC); //跳过读序号列号的操作

WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度

a=ReadOneChar();//低位

b=ReadOneChar();//高位

tt=(b*256+a)*0.0625*100;//2个8位合成16位

t=(int)tt;

return(t);

}

void display(int bai,int shi,int ge)

{

int temp;

temp=ReadTemperature();//读温度

bai=temp/1000;//显示百位

shi=temp%1000/100;//显示十位

ge=temp%100/10;//显示个位

//xiao=temp%10;

P2=0xfd; //位选

P0=0X7f; //显示小数点

delay(500);

P2=0xfe;

P0=table[bai];//显示千位

delay(500);//一小段延时动态显示

P2=0xfd;

P0=table[shi];//显示百位

delay(500);

P2=0xfb;

P0=table[ge];//显示十位

delay(500);

P2=0xf7;// 显示°

P0=0x9c;

// delay(50);

}

void main()

{

Init_Com();

while(1)

{

display(bai,shi,ge);//显示函数

}

}

void UART_Interrupt_Receive(void) interrupt 4

{

unsigned char k=0;

unsigned int a,b;

if(RI==1)

{

RI=0;

k=SBUF;

if(k==Self_Define_ISP_Download_Command)

{

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

for(b=100;b>0;b--); //延时约1S

IAP_ConTR = 0x60;

}

}

else

{

TI=0;

}

}

你好:

——★1、饮水机有两个温度控制器,一个为 88 ℃ ,一个是 95 ℃ 。两个温控器是串联在加热器上的(紧贴在加热罐上),都是自动复位控制,但作用不同。

——★2、(ST1) 88 ℃ 温控器,是正常控制水温的控制器,在水温达到 88 ℃ 时即断开电源、停止加热。而(ST2)95 ℃ 是保护控制器,可以在 ST1 失控时,起到保护作用,避免发生事故。饮水机必须要有保护温控器,否则安全系数大幅降低,就不合格了。

免责声明:本平台仅供信息发布交流之途,请谨慎判断信息真伪。如遇虚假诈骗信息,请立即举报

举报
反对 0
打赏 0
更多相关文章

收藏

点赞