历史上的今天
返回首页

历史上的今天

今天是:2025年01月20日(星期一)

正在发生

2020年01月20日 | 基于热敏电阻的单片机温度测量系统设计

2020-01-20 来源:51hei

本课题用一种基于单片机的数据采集系统方案,该方案根据热敏电阻随温度变化而变化的特性,采用串联分压电路。单片机采集热敏电阻的电压,通过A/D转换将模拟量电压信号转换成数字量电压信号,经过查表转换得到温度值,控制液晶屏实时显示温度值。本系统中所用到的器件是STC89C52单片机、NTC热敏电阻和LCD1602液晶显示屏。


原理图如下

单片机源程序如下:

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit rs=P0^5;

sbit rw=P0^6;

sbit e=        P0^7;

sbit ADCS=P1^0;

sbit ADCLK=P1^1;

sbit ADDI=P1^2;

sbit ADDO=P1^2;

uchar code tab3[]="Low-temperature ";  

uchar code tab4[]="Over-temperature";

uchar code tab5[]="     Error      ";

uchar code tab6[]="  Temp:";

uchar code tab7[]="     Normal     ";

uchar code tab1[]="0123456789";

uchar code tab2[]=

          {79,78,77,76,75,74,73,72,                   //温度补偿表

           71,70,69,68,67,67,66,65,

           64,63,63,62,61,60,60,59,

           58,58,57,56,56,55,54,54,

           53,53,52,52,51,50,50,49,

           49,48,48,47,47,46,46,45,

           45,44,44,43,43,43,42,42,

           41,41,40,40,39,39,39,38,

           38,37,37,36,36,36,35,35,

           34,34,34,33,33,33,32,32,

           31,31,31,30,30,30,29,29,

           28,28,28,27,27,27,26,26,

           26,26,25,25,24,24,23,23,

           23,22,22,22,21,21,21,20,

           20,20,19,19,19,18,18,18,

           17,17,17,16,16,16,15,15,

           15,14,14,13,13,13,12,12,

           12,11,11,11,10,10,10,9,

           9,9,8,8,7,7,7,6,

           6,6,5,5,4,4,4,3,

           3,3,2,2,1,1,1,0,

           0,1,1,2,2,2,3,3,

           4,4,5,5,6,6,7,7,

           8,8,9,9,10,10,11,11,

           12,12,13,14,15,15,16,17,

           17,18,19,19,20};

uint ad,ad1;

//*********延时50us*t*******************

void delay_50us(uint t)

{

        uchar j,z;

        for(z=t;z>0;z--)

                for(j=19;j>0;j--);

}

//**************************************

//**********延时1ms*z*******************

void delay(uint z)

{

    uint x,y;

    for(x=z;x>0;x--)

        for(y=110;y>0;y--);

}

//**************************************

//*********写指令****************

void write_com(uchar com1)

{

        e=0;

        rs=0;

        rw=0;

        P2=com1;

        delay_50us(10);

    e=1;

        delay_50us(20);

        e=0;  

}

//**********写数据*******************

void write_data(uchar dat1)

{

    e=0;

    rs=1;

    rw=0;

    P2=dat1;

    delay_50us(10);

    e=1;

    delay_50us(20);

    e=0;        

}

//*****液晶初始化*******************

void lcd1602init()

{

        delay_50us(300);

        write_com(0x38);

        write_com(0x08);

        write_com(0x01);

    write_com(0x06);

        write_com(0x0c);

}

//***********AD转换模块**************

uint ADC0832(uchar channel)

