一、前言

在我们学习51单片机的过程中,提到温度测量,很多同学的第一反映一定是DS18B20温度传感器。DS18B20是一款物美价廉且十分简单的传感器,它的体积小,测量精度高,使得其成为很多同学的选择。但其实,除了DS18B20,还有一些其他的温度传感器可以选择,例如PT100温度变送器,它将温度信号转变为可以观测到的电信号。在日程生活中,我们所能买到的PT100,一般都是已经设计好的温度变送器,可以将0-100的温度变换为1-5V的电压,不再需要我们去自己调节。

本文将通过一个滑动变阻器模拟出PT100温度变送器所产生的4-20mA电流。首先,我们制定程序实现的功能如下:

  1. 读取PT100温度变送器产生的电流通过电阻转换为1-5V电压(滑动变阻器模拟)产生的电压,将其通过ADC0804芯片转换为数字信号。

  1. 读取转换后的数字信号,进行数字滤波。本文采取平均值滤波。

  1. 将过滤后的数字信号通过标度变换转换为温度值

  1. 将温度值通过LED数码管显示。本文采取四位数码管进行显示,包含一位小数。

  1. 当温度高于某一设定值时(本文为90摄氏度),启动蜂鸣器报警。

为了方便大家学习与测试,文末附有源码与仿真文件。如有疏漏错误之处,还请多包涵并指出。

二、装置介绍

本次实验涉及的装置如下:AT89C51芯片、12MHZ晶振、复位按钮、ADC0804芯片、1K欧姆滑动变阻器,1K欧姆电阻,蜂鸣器、三极管。

  1. ADC0804

这是一个8位的AD转换芯片,可以将0-5V电压转换为0-255的数字。关于其的使用,网上的资料很多,这里就不在多加赘叙。

  1. 蜂鸣器

本文采取的是低电平触发的有源蜂鸣器。顾名思义,即当控制引脚为低电平时,蜂鸣器响起。由于芯片引脚电流较小,无法驱动蜂鸣器,我们一般需要增加一个三极管用来驱动。

  1. 温度变送器

  1. LED数码管

三、代码展示

