您现在的位置:首页 > >

基于.51单片机的温度控制系统设计_图文

发布时间:

word

资料下载可编辑

基于单片机的温度控制系统设计

1.设计要求
要求设计一个温度测量系统,在超过限制值的时候能进行声光报警。具体设 计要求如下: ①数码管或液晶显示屏显示室内当前的温度; ②在不超过最高温度的情况下,能够通过按键设置想要的温度并显示;设有四个 按键,分别是设置键、加 1 键、减 1 键和启动/复位键; ③DS18B20 温度采集; ④超过设置值的±5℃时发出超限报警,采用声光报警,上限报警用红灯指示,下 限报警用黄灯指示,正常用绿灯指示。

2.方案论证
根据设计要求,本次设计是基于单片机的课程设计,由于实现功能比较简单, 我们学习中接触到的 51 系列单片机完全可以实现上述功能,因此可以选用 AT89C51 单片机。温度采集直接可以用设计要求中所要求的 DS18B20。报警和 指示模块中,可以选用 3 种不同颜色的 LED 灯作为指示灯,报警鸣笛采用蜂鸣 器。显示模块有两种方案可供选择。
方案一:使用 LED 数码管显示采集温度和设定温度; 方案二:使用 LCD 液晶显示屏来显示采集温度和设定温度。 LED 数码管结构简单,使用方便,但在使用时,若用动态显示则需要不断 更改位选和段选信号,且显示时数码管不断闪动,使人眼容易疲劳;若采用静态 显示则又需要更多硬件支持。LCD 显示屏可识别性较好,背光亮度可调,而且 比 LED 数码管显示更多字符,但是编程要求比 LED 数码管要高。综合考虑之后, 我选用了 LCD 显示屏作为温度显示器件,由于显示字符多,在进行上下限警戒 值设定时同样可以采集并显示当前温度,可以直观的看到实际温度与警戒温度的 对比。LCD 显示模块可以选用 RT1602C。

专业技术资料

word

资料下载可编辑

3.硬件设计
根据设计要求,硬件系统主要包含 6 个部分,即单片机时钟电路、复位电路、 键盘接口模块、温度采集模块、LCD 显示模块、报警与指示模块。其相互联系 如下图 1 所示:

单片机时钟电路 复位电路
键盘接口模块 温度采集模块

单片机

LCD 显示模块 报警与指示模块

图 1 硬件电路设计框图

3.1 单片机时钟电路

形成单片机时钟信号的方式有内部

时钟方式和外部时钟方式。本次设计采用

内部时钟方式,如图 2 所示。

单片机内部有一个用于构成振荡器

的高增益反相放大器,引脚 XTAL1 和

XTAL2 分别为此放大器的输入端和输出

端,其频率范围为 1.2~12MHz,经由片 外晶体振荡器或陶瓷振荡器与两个匹配

图 2 单片机内部时钟方式电路

电容一起形成了一个自激振荡电路,为单片机提供时钟源。

3.2 复位电路

复位是单片机的初始化操作,其作用

是使 CPU 和系统中的其他部件都处于一

个确定的初始状态,并从这个状态开始工

作,以防止电源系统不稳定造成 CPU 工

作不正常。在系统中,有时会出现工作不

正常的情况,为了从异常状态中恢复,同

图 3 单片机按键复位电路

专业技术资料

word

资料下载可编辑

时也为了系统调试方便,需要设计一个复位电路。

单片机的复位电路有上电复位和按键复位两种形式,因为本次设计要求需要

有启动/复位键,因此本次设计采用按键复位,如图 3。复位电路主要完成系统的

上电复位和系统在运行时用户的按键复位功能。

3.3 键盘接口模块

本次设计需要的按键有 4 个,除去

一个复位按键外,还有 3 个功能按键,

因此选择独立式键盘。如图 4,将键盘

直接与单片机 P1 口的 P1.0、P1.1、P1.2

相连。3 个键设计思路如下:当按下 S1

键时,系统进入上下限警戒值调整状

态;当第一次按下 S1 键时,进行上限 警戒值设定,当第二次按下 S1 键时,

图 4 键盘接口模块

进行下限警戒值设定,当第三次按下 S1 键时,回到正常工作状态。在警戒值调

整状态下,按下 S2 键,上下限警戒值加 1,按下 S3 键,上下限警戒值减 1,正

