温度测量和数据采集和发送引言

温度测量和数据采集和发送引言

温度测量和数据采集和发送引言

  • 适用:本科,大专,自考
  • 更新时间2024年
  • 原价: ¥307
  • 活动价: ¥200 (活动截止日期:2024-03-21)
  • (到期后自动恢复原价)
温度测量和数据采集和发送引言

温度测量和数据采集和发送引言
随着“信息时代”的到来,作为获取信息的手段——传感器技术得到了显著的进步,其应用领域越来越广泛,对其要求越来越高,需求越来越迫切。传感器技术已成为衡量一个国家科学技术发展水平的重要标志之一。因此,了解并掌握传感器的基本结构、工作原理及特性是非常重要的。
为了提高对传感器的认识和了解,尤其是对温度传感器的深入研究以及其用法与用途,基于实用、广泛和典型的原则而设计了本系统。本文利用单片机结合传感器技术而开发设计了红外抄表系统。文中把传感器理论与单片机实际应用有机结合,详细地讲述了利用温度传感器DS18B20测量环境温度,以及实现红外数据传输的过程。
本设计应用性比较强,只要对电路部分稍加改装,就可以实现抄读其它的数字仪表设备:如数字电度表,数字水表等等。设计后的系统具有操作方便,控制灵活等优点。
其主要功能和指标如下:
1、利用温度传感器(DS18B20)测量某一点环境温度;
2、测量范围为-55℃~+99℃,精度为±0.5℃;
3、用4位数码管进行显示实际温度值显示;
4、手持端通过红外发射管发射测温信号;
5、测温端通过红外发射管发送到手持端;
6、手持端可以随时查看指定待测物体的温度值。
设计的核心是环境温度的测量以及红外数据的发射和接收,和温度的显示。文中对每个部分功能、实现过程作了详细地介绍。

 

 

参考文献
[1]  沈德金、陈粤初.MCS-51系列单只机接口电路与应用程序实例[M],北京:北京航天航空大学出版社,1990. 35~42
[2]  雷晓平.单片机计算机及应用[M].北京:电子科技大学出版社,1998. 23~112 [3]  沈红卫.单片机应用系统设计实例[M].北京:航空航天出版社,1999. 41~62 [4]  彭介华. 电子技术课程设计指导[M].北京:高等教育出版社,2000. 1~245  [5]  陈爱弟.王勇.任安宏.蔡明军.PROTEL99实用指南[M] 西安:电子科技大学出版社,
      2001. 14~34 [6]  谢自美.电子线路设计实验测试[M], 华中科技大学出版社2002.7. 300~304
[7]  潘永雄.新编单片机原理与应用[M], 西安电子科技大学出版社.2003.1 78~80
[8]  孙肖子等.电子线路辅导[M], 西安电子科技大学出版社1993.2  96~100
[10]  何立民.单片机应用技术选编[M].北京, 北京航空航天大学出版社 2002.1 232~235
[11]  omas C.Bartee.Computer Architecture andLogic Design[M].McGraw-Hill  Inc. 1991.9
[12]  Susan A.R. Gobort J.Borns.Digital Logic—Analysis.Application&Design[M].Hotel Rinehartand Winston. Inc.1991.8

 

 

 

 

 

 

 

附  录(一)
测温部分程序:
#include <AT89X51.H>
#include <intrins.h>
typedef unsigned char byte;
typedef unsigned int word;
sbit DQ=P3^4;  //DS18B20 数据线
byte BE=0x42,cc=0;
unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,
                                 0xef,0xdf,0xbf,0x7f};
unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,
                                    0x66,0x6d,0x7d,0x07,
                                    0x7f,0x6f,0x77,0x7c,
                                    0x39,0x5e,0x79,0x71,0x00,0x40};
unsigned char code dotcode[]={0,3,6,9,12,16,19,22,
                                25,28,31,34,38,41,44,48,
                                50,53,56,59,63,66,69,72,
                                75,78,81,84,88,91,94,97};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,
                               0x66,0x6d,0x7d,0x07,
          0x7f,0x6f,0xbf,0x86,
          0xdb,0xcf,0xe6,0xed,
          0xfd,0x87,0xff,0xef,
