基于STC12C5A60S2系列1T 8051单片机的LCD1602显示模数芯片ADC0832采样NTC热敏电阻传感器电压推算NTC热敏电阻传感器电阻实现NTC热敏电阻传感器电阻对比温度进行测温应用

STC15单片机-ADC获取环境温度(NTC热敏电阻) 然后想着去查看STC-ISP串口助手那一块是否有可以设置的地方,猜测自己的串口助手与教程的某项设置不一样,导致乱码,后来完全没发现STC-ISP烧录工具有可以设置串口相关参数的地方,除了波特率,校验位和停止位,其他没得设置,波特率对应了,乱码的问题与校验位和停止位关系应该也不大,如果校验位和停止位有错,应该整个通信都有问题,而不只是这一个℃单位。后来猜测到,既然烧录教程的代码没问题,烧录自己的代码有问题,而内容却一样,那我把教程代码串口打印输出这一块的全部内容复制到自己的代码中,是否还有乱码现象呢? 阅读详情

STC12C5A60S2系列1T 8051单片机管脚图

在这里插入图片描述在这里插入图片描述

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置

在这里插入图片描述

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍

在这里插入图片描述在这里插入图片描述

模数芯片ADC0832介绍

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

通过LCD1602显示模数芯片ADC0832采样NTC热敏电阻传感器电压推算NTC热敏电阻传感器电阻实现NTC热敏电阻传感器电阻对比温度进行测温功能

NTC热敏电阻传感器不同阻值不同B值下的电阻阻值与温度对应表

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

Rp(25℃下的阻值))= 5K Bx(B值) = 3470

在这里插入图片描述

Rp(25℃下的阻值))= 5K Bx(B值) = 3950

在这里插入图片描述在这里插入图片描述

Rp(25℃下的阻值))= 10K Bx(B值) = 3380

在这里插入图片描述

Rp(25℃下的阻值))= 10K Bx(B值) = 3435

在这里插入图片描述

Rp(25℃下的阻值))= 10K Bx(B值) = 3950

在这里插入图片描述

Rp(25℃下的阻值))= 15K Bx(B值) = 3950

在这里插入图片描述

Rp(25℃下的阻值))= 20K Bx(B值) = 3950

在这里插入图片描述

Rp(25℃下的阻值))= 50K Bx(B值) = 3950

在这里插入图片描述

Rp(25℃下的阻值))= 100K Bx(B值) = 3950

在这里插入图片描述在这里插入图片描述
main.c