常工作状态下,按下 S2 和 S3 键无作用。

3.4 温度采集模块

本次设计中的温度传感器使用的是 DALLAS 公司的单总线数字温度传感器

DS18B20,这是一种常用的温度传感器,具有体积小、硬件开销低、抗干扰能力

强、精度高的特点。

DS18B20 采用独特的一线接口,具有只需要一条口线通信多点的能力,简

化了分布式温度传感应用,无需外部元件。可用数据总线供电,电压范围为 3.0 V

至 5.5V,测量温度的范围为-55℃至+125 ℃,在-10℃至+85℃范围内精度为

±0.5℃。

温度传感器可编程的分辨率为 9~12 位,温度转换为 12 位数字格式最大值为

750 毫秒,用户可定义的非易失性温度报警设置,应用范围包括恒温控制、工业

系统、消费电子产品温度计、或任何热敏感系统。由于 DS18B20 是一条口线通

信,所以中央微处理器与 DS18B20 只有一个一条口线连接。因为每一个 DS18B20

的包含一个独特的序号,多个 DS18B20 可以同时存在于一条总线,这使得温度

专业技术资料

word

资料下载可编辑

传感器放置在许多不同的地方。它的用途很多,包括空调环境控制,感测建筑物 内温设备或机器,并进行过程监测和控制。

图 5 DS18B20 封装及引脚 DS18B20 的核心功能是它的直接读数字的温度传感器。温度传感器的精度 为用户可编程的 9、10、11 或 12 位,分别以 0.5℃,0.25℃,0.125℃和 0.0625℃ 增量递增。在上电状态下默认的精度为 12 位。DS18B20 启动后保持低功耗等待 状态;当需要执行温度测量和 AD 转换时,总线控制器必须发出[44h]命令。在 那之后,产生的温度数据以两个字节的形式被存储到高速暂存器的温度寄存器 中,DS18B20 继续保持等待状态。当 DS18B20 由外部电源供电时,总线控制器 在温度转换指令之后发起“读时序”,DS18B20 正在温度转换中返回 0,转换结 束返回 1。如果 DS18B20 由寄生电源供电,除非在进入温度转换时总线被一个 强上拉拉高,否则将不会由返回值。 在硬件上,DS18B20 与单片机的连接有两种方法:一种是 VDD 接外部电源, GND 接地,DQ 与单片机的 I/O 口相连;另一种是用寄生电源供电,此时,VDD、 GND 接地,DQ 接单片机的 I/O 口。无论 是接外部电源还是用内部寄生电源,I/O 口线要接 5kΩ 左右的上拉电阻。 本次设计中,采用外部电源方式,其 连接方式如图 6 所示。单总线 DQ 端接单 片机的 P1.7 口,DQ 端接一个 4.7kΩ 的上 拉电阻,这样单总线 DQ 在闲置状态时为 高电平。
图 6 DS18B20 外部电源连接方式
专业技术资料

word

资料下载可编辑

3.5 LCD 显示模块

在本次设计中,使用 RT1602C 字符型液晶显示模块(LCM)来设计当前温度

和上下限警戒值的显示电路。

RT1602C 字符型液晶显示模块是 16 字×2 行的采用 5×7 点阵图形来显示字

符的液晶显示器,采用标准的 16 脚接口,其引脚定义如图 7 所示。

引脚号 引脚名

说明

引脚号 引脚名

说明

1 GND/Vss

电源地

7

D0

2

Vdd

+5V 电源

8

D1

3

VL

液晶显示偏压信号

9

D2

4

RS 数据/命令控制,H/L 10

D3

8 位双向数据线

5

R/W

读/写控制,H/L

11

D4

6

E

使能端

12

D5

15

BLA

背光源正极

13

D6

16

BLK

背光源负极

14

D7

图 7 RT1602C 的引脚定义

RT1602C 的内部结构可以分为 3 个部分:LCD 控制器、LCD 驱动器、LCD

显示器,其中 LCD 控制器采用的是 HD44780。

RT1602C 与单片机的连线如图 8 所示。

图 8 RT1602C 与单片机连线
专业技术资料

word

资料下载可编辑

LCM 的数据总线与单片机的 P0 口通过一个上拉电阻排相连,LCM 的三条

