找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4155|回复: 17
收起左侧

无AD功能89c52单片机用1个电容1个热敏电阻测温度 原理图程序

  [复制链接]
ID:151846 发表于 2021-4-18 23:42 | 显示全部楼层 |阅读模式
根据RC充电原理知道:未知Rx=(未知充电时间us/已知充电时间us)*已知电阻k
先自己用10K(或100k或其它精密电阻)根据下图测出所用时间us(我粗测出289us,公式用到)
2021-04-18 230324.jpg

显示的数码管线路可能不同,我自己焊在P1口上。
制作出来的实物图如下:
2021-04-18 222517.jpg

其实还可以改精度更高些,主要关键稳定电压,稳定质量电阻电容,还有公式取的精度。
粗陋对比18B20温度

2021-04-18 221136.jpg

单片机源程序如下:
#include<reg52.h>
#define u8  unsigned char
#define u16 unsigned int
sbit Rc=P0^0;u16 s=0,r=0;
sbit a=P3^4;sbit b=P3^5;sbit c=P3^6;sbit d=P3^7; //4个数码管
u8 code tab[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0,0x63};
u8 us,t,dw[4];//数码管显示0--9,0是关显示,0x63是温度符号
u16 code ntc100[]={31076,29541,28090,26720,25424,24199,23039,21942,20904,
19920,18988,18106,17269,16475,15723,15009,14331,13688,13077,12497,11946,
11422,10924,10451,10000,9571,9163,8775,8405,8052,7717,7397,7092,6801,6524,
6259,6007,5766,5536,5316,5106,4906,4714,4531,4356,4189,4029,3875,3729,3588};
//1--50的温度//自己设置需要的温度
void Delay(u16 n){while(--n);}//12M公式n=(延时-6)*0.12493899(us)
void disp()
{  s++;if(s==3000)s=0; //s=3000是延时一会儿再读取温度
   dw[0]=10;dw[1]=t%100/10;dw[2]=t%10;dw[3]=11;
   P1=tab[dw[0]];a=1;Delay(70);a=0;P1=tab[dw[1]];b=1;Delay(70);b=0;
   P1=tab[dw[2]];c=1;Delay(70);c=0;P1=tab[dw[3]];d=1;Delay(70);d=0;P1=0;}
void T0init()
{TMOD=0x02;TH0=0x00;TL0=0x00;ET0=1;EA=1;}
void main(void)
{ long u16 Rxt;u16 temp;u8 j;
  T0init();
while(1)
{
   if(s==0){Rc=0;Delay(600);//约5ms
         Rc=1;TR0=1;while(!Rc);TR0=0;
         Rxt=us*256+TL0;TL0=0;us=0;Rc=0;
         r=((float)(Rxt*1.0/289*1.0)+0.00005)*10*100;}
         //289us是已知电阻(10K)测到的时间*10是10k单位是k,
         //*100是取温度有效值,如26度ntc100k是(95.7132k)ntc10k(9.631K)
     if((r>3455)&&(r<32500))//阻值在1~50度之间,显示对应的温度
         {for(j=0;j<50;j++){temp=ntc100[j];if(r>=temp) break;}
          t=j;}
         disp();
}}
void t0() interrupt 1
{us++;if(us==255)us=0;}
测试已知电阻充电时间也用上面小改一下,让数码管显示Rxt就是被测时间。
下面下载跟上面一样。上面直接复制到keil改数码管改接口就行。
C52粗测NTC温度.rar (1.07 KB, 下载次数: 70)

评分

参与人数 2黑币 +130 收起 理由
山川科技 + 30
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:151846 发表于 2021-4-20 21:17 | 显示全部楼层
本帖最后由 a4732710 于 2021-4-20 21:27 编辑

修改了精度,测试范围-5到200度,可以用在电饭锅电磁炉等测温上,相差应该小于1度。
A839954A-DC1E-4739-86B6-AAF8C6D97689.jpeg
测量负温度
362A774D-0640-4165-892E-B1E3A0A59063.jpeg
烙铁加温到190多度
下面与18b20同时加温显示的温度
4EA9153E-96A3-4299-AB75-FB7C85FBB27E.jpeg 下面是修改的程序

C52测NTC温度-5到200度.rar (1.72 KB, 下载次数: 24)

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:151846 发表于 2021-4-20 21:32 | 显示全部楼层
本帖最后由 a4732710 于 2021-4-20 21:46 编辑

不接热敏电阻显示四个“-”
42C57553-F320-49DC-947F-D8C548E03421.jpeg


下面是修改了的程序。

C52测NTC温度-5到200度.rar (1.72 KB, 下载次数: 56)
回复

使用道具 举报

ID:328014 发表于 2021-4-20 21:47 | 显示全部楼层
这个方法很好,毕竟一个数字温度传感器的成本还是比较高的
回复

使用道具 举报

ID:151846 发表于 2021-4-20 22:07 | 显示全部楼层
上面两个附件一样的,上传重复了
回复

使用道具 举报

ID:884042 发表于 2021-7-19 12:18 | 显示全部楼层
牛逼啊楼主能讲下原理吗?
回复

使用道具 举报

ID:832030 发表于 2021-7-22 14:29 | 显示全部楼层
IO直接置低给电容放电不会烧坏IO口吗?
回复

使用道具 举报

ID:1107658 发表于 2024-1-3 15:46 | 显示全部楼层
可以问问加上数码管的原理图吗
回复

使用道具 举报

ID:601544 发表于 2024-1-4 20:18 来自手机 | 显示全部楼层
楼主289us是怎么测出来的
回复

使用道具 举报

ID:34149 发表于 2024-1-6 14:41 | 显示全部楼层
可以说楼主对IO引脚的探究达到了出神入化的境界了。我能想到的原理就是不断判断引脚电平翻转所用的累计时间!秒啊!
回复

使用道具 举报

ID:1107340 发表于 2024-1-7 21:12 | 显示全部楼层
我有那个板子,正好学一下,谢谢
回复

使用道具 举报

ID:621776 发表于 2024-1-12 09:28 | 显示全部楼层
这样也可以拓展到检测下面电容来完成输液宝的基本功能了。
回复

使用道具 举报

ID:582276 发表于 2024-1-28 21:32 | 显示全部楼层
xjx51 发表于 2021-7-19 12:18
牛逼啊楼主能讲下原理吗?

应该用RC的充放电,通过查表计时得到对应的温度值,以前好多4位机和8位机没AD功能用这种方法测量。
回复

使用道具 举报

ID:1110448 发表于 2024-1-31 14:03 | 显示全部楼层
nanfuB 发表于 2024-1-28 21:32
应该用RC的充放电,通过查表计时得到对应的温度值,以前好多4位机和8位机没AD功能用这种方法测量。

商用的要和基准电阻计算的,不能直接用时间查表
回复

使用道具 举报

ID:592031 发表于 2024-2-18 13:55 | 显示全部楼层
厉害。。就服楼主的探索精神
回复

使用道具 举报

ID:298582 发表于 2024-2-21 10:27 | 显示全部楼层
过来给楼主点赞,妙
回复

使用道具 举报

ID:407179 发表于 2024-2-26 17:54 | 显示全部楼层
对于某一个温度或某一小段温度是可以的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表