产品选型

51单片机温度计 51单片机温度测量系统Proteus仿真

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

51单片机温度测量系统Proteus仿真

串行扩展应用:

利用 DS18B20 和 LED 数码管实现单总线温度测量系统。DS18B20的测量范围是-5℃~128℃。由于只接有两个 LED数码管,所以显示的数值只能在 00~~99 之间。

硬件图

Proteus仿真图:

(2)软件设计

#include<reg51.h>#include"intrins.h"#define uchar unsigned char#define uint unsigned int#define out P0sbit smg1=out^4;sbit smg2=out^5;sbit DQ=P3^7;void delay5(uchar);void init_ds18b20(void);uchar readbyte(void);void writebyte(uchar);uchar retemp(void);

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。

点击这里找小助理0元领取: 加微信领取资料

void main(){uchar i,temp;delay5(1000);while(1){temp=retemp();for(i=0;i<10;i++){out=(temp/10)&0x0f;smg1=0;smg2=1;delay5(1000);out=(temp%10)&0x0f;smg1=1;smg2=0;delay5(1000);}}}

void delay5(uchar n){do{nop();nop();nop();n–;}while(n);}

void init_ds18b20(void){uchar x=0;DQ=0;delay5(120);DQ=1;delay5(16);delay5(80);}

uchar readbyte(void){uchar i=0;uchar date=0;for(i=8;i>0;i–){DQ=0;delay5(1);DQ=1;date>>=1;if(DQ)date|=0x80;delay5(11);}return(date);}

void writebyte(uchar dat){uchar i=0;for(i=8;i>0;i–){DQ=0;DQ=dat&0x01;delay5(12);DQ=1;dat>>=1;delay5(5);}}

uchar retemp(void){uchar a,b,tt;uint t;init_ds18b20();writebyte(0xcc);writebyte(0x44);init_ds18b20();writebyte(0xcc);writebyte(0xbe);a=readbyte();b=readbyte();t=b;t<<=8;t=t|a;tt=t*0.0625;return(tt);}

效果图

上图,仿真运行状态①(未操作温度)。

上图,仿真运行状态②(未操作温度)。

上图,仿真运行状态③(ds18b20按钮按下,温度增加)。

上图,仿真运行状态④(ds18b20按钮按下,温度增加)。

实验结论及分析

1.程序的核心思想

①DS18B20与传统的热敏电阻不同,DS18B20 可直接将被测温度转换为串行数字信号,供单片机处理。通过对 DS18B20 编程可以实现 9~12 位的温度读数,并可分别在 93.75ms 和 750ms 内完成 9 位和 12 位的数字量。其测温范围-55℃~+125℃,最大分辨率为 0.0625℃,在一10℃~+85℃范围内其测温准确度为±0.5℃。

②DS18B20也可以看作一个小的单片机系统,它将温度信息采集到自己的内存中,然后通过一定的节拍将温度信息一位一位地传入at89c51单片机中进行二位数码管的显数。

2.实验中遇到的问题

①lcd1602输入信息时要记得初始化,否则不会显数。

②注意DS18B20的温度信息一位一位地传入at89c51单片机中时严格把控节拍,节拍不正确将影响数据传输。

③at89c51单片机的时钟频率要设置成11.0592mhz。

原文链接:https://mp.weixin.qq.com/s/A9QS6xlYd9XKk8IHtJGffA

转载自:STM32嵌入式开发

原文链接:51单片机温度测量系统Proteus仿真

本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。

基于51单片机的温度测量系统设计

您在阅读前请点击上面的“关注”二字,后续会第一时间为您提供更多有价值的相关内容,感谢您的支持。

如今,在很多电子产品中,将单片机用到温度检测和温度控制;而温度则是系统常需要测量、控制和保持的一个量。因此本文从硬件和软件两方面介绍了AT89C2051单片机温度控制系统的设计,对硬件原理图和程序框图作了简洁的描述。

1.系统硬件设计

系统的硬件结构如图1所示。

图1 系统的硬件结构

1.1数据采集

数据采集电路如图2所示,由温度传感器DS18B20采集被控对象的实时温度,提供给AT89C2051的P3.2口作为数据输入。在本次设计中所控的对象为所处室温。当然作为改进可以把传感器与电路板分离,由数据线相连进行通讯,便于测量多种对象。

