资源描述
接口技术课程设计报告
基于单片机的空调温度控制器设计
摘 要
设计了基于AT89C52的高精度家用空调温度控制系统,系统硬件主要由电源电路、温度采集电路(DS18B20)、键盘、显示电路、输出控制电路及其他辅助电路组成;软件采用8051C语言编程;该系统可以完成温度的显示、温度的设定、空调的控制等多项功能。
关键词:单片机;DS18B20;温度检测;显示
目录
1 设计目的及要求 1
1.1 设计目的和意义 1
1.2 设计任务与要求 1
2 硬件电路设计 2
2.1 总体方案设计 2
2.2 功能模块电路设计 3
2.2.1 单片机的选型 3
2.2.2 振荡电路设计 5
2.2.3 复位电路设计 5
2.2.4 键盘接口电路设计 6
2.2.5 温度测量电路设计 6
2.2.6 系统显示电路设计 7
2.2.7 输出控制电路设计 8
2.3 总电路设计 8
2.4 系统所用元器件 9
3 软件系统设计 10
3.1 软件系统总体方案设计 10
3.2 软件流程图设计 10
4 系统调试 12
5 总结 13
5.1 本系统存在的问题及改进措施 13
参考文献 14
附录1:系统的源程序清单 15
附录2:系统的PCB图 39
1 设计目的及要求
1.1 设计目的和意义
21世纪的人们生活质量不断提高,同时也对高科技电子产业提出了更高的要求,为了使人们生活更人性化、智能化。我设计了这一基于单片机的空调温度控制系统,人们只有生活在一定的温度环境内才能长期感觉舒服,才能保证不中暑不受冻,所以对室内温度要求要高。对于不同地区空调要求不同,有的需要升温,有的需要降温。一般都要维持在21~26°C。
目前,虽然我国大量生产空调制冷产品,但由于我国人口众多,需求量过盛,在我国的北方地区,还有好多家庭还没有安装有效地室内温控系统。温度不能很好的控制在一定的范围内,夏天室内温度过高,冬天温度过低,这些均对人们正常生活带来不利的影响,温度、湿度均达不到人们的要求。以前温度控制主要利用机械通风设备进行室内、外空气的交换来达到降低室内温度,实现室内温度适宜人们生活。以前通风设备的开启和关停,均是由人手动控制的,即由人们定时查看室内外的温度、湿度情况,按要求开关通风设备,这样人们的劳动强度大,可靠性差,而且消耗人们体力,劳累成本过高。为此,需要有一种符合机械温控要求的低成本的控制器,在温差和湿度超过用户设定值范围时,启动制冷通风设备,否则自动关闭制冷通风设备。鉴于目前大多数制冷设备现在状况,我设计了一款基于MCS51单片机的空调温度控制系统。
1.2 设计任务与要求
系统要求利用单片机设计一空调温度控制器,能够实时检测并显示室温,能够利用键盘设定温度,并且和室温进行比较,当室温低于设定温度时,系统能够驱动加热系统工作,当室温高于设定温度时,系统能够驱动制冷系统工作,当两者温度相等时,不做动作。
2 硬件电路设计
2.1 总体方案设计
空调温度控制系统,主要要完成对温度的采集、显示以及设定等工作,从而实现对空调的控制。传统采用铂电阻充当测温器件的方案,虽然其中段测量线性度好,精度较高,但是测量电路的设计难度高 ,且测量电路系统庞大,难于调试 ,而且成本相对较高。鉴于上述原因,本系统采用DS18B20充当测温器件。外部温度信号经 DS18B20将输入的模拟信号转换成8位的数字信号, 通过并 口传送到单片机系统( AT89C52) 。单片机系统将接收的数字信号译码处理,通过LCD1602将温度显示出来,同时单片机系统还将完成键盘扫描 、按键温度设定、超温报警等程序的处理 ,将处理的温度信号与系统设定温度值比较,形成可以控制空调制冷、制热与停止工作三种工作状态,从而实现空调的智能化。另外,键盘输入方面,采用了软件来修正误操作输入 ,即输入的温度范围必须在系统硬件所确定的范围内,直接降低由于误操作带来的风险,提高了系统的可靠性 ,体现了人性化的系统设计原则。
系统的整体框图如图1所示:
图1 系统整体框图
2.2 功能模块电路设计
2.2.1 单片机的选型
由于本系统只需要单片机完成矩阵键盘检测以及处理DS18B20送来的温度数据并送LCD1602进行显示对于I/O资源以及处理速度无特殊要求,故选择ATMEL公司生产的AT89C52单片机,AT89C52增加了在线调试功能,即程序可以通过JTAG接口下载,调试和固化,因而该芯片的开发不再需要昂贵的硬件仿真器,可实现实时仿真,所有的资源都可以为用户所使用,可以在线编程或在系统编程,更进一步地说,在线编程或在系统编程是开发的系统具有了通过网络进行升级、维护的潜在功能。
AT89C52的性能及特点[1]:
l 与MCS-51系列单片机兼容。
l 片内有8K可在线重复编程的快速内
存可擦写存储器(Flash Memory)。
l 存储器可循环写入/擦写10000次以上。
l 存储器数据保存时间为10年以上。
l 宽工作电压范围:Vcc可为2.7V-6.5V。
l 全静态工作:可从0Hz-24MHz。
l 程序存储器具有三级加密保护。
l 256字节的内部RAM。
l 32条可编程I/O口线。
l 三个16位定时器/计数器。
l 中断结构具有5级(6级)中断源和两个优下级。
l 可编程全双工串行通讯。
l 空闲维持低功耗和掉电状态保护存储数据。
AT89C52引脚图如图2所示。
图2 AT89C52引脚图
VCC: +5V电源输入
GND:接地
P0口是一个双向8位三态I/O口,每个口可独立控制。使用时需外接上拉电阻。
P1口是一个准双向8位I/O口,它的功能是单一的,只能用作数据的输入或者输出。
P2口是一个准双向8位I/O口,输出时,从P2.x端口可输出CPU写到锁存器上的信号。当该接口用做数据输入接口是,应先向该位写1,然后,读该位即可读入输入数据。
P3口是具有第二功能的准双向8位I/O口。
ALE/PROG:地址所存/编程信号线。当P0口工作在第二功能时从该端口可复用工作,某时刻该端口可以送出地址信号A0~A7,而另外的时刻该端口传送的是数据信号D0~D7。利用ALE可以将地址信号A0~A7锁存到地址锁存器。
/VPP:该控制信号线也具有双重功能,是允许访问片外ROM/编程高电压引线。
:程序存储器允许输出控制端,常用作片外ROM的读控制信号,低电平有效。
RESET:复位引脚,当该端加上超过24个时钟周期的高电平时,可是8051复位。系统复位电路如图2.3所示。
X1、X2:外接时钟引脚。X1为片内振荡电路的输入端,X2为片内振荡电路的输出端。
2.2.2 振荡电路设计
AT89C52内部有一个用于构成片内振荡器的高增益反相放大器, 振荡器产生的信号送到CPU, 作为CPU的时钟信号,驱动CPU产生执行指令功能的机器周期。引脚XTAL1和XTAL2是此放大器的输人端和输出端。这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起可构成一个自激振荡器, 振荡电路的连接如图所示图8所示,外接石英晶体或陶瓷谐振器以及电容C1和C2构成并联谐振电路, 接在放大器的反馈回路中。对外接电容C1和C2的值虽然没有严格的要求, 但电容的大小多少会影响振荡器频率的高低、振荡器的稳定性、起振圈内部振荡的接法的快速性和温度稳定性。外接石英晶体时, C1和C2一般取(40pF-10pF),外接的是石英晶体, 所以,C1、C2选择标称值30pF。
系统振荡电路如图3所示。
图3 振荡电路
2.2.3 复位电路设计
单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态, 并从这个状态开始工作。无论是在单片机刚开始接上电源时, 还是断电后或者发生故障后都要复位。89系列单片机的复位信号是从RST引脚输人到芯片的施密特触发器中的。当系统处于正常工作状态时, 且振荡器稳定后, 如果RST引脚有一个高电平并维持2个机器周期(24个振荡周期), 则CPU就可响应并且将系统复位。复位分为手动复位和上电复位。本设计系统采用的是上电自动复位。
系统复位电路如图4所示。
图4 复位电路
2.2.4 键盘接口电路设计
独立键盘与单片机连接时,每个按键都需要单片机的一个I/O口,若单片机系统需要较多按键,如果用独立按键会占用过多的I/O口资源。单片机系统中I/O口资源往往比较宝贵,当用到多个按键时,为了节省I/O口线,一般需使用矩阵键盘。本系统共需使用16个按键,故选择的矩阵键盘。键盘接口电路如图5所示。
图5 键盘接口电路
2.2.5 温度测量电路设计
本系统的温度测量电路采用DS18B20来实现。DS18B20是美国DALLAS半导体公司推出的第一片采用“一线总线”接口的温度传感器,它具有微型化、低功耗、高性能、抗干扰、能力强、易配微处理器等优点,可直接将温度转化成串行数字信号供处理器处理。
DS18B20的性能及特点[2]:
l 适应电压范围宽,电压范围在,在寄生电源方式下可由数据线供电。
l 独特的单线接口方式,它与微处理器连接时仅需一条口线即可实现微处理器与DS18B20的双向通信。
l 支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。
l 在使用中不需要任何外接元件,全部传感元件及转换电路集成在形如一只三极管的集成电路里。
l 测温范围-55℃+125℃,在-10℃+85℃时精度为±0.5℃。
l 可编程分辨率为912位,对应的可分辨温度分别为0.5℃,0.25℃,0.125℃和0.0625℃,可实现高精度测温。
l 在9位分辨率时,最多在93.75ms内把温度转换为数字;12位分辨率时,最多在750ms内把温度值转换为数字。
l 测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。
l 负压特性。电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
系统温度测量电路如图6所示。
图6 温度测量电路
2.2.6 系统显示电路设计
本系统采用LCD1602作为系统的显示器件,1602字符型液晶是一种专门用来显示字母、数字、符号等的点阵型液晶模块,能分两行显示,它有若干个或者等点阵字符位组成,每个点阵字符位都可以显示一个字符。
1602型液晶接口信号如下:
l 1脚VSS:电源地。
l 2脚VDD:电源正极。
l 3脚VO:液晶显示对比度调节端。
l 4脚RS:数据/命令选择端(H/L)。
l 5脚R/:读写选择端(H/L)。
l 6脚E:使能信号。
l 脚:数据口。
l 15脚BL1:背光电源正极。
l 16脚BL2:背光电源负极。
系统显示电路如图7所示。
图7 系统显示电路
2.2.7 输出控制电路设计
系统要求在当前室温低于设定温度时,能够自动驱动加热系统工作 ;在当前室温高于设定温度时能够自动驱动制冷系统工作。本系统在复位后即置P2^6脚和P2^7脚为低电平,在当前室温低于设定温度时,通过置P2^7脚为高电平来驱动后级加热系统,本系统采用红色LED来代替加热系统;在当前室温高于设定温度时,通过置P2^6脚高电平来驱动后级制冷系统,本系统采用蓝色LED来代替制冷系统。
输出控制电路如图8所示。
图8 输出控制电路
2.3 总电路设计
系统总电路图如图9所示。
图9 系统总电路图
2.4 系统所用元器件
本系统所用的元器件清单如表1所示。
表1 系统所用元器件
元器件名称
数量
点触式开关
16
30pF瓷片电容
2
10uF电解电容
1
蓝色LED
1
红色RED
1
5V电源插座
1
自锁开关
1
LCD1602
1
1/4W10K电阻
3
10K可调电阻
1
AT89C52
1
DS18B20
1
12MHz晶振
1
3 软件系统设计
3.1 软件系统总体方案设计
系统软件由主程序模块、测温程序模块、键盘扫描程序模块以及液晶驱动程序模块组成。
3.2 软件流程图设计
系统软件流程图如图10所示。
图10 系统软件流程图
4 系统调试
程序在Keil uVision4环境下编写,编译通过后生成.hex文件加载到Protuse下可正常运行。程序默认温度为21.0℃,Protuse下设定DS18B20的温度也为21.0℃,故开始运行时两路LED灯都不点亮。当利用键盘设定的温度高于DS18B20默认的21.0℃时,红色LED灯被点亮;当设定的温度低于DS18B20默认的21.0℃时,蓝色LED灯被点亮。
附上仿真图
当设定的温度高于DS18B20默认的21.0℃时,红色LED灯被点亮,如图11所示。
图11 红色LED灯点亮
当设定的温度低于DS18B20默认的21.0℃时,蓝色LED灯被点亮。如图12所示。
图12 蓝色LED灯点亮
5 总结
5.1 本系统存在的问题及改进措施
本系统所设计的空调温度控制器仅对温度部分实现了控制,但对于实际空调中的模式选择以及定时运行等工作过程还无法实现,希望在以后的学习研究中能够解决这些问题。
5.2 心得体会
本次课程设计从获得题目开始便着手准备,首先分析系统要求,在Protuse里完成硬件原理图的搭建,然后开始在Keil环境下着手编写各部分程序,调试相应的程序,在调试通过后再下载到Protuse里进行仿真,发现问题后再返回Keil下修改相应程序,直到最后仿真通过,最后在Altium Designer 6中画出电路原理图。在本次课程设计过程中得到了老师以及许多同学的帮助,感谢那些提供过帮助的老师和同学。
参考文献
[1] 郭文川主编. 单片机原理与接口技术. 北京:中国农业出版社,2007.
[2] 郭天祥主编. 51单片机C语言教程. 北京:电子工业出版社,2009.
附录1:系统的源程序清单
global.h:
ifndef _global_H
#define _global_H
#include<reg52.h>
#define uchar unsigned char//宏定义
#define uint unsigned int
#define K_UP 0X20//定义键值
#define K_DOWN 0X21
#define K_CLEAR 0X24
#define K_OK 0X25
#define K_ONE 0X30
#define K_FOUR 0X31
#define K_SEVEN 0X32
#define K_POINT 0X33
#define K_TWO 0X34
#define K_FIVE 0X43
#define K_EIGHT 0X36
#define K_ZERO 0X37
#define K_THREE 0X38
#define K_SIX 0X40
#define K_NINE 0X41
#define K_SET 0X42
extern float TEMP_NOW;
extern float TEMP_SET;
extern uint T_Count;
extern uint S_Count;
extern uint P_Count;
extern uint N_Count;
extern uint M_Count;
extern uchar Current_Temp_Display_Buffer[];
extern uchar set_Temp_Display_Buffer[];
extern int sel;
sbit lcden=P2^1;//液晶使能
sbit lcdrs=P2^0;//液晶数据/命令选择端
sbit DQ =P2^2;//DS18B20数据端
sbit XX =P2^5;//读写选择端
sbit cold =P2^6;//输出信号
sbit warm =P2^7;//输出信号
#endif
main.c:
#include<reg52.h>
#include"global.h"
#include"key.h"
#include"18B20.h"
#include"LCD.h"
////////////////////全局变量/////////////////////////////
float TEMP_NOW=0.0;
float TEMP_SET=21.0;
uint T_Count=0;
uint S_Count=0;
uint P_Count=0;
uint N_Count=0;
uint M_Count=1;
uchar Current_Temp_Display_Buffer[]={" NOW:-23.5 "};
uchar set_Temp_Display_Buffer[]= {" SET: 21.0 "};
int sel=0;
void Comparison();
//////////////////////定时///////////////////////////////
void timer0_init(void)
{
TMOD = 0x00 ; //设置定时器0的工作方式
TH0 = (8192-5000)/32;//单片机晶振为12MHz,机器周期为1us,t=5ms,
//N=5000/1=5000
TL0 = (8192-5000)%32;
IE = 0x82;
TR0=1;
}
void timer0() interrupt 1
{
TH0 = (8192-5000)/32;
TL0 = (8192-5000)%32;
if(++T_Count == 100) //////100为0.5s
{
TR0=0;
Read_Temperature();
Display_Temperature() ;
T_Count=0;
if(++P_Count == 6)
{
N_Count=1;
}
TR0=1;
}
}
////////////////////主程序///////////////////////////////
void main()
{
init_lcd();
Init_DS18B20();
timer0_init();
while(1)
{
Print();
set_num();
Comparison();
}
}
void Comparison()
{
if(N_Count&&M_Count)
{
if(TEMP_NOW<TEMP_SET)
{
warm=1;
cold=0;
}
if(TEMP_NOW>TEMP_SET)
{
cold=1;
warm=0;
}
if(TEMP_NOW==TEMP_SET)
{
cold=0;
warm=0;
}
}
}
18B20.h:
#ifndef _18B20_H
#define _18B20_H
#include"global.h"
extern uchar Init_DS18B20();
extern void Read_Temperature();
extern void Display_Temperature();
#endif
18B20.c:
#include"global.h"
#include "intrins.h"
#define delayNOP() {_nop_();_nop_();_nop_();_nop_();}
uchar code Temperature_Char[8] = {0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00};
uchar code df_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};
uchar CurrentT = 0;
uchar Temp_Value[]={0x00,0x00};
uchar Display_Digit[]={0,0,0,0};
bit DS18B20_IS_OK = 1;
void Delay_INI(uint x)
{
while(--x);
}
void Delay(unsigned int n)
{
do
{
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();
n--;
}while(n);
}
uchar Init_DS18B20()
{
uchar status;
DQ = 1;
Delay_INI(8);
DQ = 0;
Delay_INI(90);
DQ = 1;
Delay_INI(8);
status=DQ;
Delay_INI(100);
DQ = 1;
return status;
}
uchar ReadOneByte()
{
uchar i,dat=0;
DQ = 1;
_nop_();
for(i=0;i<8;i++)
{
DQ = 0;
dat >>= 1;
DQ = 1;
_nop_();
_nop_();
if(DQ)
dat |= 0X80;
Delay(30);
DQ = 1;
}
return dat;
}
void WriteOneByte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
DQ = 0;
DQ = dat& 0x01;
Delay(5);
DQ = 1;
dat >>= 1;
}
}
void Read_Temperature()
{
if(Init_DS18B20()==1)
DS18B20_IS_OK=0;
else
{
WriteOneByte(0xcc);
WriteOneByte(0x44);
Init_DS18B20();
WriteOneByte(0xcc);
WriteOneByte(0xbe);
Temp_Value[0] = ReadOneByte();
Temp_Value[1] = ReadOneByte();
DS18B20_IS_OK=1;
}
}
void Display_Temperature()
{
uchar t = 150, ng = 0;
if((Temp_Value[1]&0xf8)==0xf8)
{
Temp_Value[1] = ~Temp_Value[1];
Temp_Value[0] = ~Temp_Value[0]+1;
if(Temp_Value[0]==0x00)
Temp_Value[1]++;
ng = 1;
}
Display_Digit[0] = df_Table[Temp_Value[0]&0x0f];
CurrentT = ((Temp_Value[0]&0xf0)>>4) | ((Temp_Value[1]&0x07)<<4);
Display_Digit[3] = CurrentT/100;
Display_Digit[2] = CurrentT%100/10;
Display_Digit[1] = CurrentT%10;
Current_Temp_Display_Buffer[11] = Display_Digit[0] + '0';
Current_Temp_Display_Buffer[10] = '.';
Current_Temp_Display_Buffer[9] = Display_Digit[1] + '0';
Current_Temp_Display_Buffer[8] = Display_Digit[2] + '0';
Current_Temp_Display_Buffer[7] = Display_Digit[3] + '0';
TEMP_NOW=Display_Digit[2]*10+Display_Digit[1]+Display_Digit[0]*0.1 ;
if(Display_Digit[3] == 0)
Current_Temp_Display_Buffer[7] = ' ';
if(Display_Digit[2] == 0&&Display_Digit[3]==0)
Current_Temp_Display_Buffer[8] = ' ';
if(ng)
{
TEMP_NOW=-(Display_Digit[2]*10+Display_Digit[1]+Display_Digit[0]*0.1);
if(Current_Temp_Display_Buffer[8] == ' ')
Current_Temp_Display_Buffer[8] = '-';
else if(Current_Temp_Display_Buffer[7] == ' ')
Current_Temp_Display_Buffer[7] = '-';
else
Current_Temp_Display_Buffer[6] = '-';
}
}
KEY.h:
#ifndef _KEY_H
#define _KEY_H
#include<global.h>
extern unsigned char Keys_Scan();
extern void set_num();
extern void set();
#endif
KEY.c:
#include <reg52.h>
#include <intrins.h>
#include <global.h>
#include"18B20.h"
uchar code KeyCodeTable[]=
{
0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88
};
void Delay_key()
{
uchar i;
for(i=0;i<200;i++);
}
uchar Keys_Scan()
{
uchar sCode,kCode,k;
P3 = 0xf0;
if((P3&0xf0)!=0xf0)
{
Delay_key();
if((P3&0xf0)!=0xf0)
{
sCode = 0xfe;
for(k=0;k<4;k++)
{
P3 = sCode;
if((P3&0xf0)!=0xf0)
{
kCode = ~P3;
if(kCode == KeyCodeTable[0]) return K_ONE;
else if(kCode == KeyCodeTable[1]) return K_TWO;
else if(kCode == KeyCodeTable[2]) return K_THREE;
else if(kCode == KeyCodeTable[3]) return K_FOUR;
else if(kCode == KeyCodeTable[4]) return K_FIVE;
else if(kCode == KeyCodeTable[5]) return K_SIX;
else if(kCode == KeyCodeTable[6]) return K_SEVEN;
else if(kCode == KeyCodeTable[7]) return K_EIGHT;
else if(kCode == KeyCodeTable[8]) return K_NINE;
else if(kCode == KeyCodeTable[9]) return K_UP;
else if(kCode == KeyCodeTable[10]) return K_DOWN;
else if(kCode == KeyCodeTable[11]) return K_CLEAR;
else if(kCode == KeyCodeTable[12]) return K_OK;
else if(kCode == KeyCodeTable[13]) return K_ZERO;
else if(kCode == KeyCodeTable[14]) return K_POINT;
else if(kCode == KeyCodeTable[15]) return K_SET;
}
else
sCode = _crol_(sCode,1);
}
}
}
return -1;
}
void set_num()
{
uchar key;
if(sel==0)
{
key = Keys_Scan();
if(K_CLEAR == key)
{
while(Keys_Scan() == K_CLEAR);
set_Temp_Display_Buffer[8] =' ';
set_Temp_Display_Buffer[9] =' ';
set_Temp_Display_Buffer[10]=' ';
set_Temp_Display_Buffer[11]=' '; // 48(0)49(1)50(2)51(3)52(4)53(5)54(6)55(7)56(8)57(9)
M_Count=0;
cold=0;
warm=0;
}
if(K_UP == key)
{
while(Keys_Scan() == K_UP);
if((set_Temp_Display_Buffer[11]>47)&&(set_Temp_Display_Buffer[11]<57))
{
set_Temp_Display_Buffer[11]+=1;
}
else if(set_Temp_Display_Buffer[11]==57)
{
set_Temp_Display_Buffer[11]=48;
if((set_Temp_Display_Buffer[9]>47)&&(set_Temp_Display_Buffer[9]<57))
{
set_Temp_Display_Buffer[9]+=1;
}
else if(set_Temp_Display_Buffer[9]==57)
{
set_Temp_Display_Buffer[9]=48;
if((set_Temp_Display_Buffer[8]>47)&&(set_Temp_Display_Buffer[8]<57))
{
set_Temp_Display_Buffer[8]+=1;
}
else if(set_Temp_Display_Buffer[8]==57)
{
set_Temp_Display_Buffer[8]=48;
}
}
}
}
if(K_DOWN == key) // 48(0)49(1)50(2)51(3)52(4)53(5)54(6)55(7)56(8)57(9)
{
while(Keys_Scan() == K_DOWN);
if((set_Temp_Display_Buffer[11]>48)&&(set_Temp_Display_Buffer[11]<58))
{
set_Temp_Display_Buffer[11]-=1;
}
else if(set_Temp_Display_Buffer[11]==48)
{
set_Temp_Display_Buffer[11]=57;
if((set_Temp_Display_Buffer[9]>48)&&(set_Temp_Display_Buffer[9]<58))
{
set_Temp_Display_Buffer[9]-=1;
}
else if(set_Temp_Display_Buffer[9]==48)
{
set_Temp_Display_Buffer[9]=57;
if((set_Temp_Display_Buffer[8]>48)&&(set_Temp_Display_Buffer[8]<58))
{
set_Temp_Display_Buffer[8]-=1;
}
else if(set_Temp_Display_Buffer[8]==48)
{
set_Temp_Display_Buffer[8]=57;
}
}
展开阅读全文