基于单片机的数字温度计课程设计样本Word格式文档下载.docx

上传人:b****5 文档编号:19750802 上传时间:2023-01-09 格式:DOCX 页数:21 大小:311.61KB
下载 相关 举报
基于单片机的数字温度计课程设计样本Word格式文档下载.docx_第1页
第1页 / 共21页
基于单片机的数字温度计课程设计样本Word格式文档下载.docx_第2页
第2页 / 共21页
基于单片机的数字温度计课程设计样本Word格式文档下载.docx_第3页
第3页 / 共21页
基于单片机的数字温度计课程设计样本Word格式文档下载.docx_第4页
第4页 / 共21页
基于单片机的数字温度计课程设计样本Word格式文档下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

基于单片机的数字温度计课程设计样本Word格式文档下载.docx

《基于单片机的数字温度计课程设计样本Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字温度计课程设计样本Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。

基于单片机的数字温度计课程设计样本Word格式文档下载.docx

附录2系统原理图………………………………………………………………23

1概述

1.1课题名称

基于单片机数字温度计设计

1.2课题规定

1)基本范畴-50℃~110℃

2)精度误差不大于0.5℃

3)LED数码直读显示

4)可以设定温度上下限报警功能

1.3设计目和意义

温度数咱们寻常生产和生活中实时在接触到物理量,但是它是看不到,仅凭感觉只能感觉到大概温度值,老式指针式温度计虽然能批示温度,但是精度低,使用不够以便,显示不够直观,数字温度计浮现可以让人们直观理解自己想懂得温度究竟是多少度。

  数字温度计采用温度敏感元件也就是温度传感器(如铂电阻,热电偶,半导体,热敏电阻等),将温度变化转换成电信号变化,如电压和电流变化,温度变化和电信号变化有一定关系,如线性关系,一定曲线关系等,这个电信号可以使用模数转换电路即AD转换电路将模仿信号转换为数字信号,数字信号再送给解决单元,如单片机或者PC机等,解决单元通过内部软件计算将这个数字信号和温度联系起来,成为可以显示出来温度数值,如25.0摄氏度,然后通过显示单元,如LED,LCD或者电脑屏幕等显示出来给人观测。

这样就完毕了数字温度计基本测温功能。

数字温度计依照使用传感器不同,AD转换电路,及解决单元不同,它精度,稳定性,测温范畴等均有区别,这就要依照实际状况选取符合规格数字温度计。

数字温度计有手持式,盘装式,及医用小体积等等。

此外作为电气工程及其自动化学生,通过基于单片机数字温度计设计可以提高自己理论联系实际能力,可以更好掌握所学专业理论只是,也培养了自己动手能力,同步,也培养了信息收集能力和分析问题解决问题能力

2系统总体设计方案及硬件设计

作为对专业理论知识学习后实践环节,我选取了自行设计基于AT89S52单片机数字温度计。

设计原理框图如,图1。

图1数字温度计原理框图

2.1单片机选取

AT89S52是一种低功耗、高性能CMOS8位微控制器,具备8K在系统可编程Flash存储器。

使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。

片上Flash容许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有机灵8位CPU和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。

Protues仿真软件中用AT89C51代替AT89S52,单片机小系统电路图如图2所示。

图2单片机小系统电路

AT89S52重要性能

1、与MCS-51单片机产品兼容;

  2、8K字节在系统可编程Flash存储器;

  3、1000次擦写周期;

  4、全静态操作:

0Hz-33MHz;

  5、三级加密程序存储器;

  6、32个可编程I/O口线;

  7、三个16位定期器/计数器;

  8、六个中断源;

  9、全双工UART串行通道;

  10、低功耗空闲和掉电模式;

  11、掉电后中断可唤醒;

  12、看门狗定期器;

  13、双数据指针;

14、掉电标记符。

2.2温度传感器简介

DS18B20可以程序设定9~12位辨别率,精度为±

0.5°

C。

可选更小封装方式,更宽电压合用范畴。

辨别率设定,及顾客设定报警温度存储在EPROM中,掉电后依然保存。

图3温度传感器

引脚功能阐明:

NC:

空引脚,悬空不使用;

VDD:

可选电源脚,电源电压范畴3~5.5V。

当工作于寄生电源时,此引脚必要接地。

DQ:

数据输入/输出脚。

漏极开路,常态下高电平。

GND:

为电源地

DS18B20内部构造重要由四某些构成:

