基于51单片机及DS18B20温度传感器的数字温度计设计 联系客服

发布时间 : 星期六 文章基于51单片机及DS18B20温度传感器的数字温度计设计更新完毕开始阅读

4实物制作及调试

制作好的实物如图4-1所示。

图4-1 数字温度计实物正面图

在做实物时出现了不少问题。比如本来是采用NPN型9013驱动蜂鸣器,但是在实际调试中蜂鸣器驱动不了,经多次试验,在三极管的基极电阻和单片机的接口处接一个1、2kΩ的上拉电阻就能驱动了。但考虑到单片机的I/O口默认状态时为高电平,这样一上电蜂鸣器就会响,所以将NPN型9013换成了PNP型的9012三极管,效果还不错。

5电子综合设计体会

经过将近一个月的设计、焊接、编程、调试,我们终于完成了数字温度计的设计,基本能够达到设计要求,而且还设计了一些其他功能,比可以开启或消除按键音功能,开机动画功能,查看报警上下限温度功能。

此次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我们所学到的知识运用到实践中去。在大学课堂的学习只是给我们灌输专业知识,而我们应把所学的知识使用到我们现实的生活中去。这次的设计不仅使我们将课堂上学到的理论知识和实际使用结合了起来,而且使我们对电子电路、电子元器件、印制电路板等方面的知识有了更进一步的认识,同时在软件编程、焊板调试、相关调试仪器的使用等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机使用系统的开发设计工作打下一定的基础。此次单片机设计也为我们以后进行更复杂的单片机系统设计提供了宝贵的经验。

在本次设计的过程中,我们遇到不少的问题,刚开始焊好的板子下不进去程序,经过一再仔细的检查,才发现是在下载口处出了问题,由于焊盘口比较小,排针插不进去,最后使了很大力气才插进去,插进去后才发现坏了,结果在去排针的时候把焊盘给去下来了,最后只能在旁边将下载口引了出来。还有就是文章中提到的蜂鸣器驱动问题等等。经过此次的硬件制作和调试,锻炼了我们的动手实践能了。本次设计的另一个重点就是软件程序的设计,其中需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论,有些东西是很难理解的,更谈不上掌握。

通过此次的综合设计,我们初步掌握了单片机系统设计的基本原理。充分认识到理论学习和实践相结合的重要性,对于书本上的很多知识,不但要学会,更重要的是会运用到实践中去。在以后的学习中,我们会更加注重实践方面的锻炼,多提高自己的动手实践能力。 参考文献

[1] 谭浩强.C程序设计(第三版).北京:清华大学出版社,2005.7

[2] 余发山,王福忠.单片机原理和使用技术.徐州:中国矿业大学出版社,2008.6 [3] 求是科技.单片机典型模块设计实例导航.北京:人民邮电出版社,2005.5

[4] 求是科技.8051系列单片机C程序设计完全手册.北京:人民邮电出版社,2006.4

[5] 于永,戴佳,刘波.51单片机C语言常用模块和综合系统设计实例精讲(第2版).北京:电子工业出版社,2008.10

附1 源程序代码

/******************************************************************** * 程序名; 基于DS18B20的测温系统

* 功 能: 实时测量温度,超过上下限报警,报警温度可手动调整。K1是用来 * 进入上下限调节模式的,当按一下K1进入上限调节模式,再按一下进入下限 * 调节模式。在正常模式下,按一下K2进入查看上限温度模式,显示1s左右自动 * 退出;按一下K3进入查看下限温度模式,显示1s左右自动退出;按一下K4消除 * 按键音,再按一下启动按键音。在调节上下限温度模式下,K2是实现加1功能, * K1是实现减1功能,K3是用来设定上下限温度正负的。 * 编程者:zicreate * 编程时间:2009/10/2 #include #include

#define uint unsigned int

//将AT89X52.h头文件包含到主程序

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

//将intrins.h头文件包含到主程序(调用其中的_nop_()空操作函数延时) //变量类型宏定义,用uint表示无符号整形(16位)

#define uchar unsigned char //变量类型宏定义,用uchar表示无符号字符型(8位) uchar max=0x00,min=0x00; //max是上限报警温度,min是下限报警温度 bit s=0; 1s左右 bit s1=0;

//s1标志位用于上下限查看时的显示 //将ds18b20.h头文件包含到主程序 //将keyscan.h头文件包含到主程序

void display1(uint z); #include\#include\#include\ void main() {

beer=1;

led=1;

//关闭蜂鸣器

//关闭LED灯

//初始化定时器1(未启动定时器1)

//首次启动DS18B20获取温度(DS18B20上点后自动将EEPROM中的 //主循环

//按键扫面函数 //按键扫面函数

//声明display1()函数

//s是调整上下限温度时温度闪烁的标志位,s=0不显示200ms,s=1显示

//将display.h头文件包含到主程序

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

timer1_init(0);

get_temperature(1); while(1) {

keyscan(); }

keyscan(); alarm(); keyscan();

上下限温度复制到TH和TL寄存器)

get_temperature(0); //获取温度函数 display(temp,temp_d*0.625);//显示函数

//报警函数

//按键扫面函数

}

/******************************************************************** * 程序名; __ds18b20_h__

* 功 能: DS18B20的c51编程头文件 * 编程者:zicreate * 编程时间:2009/10/2

* 说 明:用到的全局变量是:无符号字符型变量temp(测得的温度整数部分),temp_d * (测得的温度小数部分),标志位f(测量温度的标志位‘0’表示“正温度”‘1’表 * 示“负温度”),标志位f_max(上限温度的标志位‘0’表示“正温度”、‘1’表 * 示“负温度”),标志位f_min(下限温度的标志位‘0’表示“正温度”、‘1’表 * 示“负温度”),标志位w(报警标志位‘1’启动报警‘0’关闭报警)。 #ifndef __ds18b20_h__ #define __ds18b20_h__ #define uint unsigned int sbit DQ= P2^3; sbit beer=P1^0; sbit led=P1^1; uchar temp=0; uchar temp_d=0; bit f=0;

bit f_max=0; bit w=0;

//变量类型宏定义,用uint表示无符号整形(16位)

//可位寻址变量定义,用DQ表示P2.3口 //用beer表示P1.0

#define uchar unsigned char //变量类型宏定义,用uchar表示无符号字符型(8位)

//定义头文件

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

//用led表示P1.1 //测量温度的整数部分 //测量温度的小数部

//测量温度的标志位,0’表示“正温度”‘1’表示“负温度”) //上限温度的标志位‘0’表示“正温度”‘1’表示“负温度”)

bit f_min=0; //下限温度的标志位‘0’表示“正温度”、‘1’表示“负温度”)

//报警标志位‘1’启动报警‘0’关闭报警)

/*****************************延时子函数******************************/ void ds18b20_delayus(uint t) //延时几μs { while(t--);}

void ds18b20_delayms(uint t)

//延时1ms左右

{ uint i,j; for(i=t;i>0;i--) for(j=120;j>0;j--);}

/**************************ds18b20初始化函数*************************/ void ds18b20_init() { }

DQ=1; DQ=0; DQ=1; while(DQ); DQ=1;

//拉高数据线

//控制器向DS18B20发低电平脉冲

//控制器拉高总线, //等待DS18B20拉低总线 //拉高数据线,准备数据传输;

// DS18B20初始化

ds18b20_delayus(30);

//延时480μs左右

ds18b20_delayus(20); //延时,等待上拉电阻拉高总线