基于单片机+pt100热敏电阻的体温计

发布者:SereneSerenity最新更新时间:2020-09-10 来源: 51hei关键字:单片机  pt100  热敏电阻  体温计 手机看文章 扫描二维码
随时随地手机看文章

采用热敏电阻pt100设计温度传感电路,温度传感电路通过放大电路进行放大后加载到A/D转换模块(ADC0804),以AT89C51单片机为主控制端,外接晶振电路满足各模块时序,最终通过7段数码管进行温度显示

单片机源程序如下:

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define      ad0_7      P1       //AD数据口


sbit         cs=P2^4;      //片选信号,低电平有效,控制芯片的启动和结果读取


sbit         rd=P2^7;        //读数据控制,低电平有效


sbit         wr=P2^6;         //AD启动控制,上升沿有效


sbit         intr=P2^5;       //AD转换完成输出低电平


uchar i;

uchar led[11]={     0x3F,  //"0"

                0x06,  //"1"

                0x5B,  //"2"

                0x4F,  //"3"

                0x66,  //"4"

                0x6D,  //"5"

                0x7D,  //"6"

                0x07,  //"7"

                0x7F,  //"8"

                0x6F,  //"9"

                                0x40,   //"-"

                                };

        uchar dat_AD[4]={0};

  

//启动AD转换子程序//////////////////

void start_ad(void)

{       cs=0;                 //允许AD

        wr=0;

        _nop_();

         wr=1;                //WR由低变高时启动AD转换

        

        while(intr);          //等待转换完成,低电平有效

        cs=1;                 //停止AD转换

}////////////////////

read_ad()

{       uint ad_data;

        ad0_7=0xff;

        cs=0;                 //允许读       

        rd=0;                 //读取转换数据结果

        _nop_();

        ad_data=ad0_7;         //把数据存到AD——data中

        rd=1;cs=1;            //停止读取AD

        return(ad_data);

}

// 数据处理函数

//实际测量当0度时,AD数据为133,所以数据处理时判断AD数据和133的大小来识别正负温度。

//由于ADC芯片精度不够,所以测量时有误差,8位AD的分辨率为19.5mV,约为20mV,

//放大电路输出的电压,温度每变化一度,电压变化只有10mV左右,所以测量有误差,

//以下温度和AD数据的计算公式为实测数据后线性拟合得到的,实际线性拟合得到公式为:y=0.503x+133.63.

//因为AD数据为0-255的整数,所以公式简化为以下计算方式

void data_shout(uint ad_data)

{      

         float  temp;

         uint T;


                if(ad_data<79)

               {

                   temp=614.422-7.811*ad_data;

                 T=(uint)temp;

                 dat_AD[0]=10;

               }                            //负温度   dat_AD[0]中为温度符号数据

                else if(ad_data<=204)

               {

                   temp=7.990*ad_data-628.491;

                 T=(uint)temp;

                 dat_AD[0]=T/1000;

               }                             //正温度


                else if(ad_data>204)

               {

                 temp=8.124*ad_data-655.742;

                 T=(uint)temp;

                 dat_AD[0]=T/1000;

               }                                        //ad_data=T;

               

               dat_AD[1]=T%1000/100;              //温度值的十位

         dat_AD[2]=T%100/10;          //2温度值的个位

         dat_AD[3]=T%10;          //温度值的小数位


}

//显示函数

void disp(){


        switch(i){

                case 0: P0=0xfe;P3=led[dat_AD[0]];i++;break;         //显示符号位

                case 1: P0=0xfd;P3=led[dat_AD[1]];i++;break;

                case 2: P0=0xfb;P3=led[dat_AD[2]]|0x80;i++;break;

                case 3: P0=0xf7;P3=led[dat_AD[3]];i=0;break;


        }

}


//定时器初始化

//用作数码管显示的刷新

void t0init(){

        TMOD=0x01;

        TH0=(65535-2000)/256;           //定时20ms时间

        TL0=(65535-2000)%256;

        EA=1;

        ET0=1;

        TR0=1;

}

//定时器中断函数,在中断中刷新数码管显示

void Time0(  ) interrupt 1{

        TH0=(65535-2000)/256;

        TL0=(65535-2000)%256;

        disp();

}


//主函数

void main(void){

         t0init();          //初始化

     while(1){

        start_ad();             //开始AD

        data_shout(read_ad());           //数据处理

     }

}

关键字:单片机  pt100  热敏电阻  体温计 引用地址:基于单片机+pt100热敏电阻的体温计

上一篇:能够实现单片机计算器与LCD1602字幕滚动的源程序
下一篇:基于51单片机的PWM温控风扇

推荐阅读最新更新时间:2024-11-17 11:56

