您好,欢迎来到99网。
搜索
您的当前位置:首页2021年度基于水温控制系统设计

2021年度基于水温控制系统设计

来源:99网



水温控制课程总结

题目:基于STC90C516水温控制系统设计

学院: 电子工程学院
专业: 电子信息工程
年级:
指导老师: 廖志贤
成员: 卫丽业 12701008
白雪英 12701007
俞阳阳 12701009
李志鹏 12701058

05



摘 要

本设计采取主控芯片是STC90C516单片机,数字温度传感器DS18B20。本设计用数字传感器DS18B20测量温度,测量精度高,传感器体积小,使用方便。所以此次设计数字温度计在工业、 农业、
日常生活中全部有广泛应用。

单片机技术已经广泛应用社会生活各个领域,已经成为一个很实用技术。

51单片机是最常见一个单片机,而且在高校中全部以51单片机教材为蓝本,这使得51单片机成为初学单片机技术人员首选。

此次设计采取STC90C516是一个flash型单片机,能够直接在线编程,向单片机中写程序变得愈加轻易。

此次设计数字温度计采取是DS18B20数字温度传感器,
DS18B20是一个可组网高精度数字式温度传感器,因为其含有单总线独特优点,能够使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠。

本设计依据设计要求,首先设计了硬件电路,
然后绘制软件步骤图及编写程序。本设计属于一个多功效温度计,温度测量范围是-55℃125℃。温度值分辨率能够被用户设定为9-12,能够设置上下限报警温度,当温度不在设定范围内时,
就会开启报警程序报警。

本设计显示模块是用四位一体数码管动态扫描显示实现。



在显示实时测量温度模式下还能够经过查询按键查看设定上下限报警温度。

关键词:单片机、数字温度计、 DS18B20STC90C516

目录
1.系统总体方案及硬件设计……………………………………3

1.1设计要求………………………………………………………3

1.2各模块选择和论证………………………………………………3

2.系统硬件设计和实现……………………………………6

2.1系统总体设计框图………………………………………………6

2.2系统硬件概述……………………………………………………6

2.3关键单元电路设计……………………………………………7

3.软件设计……………………………………………………14



3.1DS18B20程序设计………………………………………………14

3.2显示程序设计……………………………………………………18

3.3按键程序设计……………………………………………………19

4.系统测试……………………………………………………20

4.1硬件测试…………………………………………………………20

4.2软件测试…………………………………………………………20

4.3测试结果结论……………………………………………………20

5.设计体会………………………………………………………21

参考文件…………………………………………………………22

附录1:原理图和实物图………………………………………23

附录2:程序……………………………………………………29



1.系统总体方案及硬件设计1.1设计要求:

(1)基础要求

含有实时获取水温功效;

能够自动判定实际温度是否达成限值,并自动报警控制继电器;

(2 ) 创新要求

用户能够经过按键依据自己情况设置限值并保留起来;

1.2各模块选择和论证

1.2.1控制模块

本设计采取STC90C516芯片作为硬件关键,该芯片采取FlashROM, 内部含有8KBROM存放空间,相对于本设计而言程序存放空间完全够用。

C52

INTEL

MCS-51

,

它采取ATMEL企业可靠CMOS工艺技术制造高性能8位单片机,属于标准MCS-51HCMOS产品。它结合了CMOS高速和高密度技术及CMOS低功耗特征,它基于标准MCS-51单片机体系结构和指令系统,属于C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多功效,适合于类似马达控制等应用场所。C52内置8位处理单元、

512

RAM