{

        uchar i;

        uint dat=0;

        uchar ndat=0;

        if(channel==0)channel=2;

        if(channel==1)channel=3;

        ADDI=1;

        _nop_();

        _nop_();

        ADCS=0;//拉低CS端

        _nop_();

        _nop_();

        ADCLK=1;//拉高CLK端

        _nop_();

        _nop_();

        ADCLK=0;//拉低CLK端,形成下降沿1

        _nop_();

        _nop_();

        ADCLK=1;//拉高CLK端

        ADDI=channel&0x1;

        _nop_();

        _nop_();

        ADCLK=0;//拉低CLK端,形成下降沿2

        _nop_();

        _nop_();

        ADCLK=1;//拉高CLK端

        ADDI=(channel>>1)&0x1;

        _nop_();

        _nop_();

        ADCLK=0;//拉低CLK端,形成下降沿3

        ADDI=1;//控制命令结束 

        _nop_();

        _nop_();

        dat=0;

        for(i=0;i<8;i++)

        {

                dat|=ADDO;//收数据

                   ADCLK=1;

                   _nop_();

                   _nop_();

                   ADCLK=0;//形成一次时钟脉冲

            _nop_();

            _nop_();

            dat<<=1;

            if(i==7)dat|=ADDO;

        } 

        for(i=0;i<8;i++)

        {                

            ndat>>=1;

                if(ADDO==1)

                ndat|=0x80;

            ADCLK=1;

            _nop_();

            _nop_();

            ADCLK=0;//形成一次时钟脉冲

            _nop_();

            _nop_();

        }

        

        ADCS=1;//拉低CS端

        ADCLK=0;//拉低CLK端

        ADDO=1;//拉高数据端,回到初始状态

    if(dat==ndat)

        {

            return(ndat);

        }

        else

        {

                return(0x00);

        }           

}


//**************显示模块***********************

void disp()

