当前位置:范文大全 > 党建材料 > 数电课程设计-温度计实验报告材料(提交版):数电实验课程设计

数电课程设计-温度计实验报告材料(提交版):数电实验课程设计

时间:2021-10-15 13:26:14 浏览次数:

 一、设计项目名称

 温度采集显示系统硬件与软件设计

 设计容及要求

 根据设计要求,完成对单路温度进行测量,并用数码管显示当前温度值系统硬件设计,并用电子CAD软件绘制出原理图,编辑、绘制出PCB印制版。

 要求:

 (1)原理图中元件电气图形符号符合国家标准;

 整体布局合理,注标规、明确、美观,不产生歧义。

 列出完整的元件清单(标号、型号及大小、封装形式、数量)

 (4) 图纸幅面为A4。

 布局、布线规合理,满足电磁兼容性要求。

 在元件面的丝印层上,给出标号、型号或大小。所有注释信息(包括标号、型号及说明性文字)要规、明确,不产生歧义。

 2.编写并调试驱动程序。

 功能要求:

 (1)温度围0-100℃。

 (2)温度分辨率±1℃。

 (3)选择合适的温度传感器。

 3.撰写设计报告。

 提示:可借助“单片机实验电路板”实现或验证软件、硬件系统的可靠性。

 温度传感器

 摘要:温度的检测与控制是工业生产过程中比较典型的应用之一,随着传感器在生产和生活中的更加广泛的应用,利用新型单总线式数字温度传感器实现对温度的测试与控制得到更快的开发,随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域。一种数字式温度计以数字温度传感器DS18B20作感温元件,它以单总线的连接方式,使电路大大的简化。传统的温度检测大多以热敏电阻为传感器,这类传感器可靠性差,测量温度准确率低且电路复杂。因此,本温度计摆脱了传统的温度测量方法,利用单片机STC89C52对传感器进行控制。这样易于智能化控制。

 关键词:数字测温;温度传感器DS18B20;单片机STC89C52;

 一.概述

 传感器从功能上可分为雷达传感器、电阻式传感器、电阻应变式传感器、压阻式传感器、热电阻传感器、温度传感器、光敏传感器、湿度传感器、生物传感器、位移传感器、压力传感器、超声波测距离传感器等,本文所研究的是温度传感器。

 温度传感器是最早开发,应用最广泛的一类传感器。温度传感器是利用物质各种物理性质随温度变化的规律把温度转换为电量的传感器。这些呈现规律性变化的物理性质主要有半导体。温度传感器是温度测量仪表的核心部分,品种繁多。

 随着科学技术的发展,测温系统已经被广泛应用于社会生产、生活的各个领域,在工业、环境监测、医疗、家庭多方面均有应用。从而使得现代温度传感器的发展。微型化、集成化、数字化正成为发展的一个重要方向。

 二.硬件设计

 1.DS18B20

 DS1820 单线数字温度计特性

 ? 独特的单线接口仅需一个端口引脚进行通讯

 ? 简单的多点分布应用

 ? 无需外部器件

 ? 可通过数据线供电

 ? 零待机功耗

 ? 测温围-55~+125℃,以 0.5℃递增

 ? 温度以 9 位数字量读出

 ? 温度数字量转换时间 200ms(典型值)

 ? 用户可定义的非易失性温度报警设置

 ? 报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件

 ? 应用包括温度控制、工业系统、消费品、温度计或任何热感测系统

 

 DS1820温度传感器外观图(a)和引脚图(b)

 ①引脚1接地

 ②引脚2数字信号输入/输出

 ③引脚3接高电平5V高电平

  (a) (b)

 2.STC89C52

 STC89C52是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线, 看门狗定时器,置4KB EEPROM,MAX810复位电路,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89X52 可降至0Hz 静态逻辑操作,支持2种 软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35Mhz,6T/12T可选。

 图2-2-1 89C52管脚图

 3. 晶振电路

 为了产生时钟信号,在8052 部设置了一个反相放大器,XTAL1 是片振荡器反相放大器的输入端,XTAL2 是片振荡器反相放大器的输出端,也是部时钟发生器的输入端。当使用自激振荡方式时,XTAL1 和XTAL2 外接石英晶振,使部振荡器按照石英晶振的频率振荡,就产生时钟信号。本系统用12MHZ的石英晶振,接STC89C52的18和19脚,具体电路如下图所示。

 图2-3-1 单片机的晶振电路

 4.复位电路

 在振荡器运行时,有两个机器周期(24 个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,52 芯片便循环复位。复位后P0-P3 口均置1 引脚表现为高电平,程序计数器和特殊功能寄存器SFR 全部清零。当复位脚由高电平变为低电平时,芯片为ROM 的0000H 处开始运行程序。该芯片的复位脚为9脚,所以复位电路接AT89S52的9脚,具体电路如下图所示。

 图2-4-1 单片机的复位电路

 5.显示电路

 图2-5-1 整体电路图

 显示电路采用共阳数码管,数码管的A~DP端接单片机的P0.0~P0.7端,1234端通过三极管接单片机的P1.0~P1.3端,三极管实现放大作用。

 6.电源

  本系统采用5v电源。

 三.软件设计

 #include "reg52.h"

 sbit ds=P3^7;

 bit flag;

 unsigned char code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

 unsigned char code wtable[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

 unsigned char tempdate[4]={0XFF,0XFF,0XFF,0XFF};

 void DelayUs2x(unsigned char t);

 void DelayMs(unsigned char t);

 bit Init(void);

 unsigned char tempreadbyte(void);

 void tempwritebyte(unsigned char dat);

 unsigned int tempread(void);

 void Display(unsigned char wei,unsigned char num);

 void Init_dingshiqi(void);

 void main()

 {

  unsigned int temph,templ,temp;

  Init_dingshiqi();

  while (1)

  {

  if(flag==1)

  {

  flag=0;

  temp=tempread();

  temph=temp*0.0625;

  templ=temp&0x0f;

  templ=templ*6/10;

  if((temph%100/10)==0)

  tempdate[0]=0Xff;

  else

  tempdate[0]=table[(temph%100)/10];

  tempdate[1]=table[(temph%100)%10]&0x7f;

  tempdate[2]=table[templ];

  tempdate[3]=0xc6;

  }

  }

 }

 void DelayUs2x(unsigned char t)

 {

  while(--t);

 }

 void DelayMs(unsigned char t)

 {

 

  while(t--)

  {

  DelayUs2x(245);

  DelayUs2x(245);

  }

 }

 bit Init(void)

 {

  bit dat=0;

  ds = 1;

  DelayUs2x(5);

  ds = 0;

  DelayUs2x(200);

  DelayUs2x(200);

  ds = 1;

  DelayUs2x(50);

  dat=ds;

  DelayUs2x(25);

  return dat;

 }

 unsigned char tempreadbyte(void)

 {

  unsigned char i=0;

  unsigned char dat = 0;

  for (i=8;i>0;i--)

  {

  ds = 0;

  dat>>=1;

  ds = 1;

  if(ds)

  dat|=0x80;

  DelayUs2x(25);

  }

  return(dat);

 }

 void tempwritebyte(unsigned char dat)

 {

  unsigned char i=0;

  for (i=8; i>0; i--)

  {

  ds = 0;

  ds = dat&0x01;

  DelayUs2x(25);

  ds = 1;

  dat>>=1;

  }

  DelayUs2x(25);

 }

 unsigned int tempread(void)

 {

  unsigned char a=0;

  unsigned int b=0;

  unsigned int t=0;

  Init();

  tempwritebyte(0xCC);

  tempwritebyte(0x44);

  DelayMs(10);

  Init();

  tempwritebyte(0xCC);

  tempwritebyte(0xBE);

  a=tempreadbyte();

  b=tempreadbyte();

  b<<=8;

  t=a+b;

  return(t);

 }

 void Display(unsigned char wei,unsigned char num)

 {

  static unsigned char i=0;

  P2=0xff;

  P0=wtable[i+wei];

  P2=tempdate[i];

  i++;

  if(i==num)

  i=0;

 }

 void Init_dingshiqi(void)

 {

  TMOD |= 0x01;

  EA=1;

  ET0=1;

  TR0=1;

 }

 void zhongduan(void) interrupt 1

 {

  static unsigned int num;

  TH0=(65536-2000)/256;

  TL0=(65536-2000)%256;

  Display(0,4);

  num++;

  if(num==300)

  {

  num=0;

  flag=1;

  }

 }

 四.总结

 课程设计体会课程设计体会

 这门课程设计即将结束,在这次制作过程中,可以说是充满挑战也有惊喜,在充满困惑的同时也多些了解,虽然时间不是很长但过程确实值得回味,每一个细节我们都亲历而为,也因此印象深刻。在学习或实践中我们或多或少掌握了一些知识,有了一些体会和感受。当然我也认识到了自己学习中的不足,看到了自己在运用知识方面欠缺。

 经过将两周的单片机课程设计,终于完成了我们的数字温度计的设计,这些日子是我大学生活里充实的生活,看着自己的劳动成果,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计把实物都做了出来,,心里有种说不出的感觉。毕竟自己的努力还算有所回报,我为自己的努力感到自豪。高兴之余不得不深思呀!

 在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,举个例子,以前写的那几次,数据加减时,我用的都是BCD码,这一次,我全部用的都是16进制的数直接加减,显示处理时在用对不同的位,求商或求余,感觉效果比较好。还有时序的问题,通过这次的设计我明白了时序才真正是数字芯片的灵魂,所有的程序我们都可以通过对其时序的理解来实现对其操作,同时体会到了单总线结构的魅力。

 

 从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。