控制线 RS、RW、EN 分别与单片机的 I/O 口 P2.0、P2.1、P2.2 相连,第 1、2 引

脚分别与地、电源相连,第 3 引脚使用一个 10kΩ 的可调电阻对显示屏的明亮进

行调整。

3.6 报警与指示模块

在本次设计中,采用

LED 发光二极管作为系统指

示灯,采用蜂鸣器作为报警

鸣笛。当温度高于上限警戒

值时,点亮红色发光二极管,

蜂鸣器发出响声;当温度低

于下限警戒值时,点亮黄色

发光二极管,蜂鸣器发出响

声;温度在正常范围内时,

图 9 报警与指示模块

点亮黄色发光二极管。整个报警与指示电路如图 9 所示,其中绿、红、黄色指示

灯分别接单片机 P2.0、P2.1、P2.2 口,电平拉低时点亮 LED,蜂鸣器电路接单

片机的 P2.7 口,电平拉高时蜂鸣器响。

至此便完成了整个硬件电路的设计工作,整个系统的原理图见附录二,系统

I/O 分配表如下:

I/O 口

功能说明

I/O 口

功能说明

P0.0~P0.7

LCM 数据口

P2.1

LCM 读/写控制

P1.0~P1.3

键盘输入

P2.2

LCM 使能

P1.7

DS18B20 温度采集

P2.4~P2.6

LED 信号输出

P2.0

LCM 数据/命令控制

P2.7

报警信号输出

专业技术资料

word

资料下载可编辑

4.软件设计
单片机应用系统的设计中,软件设计占有重要的位置。在本次设计中,根据 功能要求,可以把系统程序划分为 5 个模块,即主程序模块、显示模块、温度测 量模块、键盘扫描模块、其它子程序模块,如图 10 所示。
主程序模块



















它 子





















图 10 软件设计框图

4.1 主程序设计

主程序的内容包括单片机初始化、相关部件初始化和一些其它子程序的调用

等。主程序清单如下,程序流程图如图 11 所示。 /************主程序************/

开始

void main(void) {

初始化单片机

P1=0xff; P2|=0x70; P2&=0x7f;

//初始化 P1 口以便读入 初始化温度传感器 初始化显示模块

Temp_set1=90; Temp_set2=10;

//上限报警温度初值 90 //下限报警温度初值 10

键盘扫描

Delay(500); init_LCD();

//延时 500ms 启动 //LCD 初始化

读取温度

init_18B20(); Display_str(0,0,str2); Display_str(0,1,str2);

//DS18B20 初始化 //开机界面 //开机界面

显示字形转换 显示

Delay(2000);

图 11 主程序流程图

专业技术资料

word

资料下载可编辑

Display_str(0,0,str0);

Display_str(0,1,str1);

while(1)

{

Key_scan();

//扫描键盘

Read_temp();

//读取温度

Change();

Display();

//显示

Alarm();

//指示灯与报警程序

Delay(1000);

}

}

4.2 显示模块

显示程序主要完成的功能是模式、上下限警戒值和测量温度值的显示,模块

中包含 LCD 初始化、显示单个字符子函数、显示一个字符串子函数。程序流程

图如图 12 所示,LCD 初始化程序如下,其它子函数程序详见附录一。

/************LCD 初始化************/ void init_LCD(void)

开始

{ P0=0; Delay(15);

定位显示位置 写显示命令

LCD_Command(0x38,0); Delay(5);

写显示字符

LCD_Command(0x38,0); Delay(5); LCD_Command(0x38,0);

结束显示 图 12 显示程序流程图

Delay(5);

LCD_Command(0x38,1); //8 位数据传送,2 行显示,5*7 字形

LCD_Command(0x08,1); //关闭显示

专业技术资料

word

资料下载可编辑

LCD_Command(0x01,1); //清屏

LCD_Command(0x06,1); //显示光标右移设置

LCD_Command(0x0c,1); //显示屏打开,光标不显示不闪烁

}

4.3 温度测量模块

温度测量程序主要功能是读出数字温度传感器的温度值。要正确地读出温度

值必须严格遵守单总线器件的命令序列,否则单总线器件不会响应主机。单总线

器件的命令序列如图 13 所示。

温度测量模块程序流程图如图 14 所示,DS18B20 初始化程序如下,其它子

程序详见附录一。

/************DS18B20 初始化************/

void init_18B20(void)

