单片机课程设计方案之多点温度测量系统设计方案.docx

上传人:b****4 文档编号:3010974 上传时间:2022-11-17 格式:DOCX 页数:14 大小:313.43KB
下载 相关 举报
单片机课程设计方案之多点温度测量系统设计方案.docx_第1页
第1页 / 共14页
单片机课程设计方案之多点温度测量系统设计方案.docx_第2页
第2页 / 共14页
单片机课程设计方案之多点温度测量系统设计方案.docx_第3页
第3页 / 共14页
单片机课程设计方案之多点温度测量系统设计方案.docx_第4页
第4页 / 共14页
单片机课程设计方案之多点温度测量系统设计方案.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

单片机课程设计方案之多点温度测量系统设计方案.docx

《单片机课程设计方案之多点温度测量系统设计方案.docx》由会员分享,可在线阅读,更多相关《单片机课程设计方案之多点温度测量系统设计方案.docx(14页珍藏版)》请在冰豆网上搜索。

单片机课程设计方案之多点温度测量系统设计方案.docx

单片机课程设计方案之多点温度测量系统设计方案

姓名:

班级:

学号:

 

指导老师:

日期:

 

第一章绪论

 

传统的方法是用温度计等测试器材,通过人工进行检测,对不符合温度要求的库房进行通风和降温等工作。

这种人工测试方法费时费力、效率低,且测试的温度误差大,随机性大。

防潮、防霉、防腐、防爆是仓库日常工作的重要内容,是衡量仓库管理质量的重要指标。

首要问题是加强仓库内温度与湿度的监测工作。

因此我们需要一种造价低廉、使用方便且测量准确的温湿度测量仪。

 

第二章方案

传感器是实现测量与控制的首要环节,是测控系统的关键部件,如果没有

传感器对原始被测信号进行准确可靠的捕捉和转换,一切准确的测量和控制都将无法实现。

工业生产过程主要依靠各种传感器来检测和控制生产过程中的各种参量,使设备和系统正常运行在最佳状态,从而保证生产的高效率和高质量。

2.1传感器的选择

 

(1)DSl8820的特点

DSl8820是美国Dallas半导体公司继DSl820之后最新推出的一种改进型智能数字温度传感器。

与传统的热敏电阻相比,它能够直接读出被测温度,并且可根据实际要求通过编程实现9~12位的数字值读数方式;可以分别在93.75ms和75Oms内完成9位和12位的数字量;从DSl8820读出信息或写入DSl8820信息仅需要1根口线(单线接口);温度变换功率来源于数据总线,总线本身也可以向所挂接的DSl8820供电,而无需额外电源。

使用DSl8820可使系统结构更趋简单,可靠性更高。

DSl8820在测温精度、转换时间、传输距离、分辨率等方面较DSl820有了很大的改进。

(2)DSl8820内部结构及工作原理

DSl8820的内部结构如图1所示,主要包括寄生电源电路、64位只读存储器(ROM)和单线接口、存储器和控制逻辑、存放中间数据的高速暂存存储器、温度传感器、报警上限寄存器TH、报警下限寄存器TL、配置寄存器和8位CRC(循环冗余校验码)发生器。

 

2.2AT89C51单片机

AT89C51单片机是ATMEL公司生产的高性能8位单片机,主要功能特性如下:

①兼容MCS-51指令系统;

②32个双向I/O口,两个16位可编程定时/计数器;

③1个串行中断,两个外部中断源;

④可直接驱动LED;

⑤低功耗空闲和掉电模式;

⑥4kB可反复擦写(>1000次)FLASIROM;

该款芯片的超低功耗和良好的性能价格比使其非常适合嵌入式产品应用。

 

第三章系统总体设计

 

1.硬件设计

由DS18B20和Atmel公司推出的单片机AT89C51以及相关外围电路组成的高精度、多点温度测量系统的结构框图如图所示。

系统采用8片DS18B20构成小型温度传感器网络[3],通过并行连接方式连接至单片机的通用I/O端口。

单片机获得温度信息后,通过特定的算法,将处理后的温度信息通过LED显示出来,同时通过串行口送上位机处理。

 

 

 

2.软件系统设计

主程序先对各DS18B20进行初始化,然后重复调用写命令和读数据模块,最后将数据处理后送LED显示[7]。

主程序执行流程如图3所示:

 

/*数码管的显示*/

voiddisplay(uinttemp)

{

ucharbai,shi,ge。

bai=temp/100。

shi=temp%100/10。

ge=temp%100%10。

dula=0。

P0=table[bai]。

  //显示百位

dula=1。

    //从0到1,有个上升沿,解除锁存,显示相应段

dula=0。

    //从1到0再次锁存

    

wela=0。

P0=0xfe。

wela=1。

wela=0。

delay

(1)。

//延时约2ms

P0=table1[shi]。

  //显示十位

dula=1。

dula=0。

P0=0xfd。

wela=1。

wela=0。

delay

(1)。

P0=table[ge]。

  //显示个位

dula=1。

dula=0。

P0=0xfb。

wela=1。

wela=0。

delay

(1)。

}

 

3.软件仿真调试

 

第四章结束语