{

     ad1=ad-29;

         write_com(0x80);

         if(ad<29)

         {

              uchar i;

                  for(i=0;i<16;i++)

                  {

                          write_data(tab4[i]);

                  }

                  write_com(0x80+0x40);

                   for(i=0;i<16;i++)

                  {

                          write_data(tab5[i]);

                  }                

         }

                  else if(ad>233)

         {

                   uchar i;

                  for(i=0;i<16;i++)

                  {

                          write_data(tab3[i]);

                  }        

                   write_com(0x80+0x40);

                   for(i=0;i<16;i++)

                  {

                          write_data(tab5[i]);

                  }                

         }                 

         else if(ad>=29&&ad<=233)

         {           

              uchar i;

                  for(i=0;i<16;i++)

                  {

                          write_data(tab7[i]);

                  }        

                  write_com(0x80+0x40);

推荐阅读

史海拾趣

巴丁微公司的发展小趣事

深圳市巴丁微电子有限公司,简称巴丁微,自创立之初便专注于高性能模拟集成电路的研发与销售。公司的创始人及核心团队由一群在集成电路行业拥有丰富经验的专家组成,他们看中了电子行业的巨大潜力,决心以技术创新为驱动力,推动模拟集成电路的发展。

在创立初期,巴丁微面临着资金短缺、市场竞争激烈等诸多挑战。然而,凭借着对技术的深刻理解和不懈追求,巴丁微成功研发出了一系列具有竞争力的产品,并逐渐在电机驱动和电源管理等电子领域获得了市场认可。

Fairchild公司的发展小趣事

近年来,Fairchild公司在全球范围内与众多知名企业建立了合作关系。其中,与华为的合作尤为引人注目。华为作为全球领先的通信设备制造商,对供应商的要求极为严格。然而,Fairchild公司凭借其出色的产品质量、客户支持和公司间的成功合作,从众多供应商中脱颖而出,成为华为的核心合作伙伴之一。华为对Fairchild公司的认可不仅体现在订单量的增加上,还体现在对其产品和服务的高度评价上。

Bellin公司的发展小趣事

近年来,Fairchild公司在全球范围内与众多知名企业建立了合作关系。其中,与华为的合作尤为引人注目。华为作为全球领先的通信设备制造商,对供应商的要求极为严格。然而,Fairchild公司凭借其出色的产品质量、客户支持和公司间的成功合作,从众多供应商中脱颖而出,成为华为的核心合作伙伴之一。华为对Fairchild公司的认可不仅体现在订单量的增加上,还体现在对其产品和服务的高度评价上。

潮州三环(Three-circle)公司的发展小趣事

进入新世纪,三环集团继续加大研发投入,力求在电子元件领域取得更多突破。2001年,公司投资生产多层片式陶瓷电容器(MLCC),这是一种广泛应用于电子设备的关键元件。三环集团凭借其强大的研发能力和技术实力,成功实现了MLCC的量产,并将其应用于手机、电子、通讯等多个领域。这一突破不仅提升了公司的市场竞争力,也进一步巩固了其在电子行业中的地位。

CIF公司的发展小趣事

C公司是一家专注于电子产品贸易的CIF公司。为了降低成本、提高效率,C公司积极整合全球供应链资源,与多家优质的电子产品生产商建立了长期合作关系。通过优化采购、生产和物流等环节,C公司成功降低了运营成本,提高了市场竞争力。

Digital Core Design公司的发展小趣事

面对版权问题的挑战和市场的变化,Core Design开始寻求变革。公司的创始人Jeremy Heath-Smith和Adrian Smith在《古墓丽影:黑暗天使》发行后不久就辞去了在Eidos和Core的职务,并创立了新的工作室Circle Studio。然而,这个新工作室最终也未能逃脱被市场淘汰的命运。在2006年6月,Circle Studio被Eidos彻底抛弃,并卖给了另一家公司Rebellion。虽然Core Design的名字被保留下来,但其实际的开发团队和运营已经发生了巨大的变化。在这个过程中,Core Design不得不面对现实,寻找新的发展机遇和方向。

以上这些故事展示了Core Design在电子行业中的发展历程,包括其初创时期的艰辛、成功时期的辉煌、挑战时期的困境以及变革时期的新生。这些故事都基于事实,旨在客观地呈现Core Design的历史和发展。

问答坊 | AI 解惑

监控云台问题?

高手请赐教: 1、云台解码器的拨码开关是不是用二进制确定其地址码?是不是所有的厂商都要用一个8拨片的拨码开关?有8个拨片的拨码开关和6个拨片的拨码开关一起的是怎么回事? 2、解码器的解码芯片如:ATMEL AT89c51 的程序加密以后还能不能读出 ...…

查看全部问答>

evc创建的工程在WINCE5.O系统跑不起来?

我用EVC创建的工程,编译成X86(evc自带的SDK和WINCE5 SDK都试过) Realse 可执行文件放到 装有 wince5系统的开发板上运行,提示不是有效的WINCE程序~这是为什么呢?…

查看全部问答>

在Sitara平台上如何优化Linux启动过程?

请问目前大家的平台上,Linux从启动到运行自己的图形程序,需要大概多少秒?我们要想优化一个系统的启动时间,首先我们需要知道这个系统都把启动时间花在哪里了!其次就是你的目标,是让系统在多少秒之内完成启动?那要如何才能知道,系统在启动过 ...…

查看全部问答>

dsp 编译问题

这个程序编译时怎么有错误?说\"EvaRegs\" has no field \"CAPCONA\" 、\"CAPFIFOA\"什么原因?   初始化事件管理器EVAvoid InitEv(void){     EvaRegs.T1PR=0xFFFF;   //T1周期     Ev ...…

查看全部问答>

中断问题,执行NVIC_Init(&NVIC_InitStructure)使执行不下去

程序如下:void NVIC_Configuration(void){#ifdef  VECT_TAB_RAM    /* Set the Vector Table base location at 0x20000000 */   NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); #else  /* VECT_ ...…

查看全部问答>

zigbee应用剖析

初始化因为Z-Stack是在OS下运行的,所以在之前必须调用osalAddTasks()初始化任务。组织关于OS的API函数介绍请看文档:Z-Stack OSAL API (F8W-2003-0002),应该说协议栈的每层或者说每部分都有相关的API说明文档。osalAddTasks()初始 ...…

查看全部问答>

新手啊~求PC.c 让我把任哲的程序做下来吧~~

电脑上走任哲的程序,报错 call to function \'PC_VectSet\' with no prototype 查出是没有pc.c,网上下载了2个PC.c 但是都不对(一个是QEMU仿真的) 这东西为什么这么难找到啊?…

查看全部问答>

如何保存CCS的设置

    我用的是CCS6,按照自己的使用习惯设置了代码和注释等的字体和颜色。     但是碰到过CCS莫名就恢复成了默认的设置项,搞得我又得全部重新设置一遍。     想问下,CCS有没有保存当前设置项,然后直接导入的功能 ...…

查看全部问答>

多旋翼自主飞行器(C题)

多旋翼自主飞行器(C题) …

查看全部问答>

也来折腾Zephyr之(LINUX下安装篇)

本帖最后由 damiaa 于 2017-3-23 15:36 编辑                           Zephyr(LINUX下安装篇) A,先是准备虚拟机virtualBox(这里不细说了)。 B ...…

查看全部问答>