0x00,0x40};
unsigned char displaycount;
unsigned char displaybuf[8]={16,16,16,16,16,16,16,16};
unsigned char timecount;
unsigned char readdata[8];
bit sflag;
void ss_send(void)  //////串口发送数据
{byte i;
TI=0;
SBUF=BE;
while(TI==0);
for(i=0;i<4;i++)
{
TI=0;
SBUF=displaybuf[i];
while(TI==0);
}
}
void delay(word useconds)  //////延时
{
for(;useconds>0;useconds--);
}//18B20复位
byte resetpulse(void)
{
byte presence;
DQ = 0;
delay(29);
DQ = 1;
delay(3);
presence = DQ;
delay(25);
return(presence);
}
byte readdatafromds18b20(void)
////////  从18B20读数据
{
byte i;
byte value = 0;
for (i=8;i>0;i--)
{
value>>=1;
DQ = 0;
DQ = 1;
delay(1);
if(DQ)value|=0x80;
delay(6);
}
return(value);
}
void writecommandtods18b20(char val)  ///写数据到18B20
{
byte i;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = val&0x01;
delay(5);
DQ = 1;
val=val/2;
}
delay(5);
}
void main(void)
{
  TMOD=0x21;           ///////// 初始化串口和时钟
  SCON=0X50;
  PCON=0X80;
  TH0=(65536-800)/256;
  TL0=(65536-800)%256;
  TH1=0XCC;
  TL1=0XCC;
  EA=1;
  ET0=1;
  ET1=0;
  while(resetpulse());
  writecommandtods18b20(0xcc);
  writecommandtods18b20(0x44);
  TR0=1;TR1=1;
  while(1)
    {if(cc==20){cc=0;
 ss_send();}
 }
}
void t0(void) interrupt 1 using 0       ////////读取温度并处理显示中断
{
  unsigned char x;
  unsigned int result;
  TH0=(65536-3000)/256;
  TL0=(65536-3000)%256;
  if(displaycount==2)
    {
      P0=displaycode[displaybuf[displaycount]] | 0x80;
    }
    else
      {
        P0=displaycode[displaybuf[displaycount]];
      }
  P2=displaybit[displaycount];
  displaycount++;
  if(displaycount==4)
    {
      displaycount=0;
    }
 cc++;
  timecount++;
  if(timecount==150)
    {
      timecount=0;
      while(resetpulse());
      writecommandtods18b20(0xcc);
      writecommandtods18b20(0xbe);
      readdata[0]=readdatafromds18b20();
      readdata(1)=readdatafromds18b20();
      for(x=0;x<8;x++)
        {
          displaybuf[x]=16;
        }
      sflag=0;
      if((readdata(1) & 0xf8)!=0x00)
        {
          sflag=1;
          readdata(1)=~readdata(1);
          readdata[0]=~readdata[0];
          result=readdata[0]+1;
          readdata[0]=result;
          if(result>255)
            {
              readdata(1)++;
            }
        }
      readdata(1)=readdata(1)<<4;
      readdata(1)=readdata(1) & 0x70;
      x=readdata[0];
      x=x>>4;
      x=x & 0x0f;
      readdata(1)=readdata(1) | x;
      x=2;
      result=readdata(1);
      while(result/10)
        {
          displaybuf[x]=result%10;
          result=result/10;
          x++;
        }
      displaybuf[x]=result;
      if(sflag==1)
        {
          displaybuf[x+1]=17;
        }
      x=readdata[0] & 0x0f;
      x=x<<1;
      displaybuf[0]=(dotcode[x])%10;
      displaybuf(1)=(dotcode[x])/10;
      while(resetpulse());
      writecommandtods18b20(0xcc);
      writecommandtods18b20(0x44);
      }
}  

接收端程序:
#include <AT89X51.H>
#define uchar unsigned char
#define uint unsigned int
uchar code BE=0x42;
uchar code displaybit[]={0xfe,0xfd,0xfb,0xf7,
                          0xef,0xdf,0xbf,0x7f};
uchar code displaycode[]={0x3f,0x06,0x5b,0x4f,
                               0x66,0x6d,0x7d,0x07,
          0x7f,0x6f,0xbf,0x86,
          0xdb,0xcf,0xe6,0xed,
          0xfd,0x87,0xff,0xef,
          0x00,0x40};
uchar count,get_count=0,flag_get=0;
uchar getdata[4]={0,0,0,0};
void delay_10ms(void)  //////延时10ms
{uchar i,j;
i=10;
while(i--)
for(j=0;j<125;j++);
}
void t0(void) interrupt 1 using 0    ////////显示中断
{
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
if(count==2)
P0=displaycode[(getdata[count]+10)] ;
else
P0=displaycode[getdata[count]];
P2=displaybit[count];
count++;
if(count==4)count=0;
}
void ss_get(void) interrupt 4 using 2      /////////串口接收中断
{uchar gg;
ES=0;
gg=SBUF;
if(BE==gg )
  {get_count=0;
  flag_get=1;
  goto END;
  }
if(flag_get)
getdata[get_count++]=gg;
if(get_count==4){get_count=0;flag_get=0;}
END :
ES=1;
RI=0;TI=0;
}
void get_key(void)  ////////键盘
{uchar kk;
 if(P3_2==0);
 {delay_10ms();//去抖动
  if(P3_2==0)
 {ES=0;
for(kk=0;kk<4;kk++)
getdata[kk]=0x00;
get_count=0;
flag_get=0;
 }
 }
 if(P3_3==0)
 {delay_10ms();
if(P3_3==0)
 {ES=1;
 }
  }
}
void main(void)
{
//////////////////初始化串口
TMOD=0X21;
SCON=0X50;
PCON=0X80;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
TH1=0XCC;
TL1=0XCC;
EA=1;
ES=0;
ET0=1;
ET1=0;
TR1=1;
TR0=1;
//////////////////////
while(1)get_key();
}

 

 

 

 

 

附  录(二)
PCB图纸

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 关键词 温度 测量 数据采集 发送 引言
  • 上一篇:远程监控;数据采集;串口通信
  • 下一篇:电 子 密 码 锁
  • 暂无购买记录

    暂时没有评论

    真实

    多重认证,精挑细选的优质资源 优质老师。

    安全

    诚实交易,诚信为本。

    保密

    所有交易信息,都为您保密。

    专业

    10年专业经验,10年来帮助无数学子。