基于某51单片机的数字温度计设计Word文件下载.docx

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

基于某51单片机的数字温度计设计Word文件下载.docx

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

基于某51单片机的数字温度计设计Word文件下载.docx

在仿真软件中如下图所示:

DS18B20的测温原理图如下图所示:

在正常测温情况下,DS18B20的测温分辨力为0.5摄氏度,可采用下述方法获得高分辨率的温度测量结果。

首先用DS18B20提供的读暂存器指令(BEH)读出以0.5摄氏度为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB),得到所测实际温度的整数部分Tz,然后再利用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。

考虑到DS18B20测量温度的整数部分以0.25、0.75摄氏度为进位界限的关系,实际温度Ts可以用下式计算:

Ts=(Tz-0.25)+(CD-Cs)/CD

六.系统整体硬件电路

根据设计要求与设计思路,硬件电路设计框图如下图所示,在仿真软件Proteus上完成,其中LED数码管以动态扫描法实现温度显示,由四个PNP型晶体管Q2,Q3,Q4,Q5和8个电阻组成。

基极与单片机的P1.0,P1.1,P1.2连接,DS18B20的数据I/O端与单片机P3.6引脚连接。

外部晶振为12MHZ。

七.系统程序设计

数字式温度计的应用程序主要包括主程序,温度检测程序,温度转换程序,LED显示程序等。

其思路如下图所示:

八.测量及其结果分析

1.Proteus仿真结果

软件方面,在Proteus编译下进行,源程序编译及仿真调试。

在软件中选定传感器后可对其进行环境温度设置,如下图,将环境温度设为34.9.

2.硬件测试结果

在硬件测试方面,检查电路板及焊接的质量情况,在焊接无误后通电检查LED显示器。

其中成品图如图所示:

通电后,室温下LED的示数如图所示

九.设计心得体会

本次实验对我们组来说是一次难得的经历,首先是第一次接触了仿真软件Proteus,在使用时经历了很多次失败,因为这款软件与以前使用过的软件有很大不同,使用时不停出错,接线时由于原件放置不合理而接的杂乱无章,输入源程序时还算顺利,显示结果比较满意。

其次是程序设计,我们在参考别人成功先例的基础上根据自己设计的需要进行编程,其中经历了不少曲折,最后我的收获是编程一定要细心,针对每一个细节,稍有疏忽程序就不能正常运行。

在这次的实践与学习中,尽管期间困难重重,但我们还是从中学习了不少新的知识和技能,也体会到了经历失败最终成功的喜悦。

总之,通过这次电工电子综合设计,我收获了很多,我希望自己在今后的各项研究工作中也坚持这种精神。

十.附录源程序

#include<

reg52.h>

#include<

intrins.h>

#define 

 

uchar 

unsigned 

char

uint 

 

int

sbit 

DATA=P1^1;

//DS18B20接入口

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//共阴极字型码

inttemp;

//温度值

intss;

//中间的一个变量

intdd;

intj;

uchardatab;

//定时器中断次数

uchardatabuf[4];

//字型显示中间变量

intalarmH=320;

//默认报警值

intalarmL=100;

//定义开关的接入口

k1=P2^5;

//+

k2=P2^6;

//-

k3=P2^7;

//确认

k4=P2^4;

//切换

bell=P1^0;

//蜂鸣器

HLight=P1^2;

//正温指示灯

LLight=P1^3;

//负温度指示灯

warn=P1^4;

//报警指示灯

Red=P1^6;

//温度上限设置指示灯

Green=P1^7;

//温度下限设置指示灯

bitset=0;

//初始化

bitFlag=0;

//设置标志

intn;

//函数的声明区

voidkey_to1();

voidkey_to2();

voiddelay(uint);

voidkey();

voidShow();

//函数的定义区

/*延时子函数*/

voiddelay(uintnum)

{

while(num--);

}

//DS18b20温度传感器所需函数,分为初始化,读写字节,读取温度4个函数

Init_DS18B20(void) 

//传感器初始化

ucharx=0;

DATA=1;

//DQ复位

delay(10);

//稍做延时

DATA=0;

//单片机将DQ拉低

delay(80);

//精确延时大于480us 

//450

//拉高总线