8k片内程序存放器(ROM32个双向输入/输出(I/O)口、316位定时/计数器和5个两级中止结构,一个全双工串行通信口,片内时钟振荡电路。另外,C52还可工作于低功耗模式,可经过两种软件选择空闲和掉电模式。在空闲模式下冻结CPURAM定时器、



串行口和中止系统维持其功效。掉电模式下,保留RAM数据,时钟振荡停止,

STC90C516PDIP(40pin)PLCC(44pin)两种封装形式。

1.2.2.显示模块选择和论证

方案一:

采取点阵式数码管显示,点阵式数码管是由八行八列发光二极管组成,

对于显示文字比较适宜,如采取在显示数字显得太浪费,成本较高,

所以不采取该方案。

方案二:

采取LED数码管动态扫描显示,LED数码管价格适中,

而却对于显示数字比较适宜,控制方法简单,

电路只需添加一个三极管驱动电路就能够实现显示。

方案三:

采取LCD1602液晶显示器,液晶显示功效强大,

能够显示2*16个字母或数字或自定义字符,价格也比较合理,

需要接口只需要9根就能够完成。成本相对比较高,

对于本设计显示内容不多采取该方案显得有点大材小用。

所以综合上述最终决定采取数码管动态扫描方法作为显示

1.2.3.温度传感器模块选择和论证

方案一:



使用热敏电阻作为传感器,用热敏电阻和一个对应阻值电阻相串联分压,利用热敏电阻阻值随温度改变而改变特征,采集这两个电阻改变分压值,并进行A/D转换。。 此设计方案需用A/D转换电路,增加硬件成本而且热敏电阻感温特征曲线并不是严格线性,会产生较大测量误差。

方案二:

采取模拟温度传感器AD590,该传感器输出电流会随温度改变而改变,从而需要设计电路转换成电压改变,进而经过A/D转换后接到单片机中,

,

,

而却在电流电压转换和A/D转换中会产生误差。

方案三:

DS18B20,

这类传感器为数字式传感器而且仅需要一条数据线进行数据传输,易于和单片机连接,能够去除A/D模块,降低硬件成本,简化系统电路。另外,数字式温度传感器还含有测量精度高、测量范围广等优点。

所以最终我们采取数字防水型DS18B20作为温度采集芯片。

1.2.4编程语言选择和论证

MCS51

,

其较为常见编程语言有C和汇编语言。

C语言是一个结构化编程语言,可产生压缩代码。C语言在硬件结构上仅要求对单片机存放器等硬件结构有初步了解,寄存器分配,不一样存放器寻址及数据类型等细节可由编译器管理。



C

,

基础上不做修改就能够在不一样种类单片机之间相互移植。程序可划分为不一样函数,结构规范,可读性强。C语言提供库包含很多标准子程序,含有很强数据处理能力。C语言作为一个方便、轻易掌握语言得到了广泛应用,

汇编语言一样在单片机编程中得到了广泛应用,其含有简单实用,控制灵活,实时性强,程序效率高等特点。汇编语言有着极强硬件控制能力,用其它高级语言所无法控制软硬件细节,在汇编语言中全部能够实现,不过编程复杂。综合考虑,软件设计语言选择C语言。

1.2.5调整模块介绍

调整模块是由四个按键接地后直接接单片机I/O口完成。当按键没有按下时单片机管脚相当于悬空,默认下为高电平,当按键按下时相当于把单片机管脚直接接地,此时为低电平。程序设计为低电平触发

1.2.5继电器模块介绍

继电器模块是由由一个NPN型三极管8550驱动。

当输入低电平时三极管导通,继电器吸合,从而控制外围器件。

1.2.6报警模块介绍

报警模块是由一个NPN型三极管8550驱动5V蜂鸣器,
和一个加一限流电阻发光二极管组成。报警时蜂鸣器间歇性报警,发光二极管闪烁。

2.系统硬件设计和实现



2.1系统总体设计框图

因为DS18B20数字温度传感器含有单总线独特优点,能够使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠,所以在该设计中采取DS18B20数字温度传感器测量温度。

温度计电路设计总体设计框图图2-1所表示,控制器采取单片机STC90C516,温度传感器采取DS18B20,显示采取4LED数码管,报警采取蜂鸣器、LED灯实现,按键用来设定报警上下限温度并将设置好值保留在STC90C516EEPROM中(含有掉电保护功效)。

DS18B20温度

STC90C516

数码管显示


采集

主控芯片

蜂鸣器报警

按键调整限值

LED灯提醒

2-1温度计电路总体设计框图

2.2系统硬件概述
本系统所设计数字温度计采取是DS18B20数字温度传感器测温,DS18B20直接输出就是数字信号,和传统温度计相比,含有读数方便,测温范围广,测温正确,上下限报警功效。其输出温度采取LED数码管显示,关键用于对测温比较正确场所。



该设计控制器使用是51单片机STC90C516,STC90C516单片机在工控、测量、 仪器仪表中应用还是比较广泛。 测温传感器使用是DS18B20,DS18B20是一个可组网高精度数字式温度传感器,因为其含有单总线独特优点,能够使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠。 显示是用4位共阴极LED数码管实现温度显示,LED数码管优点是显示数字比较大,查看方便。蜂鸣器用来实现当测量温度超出设定上下限时报警功效。

2.3关键单元电路设计

2.3.1单片机主控制模块设计

STC90C516单片机为40引脚双列直插芯片,有四个I/OP0,P1,P2,P3,MCS-51单片机共有48I/O口(P0P1P2P3,每一条I/O线全部能地作输出或输入。

单片机最小系统以下图所表示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容一端,在片内它是振荡器倒相放大器输入,XTAL2接外部晶振和微调电容另一端,在片内它是振荡器倒相放大器输出.9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端.

-2所表示



S W2

VC C

R S T

4

P10

1

U2

VC C

40

VC C

JP1

P1.0

a
b
c
d
e
f
g
dp

1
2
3
4
5
6
7
8
9

P13

2

39

P1.1

P0.0

3

38

P1.2

P0.1

4

37

P1.3

P0.2

5

36

P1.4

P0.3

6

35

P1.5

P0.4

1

P16

7

34

P1.6

P0.5

10μF

R S T

8

33

P1.7

P0.6

9

32

R S T

P0.7

TX

10

31

P3.0

EA/VPP

VC位位C

R X

11

30

P3.1

ALE

12

29

P3.2

PS EN

2

3

P34

13

28

P23

P3.3

P2.7

10K

14

27

P3.4

P2.6

P35

15

26

P3.5

P2.5

16

25

P37

P3.6

P2.4

30pF

17

24

P3.7

P2.3

18

23

P22

XTAL2

P2.2

5

19

22

P21

XTAL1

P2.1

20

21

P20

GND

P2.0

S TC C 52

30pF

-2主控制系统

2.2.2DS18B20电路设计

-3所表示。采取数字式温度传感器DS18B20,它是数字式温度传感器,

,

,

这类传感器仅需要一条数据线进行数据传输,使用P0.7DS18B20I/O口连接加一个上拉电阻,Vcc接电源,Vss接地。

Q1

P04

R 1

VC C

1

GND

2

I/O

3

VC C

10K

DS18B 20

-3DS18B20温度采集

DS18B20温度传感器是美国DALLAS半导体企业最新推出一个改善型智能温度传感器,和传统热敏电阻等测温元件相比,它能直接读出被测温度,而且可依据实际要求经过简单编程实现912位数字值读数方法。DS18B20性能特点以下:独特单线接口仅需要一个端口引脚进行通信;



多个DS18B20能够并联在惟一三线上,实现多点组网功效;无须外部器件;可经过数据线供电,电压范围为3.05.5v;零待机功耗;温度以912位二进制数字表示;用户可定义报警设置;报警搜索命令识别并标志超出程序限定温度(温度报警条件)器件;负电压特征,电源极性接反时,温度计不会因发烧而烧毁,但不能正常工作;

DS18B20

3

TO

92

8

SO

µSOP

,

其其封装形式图4所表示。

4DS18B20封装形式

DS18B20ROM结构开始8位是产品类型编号,接着是每个器件惟一序号,

48

,

8

56

CRC

,

这也是多个DS18B20能够采取一线进行通信原因。温度报警触发器THTL,可经过软件写入户报警上下限。

DS18B20温度传感器内部存放器还包含一个高速暂存RAM和一个非易失性可电擦除EEPRAM。高速暂存RAM结构为8字节存放器,结构图5所表示。



5DS18B20高速暂存RAM结构

2个字节包含测得温度信息,3和第4字节THTL拷贝是易失,

每次上电复位时被刷新。第5个字节,为配置寄存器,

,

DS18B20工作时寄存器中分辨率转换为对应精度温度数值,

该字节各位定义如表2-1所表示。

2-1:配置寄存器

D7 D6 D5 D4 D3 D2 D1 D0

TM

R1

R0

1

1

1

1

1

配置寄存器低5位一直为1,TM是工作模式位,

用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,



用户要去改动,R1R0决定温度转换精度位数,来设置分辨率,“R1R0”为“00”9,“01”10,“10”11,“11”12位。当DS18B20分辨率越高时,所需要温度数据转换时间越长。所以,在实际应用中要将分辨率和转换时间权衡考虑。

高速暂存RAM678字节保留未用,表现为全逻辑1。第9字节读出前面全部8字节CRC,可用来检验数据,从而确保通信数据正确性。

DS18B20接收到温度转换命令后,开始开启转换。转换完成后温度值就以16位带符号扩展二进制补码形式存放在高速暂存存放器第12字节。单片机能够经过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃LSB形式表示。

s

0

,

,

能够直接将二进制位转换为十进制;当符号位s1,表示测得温度值为负值,要先将补码变成原码,再计算十进制数值。输出二进制数高5位是符号位,最终4位是温度小数点位,中间7位是温度整数位。表2-2是一部分温度值对应二进制温度数据。

2-2 DS18B20输出温度值

温度值

二进制输出

十六进制输出

+125℃

0000 0111 1101 0000

07D0h

+85℃

0000 0101 0101 0000

0550h

+25.0625

0000 0001 1001 0001

0191h




+10.125℃

0000 0000 1010 0010

00A2h

+0.5℃

0000 0000 0000 1000

0008h

0℃

0000 0000 0000 0000

0000h

-0.5℃

1111 1111 1111 1000

FFF8h

-10.125℃

1111 1111 0101 1110

FF5Eh

-
25.0625℃

1111 1110 0110 1111

FF6Fh

-55℃

1111 1100 1001 0000

FC90h

DS18B20完成温度转换后,就把测得温度值和RAMTHTL字节内容作比较。若TTHTTL,则将该器件内报警标志位置位,并对主机发出报警搜索命令作出响应。所以,可用多只DS18B20同时测量温度并进行报警搜索。在ROM最高有效字节中存放有循环冗余检验码(CRC)。主机ROM56位来计算CRC,并和存入DS18B20CRC值作比较,以判定主机收到ROM数据是否正确。

2.2.3显示电路设计
显示电路是由四位一体共阳数码管进行显示,数码管由三极管8550驱动。四位一体共阳数码管管脚分布图图6所表示。

6四位一体共阳数码管管脚分布图

显示电路总体设计图7所表示。



U3

VCC

R 4

Q4

R 5

Q5

R 6

Q6

R 7

Q7

9012

9012

9012

9012

w1

w2

w3

w4

1K

1K

1K

1K

P20

P21

P22

P23

7 显示电路

2.2.4按键电路设计

按键电路是用来实现调整设定报警温度上下限和查看上下报警温度功效。

电路原理图图8所表示。

减减减

P10

S 2

减减

P13

S 3

减减

P16

S 1

8 按键电路原理图

2.2.5报警电路设计

报警电路是在测量温度大于上限或小于下限时提供报警功效电路。



VC C

Q3




9012 R 3

10K

减减减

P35 P34
R 1K
1
D1
该电路是由一个蜂鸣器和一个红色发光二极管组成, 具体电路图9所表示。

VC C

9 报警电路原理图

2.2.6继电器模块介绍



继电器模块是由由一个PNP型三极管9015驱动。

当输入低电平时三极管导通,继电器吸合,从而控制外围器件。

电路图图10所表示:

K1

减减减

VC C

Q4

R 5

P35

9015

10K

10继电器电路图



3软件设计

3.1DS18B20程序设计

3.1.1DS18B20传感器操作步骤

依据DS18B20通讯协议,
主机(单片机)控制DS18B20完成温度转换必需经过三个步骤:

每一次读写之前全部要对DS18B20进行复位操作

复位成功后发送一条ROM指令

最终发送RAM指令

这么才能对DS18B20进行预定操作。复位要求主CPU将数据线下拉500μs,然后释放,DS18B20收到信号后等候1660μs左右,
后发出60240μs存在低脉冲,CPU收到此信号表示复位成功。

DS18B20操作步骤图3-1所表示。

3-1DS18B20操作步骤

3.1.2DS18B20传感器指令表



DS18B20传感器操作指令如表3-1所表示。

传感器复位后向传感器写对应命令才能实现对应功效。

3-1DS18B20指令表

指 令

指令代码

功 能

ROM

0x3
3

DS1820温度传感器ROM中编码(即位地址)

符合 ROM

0x5
5

发出此命令以后, 接着发出 ROM 编码, 访问单总线上和该编码相对应 DS1820 使之作出响应, 为下一步对该 DS1820
读写作准备。

搜索 ROM

0xF
0

用于确定挂接在同一总线上 DS1820 个数和识别 ROM 地址。
为操作各器件作好准备。

跳过 ROM

0xC
C

忽略 ROM 地址, 直接向 DS1820 发温度变换命令。 适适用于单片工作。

告警搜索命令

0xE
C

实施后只有温度超出设定值上限或下限片子才做出响应。

温度变换

0x4
4

开启DS1820进行温度转换,
12位转换时最长为750ms9位为93.75ms)。 结果存入内部9字节RAM中。

读暂存器

0xB
E

读内部RAM9字节内容

写暂存器

0x4
E

发出向内部RAM34字节写上、 下限温度数据命令, 紧跟该命令以后, 是传送两字节数据。




复制暂存器

0x4
8

RAM中第3
4字节内容复制到EEPROM中。

重调 EEPROM

0xB
8

EEPROM中内容恢复到RAM中第3 4字节。

读供电方法

0xB
4

DS1820供电模式。

寄生供电时DS1820发送“ 0 ”,
外接电源供电 DS1820发送“ 1 ”

3.1.3DS18B20传感器初始化时序

DS18B20传感器为单总线结构器件,在读写操作之前,传感器芯片应优异性复位操作也就是初始化操作。

DS18B20初始化时序图10所表示。首先控制器拉高数据总线,
接着控制器给数据总线一低电平,延时480μs,控制器拉高数据总线,等候传感器给数据线一个60-240μs低电平,接着上拉电阻将数据线拉高,这么才初始化完成。

10DS18B20初始化时序

3.1.4DS18B20传感器读写时序

1.写时序

DS18B20传感器读写操作是在传感器初始化后进行。每次操作只能读写一位。



当主机把数据线从高电平拉至低电平,产生写时序。有两种类型写时序:写“0”时序,写“1”时序。全部时序必需有最短60μs连续期,
在各个写周期之间必需有最短1μs恢复期。

在数据总线由高电平变为低电平以后,
DS18B2015μs60μs时间间隙对总线采样,
假如为“1”则向DS18B20写“1”, 假如为“0”则向DS18B20写“0”。图3-2上半部分。

对于主机产生写“1”时序时,数据线必需先被拉至低电平,然后被释放,使数据线在写时序开始以后15μs内拉至高电平。

对于主机产生写“1”时序时,数据线必需先被拉至低电平,且最少保持低电平60μs

2.读时序

在数据总线由高电平变为低电平以后,数据线最少应保持低电平1μs,来自DS18B20输出数据在下降沿15μs后有效,
所以在数据线保持低电平1μs以后,主机将数据线拉高,
等候来自DS18B20数据改变,
在下降沿15μs以后便可开始读取DS18B20输出数据。整个读时序必需有最短60μs连续期。图11下半部分。读时序结束后数据线由上拉电阻拉至高电平。



11DS18B20传感器读写时序

3.1.5DS18B20获取温度程序步骤图

DS18B20读字节,写字节,获取温度程序步骤图图12所表示。



开始

开始

N

开始

DQ=1

d=1

i=8

DQ=0

DQ=1

i>0

延时480μs

i=8

Y

DQ=0

Y

DQ=1

N

i>0

延时2μs

DQ=1

Y

DQ=d&0x01

d >>= 1

N
延时80μs DQ=0
延时30μs

DQ=1

延时2μs

延时60μs DQ=1

结束

DQ=1

d>>= 1

DS18B20初始化

N

DQ=1

i--

程序流程图

Y

开始

d |= 0x80

结束

DS18B20

始化

延时60μs

DS18B20写字节

0xcc跳过

ROM

程序流程图

i--
0x44启动
DS18B20

延时500μs

return d

DS18B20
始化
结束
0xcc跳过
ROM
DS18B20读字节
0xbe 程序流程图
DS18B20

结束

DS18B20获取温度
程序流程图

12DS18B20程序步骤图



3.2显示程序设计

显示电路是由四位一体数码管来实现。因为单片机I/O口有限,

所以数码管采取动态扫描方法来进行显示。程序步骤图图13所表示。

开始

i=0

N

i<4

Y

根据i的值进行选择

i=0

i=1

i=2

i=3

点亮第一个

点亮第二个

点亮第三个

点亮第四个

数码管

数码管

数码管

数码管

i++

结束

13显示程序步骤图

3.3按键程序设计

按键是用来设定上下限报警温度。具体程序步骤图图14所表示。



开始

N

K1=0

Y

S=0调上限

S=1调下限

N

K1=0

K1=0

N

Y

Y

Temp++

Temp--

结束

14按键程序步骤图



4.系统测试

4.1硬件测试

温度检测电路系统比较简单,对于焊接方面更是不可轻视,庞大电路系统中只要出于一处错误,则会对检测造成很大不便,而且电路交线较多,对于多种锋利引脚要注意处理,
不然会刺被带有包皮导线,则会对电路造成短路现象。

在本设计调试中碰到了很多问题。

回想这些问题只要认真多思索全部是能够避免,以下为关键问题:

1)在硬件设计好后把软件程序写好后下载进单片机后数码管不显示。