{

uchar x=0;

DQ=1;

//DQ 复位

Delay_us(4); //延时

开始

DQ=0;

//将 DQ 拉低

Delay_us(250); //精确延时大于 480us

DQ=1;

//拉高总线

初始化 DS18B20 读 DS18B20 序列号

Delay_us(40);

x=DQ; Delay_us(20); }

开始

DS18B20

N

存在?

Y

初始化

发跳过 ROM 指令

发 ROM 指令 发功能指令

温度转换 读取温度

结束 图专业13技术单资料总线命令序列

返回 图 14 温度测量程序流程图

word

资料下载可编辑

4.4 键盘扫描模块

本次设计中使用了 4 个按键,除了 1 个复位键还有 3 个功能键,具体功能前

面已介绍。键盘扫描程序如下,其它子程序详见附录一,相关流程图如图 15 所

示。

/************键盘扫描************/

void Key_scan(void)

{

uchar temp;

P1=0xff;

if(P1!=0xff)

{

Delay(20); //延时消抖 if(P1!=0xff)

开始

{

初始化 DS18B20

temp=P1;

switch(temp) {
case 0xfe:Key_set();break; //P1.0 按下,功能选择

有键按下?

N

Y 延时去抖动

case 0xfd:Key_inc();break; //P1.1 按下,数字加一
case 0xfb:Key_dec();break; //P1.2 按下,数字减一

有键按下?

N

Y 读取键值

default:break; }

执行键功能程序

}

}

返回

}

图 15 键盘扫描程序流程图

专业技术资料

word

资料下载可编辑

4.5 其它子程序 程序中使用的其它子程序,包括延时子程序、显示字符转换子程序等,具体
详见附录一。

5.仿真分析

在本次的设计中,使用了 Proteus 仿真软件进行了功能测试,具体仿真步骤 及分析如下。 (1)按照原理图,从 Proteus 元件库中找出对应元件,搭建硬件仿真电路,将程序 烧写到单片机中,仿真图见附录三。 (2)点击运行按钮开始仿真,初始上下限值为 90℃和 10℃,当前温度为 25℃,当 前模式为 N 正常工作,绿灯亮,蜂鸣器不响,如图 16。

图 16 正常模式下仿真图 (3)按下 S1 键,进入上限警戒值设置模式 H,此时按 S2、S3 键可以进行上限值 设定,同时温度正常显示,设置上限值 80℃,如图 17。

图 17 上限值设定仿真图
专业技术资料

word

资料下载可编辑

(4)再次按下 S1 键,进入下限警戒值设置模式 L,此时按 S2、S3 键可以进行下 限值设定,同时温度正常显示,设置下限值 20℃,如图 18。

图 18 下限值设定仿真图 (5)再次按下 S1 键,返回正常模式 N,调节 DS18B20 温度,测量温度随之改变, 降低温度,超过下限值 5℃以下时,黄灯亮,蜂鸣器报警,如图 19。

图 19 下限报警仿真图 (6)升高温度,超过上限值 5℃以上时,黄灯亮,蜂鸣器报警,如图 20。

专业技术资料

图 20 上限报警仿真图

word

资料下载可编辑

(7)按下 S4 键,单片机复位。 在本次仿真中,可以看出,本次设计的硬件电路和软件程序均能成功仿真出
来,设计要求的各种功能均已达到。

专业技术资料

word

资料下载可编辑

