2009
07.03

一、摘要

该系统主电路采用89S51单片机实现温度控制,加热和制冷部分由于条件限制,只采用模拟的方式。电路可实现温度的显示,设置上下限温度,超出范围报警以及和PC机通信的功能。系统测量精度和控制精度良好。我们为本系统共设计了两套程序,我主要负责其中一套程序的编写和单片机最小系统板的组建。

二、方案选择

本系统采用89S51单片机系统来实现。单片机软件编程灵活、自由度大,可用软件编程实现各种控制看法和逻辑控制。可实现数码显示和键盘设定等多种功能,系统电路框图如下: image 采用以89S51为控制核心的单片机控制系统,尤其对温度控制,它可达到模拟控制所达不到的控制效果,并且可实现显示、键盘设定等多种功能,又易于扩展,大大提高了系统的智能化,也使得系统所测结果精度大大提高。故选择方案三。

三、器件选择

由于单片机最小系统板采用的是去年省赛的板子,所以受到了很多限制。如对系统精度至关重要的A/D转换换器,板子上采用的是ADC0809。因为是八位的,所以精度不高,最多只能达到0.4度左右。但考虑到已有现成的板子,采用0809同样可达到实验的目的,所以A/D部分暂不作更改。

传感器部分既可采用热敏电阻,也可采用集成的温度传感器。但由于热敏电阻的精度、重复性、可靠性都比较差,所以我们采用的集成的LM35,LM35是一个三端器件(电源、地、输出),的是NS公司生产的集成电路温度传感器系列产品之一,它具有很高工作精度和较宽的线性工作范围,该器件输出电压与摄氏温度线性成比例。LM35与用开尔文标准的线性温度传感器相比更有优越之处,LM35无需外部校准或微调,可以提供±1/4℃的常用的室温精度。其灵敏度为+10.0mV/℃,精度在+25℃时为0.5℃。精度较高,并且价格较低,每片仅售6元。较之性能较好的AD590K便宜许多,性价比高。故采用LM35而舍弃AD590K。

四、电路原理图

单片机最小系统部分:

clip_image003

ADC0809的A/D采样部分:

clip_image005

四位LED数码管显示部分:

clip_image006

单片机串口通信电路:

clip_image008

温度采集部分:

clip_image010

报警电路:温控模拟部分:
clip_image013 clip_image014

五、工作原理

具体电路原理详见本组另一成员的报告,在此仅介绍系统的软件部分,我们总共写了两份程序,其中一份为我个人独立完成。下面为程序的主要流程图。