#include "STC12C5A60S2.h" 
//#include "AT24C02.h" 
//#include "AT24C02OfI2C.h" 
//#include <intrins.h>
#include "NTC10KB3435.h"
#include "ADC0832.h"
#include "LCD1602.h" 
#include "NTCTemperatureDisplay.h" 
#include "Timer0.h"
#include "stdio.h"
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uint 
 void main()//主函数
{
   
   
//  uchar Data;//声明数据变量
//	uchar String[10];//声明字符串数组变量
//	LCD1602Init();//液晶显示器初始化函数
//	uchar i;//声明循环变量
//  uchar String[20];//声明字符串数组变量
//  uchar StringCache[5];//声明字符串缓存数组变量
//  LCD1602Init();//液晶显示器初始化函数
//  Data = ReadByteFromAT24C02(0x50,0x20);//单片机作为主机通过I2C通信从AT24C02内存地址0x20上读取一个字节 
//  LCD1602SetDisplayPosition(0,0);//液晶显示器LCD1602第一行第一个位置显示字符串
//  LCD1602WriteData(Data/100 + '0');//液晶显示器LCD1602写数据函数 显示百位数据 为什么数据分解后+'0'? 因为液晶显示器LCD1602要显示数据的字符串 而单片机运算字符串的字符是字符对应的ASCII码的二进制数值或十进制数值或十六进制数值 这里取单片机运算字符串的字符对应的ASCII码十进制数值 如:字符'0'的ASCII码十进制数是48 字符'1'的ASCII码十进制数是49 字符'2'的ASCII码十进制数是50 .... 字符'9'的ASCII码十进制数是57 而编译器对于'0'会自动视为是'0'的ASCII码 即ASCII码十进制数是48 举例:拿Data = 251来分解 则有:Data/100=2 Data/10%10=5 data%10=1 要把数据251转化成字符串为"251" 可拆开看成字符'2' '5' '1' 它们对应的ASCII码十进制数分别为50 53 49 而Data/100=2+'0'=2+48=50 Data/10%10=5+'0'=5+48=53 data%10=1+'0'=1+48=49 算出50 53 49这三个ASCII码十进制数分别对上字符'2' '5' '1'的ASCII码十进制数为50 53 49 这就是为什么数据分解后+'0'的原因
//  LCD1602WriteData(Data/10%10 + '0');//液晶显示器LCD1602写数据函数 显示十位数据
//  LCD1602WriteData(Data%10 + '0');//液晶显示器LCD1602写数据函数 显示个位数据
//  NumberTransformedToHexString(Data,String);//无符号字符型数据转化为十六进制数的字符串函数 无符号字符型数据要转化为十六进制数的字符串 可以把无符号字符型数据拆成高四位与低四位来分别转化成表示十六进制数的字符串两位数字符
//  LCD1602ShowString(5,0,String);//液晶显示器LCD1602第一行第六个位置显示字符串
//  Data++;//数据变量自加
//  WriteByteToAT24C02(0x50,0x20,Data);//写字节给AT24C02函数 单片机作为主机通过I2C通信在AT24C02内存地址0x20上写一个字节 
//  LCD1602SetDisplayPosition(0,1);//液晶显示器LCD1602第二行第一个位置显示字符串
//  LCD1602WriteData(Data/100 + '0');//液晶显示器LCD1602写数据函数 显示百位数据 为什么数据分解后+'0'? 解释同上
//  LCD1602WriteData(Data/10%10 + '0');//液晶显示器LCD1602写数据函数 显示十位数据
//  LCD1602WriteData(Data%10 + '0');//液晶显示器LCD1602写数据函数 显示个位数据
//  NumberTransformedToHexString(Data,String);//无符号字符型数据转化为十六进制数的字符串函数 无符号字符型数据要转化为十六进制数的字符串 可以把无符号字符型数据拆成高四位与低四位来分别转化成表示十六进制数的字符串两位数字符
//  LCD1602ShowString(5,1,String);//液晶显示器LCD1602第二行第六个位置显示字符串
//  ReadMultiByteFromAT24C02(0x50,0x50,StringCache,5);//单片机作为主机通过I2C通信从AT24C02内存地址0x50上连续读取五个字节 
//  StringCacheTransformedToHexString(StringCache,5,String);//字符串缓存数组中的无符号字符型数据转化为十六进制数的字符串函数
//  LCD1602ShowString(0,0,String);//液晶显示器LCD1602第一行第一个位置显示字符串
//  for(i = 0;i < sizeof(StringCache);i++)
// {
   
   
//   StringCache[i] = StringCache[i] + 1;//字符串缓存数组中的数据变量自加
//  }
//  WriteMultiByteToAT24C02(0x50,0x50,StringCache,5);//单片机作为主机通过I2C通信从AT24C02内存地址0x50上连续写入五个字节	
//	while(1);//主循环

//  uchar String1[] = "Hello World";
//  uchar String2[] = "Hello LCD1602";
//  uint Data = 12345;//给整型数据变量赋值 也可以取uint Data = 12345来显示
//	uchar String[8];//声明字符串数组变量
//  uchar StringCache[10];//声明字符串数组变量
//  uint Temp;//声明临时变量
//  float Number1 = 1.25;//给单个小数点数字变量赋值
//  float Number2 = 1.2345;//给单个小数点数字变量赋值 也可以取float Number2 = 1.2345来显示
//	uchar String = "NTCTemperature";//显示字符串
  Timer0Init();//定时器0的16位定时模式1用12分频定时2ms初始化函数 晶振为12MHz
  LCD1602Init();//液晶显示器初始化函数
  while(1)
{
   
   			 
   NTCTemperatureDisplay();//NTC温度显示函数
  }
//	LCD1602ShowString(0,0,String);//液晶显示器LCD1602第一行第一个位置显示字符串"NTCTemperature"
//  LCD1602ShowString(0,0,String1);//显示字符串
//  LCD1602ShowString(0,1,String2);//显示字符串
//  IntegerTransformedToHexString(Data,String);//整型数转化为十六进制数的字符串据函数
//	LCD1602ShowString(0,0,String);//液晶显示器LCD1602第一行第一个位置显示字符串 
//  Temp = Number1 * 100;//把单个小数点数字变量含有的数值扩大100倍转化成整数变量赋给临时变量
//  LCD1602SetDisplayPosition(0,1);//液晶显示器LCD1602第二行第一个位置显示
//  LCD1602WriteData(Temp/100 + '0');//液晶显示器LCD1602写数据函数 显示百位数据 为什么数据分解后+'0'? 因为液晶显示器LCD1602要显示数据型字符串 而单片机运算字符串的字符是字符对应的ASCII码 如:字符'0'的ASCII码十进制数是48 字符'1'的ASCII码十进制数是49 字符'2'的ASCII码十进制数是50 .... 字符'9'的ASCII码十进制数是57 而编译器对于'0'会自动视为是'0'的ASCII码 即ASCII码十进制数48 举例:拿Data = 251来分解 则有:Data/100=2 Data/10%10=5 data%10=1 要把数据型251转化成字符串为"251" 可拆开看成'2' '5' '1' 它们对应的ASCII码十进制数分别为50 53 49 而Data/100=2+'0'=2+48=50 Data/10%10=5+'0'=5+48=53 data%10=1+'0'=1+48=49 算出50 53 49这三个ASCII码十进制数分别对上字符'2' '5' '1'的ASCII码十进制数为50 53 49 这就是为什么数据分解后+'0'的原因
//  LCD1602WriteData('.');//液晶显示器LCD1602显示小数点
//  LCD1602WriteData(Temp/10%10 + '0');//液晶显示器LCD1602写数据函数
//  LCD1602WriteData(Temp%10 + '0');//液晶显示器LCD1602写数据函数
//  sprintf(StringCache,"%0.4f",Number2);//把数字变量Number2含有的数据给格式化成字符串保存到字符串数组变量StringCache中
//  LCD1602ShowString(8,1,StringCache);//液晶显示器LCD1602第二行第九个位置显示字符串 
//  while(1);//主循环
 }  