64位光刻ROM、温度传感器、非挥发温度报警触发器TH和TL、配备寄存器。

光刻ROM中64位序列号是出厂前被光刻好,它可以看作是该DS18B20地址序列码。

64位光刻ROM排列是:

开始8位(28H)是产品类型标号,接着48位是该DS18B20自身序列号,最后8位是前面56位循环冗余校验码(CRC=X8+X5+X4+1)。

光刻ROM作用是使每一种DS18B20都各不相似,这样就可以实现一根总线上挂接各种DS18B20目。

DS18B20中温度传感器可完毕对温度测量,以12位转化为例:

用16位符号扩展二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。

这是12位转化后得到12位数据,存储在18B20两个8比特RAM中,二进制中前面5位是符号位,如果测得温度不不大于0,这5位为0,只要将测到数值乘于0.0625即可得到实际温度;

如果温度不大于0,这5位为1,测到数值需要取反加1再乘于0.0625即可得到实际温度。

例如+125℃数字输出为07D0H,+25.0625℃数字输出为0191H,-25.0625℃数字输出为FF6FH,-55℃数字输出为FC90H。

DS18B20温度传感器内部存储器涉及一种高速暂存RAM和一种非易失性可电擦除E2RAM,后者存储高温度和低温度触发器TH、TL和构造寄存器。

暂存存储器包括了8个持续字节,前两个字节是测得温度信息,第一种字节内容是温度低八位,第二个字节是温度高八位。

第三个和第四个字节是TH、TL易失性拷贝,第五个字节是构造寄存器易失性拷贝,这三个字节内容在每一次上电复位时被刷新。

第六、七、八个字节用于内部计算。

第九个字节是冗余检查字节。

该字节各位意义如下:

TMR1R011111

低五位始终都是1,TM是测试模式位,用于设立DS18B20在工作模式还是在测试模式。

在DS18B20出厂时该位被设立为0,顾客不要去改动。

R1和R0用来设立辨别率,如表1所示:

(DS18B20出厂时被设立为12位)

表1DS18B20温度转换时间表

R1

R0

辨别率/位

温度最大转向时间

9

93.75

1

10

187.5

11

375

12

750

依照DS18B20通讯合同,主机控制DS18B20完毕温度转换必要通过三个环节:

每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才干对DS18B20进行预定操作。

复位规定主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒存在低脉冲,主CPU收到此信号表达复位成功。

2.3温度传感器与单片机连接

DS18B20采用外部电源供电方式,在外部电源供电方式下,DS18B20工作电源由VCC引脚接入,此时I/O线不需要强上拉,不存在电源电流局限性问题,可以保证转换精度,同步在总线上理论可以挂接任意各种DS18B20传感器,构成多点测温系统。

注意:

在外部供电方式下,DS18B20GND引脚不能悬空,否则不能转换温度,读取温度总是85℃。

图4DS18B20接线

2.4复位信号及外部复位电路

该复位信号高电平有效,其有效时间应持续24个振荡脉冲周期即两个机器周期以上。

若使用频率为12MHz晶体振荡器,则复位信号持续时间应超过2μs才完毕复位操作。

图5复位电路

2.5单片机与报警电路

报警电路分为两某些,一某些是蜂鸣器声音报警,另一某些是发光二极管放光报警。

详细状况如下:

接通电源,两个(红色,黄色)发光二极管都不亮,当温度超过上线设定值(如38摄氏度)时,红色二极管亮,同步蜂鸣器也报警;

当温度低于下限设定值时(如5摄氏度)时,黄色二极管亮,同步蜂鸣器也开始报警。

图6蜂鸣器报警图7发光二极管报警

2.6显示电路

采用技术成熟5461AS共阴4位数码管0.56英寸红色。

LED显示分为静态显示和动态显示。

这里采用静态显示,系统通过单片机串行口来实现静态显示。

串行口为方式零状态,即工作在移位寄存器方式,波特率为振荡频率1/12。

当器件执行任何一条将SBUF作为目寄存器命令时,数据便开始从RXD端发送。

在写信号有效时,相隔一种机器周期后发送控制端SEND有效,即容许RXD发送数据,同步容许从TXD端输出移位脉冲。

图8为显示电路连接图。

图8数码显示连接图

3软件设计

DSl8820重要数据元件有:

64位激光LaseredROM,温度敏捷元件和非易失性温度告警触发器TH和TL。