程序框图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
;显示区地址分别为63H,62H,61H,60H
;上限温度地址分别为2EH,2DH,2CH
;下限温度地址分别为2BH,2AH,29H
;用到的位地址有00H,01H,30H
; ===============主程序===============
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT0
ORG 0030H
MAIN: MOV SP,#70H ;置初值
CLR P1.7
MOV R0,#40H
SETB PSW.4
SETB PSW.3
SETB IT0
SETB EA
SETB EX0
MOV TMOD,#20H ;波特率9600
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1
MOV SCON,#50H
SETB TI
CLR 30H
CLR 01H
SETB P1.7
CLR P1.6
CLR P1.5
MOV DPTR,#0BFFFH
MOV A,#00H
MOV 2EH,#0
MOV 2DH,#0
MOV 2CH,#0
MOV 2BH,#0
MOV 2AH,#0
MOV 29H,#0
MOV 62H,#0
LOOP: MOV DPTR,#0BFFFH
MOVX @DPTR,A ;启动A/D转换
CLR 00H
WAIT: LCALL XUAN
CHAXUN:JNB P1.3,LOOP1 ;调整
JNB P1.4,LOOP2 JNB 00H,GG ;判断是否再启动
LJMP LOOP
GG: LJMP WAIT
;===========上限温度调整===========
LOOP1: CLR EX0
LCALL DELAY1
JNB P1.3,$
MOV 62H,2EH
MOV 61H,2DH
MOV 60H,2CH
JB P1.2,M2
MOV A,2EH
ADD A,#01
DA A
MOV 2EH,A
CJNE A,#10H,M1
MOV 2EH,#00
M1: JNB P1.2,$
M2: JB P1.1,M4
MOV A,2DH
ADD A,#01H
DA A
MOV 2DH,A
CJNE A,#10H,M3
MOV 2DH,#00
M3: JNB P1.1,$
M4: JB P1.0,M5
MOV A,2CH
ADD A,#01
DA A
MOV 2CH,A
CJNE A,#10H,M5
MOV 2CH,#00
M5: JNB P1.0,$
SETB 30H;是否显示第一位的标志位
MOV 63H,#11H ;显示“上”
MOV 62H,2EH
MOV 61H,2DH
MOV 60H,2CH
LCALL DELAY
JNB P1.3,TUI ;再次中断时,退出
LJMP LOOP1
;==========下限温度调整===========
LOOP2: CLR EX0
JNB P1.3,$  MOV 62H,2BH
MOV 61H,2AH
MOV 60H,29H
JB P1.2,L2
MOV A,2BH
ADD A,#01
DA A
MOV 2BH,A
CJNE A,#10H,L1
MOV 2BH,#00
L1: JNB P1.2,$
L2: JB P1.1,L4
MOV A,2AH
ADD A,#01H
DA A
MOV 2AH,A
CJNE A,#10H,L3
MOV 2AH,#00
L3: JNB P1.1,$
L4: JB P1.0,L5
MOV A,29H
ADD A,#01
DA A
MOV 29H,A
CJNE A,#10H,L5
MOV 29H,#00
L5: JNB P1.0,$
SETB 30H;是否显示第一位的标示位
MOV 63H,#0FH ;显示“下”
MOV 62H,2BH
MOV 61H,2AH
MOV 60H,29H
LCALL DELAY
JNB P1.4,TUI ;再次中断时,退出
LJMP LOOP2  TUI: MOV A,2BH
CLR C
CJNE A,2EH,AA;比较上限是否低于下限
MOV A,2AH
CJNE A,2DH,AA
CJNE A,60H,E1
LJMP E2
E1: JC SHANG_BAO
LJMP E2
;======超上限温度报警======
SHANG_BAO:
SETB P1.7
SETB P1.6
CLR P1.5
LJMP X2
E2: CLR P1.5
CLR P1.6
CLR P1.7
X1: MOV A,2BH
CJNE A,62H,E3
MOV A,2AH
CJNE A,61H,E3
MOV A,29H
CJNE A,60H,E3
LJMP E4
E3: JNC XIA_BAO
LJMP E4
;======低于下限温度报警======
XIA_BAO:SETB P1.7
SETB P1.5
CLR P1.6
LJMP X2
E4: CLR P1.5
CLR P1.6
CLR P1.7
X2: CLR 30H
ACALL DELAY
;========串口通信=========
MOV R3,#30H ;转ASCII码
MOV A,62H
ADD A,R3
DA A
MLP3: JBC TI,MLP2 ;当TI为1时清0
SJMP MLP3
MLP2: MOV SBUF,A
MOV A,61H
ADD A,R3
DA A  MLP5: JBC TI,MLP4
TT: MOV DPTR,#0FAFFH
D2: MOVX @DPTR,A
DJNZ 30H,D2 ;十位
MOV 30H,#40
MOV DPTR,#TAB0
MOV A,60H
MOVC A,@A+DPTR
MOV DPTR,#0FBFFH
D3: MOVX @DPTR,A
DJNZ 30H,D3 ;个位
RET
TAB0:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,
; 0 1 2 3 4 5 6 7
7FH,6FH,77H,7CH,39H,5EH,79H,71H
; 8 9 A B C D E F
DB 76H,78H,38H,6EH,00H ,77H,
; H K L Y 无 R
DELAY12: MOV R4,00H
MOV R5,00H
X3: DJNZ R4,$
DJNZ R5,X3
RET
;-------中断0服务程序-------
INT0: PUSH A
PUSH PSW
MOV DPTR,#0BFFFH
MOVX A,@DPTR ;读A/D转换结果
MOV 2FH,#0FFH
CLR CY ;程序调整高低位
RLC A
JC N1
CLR 78H MOV A,29H
CJNE A,2CH,AA
LJMP XXX ;正常
AA: JNC ERRO ;上限低于下限,跳转  XXX: SETB EX0
MOV A,@R0
LCALL XUAN
LJMP WAIT
ERRO: MOV 63H,#0EH ;显示“ERRO”
MOV 62H,#15H
MOV 61H,#15H
MOV 60H,#0H
SETB 30H
SETB 01H
EEEE: LCALL DELAY
JNB P1.3,XX1 ;是否重新调整
JNB P1.4,XX2
LJMP EEEE
XX1: LJMP LOOP1
XX2: LJMP LOOP2
;==========显示数据转换=========
Xian: MOV A,@R0
MOV B,#100
MUL AB
MOV R3,A
MOV A,B
MOV B,#10
DIV AB
MOV R1,#62H
MOV @R1,A
DEC R1
MOV @R1,B
MOV A,R3
MOV B,#10
MUL AB
DEC R1
MOV @R1,B
CLR 30H
ACALL DELAY
MOV A,2EH
CJNE A,62H,E1
MOV A,2DH
CJNE A,61H,E1
MOV A,2CH
SJMP MLP5  MLP4: MOV SBUF,A
MOV A,#46 ;小数点
MLP8: JBC TI,MLP9
SJMP MLP8
MLP9: MOV SBUF,A
MOV A,60H
ADD A,R3
DA A
MLP7: JBC TI,MLP6
SJMP MLP7
MLP6: MOV SBUF,A
MOV A,#32
MLP10: JBC TI,MLP11
SJMP MLP10
MLP11: MOV SBUF,A
RET
;==========延时加显示=========
DELAY: MOV R3,#0A0H
D00: ACALL DISPLAY
DJNZ R3,D00
RET
DISPLAY:JNB 30H,DD
MOV 30H,#40
MOV DPTR,#TAB0
MOV A,63H
MOVC A,@A+DPTR
MOV DPTR,#0F8FFH
D0: MOVX @DPTR,A
DJNZ 30H,D0 ;千位
DD: MOV 30H,#40
MOV DPTR,#TAB0
MOV A,62H
MOVC A,@A+DPTR
MOV DPTR,#0F9FFH
D1: MOVX @DPTR,A
DJNZ 30H,D1 ;百位
MOV 30H,#40
MOV DPTR,#TAB0
MOV A,61H
MOVC A,@A+DPTR
JB 01H,TT
ADD A,#80H
N1: RLC A
JC N2
CLR 79H
N2: RLC A
JC N3
CLR 7AH
N3: RLC A
JC N4
CLR 7BH
N4: RLC A
JC N5
CLR 7CH
N5: RLC A
JC N6
CLR 7DH
N6: RLC A
JC N7
CLR 7EH
N7: RLC A
JC N8
CLR 7FH
N8: MOV A,2FH
MOV @R0,A
SETB 00H
POP PSW
POP A
RETI
;=======延时=======
DELAY1: MOV R6,#60
DE1: MOV R7,#248
MOV R7,$
DJNZ R6,DE1
RET
END
Close this notice

已有 1 个回复

添加回复
  1. r12mee mcrvtsoaswch, [url=http://ifofzppnrfwu.com/]ifofzppnrfwu[/url], [link=http://zargjwumfuwh.com/]zargjwumfuwh[/link], http://plrmaexfpcqy.com/

XHTML: 你可以使用这些标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>