6.总结
本次课程设计为期一周,到此已全部结束。回想一周中的设计过程,我深深 感觉收获良多。由于从前只是在理论上学习了单片机以及各种其它知识,即使是 实验也只是按照实验指导书进行操作,并没有实际的独立设计一个系统,因此在 刚开始接触本次课程设计时,有一点无从下手的感觉。后来通过查阅相关资料, 渐渐开始了解课程设计的一般过程,开始明白一些元器件的相关作用与编程实现 方法,并在此期间通过不断深入的学习和锻炼,开始渐渐能熟练运用和熟练编程 起来。
通过本次计算机控制技术的课程设计,我更深层次的把理论知识和实际设计 结合在一起,锻炼了我的综合运用所学的专业基础知识和解决实际工程问题的能 力。同时也提升了我查阅文献资料、设计手册、设计规范以及电脑制图等其他知 识能力水平。对各种系统的适用条件,各种设备的选用标准,各种管道的安装方 式,我都是随着设计的不断深入而逐渐熟悉并学会应用的。并且,通过对整体的 掌控,对局部的取舍,对细节的斟酌处理,以及绘图的技巧都使我在设计领域的 能力得到了锻炼,得到了较丰富经验。 最后,通过这次的课程设计,我也深刻 地认识到,只有将书本与具体的实践相结合,才会有真正的收获,才能巩固自己 的所学,认识到自己的不足,同时我们也要有一种积极学习的态度,时代在进步 我们也要跟着时代前进,要不断学习,不断创新,用自己的知识与行动来证明自 己的价值。
本次课程设计以单片机为核心,介绍了用 DS18B20 温度传感器进行温度采 集,并将其传输给 AT89C51 单片机进行处理再送到 LCD 显示屏显示。在此期间 可以通过按键进行上下限警戒值设置,通过 LED 和蜂鸣器进行指示和报警。本 文是采用模块化的方式进行叙述,对各模块的设计进行了比较详细地阐述,并着 重分析硬件搭建过程和系统软件的设计过程,使用单片机 C 语言进行程序没计。 本次设计的基于 DS18B20 的温度测量系统是一个分布式的温度测量系统,它可 以远程对温度实现测量和监控,广泛应用于电力工业、煤矿、森林、火灾、高层 建筑等场合。
本设计应用性比较强,可以应用在仓库温度、大棚温度、机房温度、水池等 的监控。当然,本次设计还存在一些不足,例如在本次设计中,由于时间较短,

专业技术资料

word

资料下载可编辑

警戒值只是在 1~99℃之间,没有能够扩展到负温度和 100℃以上;在本次设计中 只是用了 4 个独立按键,实现简单的上下限警戒值设定,操作较麻烦,如果能够 设计出多按键的矩阵式键盘,则能够对温度进行很方便的设定。此外如果把本设 计方案扩展为多点温度控制,加上上位机,则可以实现远程温度监控系统,将具 有更大的应用价值。

专业技术资料

word

资料下载可编辑

7.参考文献
[1] 潘新民,王燕芳. 微型计算机控制技术 [M]. 北京:电子工业出版社,2014 [2] 王迎旭. 单片机原理与应用 [M]. 北京:机械工业出版社,2013 [3] 康华光. 电子技术基础 [M]. 北京:高等教育出版社,2013 [4] 周正华,唐宁 RT1602C 与 FPGA 接口技术 [J]. 中国科技信息,2008(10) [5] 廖琪梅,韩彬等. 基于 DS18B20 的温度测量仪 [J]. 国外电子元器件,2008(2)

专业技术资料

word
附录一:程序清单
#include<reg51.h> #include<intrins.h> #include<absacc.h> #define uchar unsigned char #define uint unsigned int #define BUSY 0x80

资料下载可编辑

void Delay(uint); void init_LCD(void); void LCD_Command(uchar,uchar); void LCD_Data(uchar); void ReadyLCD(void); void Display_char(uchar,uchar,uchar); void Display_str(uchar,uchar,uchar code *Data); void Change(void); void Display(void); void init_18B20(void); uchar Read_18B20(void); void Write_18B20(uchar); void Read_temp(void); void Delay_us(uchar i); void Key_scan(void); void Key_set(void); void Key_inc(void); void Key_dec(void); void Alarm(void);

sbit LCD_RS=P2^0;
专业技术资料

word
sbit LCD_RW=P2^1; sbit LCD_EN=P2^2; sbit DQ=P1^7; sbit Normal=P2^4; sbit Alarm_H=P2^5; sbit Alarm_L=P2^6; sbit Alarm_BEEP=P2^7;

资料下载可编辑

uchar Set_flag=0; uchar Temp_mea,Temp_set1,Temp_set2; uchar Temp_high_1,Temp_high_2; uchar Temp_low_1,Temp_low_2; uchar Temp_true_1,Temp_true_2;

extern uchar code str0[]={"High: C Low: C"}; extern uchar code str1[]={"Mode: Deg: C"}; extern uchar code str2[]={" Hellow!! "}; extern uchar code str3[]={"0123456789"}; extern uchar code mode[]={"NHL"};

/********主程序********/

void main(void)

