产品概述

测温单片机程序 单片机实例分享,温度记忆杯垫

小编 2024-11-23 产品概述 23 0

单片机实例分享,温度记忆杯垫

“记忆杯垫”是我利用身边的材料制作的,杯垫材料是一张光盘,导热材料是硬币,用502胶水和加厚双面胶粘合,制作起来十分简单。

这个作品的设计初衷是源自个人的生活经验,希望和我有着一样烦恼的“技术宅”们会喜欢这个设计。笔者作为“职业码农”,常常遇到这样的困扰:早上冲好的咖啡,放着放着就凉了;同事胃不好,需要喝温水,可一忙就忘记了……想必每个人都有这样的经历,这次的设计,就是给大家解决这一问题——可以及时提醒人们饮用热饮。喜欢喝热饮的朋友,以后不必再因为冷却的热饮而苦皱眉头了!

功能描述

“记忆杯垫”能实现以下功能:当我们把装有温度较高液体的杯子放到杯垫上时,杯垫上安装的温度传感器开始测量杯子的底部温度,只要杯子不是隔热材料的,那么杯子的表层温度就会和里面的液体温度成正比,当杯子内的液体降到了适合人的饮用习惯时,此时按下“记忆键”,杯垫就将永久记录下此时的杯子底层温度;当使用者再次将装有热饮的杯子放在杯垫上时,液体在降温过程中,只要杯子的底层温度与之前记忆的温度接近,杯垫就可以根据设计者的要求提示主人饮用,比如通过闪烁灯提示或者通过音乐提示。

工作原理

这次设计的核心就是围绕温度传感器DS18B20和单片机EEPROM的应用。

DS18B20采集温度,单片机负责数据的处理,当有温度需要记录时,单片机将待记录温度存储到单片机EEPROM中;当EEPROM中有了温度记录后,单片机将采集到的数据与EEPROM中数据随时进行比较,当数据接近时,就会做出相应输出,开启提示功能。

当下次冲好了一杯咖啡,就可以把杯子放到杯垫上面了,温度传感器会将采集到的温度T值与EEPROM里的数值A做比较,当A-1 < T < A+1 时,杯垫侧面的8个发光二极管就会闪烁,以此来提示主人喝咖啡或水。

温度的差值也可以根据设计者的需要自行改变,比如在比较寒冷的地区,T与A的差值可以通过改变程序来实现。笔者在南方,实际测试的时候发现T与A的值在±1之间就可以了。

记忆键在向单片机记录温度数据的时候,也会擦除之前的数据,这样一个按钮就可以完成需要的操作。

国产的STC单片机大多数都自带了一定大小的EEPROM,这就给设计者带来了极大的方便。为了让电路更加简洁,这次选用的是STC11F04E的1T单片机,其具备4KB的程序存储空间和1KB的EEPROM空间,20引脚的封装设计大大减小了PCB面积。图15.1为电路原理图,制作说明见图15.2、图15.3。

图15.1 电路原理图

图15.2

图15.2 光盘中间的圆孔用来放置温度传感器,上面用金属片导热材料固定,并涂上硅脂,增加导热效果,因为大多数杯子底部是凹进去的,也可以用硬币这种有一定厚度的材料导热。

图15.3

图15.3 杯垫的背面,用双面胶(电工固定线盒那种)粘住电池盒、电路板、流水灯,温度传感器已经粘在电路板下面了

程序设计

这里要作出说明的是,大多数DS18B20程序代码都是为12T单片机设计的,而1T单片机指令速度要比12T单片机快很多,这就导致了通常的DS18B20程序不能直接拿来调用。笔者根据STC的官方资料,通过计算指令外加逻辑分析仪测试的方式,得出的结论是,11系列的1T单片机指令要比12T单片机快6.5倍左右,根据这个数据来修改原始DS18B20程序的延时程序和EEPROM程序,就能保证系统的稳定性。

STC绝大多数芯片都集成了EEPROM,不同型号的擦写程序也是大同小异,使用起来十分方便,无需额外EEPROM的IC,更不需要IC通信程序。因为是内部集成的,程序代码简单,很好理解,节约了设计成本的同时,也给应用者节约了程序设计时间。

STC的官方资料很明确地给出了EEPROM的原始程序,笔者根据自己的理解,为使程序更加简洁,对官方程序作了一些改动,应用了C语言的宏定义,自己也做了对应的库文件,方便实用。本程序是在Keil环境下编译的,使用时要添加我自己写的basic.h、STC11Fxx_IAP.h文件,同时要下载官方的单片机库文件,这样方可保证程序的正确编译。

■ 本制作的相关源文件可以到qq群657864614进行下载。

■介绍一个与众不同的淘宝店铺:首页-数码达人小二-淘宝网,不信你试试?

使用单片机进行温度测量