DSBl820可以从单总线获取电源,当信号线为高电平时,将能量贮存在内部电容器中;

当单信号线为低电平时,将该电源断开,直到信号线变为高电平重新接上寄生(电容)电源为止。

此外,还可外接5V电源,给DSl8820供电。

DSl8820供电方式灵活,运用外接电源还可增长系统稳定性和可靠性。

图9为读取数据流程图。

图9读取数据流程图

读出温度数据后,LOW低四位为温度小数某些,可以精准到0.0625℃,LOW高四位和HIGH低四位为温度整数某些,HIGH高四位所有为1表达负数,全为0表达正数。

因此先将数据提取出来,分为三个某些:

小数某些、整数某些和符号某些。

小数某些进行四舍五入解决:

不不大于0.5℃话,向个位进1;

不大于0.5℃时候,舍去不要。

当数据是个负数时候,显示之前要进行数据转换,将其整数某些取反加一。

还由于DS18B20最低温度只能为-55℃,因此可以将整数某些最高位换成一种“-”,表达为负数。

图10为温度数据解决程序流程图。

图10温度数据解决流程图

4Proteus软件仿真

仿真过程相称顺利,需要注意原件选用,特别是数码管显示块共阴、共阳,尚有就是电阻选用,太大太小都会影响实验效果。

在仿真中不存在焊接问题,因此接线只要引脚接口对的就是没问题。

此外就是程序调试,相称重要。

4.1仿真图

图11当温度为上下限之间时仿真状况

图12温度在温度下限设定值如下仿真图

图13温度在温度上限设定值以上仿真图

4.2仿真成果分析

温度在上下限设定值范畴内是,放光二极管都是不亮,当实际温度值,低于设定下限时,黄色放光二极管亮;

当实际温度高于上限设定值时,红色发光二极管亮。

因素,通过程序控制P1.0(红色放光二极管)P1.1(黄色发光二极管),度在上下限设定值范畴内是,P1.0,P1.1都是低电平,故发光二极管不会亮,当实际温度值,低于设定下限时,P1.0为低电平P1.1为高电平,故黄色放光二极管亮;

当实际温度高于上限设定值时,P1.0为高电平P1.1为低电平,故红色发光二极管亮。

5总结与体会

作为一名电气工程及其自动化大三学生,我觉得做单片机课程设计是很故意义,并且也是必要。

在做这次课程设计过程中,我感触最深当属查阅大量设计资料了。

为了让自己设计更加完善,查阅这方面实际资料是十分必要,也是必不可少。

另一方面,在这次课程设计中,咱们运用了此前学过专业课知识,如:

proteus仿真、C语言、模仿和数字电路知识等。

虽然过去我从未独立应用过她们,但在学习过程中带着问题去学我发现效率很高,这是我做这次课程设计又一收获。

最后,要做好一种课程设计,就必要做到:

在设计程序之前,对所用单片机内部构造有一种系统理解,懂得该单片机有哪些资源;

要有一种清晰思路和一种完整软件流程图;

在设计程序时,不能妄想一次将整个程序设计好,重复修改、不断改进是程序设计必经之路;

要养成注释程序好习惯,这样为资料保存和交流提供了以便;

在设计中遇到问题要记录,以免下次遇到同样问题。

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

参照文献

[1]单片机原理及应用技术.余发山,王福忠徐州中华人民共和国矿业大学出版社.

[2]微型计算机控制技术王新中华人民共和国电力出版社

[3]模仿电子技术艾永乐中华人民共和国电力出版社

附录1程序源代码

/******************************************************************

程序名称:

DS18B20温度测量、报警系统

简要阐明:

DS18B20温度计,温度测量范畴0~99.9摄氏度

可设立上限报警温度、下限报警温度

即高于上限值或者低于下限值时蜂鸣器报警

默认上限报警温度为38℃、默认下限报警温度为5℃

报警值可设立范畴:

最低上限报警值等于当前下限报警值

最高下限报警值等于当前上限报警值

将下限报警值调为0时为关闭下限报警功能

******************************************************************/

#include<

AT89X52.h>

#include"

DS18B20.h"

#defineuintunsignedint

#defineucharunsignedchar//宏定义

#defineSETP3_1//定义调节键

#defineDECP3_2//定义减少键

#defineADDP3_3//定义增长键

#defineBEEPP3_7//定义蜂鸣器

bitshanshuo_st;

//闪烁间隔标志

bitbeep_st;