delay(20);

x=DATA;

//稍做延时后如果x=0则初始化成功x=1则初始化失败

delay(30);

ReadOneChar(void) 

//读一个字节

uchari=0;

uchardat=0;

for(i=8;

i>

0;

i--)

{

//给脉冲信号

dat>

>

=1;

if(DATA)

dat|=0x80;

delay(8);

}

return(dat);

WriteOneChar(unsignedchardat) 

//写一个字节

i>

i--)

DATA=dat&

0x01;

intReadTemperature(void)//读取温度

uchara=0;

ucharb=0;

intt=0;

floattt=0;

Init_DS18B20();

WriteOneChar(0xCC);

//跳过读序号列号的操作

WriteOneChar(0x44);

//启动温度转换

//跳过读序号列号的操作

WriteOneChar(0xBE);

//读取温度寄存器等(共可读9个寄存器)前两个就是温度

a=ReadOneChar();

//低位

b=ReadOneChar();

//高位

t=b;

t<

<

=8;

t=t|a;

tt=t*0.0625;

t=tt*10+0.5;

return(t);

void 

display00() 

//*********显示负值子函数

dd=-(temp-1);

buf[1]=dd/100;

buf[2]=dd/100;

buf[3]=dd%100/10;

buf[0]=dd%10;

//动态显示

for(j=0;

j<

5;

j++)

P2=0xff;

//初始灯为灭的

P0=0x00;

P2=0xfd;

//显示小数点

P0=0x80;

delay(100);

P2=0xf7;

//片选LCD1

P0=0x40;

P2=0xfb;

//片选LCD2

P0=table[buf[2]];

P2=0Xfd;

//片选LCD3

P0=table[buf[3]];

P2=0Xfe;

P0=table[buf[0]];

//片选LCD4 

//显示正值子函数

display()

buf[1]=temp/1000;

//显示百位

buf[2]=temp/100%10;

//显示十位

buf[3]=temp%100/10;

//显示个位

buf[0]=temp%10;

//小数位

3;

j++)

delay(300);

//片选LCD1

P0=table[buf[1]];

voidkey() 

//按键扫描子程序

if(k1!

=1)

if(k1!

while(k1!

{key_to1();

for(n=0;

n<

8;

n++)

Show();

if(k2!

while(k2!

{key_to2();

Show();

if(k3!

TR0=1;

//复位,开定时

temp=ReadTemperature();

if(k4!

delay(20);

while(k4!

=1);

set=!

set;

if(set==0)

{Red=0;

Green=1;

else{Green=0;

Red=1;

voidkey_to1()

TR0=0;

//关定时器

temp+=10;

if(temp>

=1100)

{temp=-550;

if(set==0)

{alarmH=temp;

else{alarmL=temp;

voidkey_to2()

//关定时器

temp-=10;

if(temp<

=-550)

{temp=1100;

{alarmH=temp;

else{alarmL=temp;

voidalarm(void)

alarmH||temp<

alarmL)

//bell=1;

//delay(50);

//bell=0;

Flag=1;

}else{Flag=0;

logo()//开机的Logo 

P0=0x40;

delay(50);

P1=0xff;

//关闭显示

voidShow() 

//显示函数,分别表示温度正负值

if(temp>

=0)

{HLight=1;

LLight=0;

display();

0)

{HLight=0;

LLight=1;

display00();

main()

TCON=0x01;

//定时器T0工作在01模式下

TMOD=0X01;

TH0=0XD8;

//装入初值

TL0=0XF0;

EA=1;

//开总中断

ET0=1;

//开T0中断

//T0开始运行计数

EX0=1;

//开外部中断0

for(n=0;

500;

n++)//显示启动LOGo"

----"

{bell=1;

warn=1;

logo();

Red=0;

while

(1)

key();

ss=ReadTemperature();

alarm();

//报警函数

if(Flag==1)

{bell=!

bell;

warn=!

warn;

//蜂鸣器滴滴响

else{bell=1;

warn=1;

voidtime0(void)interrupt1using1 

//每隔10ms执行一次此子程序

TH0=0X56;

TL0=0XDC;

temp=ss;

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

当前位置:首页 > PPT模板 > 动物植物

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

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