图2 数据采集电路

(1)DS18B20概述

DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出,支持3V~5.5V的电压范围,使系统设计更灵活、方便;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。

以上特点使DS18B20非常适用于远距离多点温度检测系统。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS18B20使电压、特性有更多的选择,让我们可以构建适合自己的经济的测温系统。如图2所示DS18B20的2脚DQ为数字信号输入/输出端;1脚GND为电源地;3脚VDD为外接供电电源输入端。

DS18B20

(2)AT89C2051

AT89C2051(以下简称2051)是一枚8051兼容的单片机微控器,与Intel的MCS-51完全兼容,内藏2K的可程序化Flash存储体,内部有128B字节的数据存储器空间,可直接推动LED,与8051完全相同,有15个可程序化的I/O点,分别是P1端口与P3端口(少了P3.6)。

AT89C2051引脚图

1.2接口电路

接口电路由ATMEL公司的2051单片机、ULN2003达林顿芯片、4511BCD译码器、串行EEPROM24C16(保存系统参数)、MAX232、数码管及外围电路构成, 单片机以并行通信方式从P1.0~P1.7口输出控制信号,通过4511BCD译码器译码,用2个共阴极LED静态显示温度的十位、个位。

串行EEPROM24C16是标准I2C规格且只要两根引脚就能读写。由于单片机2051的P1是一个双向的I/O端口,所以在我们在设计中将P1端口当成输出端口用。由图2可知,P1.7作为串性的时钟输出信号与24C16的第6脚相接,P1.6则作为串行数据输出接到24C16的第5脚。P1. 4和P1.5则作为两个数码管的位选信号控制,在P1.4=1时,选中第一个数码管(个位);P1.5=1时,选中第二个数码管(十位)。P1.0~P1.3的输出信号接到译码器4511上作为数码管的显示。此外,由于单片机2051的P3端口有特殊的功能,P3.0(RXD)串行输入端口,P3.1(TXD)串行输出端口,P3.2(INTO)外部中断0,P3.3(INT1)外部中断1P3.4,(T0) 外部定时/计数输入点,P3.5(T1)外部定时/计数输入点。

由图2可知,P3.0和P3.1作为与MAX232串行通信的接口;P3.2和P3.3作为中断信号接口;P3.4和P3.5作为外部定时/记数输入点。P3.7作为一个脉冲输出,控制发光二极管的亮灭。

由于在电路中采用的共阴极的LED数码管,所以在设计电路时加了一个达林顿电路ULN2003对信号进行放大,产生足够大的电流驱动数码管显示。由于4511只能进行BCD十进制译码,只能译到0至9,所以在这里我们利用4511译码输出我们所需要的温度。

1.3报警电路简介

图3 报警电路