经过自己检测电路发觉电路连接全部没有发觉问题,
反复检验程序也没有发觉问题,心想是不是P0口驱动能力不强,可是想已经加上拉电阻了。经过查阅资料发觉排阻含有方向,将排阻焊锡来换一下方向,重新上电后果然显示了。

所以对于有方向元器件焊接需要尤其注意。

4.2软件测试

电子成年历是多功效数字型,能够看目前日期(阴、阳历),时间,还有温度仪器。电子成年历功效很多,
所以对于它程序也较为复杂,所以在编写程序和调试时出现了相对较多问题。最终经过数次模块子程序修改,一步一步完成,最终处理了软件。

在软件调试过程中关键碰到问题以下:

1.数码管动态显示时发觉只会显示一个数字。



经过检验程序发觉数码管动态扫描显示时延时不够,经过改大延时处理了问题。

4.3测试结果结论

经过数次反复测试和分析,能够对电路原理及功效愈加熟悉,同时提升了设计能力和及对电路分析能力.同时在软件编程方面得到更到提升,对编程能力得到加强.同时对所学知识得到很大提升和巩固.



5.设计体会

经过快要30天设计、焊接、编程、调试,我们最终完成了数字温度计设计,基础能够达成设计要求,而且还设计了部分其它功效,比能够开启或消除按键音功效,开机动画功效,查看报警上下限温度功效。

