ATmaga8单片机Pt100温度计源程序+Proteus仿真设计

目录

1、项目功能 

2、仿真图

​3、程序

资料下载地址:ATmaga8单片机Pt100温度计源程序+Proteus仿真设计

1、项目功能 

设计Pt100铂电阻测量温度的电路,温度测量范围是0-100摄氏度,要求LCD显示。画出电路图,标注元器件参数,简单说明测量原理和调节方式。根据要求,本设计的测温模拟电路使用热电阻Pt100温度传感器利用其感温效应,热电阻随环境温度的变化而变化,在电路图中将电阻值的变化转换成电压的变化,再将电压值作为输入信号输入至AD转换器中进行模拟信号到数字信号的转换,其输出端接单片机,向单片机内依据公式写入源程序,将被测温度在显示器上显示出来:
测量温度范围0℃~100℃;
分辨率为0.1℃;
LCD数码直读显示。
本设计系统包括了温度测量单元,信号处理单元,A/D 转换模块,数据处理与控制模块,温度显示五个部分。

2、仿真图

 3、程序

#include <lcd.h>#include <delay.h>#define ADC_VREF_TYPE 0xC0
#define MCPCS   PORTD.0
#define MCPSCK  PORTD.1
#define MCPDATA PIND.2
#define A 3.9083e-3
#define B -5.775e-7
#define C -4.183e-12
unsigned long read_spi(void);
float CalTem(float PT100R)
{
double fT,fR,fT0;
char i=0;
fR=PT100R;
fT0=(fR/100-1)/A;return fT0;
};
unsigned long read_mcp(void)
{
long a[]={0,0,0,0,0};
long x=0;
char i=0;
char k=5;       // 数组大小 -1
for (i=0;i<5;i++)
{
a[i]=read_spi(); // 连续3次读出数据
delay_us(5);
}
//中值滤波
while (k>0)
{
for (i=0;(i<(k-1));i++) // 从低到高排序
{if (a[i]>a[i+1]){x=a[i+1];a[i+1]=a[i];a[i]=x;};
};
k--;
};
return a[2]; // 舍弃最大数据和最小数据。
}unsigned long read_spi(void)
{              
volatile  char i=0;
volatile  long int result=0,x=0;
MCPCS=0;//    CS 先一个100us 低电平脉冲
delay_us(100);
MCPCS=1;
delay_ms(80); // 高电平等待80ms 等待转换完成
MCPCS=0;      // 置 CS 低电平 开始发生 sck 脉冲
for (i=0; i<24;i++) // 24 位数据
{MCPSCK=0;    // sck 脉冲下降沿delay_us(1); // 等5us 等待稳定//result=result<<1;x=MCPDATA;   // 读出一位while (MCPDATA!=x)  // 抖动处理 2次读出电平相同说明数据稳定{delay_us(1);x=MCPDATA;};result<<=1;   result|=x;//(x<<(23-i));delay_us(5);MCPSCK=1;   // 发送sck 上升沿delay_us(10);   
};
MCPCS=1; // cs=1
return result>>6;
}
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}// 校准温度计查表   没20度一个校准,
//                     -50  -30  -10  10  30   50    70  90   110   130 150   
const float CAL_Tem[]={4.7 ,4.65,4.65,4.6,4.6 ,4.55,4.55,4.50,4.45,4.45,4.45};
const int   ADCSTEP[]={  1 ,96  ,189 ,282, 374,466 ,557 ,648,738,827 ,916};float CalcuTem(int ADC)  // 温度校准计算     没有使用
{
int i=0;
float r;
for (i=0; i<10;i++)
{if ((ADC<ADCSTEP[i+1])&&(ADC>=ADCSTEP[i])) break;
};
r=(ADC-ADCSTEP[i]);
r=r/CAL_Tem[i];
r=r-50;///CAL_Tem[i]-50+i*20+;
r=r+i*20.0;
return r;
}
volatile char stradc[15]="\0";
void main(void)
{
// Declare your local variables here
volatile  long int MCPADC=0;
volatile unsigned int adc=0;
volatile float  fadc=0;// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;// Port D initialization
// Func7=out Func6=out Func5=out Func4=out Func3=out Func2=int Func1=out Func0=out
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=1
PORTD=0x07;
DDRD=0xFB;// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/473898.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【代码pycharm】动手学深度学习v2-05 线性代数

课程链接-05 线性代数 可以先看完特定轴求和再去看p2 import torch xtorch.tensor([3.0]) ytorch.tensor([2.0]) #标量 print(1.标量只有一个元素&#xff1a;\n,xy,x*y,x/y,x**y) x2torch.arange(4) #向量 print(2.向量视为标量值组成的列表&#xff1a;\n,x2) print(3.访问张…

SpringBoot源码解析(四):解析应用参数args

SpringBoot源码系列文章 SpringBoot源码解析(一)&#xff1a;SpringApplication构造方法 SpringBoot源码解析(二)&#xff1a;引导上下文DefaultBootstrapContext SpringBoot源码解析(三)&#xff1a;启动开始阶段 SpringBoot源码解析(四)&#xff1a;解析应用参数args 目录…

ZSTD 内存泄漏问题

优质博文&#xff1a;IT-BLOG-CN Zstandard&#xff08;简称zstd&#xff09;是一种无损压缩算法&#xff0c;由Facebook开发并开源。它旨在提供高压缩比和高解压速度的平衡&#xff0c;适用于多种数据压缩需求。 特点 【1】高压缩比&#xff1a; zstd能够在保持较高压缩比的…

前端:HTML (学习笔记)【1】

一&#xff0c;网络编程的三大基石 1&#xff0c;URL &#xff08;1&#xff09;url —— 统一资源定位符&#xff1a; 网址——整个互联网中可以唯一且准确的确定一个资源的位置。 【项目外】 网址——https://www.baidu.com/ …

【C++动态规划】3148. 矩阵中的最大得分|1819

本文涉及知识点 C动态规划 LeetCode 3148. 矩阵中的最大得分 给你一个由 正整数 组成、大小为 m x n 的矩阵 grid。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧的任意单元格&#xff08;不必相邻&#xff09;。从值为 c1 的单元格移动到值为 c2 的单元格的得…

STM32完全学习——使用标准库点亮LED

一、使用标准库建立工程 &#xff08;1&#xff09;首先我们在ST的网站上面&#xff0c;下载标准库 &#xff08;2&#xff09;将标准外设库加入到项目中 我们一般只会使用到红色标注的那个文件夹&#xff0c;我们一般也只会将这个文件夹导入到工程里面&#xff0c;其他的还有…

解决微信小程序自定义tabbar点击两次才能跳转

在每个页面的js文件下加上此代码&#xff0c;selected属性代表每一个页面的下标&#xff0c;在不同的js文件下&#xff0c;要对应不同的selected值 代码&#xff1a; onShow() { // 确保 TabBar 存在并且设置选中项 if (this.getTabBar && this.getTabBar()) { this.…

学习threejs,使用AnimationMixer实现变形动画

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.AnimationMixer 动画…

Solana应用开发常见技术栈

编程语言 Rust Rust是Solana开发中非常重要的编程语言。它具有高性能、内存安全的特点。在Solana智能合约开发中&#xff0c;Rust可以用于编写高效的合约代码。例如&#xff0c;Rust的所有权系统可以帮助开发者避免常见的内存错误&#xff0c;如悬空指针和数据竞争。通过合理利…

【汇编语言】数据处理的两个基本问题(二) —— 解密汇编语言:数据长度与寻址方式的综合应用

文章目录 前言1. 指令要处理的数据有多长&#xff1f;1.1 通过寄存器指明数据的尺寸1.1.1 字操作1.1.2 字节操作 1.2 用操作符X ptr指明内存单元的长度1.2.1 访问字单元1.2.2 访问字节单元1.2.3 为什么要用操作符X ptr指明 1.3 其他方法 2. 寻址方式的综合应用2.1 问题背景&…

【算法】【优选算法】前缀和(下)

目录 一、560.和为K的⼦数组1.1 前缀和1.2 暴力枚举 二、974.和可被K整除的⼦数组2.1 前缀和2.2 暴力枚举 三、525.连续数组3.1 前缀和3.2 暴力枚举 四、1314.矩阵区域和4.1 前缀和4.2 暴力枚举 一、560.和为K的⼦数组 题目链接&#xff1a;560.和为K的⼦数组 题目描述&#x…

分布式cap理论学习

【分布式】CAP理论详解 一致性(Consistency) 代表数据在任何时刻&#xff0c;任何分布式节点&#xff0c;看到的都是符合预期的。有点类似于幂等&#xff0c;无论访问哪个节点&#xff0c;得到结果数据一致。 可用性(Availability) 强调的是任意时刻一定能读到数据&#xff…

主机型入侵检测系统(HIDS)——Elkeid在Centos7的保姆级安装部署教程

一、HIDS简介 主机型入侵检测系统(Host-based Intrusion Detection System 简称:HIDS);HIDS作为主机的监视器和分析器,主要是专注于主机系统内部(监视系统全部或部分的动态的行为以及整个系统的状态)。 HIDS使用传统的C/S架构,只需要在监测端安装agent即可,且使用用户…

Python蓝桥杯刷题1

1.确定字符串是否包含唯一字符 题解&#xff1a;调用count函数计算每一个字符出现的次数&#xff0c;如果不等于1就输出no&#xff0c;并且结束循环&#xff0c;如果等于1就一直循环直到计算到最后一个字符&#xff0c;若最后一个字符也满足条件&#xff0c;则输出yes import…

【ARM】MDK在debug模式下的Registers窗口包含哪些内容

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决客户对于Debug模式下&#xff0c;对于Registers窗口包含的内容了解。 2、 问题场景 Registers窗口是在进入到debug模式下后&#xff0c;就会出现一个窗口。窗口中包含了很多寄存器信息。但是对于具体内容不了解…

河道无人机雷达测流监测系统由哪几部分组成?

在现代水利管理中&#xff0c;河道无人机雷达监测系统正逐渐成为一种重要的工具&#xff0c;为河道的安全和管理提供了强大的技术支持。那么&#xff0c;这个先进的监测系统究竟由哪几部分组成呢&#xff1f; 河道无人机雷达监测系统工作原理 雷达传感器通过发射电磁波或激光束…

浅谈数据仓库的架构及其演变

一、数据仓库分层架构 数据仓库分层一般分为三层&#xff0c;分别为数据仓库ODS层&#xff08;数据进出口贴源层&#xff09;、CDM层&#xff08;数据公共层&#xff09;和ADS层&#xff08;数据应用层&#xff09;。 1. ODS层&#xff1a;这是数据仓库的最底层&#xff0c;直接…

event_base

build default event_base event_base_new()函数分配并且返回一个新的具有默认设置的event_base。函数会检测环境变量&#xff0c;返回一个到event_base的指针。如果发生错误&#xff0c;则返回NULL。选择各种方法时&#xff0c;函数会选择OS支持的最快方法。 event_base_new…

PyTorch使用教程-深度学习框架

PyTorch使用教程-深度学习框架 1. PyTorch简介 1.1-什么是PyTorch ​ PyTorch是一个广泛使用的开源机器学习框架&#xff0c;特别适合深度学习的应用。它以其动态计算图而闻名&#xff0c;允许在运行时修改模型&#xff0c;使得实验和调试更加灵活。PyTorch提供了强大的GPU加…

数据科学与SQL:如何计算排列熵?| 基于SQL实现

目录 0 引言 1 排列熵的计算原理 2 数据准备 3 问题分析 4 小结 0 引言 把“熵”应用在系统论中的信息管理方法称为熵方法。熵越大&#xff0c;说明系统越混乱&#xff0c;携带的信息越少&#xff1b;熵越小&#xff0c;说明系统越有序&#xff0c;携带的信息越多。在传感…