单片机40个晶振问题及解决方法小结
1、单片机晶振不起振原因分析 遇到单片机晶振不起振是常见现象,那么引起晶振不起振的原因有哪些呢? (1) PCB板布线错误; (2) 单片机质量有问题; (3) 晶振质量有问题; (4) 负载电容或匹配电容与晶振不匹配或者电容质量有问题; (5) PCB板受潮,导致阻抗失配而不能起振; (6) 晶振电路的走线过长; (7) 晶振两脚之间有走线; (8) 外围电路的影响。 解决方案,建议按如下方法逐个排除故障: (1) 排除电路错误的可能性,因此你可以用相应型号单片机的推荐电路进行比较。 (2) 排除外围元件不良的可能性,因为外围零件无非为电阻,电容,你很容易鉴别是否为良品。 (3) 排除晶振为停振品的可能性,因为你不会只试了一二个
[单片机]
51单片机实现单键重复按键检测
/***************************************************************************** Copyright: 2013-07-27.version1.0 File name: key.c Description: 自己做的单键识别实现重复按键功能 Author: Version: version1.0 Date: 2013.7.27 History: 无 *******************************************************/ #include reg51.h sbit key=P0^0; int num=0; /**
[单片机]
基于MCS-51单片机的雷达模拟训练卡设计
0 引言 动目标侦察雷达通常采用单脉冲全相参脉冲多普勒工作机制来有效提取复杂地杂波下的动目标信号,这种方法能有效跟踪活动目标,提取目标的距离、方位、径向速度等有用信息。该方法在民用领域主要用于边防哨所的侦察警戒,军事上则主要对战场活动目标进行监视,因此,动目标侦察雷达正逐渐发挥出其重要作用。由于地面运动目标种类多样,运动方式不同,产生的运动轨迹和多普勒音响差异很大,因此,为了能快速发现并跟踪目标,降低对雷达操作手的要求,本文给出了一种通过雷达模拟训练卡来为雷达操作手提供逼真训练环境的具体方法。 1 总体设计思路 目前各科研院所研制的目标模拟器主要是对雷达信号的模拟,根据模拟信号频率不同可分为射频、中频、视频信号的模拟。此类模
[单片机]
基于MCS-51<font color='red'>单片机</font>的雷达模拟训练卡设计
单片机硬件自检的问题
公司用的是atmega128型号的单片机,有扩展外部RAM芯片,通过单片机内部程序可实现对外部RAM的线路检测,比如RAM的D0~D7其中的任一脚虚焊,单片机可以发出警告.现在的问题是单片机是怎么来判断引脚虚焊的?是不是RAM芯片的D0~D7输出数据给单片机的数据总线,单片机根据其中的某一脚为断路或高阻态,借此判断线路虚焊?我是刚在做硬件维修,这个问题一直没弄明白.   还有如果RAM的地址线有一条悬空,则数据输出是不是肯定为高阻态?   大家知道的话,请帮我解释一下.谢谢! 在硬件系统出厂前要进行产品测试;在嵌入式系统工作之前,一般也要进行自检,其中ROM和RAM检测必不可少,可是有不少人对于测试目的、原因和方法存在错误理解。
[单片机]
基于单片机的通用型智能充电器设计
1 概 述 电子信息技术的快速发展使得各种各样的电子产品不断涌现,并朝着便携和小型轻量化的趋势发展,这也使得更多的电气化产品采用基于电池的供电系统。目前,较多使用的电池有镍镉、镍氢、铅蓄电池和锂电池,由于它们各自的优缺点使得它们在相当长的时期内将共存发展 。由于不同类型的电池的充电特性不同,目前通常对不同类型,甚至不同电压、容量等级的电池使用不同的充电器,这在实际使用中有诸多不便。本文设计了一种通用型的充电器,可对电压等级为1.2V~48V的镍镉、镍氢、铅蓄电池和锂电池进行充电。为达到如此宽的充电范围,充电电源采用二级电路拓扑,并使用同一PWM信号源对两级电路进行联动控制。该电源在 85VAC~265VAC的通用输入范围内均可实
[应用]
HCS12X单片机的SD卡FAT文件系统读写设计
随着信息技术的飞速发展,高容量存储芯片日益向大容量小体积发展,其中以SD卡、Micro SD卡为突出代表。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。大小犹如一张邮票的SD卡,重量只有2 g,却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。通过单片机处理SD卡信息,可以将信息化嵌入式产业向更小体积发展。考虑到稳定性与读取速度,研究中采用了Freescale公司的16位单片机MC9S12XSl28MAA。为了进一步满足嵌入式研究的实时调试与应用需要,把SD卡的读取以及FATl6文件系统的读取写入移植到此单片机中,使开发应用有更好的扩展性。本文首次把FATl6文件系统的读取移植到
[单片机]
恩智浦:与ARM共拼32位MCU江山
ARM的闯入,似乎打破了MCU稳步的发展路线,而恩智浦与ARM的某种特殊情节,又使得恩智浦自出征32位MCU起始之时,就一直情有独钟的全套配备着ARM核的武器。2009年2月ARM发布了号称最小型、最低功耗的Cortex-M0处理器,在随后的3月,恩智浦就宣布推出了世界首款功能性ARM Cortex-M0硅芯片,作为第一家Cortex-M0处理器授权合作方。 在32位单片机的纷争中,这位力挺ARM核的强者是否能够一路走好?近日,EEWORLD就持续发展的32位MCU市场在全球特别是在中国的发展状况,对恩智浦半导体大中华区微控制器产品市场经理郭志锐进行了采访。 恩智浦半导体大中华区微控制器产品市场经理 郭志锐
[EEWORLD独家]
恩智浦:与ARM共拼32位<font color='red'>MCU</font>江山
Atmel推出用于工业电机控制的AVR微控制器
  爱特梅尔公司( Atmel ® Corporation)宣布推出专为满足具有CAN和LIN连接能力的先进电机控制应用对高精度脉宽调制( PWM )的需求而开发的全新 AVR ® 微控制器系列ATmega16M1、ATmega32M1和ATmega64M1,瞄准工业控制市场。新器件系列具有16、32和64KB闪存、通用IO引脚、模数转换器、模拟比较器、功率级控制器,以及8位和16位定时器,是需要CAN和LIN连接能力之工业控制应用的理想选择。   ATmega16M1、ATmega32M1和ATmega64M1基于高性能 AVR 8位RISC架构,集成了复杂电机控制算法所有必须的基础功能。这些器件提供了独特的功能组合,能够
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved