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

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

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

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

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

毕业设计单片机原理及应用课程设计数字式温度计的设计

单片机原理及应用课程设计任务书

课题名称

数字式温度计的设计

设计内容及要求

(1)课题内容:

以单片机为核心,使用DS18B20温度传感器(DP-51PROC单片机实验仪上B4区数字温度采集实验区)设计一个数字式温度计。

测量一路温度信号并用B3区的12864液晶屏显示;测温范围-55-125摄氏度,精度0.1摄氏度。

液晶屏的第一行显示本人的姓名和学号,第二行显示测量温度、当前时间及设定的上、下限温度报警值。

当温度高于设定上限值或低于下限值时驱动B5区的峰鸣器发出5声报警声。

(2)要求:

完成该系统的硬件和软件的设计,在Proteus软件上仿真通过后,下载到DP-51PROC单片机实验箱验证。

最后就课程设计本身提交一篇课程设计说明书。

设计工作量

1、汇编或C51语言程序设计;

2、程序调试;

3、在Proteus上进行仿真后,进行下载;

4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、仿真分析、调试过程,参考文献、设计总结等。

进度安排

起止日期(或时间量)

设计内容(或预期目标)

备注

第一天

课题介绍,答疑,收集材料,C51介绍

第二天

设计方案论证,练习编写C51程序

第三天~第六天

程序设计

第六天~第八天

程序调试、仿真

第九天~第十天

系统测试并编写设计说明书

教研室

意见

 

年月日

系(部)主管领导意见

 

年月日

目录

1.硬件电路及原理5

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

0

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

#include

#include

#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}

//"秒",2

};

ucharcodenum[][16]={

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

//"0",0

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

//"1",1

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

//"2",2

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

//"3",3

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

//"4",4

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

//"5",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},

//"-",0

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

//"C",1

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

//"°",2

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

//".",3

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

//"",4

{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},

//"|",6

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

//"+",7

};

//延时

voiddelay(uintn)

{

uinti;

for(;n>0;n--)

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

}

//判断是否忙

voidcheck()

{

rs=0;

rw=1;//读e=1;

port=0x00;

e=1;

while(busy);

e=0;

}

//写指令

voidsendcommand(ucharcommand)

{

check();

rs=0;//指令

rw=0;//写e=0;

port=command;

e=1;

e=0;//写入指令

}

//写数据

voidwritedata(uchardat)

{

check();

rs=1;//数据

rw=0;

port=dat;

e=1;

e=0;

}

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

voidselect(uintn)

{

switch(n)

{

case0:

cs1=0;cs2=0;break;//低电平选中

case1:

cs1=0;cs2=1;break;//cs1左屏

case2:

cs1=1;cs2=0;break;//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&0x3f;

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()

{

check();

seton

(1);

clear(0);

setline(0);

}

//显示汉字16*16显示

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

{

uchari,j;

select(screen);

j=0;

setpage(page);

setcolumn(column);

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

{if(method==1)writedata(~str[j++]);//method为显示方式。

当等于1时,反白。

elsewritedata(str[j++]);

}

setpage(page+1);

setcolumn(column);

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

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

elsewritedata(str[j++]);

}

}

//显示数字8*8显示

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

{

uchari,j;

select(screen);j=0;

setpage(page);

setcolumn(column);

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

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

elsewritedata(str[j++]);

}

setpage(page+1);setcolumn(column);

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

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

elsewritedata(str[j++]);

}

}

//显示时间

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