#include <reg51.h>
#include <intrins.h>
sbit adrd=P3^7;          //ADC0804IO口定义
sbit adwr=P3^6;
sbit adcs=P3^4;
sbit intr=P2^2;
sbit w1=P2^0;            //数码管引脚定义
sbit w2=P2^1;
sbit w3=P2^3;
sbit w4=P2^4;
sbit dp=P2^5;
sbit buzzer=P2^7;        //蜂鸣器引脚unsigned char ad_data;
char temper;
unsigned char i, j;
unsigned int t_temp;void ad0804();    //ADC0804函数声明
unsigned char Get_Adc_Average(unsigned char times);
void display(); //LED显示函数unsigned char seg7code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};    //LED共阴字码
unsigned char n_1,n_2,n_3,n_4;/*函数:延时函数功能:实现约2us延时*/
void delay(unsigned int t)
{  for(;t>0;t--);
} /*函数:AD转化程序(ADC0804)功能:将输入电压信号转为数字信号基准电压:5V*/
void ad0804 ()
{P1=0xff;adcs=0;                //芯片有效,启动时序adwr =0;           //启动ADC0804进行ADC采集delay(2);           //延时片刻adwr =1;           //高电平变低电平触发一次ADC转换while(intr);     // ADC转换完成后intr = 0adcs=0;             //芯片有效,读数据时序adrd=0;             //启动读数delay(10);Get_Adc_Average(5);        adrd=0;adrd=1;delay(10);         /*使INTR引脚自动拉高,为下一次转化做准备*/
}
/*函数:数字滤波函数功能:读数并进行平均值数字滤波*/
unsigned char Get_Adc_Average(unsigned char times)
{unsigned int temp_val=0;unsigned char  t;for(t=0;t<times;t++){temp_val+=P1;}ad_data=temp_val/times;return ad_data;
}
/*函数:标度转换函数功能:将ADC0804数值转化为摄氏度值*/
void ad_compute()
{temper=ad_data-51;if(temper>=0){t_temp=(temper/2.04)*10;  //数值转化n_1=t_temp/1000;n_2=(t_temp/100)%10;n_3=(t_temp/10)%10;n_4=t_temp%10; }if(temper<0)n_1=n_2=n_3=n_4=10;
}
/*函数:LED显示函数功能:将温度数用四位LED显示,包含一位小数*/
void display()
{w1=0;dp=0;P0=seg7code[n_1];  //温度数值百位                              delay(5);w1=1;w2=0;dp=0;P0=seg7code[n_2];    //温度数值十位delay(5);w2=1;w3=0;dp=1;P0=seg7code[n_3];    //温度数值个位delay(5);w3=1;w4=0;dp=0;P0=seg7code[n_4];    //小数位delay(5);w4=1;
} void main()                        //主程序
{TMOD=0x01;                    //定时器T0的模式1TH0=0x3c;                    //定时器T0初值设置,实现1ms定时TL0=0xb0; TR0=0;EA=1;                       //总中断使能ET0=1;                       //定时中断T0使能while(1){ad0804();              //ADC0804函数ad_compute();           //数值转化display();                //LED显示if(ad_data<184){TR0=0;}if(ad_data>=184){TR0=1;}  }
}
/*函数:定时中断T0函数功能:实现蜂鸣器发声*/
void timer_t() interrupt 1
{i++;if(i==25){i=0;buzzer=~buzzer;}
}

四、仿真展示

五、流程图

六、程序源码与仿真文件

链接:https://pan.baidu.com/s/1DGenF5xANlMftpzSLCgZhw?pwd=1234

提取码:1234

欢迎大家下载测试,如果本文有帮助到您,烦请您点个赞。

51单片机—基于PT100温度变送器的温度检测装置(ADC0804)相关推荐

  1. 基于51单片机超声波测距液位检测-温度检测

    [毕设课设]基于51单片机超声波测距液位检测-温度检测 ​效果图 Proteus仿真: 功能简介: 文件内容: 程序框架: 网盘链接: ​效果图 更多内容请关注@WENJIE电子科技 ​ 基于51单片 ...

  2. 51单片机驱动DS18B20温度传感器测量温度

    51单片机驱动DS18B20温度传感器测量温度 1.DS18B20温度传感器介绍: 2.51单片机驱动DS18B20测量温度 1.DS18B20温度传感器介绍: ①引脚定义 引脚 符号 说明 1 GN ...

  3. 3、基于51单片机的智能水箱控制系统-温度-PH值-水位(仿真+程序+原理图)

    目录 基于51单片机的智能水箱控制系统 1.主要功能 2.实验结果 3.仿真工程 4.原理图 5.程序源码 6.资源获取 基于51单片机的智能水箱控制系统 1.主要功能 51单片机检测水箱内温度,ph ...

  4. 17、基于51单片机智能饮水机带温度水位检测APP控制系统设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.设计方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.Proteus仿真 七.程序源码 八.资料包括 摘要 本设计基于STC8 ...

  5. 基于51单片机电池的电压电流温度电量监控系统设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 一.硬件电路组成 二.功能 三.电脑开发环境 四.Protues仿真 五.程序 六.资料包括 一.硬件电路组成 51最小系统+电压.电流采用滑动变阻 ...

  6. 基于51单片机的智能火灾报警系统温度烟雾光

    wx供重浩:创享日记 对话框发送:火灾报警 获取完整源码源文件+电路图+仿真文件+论文报告等 功能简介 51单片机+MQ-2烟雾传感+ADC0832模数转换芯片+DS18B20温度传感器+数码管显示+ ...

  7. 51单片机——基于单片机的智能报警系统设计

    基于51单片机的宿舍火警报警系统 基于单片机的智能报警系统设计 基于51单片机的报警系统实现 网上转载:本系统具备发送短信.接收短信,拨打电话.接听电话等功能.主控检测到有人入侵之后会立即产生高分贝的 ...

  8. 【c#作为上位机控制51单片机(下位机)温度检测】

    文章目录 概要 C#上位机程序 51单片机(下位机)程序 使用DS18B20温度传感器实现测温 小结 概要 通过串口方式与下位机通信,通信协议自定上位机可以实时显示下位机采集到的温度数据  C#上位机 ...

  9. 呼吸灯51单片机c语言编程,51单片机基于定时器实现呼吸灯(C8051F020单片机)

    一.实现思路 原理:利用PWM信号控制LED灯的亮暗程度,实现LED灯由暗到亮又由亮到暗的渐变过程. 方法:通过定时器设置LED所接引脚的高低电平持续时间,模拟出PWM波. 二.关键问题--PWM的频 ...

最新文章

  1. R语言-路径设置与工作目录修改
  2. 过节的快乐,在于Free | 手把手带你学Django
  3. 56.阶乘因式分解(一)
  4. 简易航空订票系统_基于C++实现简易航空票务,飞机订票系统!
  5. Java+Selenium+sikuli script入门使用
  6. 写一个sql实现以下查询结果_书写高质量SQL的30条建议
  7. 思科又发紧急安全通告 IOS集群管理协议漏洞和Struts2漏洞 有影响产品列表及应对措施了...
  8. 安卓TextView完美展示html格式代码
  9. UVa OJ 10361 自动作诗机
  10. (MATLAB)错误使用 xlsread (line 260) 无法激活 Excel 工作表
  11. php堆栈是什么意思,如何理解什么是堆栈
  12. Unity3d shader内置矩阵
  13. 【MATLAB】绘制阶梯图、枝干图
  14. [javascript]替换所有带/的字符串
  15. android 系统光标,如何定位android系统中光标的位置
  16. 使用mysqladmin检测MySQL运行状态的教程
  17. CharacterUtils 判断中英文,英文大小写
  18. Java基础语法之数组练习——循环输出数列的值并求和
  19. OpenCV-飞龙绣球识别
  20. 诗经 - 小雅 - 采芑

热门文章

  1. 【CV】CVPR2021高光谱图像重建论文笔记
  2. win7旗舰版64位下完美安装和破解loadrunner11
  3. 计算机硬件图标准画法,机械制图培训中剖视图的画法详解
  4. 2021-9-20 18点00 程序外生活 - 中国A50指数 机器预测学习跟踪记录 - 回调有点大,但是还是再箱体里面,且没有破前低,恒大黑天鹅继续发酵,等待箱体稳定。
  5. 游戏中的数学之魔塔数学
  6. Springboot毕业设计毕设作品,校园网站系统设计与实现
  7. CodeBlocks安装及指南
  8. kafka学习武林秘籍
  9. 今天高考╮(╯▽╰)╭
  10. 清除所有的 Python 环境并重新配置一个新的环境