单片机DS18B20数字温度计设计 - 图文 下载本文

4.4声光报警部分程序设计

uchar tem,a,b; if(flag==1) a=-1; else a=1;

tem=a*(bai*100+shi*10+ge);

if(temp>=high_test_temp||temp

for(a=0;a<200;a++) for(b=0;b<200;b++){} }

图4.4.1 声光报警流程图

4.5报警温度设置部分程序设计

对于各种场合来说,它们所需要的温度范围是不同的,因此设计一个能够改变报警上下限温度的功能很有必要。

本系统采用按键的方式来设置报警上下限温度。具体流程图与程序如下:

图4.5.1 报警吧温度设置流程图

if(high_test_temp_up==0) { delay(); high_test_temp++; }

else if(high_test_temp_down==0)

22

{ delay(); high_test_temp--; }

else if(low_test_temp_up==0) { delay(); low_test_temp++; }

else if(low_test_temp_down==0) { delay(); low_test_temp--; }

第五章 系统测试

1、编译程序,单机Debug按钮。全速运行程序后,观察LCD屏幕可得:

23

此时报警高温度为30℃,报警低温度为10℃。(这是在程序中赋的初值)。 2、用手触摸DS18B20,等到温度大于30℃时,能听到蜂鸣器响,LED灯亮。 3、按动矩阵键盘第一行的四个按键能够分别增加和减小报警上下限。

第六章 设计小结

在这次的单片机课程设计中,我选的题是实时测温,首先我通过查阅相关资料了解本来不熟悉的芯片,一个是DS18B20,还有一个是1602液晶显示屏,并结合上课老师讲的单片机的知识,独立完成了从原理图的绘制到程序的编写调试。而且,在完成了老师任务书上的基本的内容之外,我还考虑到此系统的实际性,加上了不少其他的功能。增强了程序的健壮性,增加了报警信息。另外,我还增加了调节温度上下限的功能,使之实用与不同的场合。我能写出这些程序,不仅是因为我单片机上课的时候认真思考,更是因为我对单片机的开发有着浓厚的兴趣,觉得能真正做出点东西出来才是我们学习的最终目标。

附 录

#include #include

#define uchar unsigned char #define uint unsigned int #define OSC 12000000 //晶振频率 #define BAUDRATE 9600 //波特率

24

sbit dt=P2^0; sbit rw=P2^1; sbit e=P2^2; //1602的三个控制端 sbit dq=P1^0; //DS18B20端口 sbit bj=P1^3; //声光报警控制端 sbit high_test_temp_up=P1^4; //增加高温度报警限 sbit high_test_temp_down=P1^5; //减小高温度报警限 sbit low_test_temp_up=P1^6; //增加低温度报警限 sbit low_test_temp_down=P1^7; //减小低温度报警限 sbit bg=P2^3; //1602背光灯控制端 int i,j; uint temp; //存放读到的16位温度信息 uchar bai,shi,ge,xs,flag; //温度值的各位数值和符号标志位 uchar high_temp,low_temp; //读取DS18B20中温度信息高低字节 uchar high_test_temp=0x1e; //初始高温30度 uchar low_test_temp=0x0a; //初始低温11度

uchar code zdy0[8]={0x10,0x06,0x09,0x08,0x08,0x08,0x09,0x06};//自定义的摄氏度符号 uchar code zdy1[8]={0x00,0x1F,0x01,0x1F,0x10,0x1F,0x01,0x1F}; //自定义汉字 uchar code zdy2[8]={0x00,0x12,0x14,0x18,0x1E,0x18,0x14,0x1A}; uchar code zdy3[8]={0x00,0x04,0x15,0x0E,0x04,0x0A,0x0A,0x11}; uchar code zdy4[8]={0x0E,0x0E,0x0E,0x04,0x0E,0x0A,0x04,0x1F}; uchar code zdy5[8]={0x00,0x04,0x04,0x1F,0x0E,0x0E,0x15,0x15};

uchar code zdy6[8]={0x00,0x04,0x0A,0x11,0x04,0x08,0x12,0x1F};//自定义汉字 void delay5ms(); void delay_1602(); //1602的延时函数 void fbusy(); //1602检查忙函数 void init_1602(); //1602初始化函数 void wc51r(uchar j); //1602写命令函数 void wc51ddr(uchar j); //1602写数据函数 void writezdt(); //自定义符号写入1602中 void display0(); //温度信息显示函数 void display1(); void display2();

void delay_DS(uchar z); //DS18B20的延时函数 void init_DS(); //DS18B20初始化函数 uchar reset_DS(); //DS18B20的复位函数 void write_byte(uchar dat); //DS18B20的写函数 uchar read_byte(); //DS18B20的读函数 void read_temp(); //读DS18B20温度函数 void convert_temp(); //温度转换函数 void test_temp(); //温度检测函数

void test_aj(); //检测有没有按键按下想要修改温度报警限

25