//蜂鸣器间隔标志

sbitDIAN=P0^7;

//小数点

ucharx=0;

//计数器

signedcharm;

//温度值全局变量

ucharn;

ucharset_st=0;

//状态标志

signedcharshangxian=38;

//上限报警温度,默认值为38

signedcharxiaxian=5;

//下限报警温度,默认值为5

ucharcodeLEDData[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};

unsignedintReadTemperature(void);

/*****延时子程序*****/

voidDelay(uintnum)

{

while(--num);

}

/*****初始化定期器0*****/

voidInitTimer(void)

TMOD=0x1;

TH0=0x3c;

TL0=0xb0;

//50ms(晶振12M)

/*****定期器0中断服务程序*****/

voidtimer0(void)interrupt1using0

TL0=0xb0;

x++;

/*****外部中断0服务程序*****/

voidint0(void)interrupt0using1

EX0=0;

//关外部中断0

if(DEC==0&

&

set_st==1)

{

shangxian--;

if(shangxian<

xiaxian)shangxian=xiaxian;

}

elseif(DEC==0&

set_st==2)

xiaxian--;

if(xiaxian<

0)xiaxian=0;

/*****外部中断1服务程序*****/

voidint1(void)interrupt2using2

EX1=0;

//关外部中断1

if(ADD==0&

shangxian++;

if(shangxian>

99)shangxian=99;

elseif(ADD==0&

xiaxian++;

if(xiaxian>

shangxian)xiaxian=shangxian;

}

/*****读取温度*****/

voidcheck_wendu(void)

uinta,b,c;

c=ReadTemperature()-5;

//获取温度值并减去DS18B20温漂误差

a=c/100;

//计算得到十位数字

b=c/10-a*10;

//计算得到个位数字

m=c/10;

//计算得到整数位

n=c-a*100-b*10;

//计算得到小数位

if(m<

0){m=0;

n=0;

}//设立温度显示上限

if(m>

99){m=99;

n=9;

}//设立温度显示上限

/*****显示开机初始化等待画面*****/

Disp_init()

P0=0x40;

//显示-

P2=0xf7;

Delay(200);

P2=0xfb;

Delay(200);

P2=0xfd;

P2=0xfe;

P2=0xff;

//关闭显示

/*****显示温度子程序*****/

Disp_Temperature()//显示温度

{P2=0xf7;

P0=0x39;

//显示C

Delay(300);

P0=LEDData[n];

//显示个位

P0=LEDData[m%10];

//显示十位

DIAN=1;

//显示小数点

P0=LEDData[m/10];

//显示百位

/*****显示报警温度子程序*****/

Disp_alarm(ucharbaojing)

{P2=0xf7;

P0=LEDData[baojing%10];

//显示十位

P0=LEDData[baojing/10];

//显示百位

if(set_st==1)P0=0x76;

elseif(set_st==2)P0=0x38;

//上限H、下限L标示

/*****报警子程序*****/

voidAlarm()

{unsignedinti;

{

for(i=0;

i<

200;

i++)//喇叭发声时间循环,变化大小可以变化发声时间长短

Delay(80);

//参数决定发声频率,估算值

BEEP=!

BEEP;

BEEP=1;

//喇叭停止工作,间歇时间,可更改

Delay(0);

/*****主函数*****/

voidmain(void)

uintz;

InitTimer();

//初始化定期器

EA=1;

//全局中断开关

TR0=1;

ET0=1;

//启动定期器0

IT0=1;

IT1=1;

check_wendu();

for(z=0;

z<

300;

z++)

Disp_init();

while

(1)

if(SET==0)

Delay();

do{}while(SET==0);

set_st++;

x=0;

shanshuo_st=1;

if(set_st>

2)set_st=0;

if(set_st==0)

//关闭外部中断0

//关闭外部中断1

Disp_Temperature();

=shangxian)

P1_0=0;

else

P1_0=1;

xiaxian)

P1_1=0;

P1_1=1;

if((m>

=shangxian)||(m<

xiaxian))

Alarm();

//报警检测

elseif(set_st==1)

//关闭蜂鸣器

EX0=1;

//启动外部中断0

EX1=1;

//启动外部中断1

if(x>

=10){shanshuo_st=~shanshuo_st;

if(shanshuo_st){Disp_alarm(shangxian);

elseif(set_st==2)

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

当前位置:首页 > 医药卫生 > 基础医学

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

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