此次设计使我从中学到了部分很关键东西,那就是怎样从理论到实践转化,
怎样将我们所学到知识利用到实践中去。

在大学课堂学习只是给我们灌输专业知识,
而我们应把所学知识应用到我们现实生活中去。

这次设计不仅使我们将课堂上学到理论知识和实际应用结合了起来,而且使我们对电子电路、电子元器件、

印制电路板等方面知识有了更深入认识,同时在软件编程、
焊板调试、相关调试仪器使用等方面得到较全方面锻炼和提升,为以后能够进行一些单片机应用系统开发设计工作打下一定基

础。

此次单片机设计也为我们以后进行更复杂单片机系统设计提供了宝

贵经验。

,

我们初步掌握了单片机系统设计基础原理。

充足认识到理论学习和实践相结合关键性,对于书本上很多知识,



不仅要学会,更关键是会利用到实践中去。在以后学习中,我们会愈加重视实践方面锻炼,多提升自己动手实践能力。

参考文件

1】朱定华,戴淑萍,单片机微机原理和应用[M], 清华大学出版社.

2】刘勇编 数字电路 电子工业出版社
3】陈正振编 电子电路设计和制作
广西交通职业技术学院信息工程系
4】杨子文编 单片机原理及应用 西安电子科技大学出版社 【5】王法能编 单片机原理及应用 科学出版社
6】谭浩强.C程序设计(第三版).北京:清华大学出版社,.7