文中所设计的报警电路较为简单,由一个自我震荡型的蜂鸣器(只要在蜂鸣器两端加上超过3V的电压,蜂鸣器就会叫个不停)和一个发光二极管组成(如图3所示)。在这次设计中蜂鸣器是通过ULN2003电流放大IC来控制。在我们所要求的温度达到一定的上界或者下界时(在文中我们设置的上界温度是45℃,下界温度是5℃),报警电路开始工作,主要程序设计如下:

  main()//主函数

  {unsigned char i=0;

  unsigned int m,n;

  while(1)

  {i=ReadTemperature();//读温度}

  if(i>0 && i<=10) //如果温度在0到10度之间直接给七段数码管赋值

  {P1=designP1[i];}

  else//如果温度大于10度

  {m=i%10;//先给第一个七段数码管赋值

  D1=1;

  D2=0;

  P1=designP1[m];

  n=i/10;//再给第二个七段数码管赋值

  D1=0;

  D2=1;

  P1=designP1[n];

  if(n>=4&&m>=5)%%(m<=5)//判断温度的取值范围,如果大于45或小于5度,则蜂鸣器叫,发光二极管闪烁

  { int a,b;

  Q1=1;//蜂鸣器叫

  for(a=0;a<1000;a++)//发光二极管闪烁

  for(b=0;b<1000;b++)

  Q2=1;

  for(a=0;a<1000;a++)

  for(b=0;b<1000;b++)

  Q2=0;}}}

2.系统软件设计

2.1系统程序流程图

系统程序流程图如图4所示。

图4 系统程序流程图

2.2温度部分软件设计

DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输。其工作时序包括初始化时序、写时序和读时序。故主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。程序主要函数部分如下:

  (1)初始化函数

  //读一个字节函数

  ReadOneChar(void)

  {unsigned char i=0;

  unsigned char dat = 0;

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

  { DQ = 0; // 给脉冲信号

  dat>>=1;

  DQ = 1; // 给脉冲信号

  if(DQ)

  dat|=0x80;

  delay(4);}

  return(dat);}

  //写一个字节函数

  WriteOneChar(unsigned char dat)

  {unsigned char i=0;

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

  {DQ = 0;

  DQ = dat&0x01;

  delay(5);

  DQ = 1;

  dat>>=1;}}

  (2)读取温度并计算函数

  ReadTemperature(void)

  {unsigned char a=0;

  unsigned char b=0;

  unsigned int t=0;

  float tt=0;

  Init_DS18B20();

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

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

  Init_DS18B20();

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

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

  a=ReadOneChar();

  b=ReadOneChar();

  t=b;

  t<<=8;

  t=t|a;

  tt=t*0.0625;

  t= tt*10+0.5; //放大10倍输出并四舍五入---此行没用

  (3)主程序部分见前

  return(t);}

小结

以上就是基于51单片机 的温度测量系统设计介绍了。AT89C2051单片机体积小、重量轻、抗干扰能力强、对环境要求不高、价格低廉、可靠性高、灵活性好。本文设计是一种低成本的利用单片机多余I/O口实现的温度检测电路,该电路非常简单,易于实现,,并且适用于几乎所有类型的单片机;目前此设计已成功应用于钻井模拟器实验室室温控制。

关注“优特美尔商城 ”公众号,获取更多电子行业相关资讯。

相关问答

求求基于 51单片机 的数字 温度计 设计?单片机AT89C51?测温传感...

[最佳回答]#include#defineucharunsignedchar#defineuintunsignedintfloattt;//tt为采集的温度值codeucharTAB[...

基于AT89 C51单片机 和DS18B20温度传感器、LCD1602液晶显示的...

[最佳回答]多功能51单片机开发板;LCD1602测试程序RSEQUP2.0RWEQUP2.1EEQUP2.2LDATAEQUP1ORG0000HAJMPMAINORG003...

用AD590作为温度传感器,与 单片机 结合做一个数字 温度计 ,要...

[最佳回答]本温度控制系统是一个闭环反馈调节系统,由温度传感器AD590对保温箱温度进行检测,经过调理电路得到合适的电压信号。经A/D转换芯片得到相应的温度值,...

用DS18B20单线数字温度传感器芯片和 51单片机 设计一款四路数...

我也是新手,刚学单片机,这个还算是比较容易的,不过,我可能要好几天才能完成,其实硬件好建立,就是软件调试有点费时间,这个希望你能自己做,可定你会...

求高手帮做一个基于 S51单片机的温湿度计 C语言程序以及其原理...

去买单片机程序设计实践教程,上面有你要的原理图和程序,不过要改一下,呵呵charkey(){chara,temp,c=99;for(a=0;a<3;a++){p1=0x08<&...

急求基于 单片机 AT89 C51 的数字 温度 报警器,具有上下限的在-20...

[最佳回答]单片机DS18B20温度计C语言程序#include#include#include//要用到取绝对值函数abs()//通过DS18B20测试当前环境温度,并通过数码管显示当前温度...

急求:用AT89 S51单片机 做数字 温度计 {用DS18B20温度传感器}的...

呵呵,不是一两句话能说得明白的。需要硬件电路、上位机软件、下位机软件。你至少得会VB、汇编、PCB制作。

51单片机 制作的简易数字 温度计 还有时候间显示,用DS1302还...

LCD是静态显示,不用反复刷新,所以主程序可以检测按键并显示,由于你用了定时器,可在定时器中断程序里处理时间数据,中断不会被错过的主程序里只管检...

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

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

谁知道!! 单片机测温 电路?,校车人脸测温机哪家靠谱?

设计一个基于51单片机的电子温度计系统,其采用STC12C5A60S2芯片作为控制中心,DS18B20温度传感器为测温元件,LCD为显示器件。硬件设计部分包括温度传...

猜你喜欢