毕业设计单片机原理及应用课程设计数字式温度计的设计Word文件下载.docx

上传人:b****6 文档编号:19263096 上传时间:2023-01-04 格式:DOCX 页数:24 大小:121.66KB
下载 相关 举报
毕业设计单片机原理及应用课程设计数字式温度计的设计Word文件下载.docx_第1页
第1页 / 共24页
毕业设计单片机原理及应用课程设计数字式温度计的设计Word文件下载.docx_第2页
第2页 / 共24页
毕业设计单片机原理及应用课程设计数字式温度计的设计Word文件下载.docx_第3页
第3页 / 共24页
毕业设计单片机原理及应用课程设计数字式温度计的设计Word文件下载.docx_第4页
第4页 / 共24页
毕业设计单片机原理及应用课程设计数字式温度计的设计Word文件下载.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

毕业设计单片机原理及应用课程设计数字式温度计的设计Word文件下载.docx

《毕业设计单片机原理及应用课程设计数字式温度计的设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《毕业设计单片机原理及应用课程设计数字式温度计的设计Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。

毕业设计单片机原理及应用课程设计数字式温度计的设计Word文件下载.docx

2.软件设计8

3.调试结果20

4.操作说明21

5心得体会21

参考文献22

1.硬件电路及原理

1.1方案的总体设计框图

温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89c51,温度传感器采用DS18B20,用12864以串口传送数据实现温度显示。

图1 总体设计方框图

1.1.1主控制器

单片机AT89c51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。

1.1.2显示电路

显示电路采用12864液晶显示,从P0口输出段码。

1.1.3温度传感器

DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。

DS18B20的性能特点如下:

●独特的单线接口仅需要一个端口引脚进行通信;

●多个DS18B20可以并联在惟一的三线上,实现多点组网功能;

●无须外部器件;

●可通过数据线供电,电压范围为3.0~5.5V;

●零待机功耗;

●温度以9或12位数字;

●用户可定义报警设置;

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

●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;

DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图2所示。

图2DS18B20内部结构

64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。

温度报警触发器TH和TL,可通过软件写入户报警上下限。

DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。

高速暂存RAM的结构为8字节的存储器,结构如图3所示。

头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。

第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。

DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。

该字节各位的定义如图3所示。

低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。

温度LSB

温度MSB

TH用户字节1

TL用户字节2

配置寄存器

保留

CRC

图3 DS18B20字节定义

由表1可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。

因此,在实际应用中要将分辨率和转换时间权衡考虑。

高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。

第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。

当DS18B20接收到温度转换命令后,开始启动转换。

转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。

单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。

当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;

当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。

表2是一部分温度值对应的二进制温度数据。

表1DS18B20温度转换时间表

DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。

若T>TH或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。

因此,可用多只DS18B20同时测量温度并进行报警搜索。

在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。

主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。

表2 一部分温度对应值表

温度/℃

二进制表示

十六进制表示

+125

0000011111010000

07D0H

+85

0000010101010000

0550H

+25.0625

0000000110010000

0191H

+10.125

0000000010100001

00A2H

+0.5

0000000000000010

0008H

0000000000001000

0000H

-0.5

1111111111110000

FFF8H

-10.125

1111111101011110

FF5EH

-25.0625

1111111001101111

FE6FH

-55

1111110010010000

FC90H

另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。

系统对DS18B20的各种操作按协议进行。

操作协议为:

初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。

1.2DS18B20温度传感器与单片机的接口电路

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。

另一种是寄生电源供电方式,如图4所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。

当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。

采用寄生电源供电方式时VDD端接地。

由于单线制只有一根线,因此发送接口必须是三态的。

2.软件设计

#include<

reg51.h>

intrins.h>

math.h>

#defineucharunsignedchar

#defineuintunsignedint

#defineportP0//DB0~DB7数据口

#definebeepP2^6

sbite=P2^0;

//使能

sbitrw=P2^1;

//读写

sbitrs=P2^2;

//数据/命令

sbitcs2=P2^3;

//片选

sbitcs1=P2^4;

sbitbusy=P0^7;

//检测忙

sbitDQ=P3^0;

//定义DS18B20数据端口

ucharfuhao;

//负号寄存器

sbitP2_6=P2^6;

//蜂鸣器数据口

sbitP1_0=P1^0;

//下限加键

sbitP1_1=P1^1;

//下限减键

sbitP1_2=P1^2;

//上限加键

sbitP1_3=P1^3;

//上限减键

uintj=0;

intth=10;

//上限默认值

inttl=-12;

//下限默认值

uints=0,m=0,h=0;

//时分秒初始值