7】余发山,王福忠.单片机原理和应用技术.徐州: 中国矿业大学出版社,.6
8】求是科技.单片机经典模块设计实例导航.北京:人民邮电出版 ,.5
9】求是科技.8051系列单片机C程序设计完全手册.北京: 人民邮电出版社,.4
10】于永,戴佳,刘波.51单片机C语言常见模块和综合系统设 计实例精讲(第2版).北京:电子工业出版社,.10



附录一:原理图和实物图

原理图



实物图











附录二:程序

Mian.c:

#include<reg52.h>

#include<SMG.h>

#include<DS18B20.h>

#include<EEPROM.h>

#defineuchar unsigned char

#defineuint unsigned int

/*****************灯、蜂鸣器、按键引脚定义*******************/

sbitled_shang = P3^2;

sbitled_xia = P3^3;

sbitrelay = P3^5;

sbitbuzz = P2^6;

sbitkey_set = P1^2;

sbitkey_jia = P1^1;

sbitkey_jian = P1^0;



/*********************全局变量定义***************************/

ucharTemperature_up,Temperature_down;//存放温度上、下限值

uint set_f; //设置模式标志位

/***********************按键检测函数************************/

voidscan(void)

{

//设置键,不支持连按

if(key_set==0)

{

delayms(7);

if(key_set==0)

{

led_shang=1;//关闭上限报警灯

led_xia=1; //关闭下限报警灯

buzz=1; //关闭蜂鸣器

relay=1; //关闭继电器

set_f++;

if(set_f==3)

{



set_f=0;

EEPROM_delete(0x); //擦除扇区

EEPROM_write(0x,Temperature_up);//写入上限值数据保留

EEPROM_delete(0x2202);

//擦除扇区

EEPROM_write(0x2202,Temperature_down);//写入下限值保留

}

if(set_f==1)//选择设置、显示上限值

display2(Temperature_up/1000,Temperature_up%1000/100,Temperature_up

%100/10,Temperature_up%10);

if(set_f==2)//选择设置、显示下限值

display2(Temperature_down/1000,Temperature_down%1000/100,Temperatur

e_down%100/10,Temperature_down%10);

}

while(!key_set);//检测按键松开

}//加值键,支持连按

if(key_jia==0&&set_f!=0)

{



delayms(7);

if(key_jia==0&&set_f==1)//设置上限值

{

Temperature_up++; //上限自加

if(Temperature_up>125)

Temperature_up=125;

display2(Temperature_up/1000,Temperature_up%1000/100,Temperature_up

%100/10,Temperature_up%10);//显示

}

if(key_jia==0&&set_f==2)//设置下限值

{

Temperature_down++; //下限自加

if(Temperature_down>125)

Temperature_down=125;

display2(Temperature_down/1000,Temperature_down%1000/100,Temperatur

e_down%100/10,Temperature_down%10);//显示

}

}

//减值键,支持连按

if(key_jian==0&&set_f!=0)



{

delayms(7);

if(key_jian==0&&set_f==1)//设置上限值

{

if(Temperature_up==0)

Temperature_up=1;

Temperature_up--;

//

display2(Temperature_up/1000,Temperature_up%1000/100,Temperature_up

%100/10,Temperature_up%10);//显示

}

if(key_jian==0&&set_f==2)//设置下限值

{

if(Temperature_down==0)

Temperature_down=1;

Temperature_down--; //

display2(Temperature_down/1000,Temperature_down%1000/100,Temperatur

e_down%100/10,Temperature_down%10);//显示

}

}

}



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