本系统具有如下特点:

 a.结构简单,成本低廉,维护方便。

  b.直接将温度数据进行编码,可以只使用单根电缆传输温度数据,通信方便,传输距离远且抗干扰性强。

 c.配置灵活、方便、易于扩展。

可扩展多路下位温度采集子系统,将它们通过RS485与上位PC机组网,形成多点温度采集网络。

也可在各子系统中有选择性地增减温度传感器。

d.适合于恶劣环境的现场温度测量,如:

环境控制、设备或过程控制、测温类消费电子产品等。

在大范围温度多点监控系统中具有十分诱人的应用前景。

主要参考文献:

[1].余永权.单片机原理及应用.北京:

电子工业出版社,1997.

[2].邦田.电子电路实用抗干扰技术.北京:

人民邮电出版社,1994.

[3].曲喜贵.电子元件材料手册[M].北京:

电子工业出版社,1989.422-430.

[4].刘君华.智能传感器系统[M].西安:

西安电子科技大学出版社,1999.

[5]戴俊峰.嵌入式系统大屏幕LED点阵显示器[J].现代电子技术,2004,27

 

附录主程序

#include"reg52.h"

#include"intrins.h"

#defineucharunsignedchar

#defineuintunsignedint

sbitds=P2^2。

sbitdula=P2^6。

sbitwela=P2^7。

ucharflag。

uinttemp。

        //参数temp一定要声明为int型

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}。

   //不带小数点数字编码

ucharcodetable1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,

0x87,0xff,0xef}。

     //带小数点数字编码

/*延时函数*/

voidTempDelay(ucharus)

{

while(us--)。

}

voiddelay(uintcount)//延时子函数

{

uinti。

while(count)

{

i=200。

while(i>0)

i--。

count--。

}

}

/*串口初始化,波特率9600,方式1*/

voidinit_com()

{

TMOD=0x20。

  //设置定时器1为模式2

TH1=0xfd。

  //装初值设定波特率

TL1=0xfd。

TR1=1。

    //启动定时器

SM0=0。

    //串口通信模式设置

SM1=1。

//REN=1。

    //串口允许接收数据

PCON=0。

    //波特率不倍频

//  SMOD=0。

  //波特率不倍频

  //EA=1。

    //开总中断

  //ES=1。

    //开串行中断

}

/*数码管的显示*/

voiddisplay(uinttemp)

{

ucharbai,shi,ge。

bai=temp/100。

shi=temp%100/10。

ge=temp%100%10。

dula=0。

P0=table[bai]。

  //显示百位

dula=1。

    //从0到1,有个上升沿,解除锁存,显示相应段

dula=0。

    //从1到0再次锁存

    

wela=0。

P0=0xfe。

wela=1。

wela=0。

delay

(1)。

//延时约2ms

P0=table1[shi]。

  //显示十位

dula=1。

dula=0。

P0=0xfd。

wela=1。

wela=0。

delay

(1)。

P0=table[ge]。

  //显示个位

dula=1。

dula=0。

P0=0xfb。

wela=1。

wela=0。

delay

(1)。

}

voidds_reset(void)

{

ds=1。

_nop_()。

     //1us

ds=0。

TempDelay(80)。

  //当总线停留在低电平超过480us,总线上所以器件都将被复位,这里//延时约530us总线停留在低电平超过480μs,总线上的所有器件都

//将被复位。

_nop_()。

ds=1。

       //产生复位脉冲后,微处理器释放总线,让总线处于空闲状态,原因查//18b20中文资料

TempDelay(5)。

  //释放总线后,以便从机18b20通过拉低总线来指示其是否在线,

          //存在检测高电平时间:

15~60us,所以延时44us,进行      1-wirepresence//detect(单线存在检测)

_nop_()。

_nop_()。

_nop_()。

if(ds==0)

     flag=1。

  //detect18b20success

else

     flag=0。

  //detect18b20fail

  TempDelay(20)。

//存在检测低电平时间:

60~240us,所以延时约140us

_nop_()。

_nop_()。

ds=1。

    //再次拉高总线,让总线处于空闲状态

/**/

}

bit  ds_read_bit(void)//读一位

{

bitdat。

ds=0。

    //单片机(微处理器)将总线拉低

  _nop_()。

  //读时隙起始于微处理器将总线拉低至少1us

ds=1。

     //拉低总线后接着释放总线,让从机18b20能够接管总线,输出有效数据

_nop_()。

_nop_()。

    //小延时一下,读取18b20上的数据,因为从ds18b20上输出的数据

//在读"时间隙"下降沿出现15us内有效

dat=ds。

       //主机读从机18b20输出的数据,这些数据在读时隙的下降沿出现//15us内有效

TempDelay(10)。

//所有读"时间隙"必须60~120us,这里77us

return(dat)。

  //返回有效数据

}

uchards_read_byte(void)//读一字节

{

ucharvalue,i,j。

value=0。

       //一定别忘了给初值

for(i=0。

i<8。

i++)

{

j=ds_read_bit()。

   value=(j<<7)|(value>>1)。

//这一步的说明在一个word文档里面

}

return(value)。

     //返回一个字节的数据

}

voidds_write_byte(uchardat)//写一个字节

{

  uchari。

  bitonebit。

     //一定不要忘了,onebit是一位

  for(i=1。

i<=8。

i++)

  {

onebit=da

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1