ucharcodehz[][32]={

{0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00,

0x00,0x07,0x02,0x02,0x02,0x02,0x3F,0x42,0x42,0x42,0x42,0x47,0x40,0x70,0x00,0x00},

//"

电"

2

{0x40,0x20,0x58,0x47,0x54,0x54,0x54,0x54,0x54,0x54,0xD4,0x14,0x06,0x04,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x40,0x80,0x70,0x00},

气"

3

{0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0C,0x08,0x00,0x00,0x00,

0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00},

二"

4

{0x84,0x84,0xFC,0x84,0x06,0xF4,0x00,0xFF,0x00,0x84,0x84,0xFC,0x84,0x86,0x04,0x00,

0x20,0x60,0x3F,0x10,0x92,0x41,0x38,0x07,0x40,0x40,0x40,0x7F,0x40,0x60,0x40,0x00},

班"

5

{0x00,0xFE,0x22,0x5A,0x86,0x08,0x88,0x48,0x38,0x0F,0xE8,0x08,0x88,0x0C,0x08,0x00,

0x00,0xFF,0x04,0x08,0x07,0x20,0x11,0x0D,0x41,0x81,0x7F,0x01,0x05,0x19,0x30,0x00},

/*"

陈"

4*/

{0x50,0x4C,0x44,0x44,0x44,0x44,0x45,0xC6,0x44,0x44,0x44,0x44,0x44,0x54,0x4C,0x00,

0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

宁"

5*/

};

ucharcodetime[][32]={

{0x00,0xFC,0x84,0x84,0x84,0xFE,0x14,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x00,

0x00,0x3F,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x23,0x40,0x80,0x7F,0x00,0x00,0x00},

时"

0

{0x00,0x80,0x40,0x20,0x98,0x86,0x80,0x80,0x83,0x8C,0x90,0x20,0xC0,0x80,0x80,0x00,

0x01,0x00,0x80,0x40,0x20,0x1F,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x01,0x00,0x00},

分"

1

{0x20,0x24,0x24,0xA4,0xFE,0xA3,0x22,0x80,0x70,0x00,0xFF,0x00,0x10,0x20,0x60,0x00,

0x10,0x08,0x06,0x01,0xFF,0x00,0x81,0x80,0x40,0x20,0x17,0x08,0x04,0x03,0x00,0x00}

秒"

ucharcodenum[][16]={

{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},

0"

{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},

1"

{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},

2"

{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},

3"

{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},

4"

{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},

5"

{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},

6"

6

{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},

7"

7

{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},

8"

8

{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00}

9"

9

ucharcodesign[][16]={

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00},

-"

{0x00,0xC0,0xE0,0x30,0x10,0x10,0x10,0x20,0x00,0x07,0x0F,0x18,0x10,0x10,0x10,0x08},

C"

{0x00,0x00,0x30,0x48,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

°

"

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x00,0x00},

."

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

"

{0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x31,0x00,0x00,0x00,0x00},

:

5

{0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00},

|"

{0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x0F,0x01,0x01,0x01},

+"

//延时

voiddelay(uintn)

{

uinti;

for(;

n>

0;

n--)

for(i=200;

i>

i--);

}

//判断是否忙

voidcheck()

rs=0;

rw=1;

//读e=1;

port=0x00;

e=1;

while(busy);

e=0;

//写指令

voidsendcommand(ucharcommand)

check();

//指令

rw=0;

//写e=0;

port=command;

//写入指令

//写数据

voidwritedata(uchardat)

rs=1;

//数据

port=dat;

//选屏幕0--全屏,1--左屏,2--右屏;

voidselect(uintn)

switch(n)

{

case0:

cs1=0;

cs2=0;

break;

//低电平选中

case1:

cs2=1;

//cs1左屏

case2:

cs1=1;

//cs2右屏

}

//页

voidsetpage(ucharpage)

page=page&

0x07;

page=page|0xb8;

sendcommand(page);

//列

voidsetcolumn(ucharcolumn)

column=column&

0x3f;

column=column|0x40;

sendcommand(column);

//起始行

voidsetline(ucharline)

line=line&

line=line|0xc0;

sendcommand(line);

//屏幕开关显示0--关,1--开;

voidseton(uintn)

n=n|0x3e;

sendcommand(n);

//清屏0--全屏,1--左屏,2--右屏;

voidclear(uintn)

uchari,j;

select(n);

for(i=0;

i<

8;

i++)

setpage(i);

setcolumn(0);

for(j=0;

j<

64;

j++)

writedata(0);

//置0清空

}

//初始化

voidinit()

seton

(1);

clear(0);

setline(0);

//显示汉字16*16显示

voidshow16(ucharpage,ucharcolumn,ucharscreen,ucharmethod,uchar*str)

select(screen);

j=0;

setpage(page);

setcolumn(column);

16;

{if(method==1)writedata(~str[j++]);

//method为显示方式。

当等于1时,反白。

elsewritedata(str[j++]);

setpage(page+1);

}

//显示数字8*8显示

voidshow8(ucharpage,ucharcolumn,ucharscreen,ucharmethod,uchar*str)

j=0;

setpage(page+1);

setcolumn(column);

//显示时间

voidshowtime()

show16(2,24,2,0,time[0]);

show16(4,24,2,0,time[1]);

show16(6,24,2,0,time[2]);

show8(2,40,2,0,sign[5]);

show8(4,40,2,0,sign[5]);

show8(6,40,2,0,sign[5]);

show8(2,48,2,0,num[h/10]);

show8(4,48,2,0,num[m/10]);

show8(6,48,2,0,num[s/10]);

show8(2,56,2,0,num[h%10]);

show8(4,56,2,0,num[m%10]);

show8(6,56,2,0,num[s%10]);

//中断服务程序

timer0()interrupt1using1

j++;

TH0=15536/256;

TL0=15536%256;

if(j==20){

j=0;

if(++s==60){

s=0;

if(++m==60){

m=0;

if(++h==24)h=0;

}

}

}

//显示个人信息

voidwelcome()

show16(0,0,1,0,hz[0]);

show16(0,16,1,0,hz[1]);

show16(0,32,1,0,hz[2]);

show16(0,48,1,0,hz[3]);

show16(0,8,2,0,hz[4]);

show1

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

当前位置:首页 > 工程科技 > 兵器核科学

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

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