51单片机—基于PT100温度变送器的温度检测装置(ADC0804)
一、前言
在我们学习51单片机的过程中,提到温度测量,很多同学的第一反映一定是DS18B20温度传感器。DS18B20是一款物美价廉且十分简单的传感器,它的体积小,测量精度高,使得其成为很多同学的选择。但其实,除了DS18B20,还有一些其他的温度传感器可以选择,例如PT100温度变送器,它将温度信号转变为可以观测到的电信号。在日程生活中,我们所能买到的PT100,一般都是已经设计好的温度变送器,可以将0-100的温度变换为1-5V的电压,不再需要我们去自己调节。
本文将通过一个滑动变阻器模拟出PT100温度变送器所产生的4-20mA电流。首先,我们制定程序实现的功能如下:
读取PT100温度变送器产生的电流通过电阻转换为1-5V电压(滑动变阻器模拟)产生的电压,将其通过ADC0804芯片转换为数字信号。
读取转换后的数字信号,进行数字滤波。本文采取平均值滤波。
将过滤后的数字信号通过标度变换转换为温度值
将温度值通过LED数码管显示。本文采取四位数码管进行显示,包含一位小数。
当温度高于某一设定值时(本文为90摄氏度),启动蜂鸣器报警。
为了方便大家学习与测试,文末附有源码与仿真文件。如有疏漏错误之处,还请多包涵并指出。
二、装置介绍
本次实验涉及的装置如下:AT89C51芯片、12MHZ晶振、复位按钮、ADC0804芯片、1K欧姆滑动变阻器,1K欧姆电阻,蜂鸣器、三极管。
ADC0804
这是一个8位的AD转换芯片,可以将0-5V电压转换为0-255的数字。关于其的使用,网上的资料很多,这里就不在多加赘叙。
蜂鸣器
本文采取的是低电平触发的有源蜂鸣器。顾名思义,即当控制引脚为低电平时,蜂鸣器响起。由于芯片引脚电流较小,无法驱动蜂鸣器,我们一般需要增加一个三极管用来驱动。
温度变送器
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)相关推荐
- 基于51单片机超声波测距液位检测-温度检测
[毕设课设]基于51单片机超声波测距液位检测-温度检测 效果图 Proteus仿真: 功能简介: 文件内容: 程序框架: 网盘链接: 效果图 更多内容请关注@WENJIE电子科技 基于51单片 ...
- 51单片机驱动DS18B20温度传感器测量温度
51单片机驱动DS18B20温度传感器测量温度 1.DS18B20温度传感器介绍: 2.51单片机驱动DS18B20测量温度 1.DS18B20温度传感器介绍: ①引脚定义 引脚 符号 说明 1 GN ...
- 3、基于51单片机的智能水箱控制系统-温度-PH值-水位(仿真+程序+原理图)
目录 基于51单片机的智能水箱控制系统 1.主要功能 2.实验结果 3.仿真工程 4.原理图 5.程序源码 6.资源获取 基于51单片机的智能水箱控制系统 1.主要功能 51单片机检测水箱内温度,ph ...
- 17、基于51单片机智能饮水机带温度水位检测APP控制系统设计
毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.设计方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.Proteus仿真 七.程序源码 八.资料包括 摘要 本设计基于STC8 ...
- 基于51单片机电池的电压电流温度电量监控系统设计
毕设帮助.开题指导.技术解答(有偿)见文末. 目录 一.硬件电路组成 二.功能 三.电脑开发环境 四.Protues仿真 五.程序 六.资料包括 一.硬件电路组成 51最小系统+电压.电流采用滑动变阻 ...
- 基于51单片机的智能火灾报警系统温度烟雾光
wx供重浩:创享日记 对话框发送:火灾报警 获取完整源码源文件+电路图+仿真文件+论文报告等 功能简介 51单片机+MQ-2烟雾传感+ADC0832模数转换芯片+DS18B20温度传感器+数码管显示+ ...
- 51单片机——基于单片机的智能报警系统设计
基于51单片机的宿舍火警报警系统 基于单片机的智能报警系统设计 基于51单片机的报警系统实现 网上转载:本系统具备发送短信.接收短信,拨打电话.接听电话等功能.主控检测到有人入侵之后会立即产生高分贝的 ...
- 【c#作为上位机控制51单片机(下位机)温度检测】
文章目录 概要 C#上位机程序 51单片机(下位机)程序 使用DS18B20温度传感器实现测温 小结 概要 通过串口方式与下位机通信,通信协议自定上位机可以实时显示下位机采集到的温度数据 C#上位机 ...
- 呼吸灯51单片机c语言编程,51单片机基于定时器实现呼吸灯(C8051F020单片机)
一.实现思路 原理:利用PWM信号控制LED灯的亮暗程度,实现LED灯由暗到亮又由亮到暗的渐变过程. 方法:通过定时器设置LED所接引脚的高低电平持续时间,模拟出PWM波. 二.关键问题--PWM的频 ...
最新文章
- R语言-路径设置与工作目录修改
- 过节的快乐,在于Free | 手把手带你学Django
- 56.阶乘因式分解(一)
- 简易航空订票系统_基于C++实现简易航空票务,飞机订票系统!
- Java+Selenium+sikuli script入门使用
- 写一个sql实现以下查询结果_书写高质量SQL的30条建议
- 思科又发紧急安全通告 IOS集群管理协议漏洞和Struts2漏洞 有影响产品列表及应对措施了...
- 安卓TextView完美展示html格式代码
- UVa OJ 10361 自动作诗机
- (MATLAB)错误使用 xlsread (line 260) 无法激活 Excel 工作表
- php堆栈是什么意思,如何理解什么是堆栈
- Unity3d shader内置矩阵
- 【MATLAB】绘制阶梯图、枝干图
- [javascript]替换所有带/的字符串
- android 系统光标,如何定位android系统中光标的位置
- 使用mysqladmin检测MySQL运行状态的教程
- CharacterUtils 判断中英文,英文大小写
- Java基础语法之数组练习——循环输出数列的值并求和
- OpenCV-飞龙绣球识别
- 诗经 - 小雅 - 采芑
热门文章
- 【CV】CVPR2021高光谱图像重建论文笔记
- win7旗舰版64位下完美安装和破解loadrunner11
- 计算机硬件图标准画法,机械制图培训中剖视图的画法详解
- 2021-9-20 18点00 程序外生活 - 中国A50指数 机器预测学习跟踪记录 - 回调有点大,但是还是再箱体里面,且没有破前低,恒大黑天鹅继续发酵,等待箱体稳定。
- 游戏中的数学之魔塔数学
- Springboot毕业设计毕设作品,校园网站系统设计与实现
- CodeBlocks安装及指南
- kafka学习武林秘籍
- 今天高考╮(╯▽╰)╭
- 清除所有的 Python 环境并重新配置一个新的环境