要实现温度监测,首先需要连接温度传感器到单片机,并读取传感器输出的模拟信号。通常使用的温度传感器是模拟输出的,可以选择使用模拟输入引脚(比如ADC引脚)来读取传感器信号。

以下是一个示例程序,演示如何在8051单片机上通过ADC读取温度传感器的模拟信号,并将其转换为温度值进行显示:

```c

#include <8051.h>

// 函数声明

void delay_ms(unsigned int milliseconds);

void init_adc();

unsigned char read_adc();

// 延时函数,单位为毫秒

void delay_ms(unsigned int milliseconds) {

while (milliseconds) {

unsigned int count = 12000; // 根据实际情况调整循环次数

while (count) {

count--;

}

milliseconds--;

}

}

// 初始化ADC

void init_adc() {

ADCON0 = 0x41; // 设置ADC转换时钟频率和通道

ADCON1 = 0x80; // 设置ADC数据格式和引用电压

}

// 读取ADC值

unsigned char read_adc() {

ADCON0 |= 0x04; // 启动ADC转换

while (ADCON0 & 0x04); // 等待ADC转换完成

return ADRESH; // 返回高字节数据

}

// 主函数

void main(void) {

unsigned char adc_value;

float temperature;

init_adc(); // 初始化ADC

while (1) {

adc_value = read_adc(); // 读取ADC值

// 转换为温度值(示例使用线性关系进行转换)

temperature = (adc_value * 0.48875) - 50;

// 显示温度值(通过串口、LCD等方式进行显示)

// 延时一段时间

delay_ms(1000);

}

}

```

在上面的示例中,我们定义了`init_adc`函数用于初始化ADC,`read_adc`函数用于读取ADC值。主函数中,我们通过调用`init_adc`函数来初始化ADC,然后在一个循环中不断读取ADC值并进行温度转换。

请注意,这只是一个示例程序,温度转换部分使用了简单的线性关系进行转换,具体的转换公式需要根据你所使用的温度传感器的特性而定。

另外,你可能需要根据实际情况将温度值以适当的方式进行显示,比如通过串口通信输出到计算机,或者连接液晶显示屏进行显示。

希望这个示例对你有帮助。如果还有其他问题,请随时提问。

相关问答

单片机 温度报警器实验步骤?

3.连接显示器和报警器到单片机的输出引脚,用于显示当前温度和触发报警。4.在单片机开发环境中,编写程序,包括读取温度传感器的值、判断是否触发报警以及控制...

单片机 采集温度传感器怎么用?

第一要完成温度传感器与单片机的硬件连接:(1)温度传感器是将非电量转换为电量即温度转换成电压(一般电压值较小为毫伏级的)因此需要加一级运算放大电路...

怎样用 单片机 测量白光t12烙铁芯温度?

需要温度传感器,将温度传感器与单片机连接然后编程获取温度。焊台通过烙铁给工件快速传热从而控制温度。另外一种方法就是利用温控器,通过打开或是关闭电源来...

单片机 热敏电阻怎么检测他的温度的?

如果是最老式的电饭锅(某宝上50元以内就能买一个),就那个开关通过杠杆连着一个磁体,你按下去的时候会吸住,开始加热,然后这种磁体在105度的时候磁性会突然...

如何用51 单片机 读取ds18b20的取负温度?求教.18b20的ram中,前...

[最佳回答]判断是否是负,就是取高几位的读取值采用与的方式判断,比如(000)1111100001000,那么高5位可以这样弄,tempH&0x1f,如果这个值=1;说明是负的,否则就...

基于 单片机 的多点温度测量系统的设计如何实现温度的采集?

DS18B20是单总线数字温度传感器,可以直接采集温度,并把采集到的数据通过单总线的方式,送入单片机,单片机处理数据,送入4路数码管显示就行了,测量的精度,可...

单片机 温度传感器不显示示数?

如果单片机温度传感器不显示示数,可能有几个原因。首先,检查传感器是否正确连接到单片机,并确保电源供应正常。其次,检查传感器的引脚是否正确配置,并确保...

单片机 怎么控制电热丝温度(精确控制)?

要单片机控制温度,是完全可以的。要有温度传感器测温度,再去控制电热丝。电热丝也用5V电源吗?那电源的功率是多少,电热功率是多少?用5Ⅴ能使电热丝发热吗?这...

单片机 温度变化率计算方法?

用程序生成一个100ms的脉冲,DB0为本次采样,DB1为上次采样,在脉冲的上升沿将计算DB0和DB1差值,再将DB0传送给DB1,再将温度数据传送给DB0。这样就可以计算出本次...

单片机 主要技术指标?

(1)位数:是单片机能够一次处理的数据的宽度,有1位机(如PD7502)、4位机(如MSM64155A)、8位机(如MCS-51)、16位机(如MCS-96)、32位机(如IMST414).....

猜你喜欢