voidmain()

{

buzz=1; //开机关闭蜂鸣器

led_shang=1;//开机关闭上限报警灯

led_xia=1; //开机关闭下限报警灯

relay=1; //开机关闭继电器

Temperature_up=EEPROM_read(0x); //上电先读取温度上限值

Temperature_down=EEPROM_read(0x2202);//上电先读取温度下限值

DS18B20_init();

while(1)

{

scan(); //进行按键检测

if(set_f==0)//正常显示温度

{

DS18B20_Read_Temperature(); //读取温度

DS18B20_Temperature(); //读取转换

if(Temperature>=Temperature_up||Temperature<Temperature_down)

{



if(Temperature==85&&temp_d[2]==0&&temp_d[3]==0);

else

{

buzz=0;

//蜂鸣器报警

if(Temperature>=Temperature_up)

{

led_shang=0; //打开上限报警灯

relay=1; //关闭继电器

}

else

{

led_xia=0;

//打开下限报警灯

relay=0; //打开继电器

}

}

}

else



{

buzz=1; //开机关闭蜂鸣器

led_shang=1;//开机关闭上限报警灯

led_xia=1; //开机关闭下限报警灯

relay=1; //开机关闭继电器

}

display(temp_d[0],temp_d[1],temp_d[2],temp_d[3]);

//显示实际温度

}

if(set_f!=0)//设置模式显示

{

if(set_f==1)

display2(Temperature_up/1000,Temperature_up%1000/100,Temperature_up

%100/10,Temperature_up%10); //显示上限值

if(set_f==2)

display2(Temperature_down/1000,Temperature_down%1000/100,Temperatur

e_down%100/10,Temperature_down%10);//显示下限值

}

}}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务