NTC10KB3435.c

#include "NTC10KB3435.h"
//#include "ADC0832Filter.h"
#include "ADC0832.h"
#include "Timer0.h"
#include "math.h"
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uin
uchar AnalogDataResult = 0;//定义模拟量数值变量
float Rt = 0,NTCTemperature = 0,NTCOutPutVoltage = 0;//定义NTC当前阻值变量、NTC当前温度变量、NTC当前电压变量
float Rp = 10000;//定义NTC在25℃的阻值 这里是10K
float Bx = 3435;//定义NTC的B值
float T3 = 273.15;//定义开尔文温度 等于273.15+NTC当前摄氏度T
float T4 = 273.15+25;//定义开尔文温度 等于273.15+摄氏度25
 float GetNTCTemperature()//获取NTC温度函数
{
   
   
  if(Timer0CountTimeFlag == 1)//计时1秒时间到 定时器0计时标志位变量置1
 {
   
   
   Timer0CountTimeFlag = 0;//定时器0计时标志位变量清0
   AnalogDataResult = ADC0832Change();//ADC0832转化函数转化的模拟量十进制数赋给模拟量数字结果变量 即模拟量转十进制数变量
//	AnalogDataResult = FliterMiddle();//模拟量数值取中间值滤波采样
   NTCOutPutVoltage = (float)(AnalogDataResult) * 
学习笔记|ADC|NTC原理|测温程序|STC32G单片机视频开发教程(冲哥)|第十九集:ADC应用之NTC 阅读详情

相关推荐

STC 单片机 通过NTC 测量显示到数码管上

STC 单片机 通过NTC 测量显示到数码管上

weixin_51036828的博客 912

ADC0832测电阻原理及51单片机1602显示

前言:今天中午和高中老同学一起吃了个饭,同学计算机专业代码大佬,问起我有没有优快云,我说有些时候会在上面看一些程序,他随即向我说起了他已经在优快云上发表了很多文章目前排名一万多,因为我学集成电路专业,有时也会接触一些嵌入式开发的程序,他随即让我也发一些文章,自己以前也有这种想法,但是一直迟迟没动手,适逢同学鼓励,他说这也算是记录自己一个成长的过程,也可以当做自己的一个笔记,回到家后找出了自己写过的一段程序随即发表一下,希望可以帮到需要帮助的人,自己的专业是集成电路相关,以后应该大概率会发一些...

qq_51264805的博客 2万+

基于STC12C5A60S2系列1T 8051单片机的数码管显示模数芯片ADC0832采样NTC热敏电阻传感器电压推算NTC热敏电阻传感器电阻实现NTC热敏电阻传感器电阻对比温度进行测温

main.c#define uchar unsigned char//自定义无符号字符型为uchar#define uint unsigned int//自定义无符号整数型为uint//定义模拟量数字结果变量为0 即模拟量转十进制数变量//定义模拟采样计数变量为0//定义输出电压变量为0//定义模拟滤波电压变量为0//定义模拟滤波后输出电压变量为0void main(void)//主函数//定时器0初始化函数//定时器1初始化函数//ADC0832初始化函数//数码管开机显示函数。

CWQLTYH的博客 1307

STC单片机实现8路NTC温度测量

在代码中的注释部分,可以进行温度转换的计算。由于NTC传感器的输出是与温度成反比的,所以需要根据具体的NTC传感器特性曲线进行转换。根据实际应用需求,你可以根据具体的NTC传感器特性和温度转换算法进行相应的修改和优化。首先,在硬件上连接8个NTC温度传感器到单片机的引脚,并设置对应的控制引脚(NTC_CS1到NTC_CS8)。在每次循环中,先选中一个NTC传感器(通过将对应的NTC_CS引脚置为低电平),然后调用。函数,读取每个传感器的模拟信号,并将结果保存在相应的变量中(temp1到temp8)。

RlDart的博客 868

电芯温度采样电路几个关键点

以下浅谈如何选择合适的NTC 图1 NTC采样电路 BMS的温度采样精度包括两部分,一是电路本身的采样精度,二是NTC的精度。 在QCT-897中并没没有把NTC单独拿出来讲,但实际里面的采样精度要求是包括NTC这一部分的,而且NTC的精度对整体温度采样精度影响很大;很多主机厂只提出了一个整体的温度精度要求,但我们要知道里面的潜规则,要主动找主机厂问一下NTC是怎么选取的,因为这一块极大可能是别人选型的。 电路本身的采样精度,又包括了上拉电阻精度、ADC精度、参考电压源精度、供电电源精度,这个才是我们电路

sinat_15677011的博客 8729

【Proteus仿真】STC51单片机NTC温度采集

STC51单片机ntc采集

perseverance51博客 2738

STM32开发(十二)STM32F103 功能应用 —— NTC 温度采集

根据数据手册中的数据,这个参照电压的典型值是1.20V,最小值是1.16V,最大值是1.24V。分辨率越高,就可以将满量程里的电平分出更多份数,得到的结果就越精确,得到的数字信号再用DAC转换回去后就越接近原来输入的模拟值。每个STM32芯片都有一个内部的参照电压,相当于一个标准电压测量点,在芯片内部连接到ADC1的通道17。比如:一个10位的ADC,其所能分辨的最小量化电平为参考电平(满量程)的2的10次方分之一。所以,对于给定的一个具体ADC器件,其分辨率值是固定的。Vadc :输出电压值Vadc。

weixin_43564241的博客 5626

基于STC89C52的51单片机智能风扇:选型、时序编排与调试避坑全解析

单片机作为嵌入式系统的核心,常凭借有限的外设资源实现复杂的控制逻辑。以智能风扇为例,通过8位MCU协调单总线温度传感器、红外遥控解码与软件PWM调速,可以串联GPIO、定时器、外部中断等基础知识点,锻炼系统时序编排与硬件调试能力。本文围绕STC89C52展开,剖析DS18B20温度采集、NEC红外解码、电机驱动及OLED显示等关键环节的选型与实现,并针对电机浪涌复位、DS18B20读取异常、红外漏码、低占空比卡死和I2C中断干扰等常见翻车点给出修复方案,帮助初学者从零搭建一套稳定可用的多功能风扇系统,并形成

weixin_33782386的博客 409

STC12C5A16S2NTC热敏电阻温度定时控制_soon8bl_NTC热敏电阻_定时控制_

STC12C5A16S2NTC热敏电阻温度定时控制,根据温度进行定时控制想要的输出执行器。

从软体机器人到鞋垫分析:Abaqus超弹性材料(Ogden模型)仿真配置全流程

本文详细介绍了Abaqus中Ogden模型在超弹性材料仿真中的应用全流程,涵盖从实验数据导入、参数拟合到模型构建与求解优化的关键步骤。特别针对鞋垫分析等生物力学场景,提供了单元选择、接触设置和并行计算等实用技巧,帮助工程师实现高精度仿真分析。

weixin_42525385的博客 399

三菱FX5U运动控制(步进)

三菱FX5U脉冲定位控制,原点回归,相对定位,绝对定位,运动控制案例。

weixin_55762091的博客 1万+

线性代数——(期末突击)行列式(上)-行列式计算、行列式的性质

简单解释一下:4213原本的顺序应为1234,对于‘4’而言,‘2’、‘1’、‘3’都应该排在它的前面,所以此处记逆序数为3;对于‘2’而言,‘1’应该排在它的前面,而‘3’排在它之后 是合理的,所以此处只有一个逆序数;最后看‘1’,其后面的‘3’排在后面显然也是合理的,故而4213的逆序数为4.一般我们使用这个性质来计算四阶行列式,也就是将其变换成三角行列式,再计算对角线的值;以主对角线为分界线的就为正三角,反之则为反三角行列式。若行列式某一行(列)为0,则该行列式=0.将和的那一行分开,其余行。

li13437542099的博客 1万+

泛微ecology9 利用字段值动态控制明细表显示与隐藏

本文详细介绍了在泛微ecology9中,如何利用WfForm.bindFieldChangeEvent监听字段变化,结合jQuery动态控制明细表显示与隐藏的实战方法。通过五步操作,可实现根据字段值(如报销类型)智能切换明细表,提升表单交互体验与开发效率,并确保PC与移动端完美兼容。

7z8x2c4v6b9的博客 585

GNSS数据资源全解析:从DCB到BSX文件的下载与应用指南

本文系统解析了GNSS数据处理所需的核心数据资源,包括DCB、BSX、SP3、CLK等关键文件的官方下载路径与应用方法。详细介绍了CDDIS、武汉大学镜像站等权威数据源,并提供了从数据下载到实际应用的完整指南,帮助用户高效获取GNSS数据,提升精密定位处理效率。

weixin_29246195的博客 140

ABAP 平台注册 OAuth 2.0 Client 的完整实践指南(覆盖 Authorization Code、SAML Bearer 与 PKCE)

本文详述了在ABAP平台上注册入站OAuth 2.0 Client的关键技术和操作要点。文章面向SAP技术人员,系统梳理了前置条件(TLS/SSL、技术用户、授权对象)、配置路径(SOAUTH2事务)、授权类型差异(授权码、SAML Bearer、PKCE)等重要内容。特别强调入站与出站配置的区别,并提供了保密客户端和公有客户端的配置指引。文中所有事务码和参数均参考SAP官方文档,包含多个实用案例和权限配置建议,为ABAP系统作为OAuth 2.0授权服务器的实施提供全面指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 297

Unity零基础到进阶 ☀️| Unity中的 GC及优化 超级全面解析 ☆(ゝω・)v 建议收藏!

介绍: 在游戏运行的时候,数据主要存储在内存中,当游戏的数据在不需要的时候,存储当前数据的内存就可以被回收以再次使用。内存垃圾是指当前废弃数据所占用的内存,垃圾回收(GC)是指将废弃的内存重新回收再次使用的过程。 Unity中将垃圾回收当作内存管理的一部分,如果游戏中废弃数据占用内存较大,则游戏的性能会受到极大影响,此时垃圾回收会成为游戏性能的一大障碍点。 本文我们主要学习垃圾回收的机制,垃圾回收如何被触发以及如何提GC收效率来提高游戏的性能。 Unity内存管理机制简介 要想了解垃圾回收如何工作以及何时被

努力前行,总会成为自己心中的那道光 6万+

功能安全实战系列09-英飞凌TC3xx LBIST开发详解

英飞凌Tricore/LBIST开发详解

initiallizer的博客 1106

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: 基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示自带字库的字符应用
下一篇: 基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示汉字的功能
CWQLTYH
博客等级 码龄10年 1432粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值