{

P1=0xff;

P2|=0x70;

P2&=0x7f;

Temp_set1=90;

//上限报警温度初值 90

Temp_set2=10;

//下限报警温度初值 10

Delay(500);

//延时 500ms 启动

专业技术资料

word

资料下载可编辑

init_LCD();

//LCD 初始化

init_18B20();

//DS18B20 初始化

Display_str(0,0,str2);

//开机界面

Display_str(0,1,str2);

//开机界面

Delay(2000);

Display_str(0,0,str0);

Display_str(0,1,str1);

while(1)

{

Key_scan();

//扫描键盘

Read_temp();

//读取温度

Change();

Display();

//显示

Alarm();

//指示灯与报警程序

Delay(1000);

}

}

/********延时 kms********/ void Delay(uint k) {
uint i,j; for(i=0;i<k;i++) {
for(j=0;j<60;j++) {
; } } }
专业技术资料

word

资料下载可编辑

/********显示模块********/ /********LCD 初始化********/ void init_LCD(void) {
P0=0; Delay(15); LCD_Command(0x38,0); Delay(5); LCD_Command(0x38,0); Delay(5); LCD_Command(0x38,0); Delay(5); LCD_Command(0x38,1); //8 位数据传送,2 行显示,5*7 字形 LCD_Command(0x08,1); //关闭显示 LCD_Command(0x01,1); //清屏 LCD_Command(0x06,1); //显示光标右移设置 LCD_Command(0x0c,1); //显示屏打开,光标不显示不闪烁 }

/********写指令数据到 LCD********/

void LCD_Command(uchar LC,uchar BC)

{

if(BC) ReadyLCD();

P0=LC;

LCD_RS=0; LCD_RW=0;

//选中指令寄存器 //写模式

LCD_EN=1;

_nop_();

_nop_();

_nop_();

专业技术资料

LCD_EN=0; }

word

资料下载可编辑

/********写显示数据到 LCD********/

void LCD_Data(uchar LD)

{

ReadyLCD();

P0=LD;

LCD_RS=1;

//选中数据寄存器

LCD_RW=0;

//写模式

LCD_EN=1;

_nop_();

_nop_();

_nop_();

LCD_EN=0;

}

/********检测 LCD 忙状态********/ void ReadyLCD(void) {
P0=0xff; LCD_EN=1; LCD_RS=0; LCD_RW=1; _nop_(); while(P0&BUSY) {
LCD_EN=0; _nop_(); _nop_();
专业技术资料

word
LCD_EN=1; _nop_(); _nop_(); } LCD_EN=0; }

资料下载可编辑

/********显示一个字符********/ void Display_char(uchar X,uchar Y,uchar Data) {
Y&=0x01; X&=0x0f; if(Y) X|=0x40; X|=0x80; LCD_Command(X,0); LCD_Data(Data); }

/********显示一串字符********/ void Display_str(uchar X,uchar Y,uchar code *Data) {
uchar List=0; Y&=0x01; X&=0x0f; while(X<16) {
Display_char(X,Y,Data[List]); List++; X++; }
专业技术资料

word

资料下载可编辑

}

/********显示字型转换********/ void Change(void) {
Temp_high_1=Temp_set1/10; Temp_high_2=Temp_set1%10; Temp_low_1=Temp_set2/10; Temp_low_2=Temp_set2%10; Temp_true_1=Temp_mea/10; Temp_true_2=Temp_mea%10; }

/********显示子程序********/ void Display(void) {
Display_char(5,0,str3[Temp_high_1]); Display_char(6,0,str3[Temp_high_2]); Display_char(13,0,str3[Temp_low_1]); Display_char(14,0,str3[Temp_low_2]); Display_char(5,1,mode[Set_flag]); Display_char(13,1,str3[Temp_true_1]); Display_char(14,1,str3[Temp_true_2]); }

/********温度测量模块********/ /********DS18B20 初始化********/ void init_18B20(void) {
uchar x=0;
专业技术资料

DQ=1; Delay_us(4); DQ=0; Delay_us(250); DQ=1; Delay_us(40); x=DQ; Delay_us(20); }

word

资料下载可编辑

//DQ 复位 //延时 //将 DQ 拉低 //精确延时大于 480us //拉高总线

/********从 DS18B20 读取一个字节数据********/ uchar Read_18B20(void) {
uchar i=0; uchar dat=0; for(i=8;i>0;i--) {
DQ=0; _nop_(); dat>>=1; DQ=1; Delay_us(1); if(DQ) dat|=0x80; Delay_us(10); } return(dat); }

专业技术资料

word

资料下载可编辑

/********向 DS18B20 写入一个字节数据********/ void Write_18B20(uchar dat) {
uchar i=0; for(i=8;i>0;i--) {
DQ=0; _nop_(); DQ=dat&0x01; Delay_us(10); DQ=1; dat>>=1; Delay_us(10); } }

/********从 DS18B20 读取温度********/ void Read_temp(void) {
uchar a=0; uchar b=0; uchar t=0; init_18B20(); Write_18B20(0xcc); Write_18B20(0x44); init_18B20(); Write_18B20(0xcc); Write_18B20(0xbe); a=Read_18B20(); b=Read_18B20();
专业技术资料

word
t=b; t<<=8; t=t|a; Temp_mea=t*(0.0625); }

资料下载可编辑

/********精确延时********/ void Delay_us(uchar i) {
while(--i); }

/********键盘扫描程序********/ void Key_scan(void) {
uchar temp; P1=0xff; if(P1!=0xff) {
Delay(20); //延时消抖 if(P1!=0xff) {
temp=P1; switch(temp) {
case 0xfe:Key_set();break; //P1.0 按下,功能选择 case 0xfd:Key_inc();break; //P1.1 按下,数字加一 case 0xfb:Key_dec();break; //P1.2 按下,数字减一 default:break; }
专业技术资料

} } }

word

资料下载可编辑

/********工作模式子程序********/ void Key_set(void) {
Set_flag++; if(Set_flag>=3) //Set_flag=1,设定上限值
Set_flag=0; //Set_flag=2,设定下限值 }

/********按键加一子程序********/ void Key_inc(void) {
switch(Set_flag) {
case 1:Temp_set1++; if(Temp_set1>=99) Temp_set1=99;break;
case 2:Temp_set2++; if(Temp_set2>=Temp_set1) Temp_set2=Temp_set1;break;
default:break; } }

/********按键减一子程序********/ void Key_dec(void) {
//Delay(150); switch(Set_flag)
专业技术资料

word

资料下载可编辑

{ case 1:Temp_set1--; if(Temp_set1<=Temp_set2) Temp_set1=Temp_set2;break; case 2:Temp_set2--; if(Temp_set2<=1) Temp_set2=1;break; default:break;
} }

/********报警和指示程序********/ void Alarm(void) {
uchar High; uchar Low; High=Temp_set1+5; Low=Temp_set2-5; if(Temp_mea>High) {
Normal=1; Alarm_H=0; Alarm_L=1; Alarm_BEEP=1; } else {if(Temp_mea<Low) {
Normal=1; Alarm_H=1; Alarm_L=0; Alarm_BEEP=1;
专业技术资料

word
} else {
Normal=0; Alarm_H=1; Alarm_L=1; Alarm_BEEP=0; } } }

资料下载可编辑

专业技术资料

专业技术资料

VCC GND GND Bell GND 22pF22pF1k1k1k C1C2R7R8R9 XTAL S4 AT89C51 200 22pF 21 R2LS GNDP20 1k 2021RS X1P21 1k 1922RW X12N3904 GreenRedYellow R3 X2P22 1823EN C3Q? R10 P23 24 P37P24 1725VCCRST P36P25 1626 P35P26VCC 1527P2.7 P34P27 1428P2.7 P33 13 P32PSEN 1229 P31ALE 1130 GND P30EAVCC 1031 RES9D18B20 REST 9RST P07GND 3293 P17P06I/O 83382DQ P16P05VCC 73471 4.7k P15P04 6356U2 R1 P14P03 5365 P13P02 4374 S3 P12P01 3383VCC P11P00 2392 P10VCC 1401R610kRS S2 U1RW VCC R5VCCEN GND R410k S1 GNDVCC 1111111 1234567890123456 GND GVCCVRREDDDDDDDDBB SWNLL NL01234567 +- D LCD1602 LCD1602

word
附录二:硬件设计原理图

资料下载可编辑

word
附录三:程序仿真图

资料下载可编辑

专业技术资料



热文推荐
猜你喜欢
友情链接: 简历 面试求职范文 职业规划 自我管理 社交礼仪 76242百科