2024年2月21日发(作者:)

北京经济管理职业学院09届毕业论文

摘 要

在工业控制领域,温度控制的应用非常广泛,控制精度的高低直接影响到产品的质量及使用寿命,研究和设计高性能的温度控制系统具有非常重要的意义。随着计算机技术、控制理论和控制技术的发展,电加热炉的温度控制技术日趋成熟,已经成为工业生产中的一个重要部分。

目前控制算法的多样化也为温度控制提供了便利条件,应用较为普遍的有比例积分微分(PID)控制、模糊控制等。本设计根据加热炉的的控制要求设计了一种以单片机为核心的监控系统。系统采用热电偶温度传感器测温,实现了温度的实时监测、超限报警、显示与控制等功能。系统分为温度测量、A/D转换、单片机系统、键盘操作系统、温度显示电路、报警电路等若干个功能模块。该系统具有硬件成本低,控温精度较高,可靠性好,抗干扰能力强等特点。

关键词:电加热炉;单片机;温度控制;固态继电器

i

北京经济管理职业学院09届毕业论文

目录

1.绪论 ..............................................................................................................................1

1.1研究的背景和意义 ...............................................................................................1

1.2本课题的主要研究目标及内容 ..............................................................................1

1.2.1设计目标 ...................................................................................................1

1.2.2设计内容 ...................................................................................................1

2. 方案设计与比较 ...........................................................................................................1

2.1方案一 .................................................................................................................1

2.2方案二 .................................................................................................................2

2.3总体设计 .............................................................................................................2

3.系统的硬件设计.............................................................................................................3

3.1主要硬件介绍 ......................................................................................................3

3.1.1单片机 ......................................................................................................3

3.1.2 Pt100型铂电阻温度传感器 .......................................................................4

3.1.3 放大器AD522 ............................................................................................4

3.1.4模数转换器AD574 ......................................................................................5

3.1.5 液晶显示屏...............................................................................................6

3.1.6开关器件 ...................................................................................................6

3.2 温度检测电路设计...............................................................................................6

3.3 A/D转换电路设计 ...............................................................................................7

3.4显示电路设计 ......................................................................................................8

3.5电气开关及工作电路 ............................................................................................8

4系统软件设计 .................................................................................................................9

4.1程序设计 .............................................................................................................9

4.2主流程图 ........................................................................................................... 10

4.3主程序 ............................................................................................................... 10

附录................................................................................................................................ 25

总原理图.................................................................................................................. 25

结 论 ....................................................................................................................... 26

参考文献......................................................................................................................... 27

ii

北京经济管理职业学院09届毕业论文

iii

北京经济管理职业学院09届毕业论文

加热炉温度监控系统的设计

1.绪论

1.1研究的背景和意义

在现实生活当中,很多场合需要对温度进行智能控制,日常生活中最常见的要算空调和冰箱了,他们都能根据环境实时情况,结合人为的设定,对温度进行智能控制。工业生产中的电加热炉温度监控系统和培养基的温度监控系统都是计算机控制系统的典型应用。通过这次课程设计,我们将自己动手设计一个小型的由单片机控制的加热炉温度控制系统,目的在于将理论结合实践以加深我们对课本知识的理解。

1.2本课题的主要研究目标及内容

1.2.1设计目标

实现加热炉的温度自动监测,并对其温度进行控制。

1.2.2设计内容

利用所学过的知识设计一个温度控制系统。功能要求如下:

(1)能够利用温度传感器检测环境中的实时温度;

(2)能对所要求的温度进行设定;

(3)将传感器检测到得实时温度与设定值相比较,当环境中的温度高于或低于所设定的温度时,系统会自动做出相应的动作来改变这一状况,使系统温度始终保持在设定的温度值。

2. 方案设计与比较

2.1方案一

要想达到技术要求的内容,少不了以下几种器件:单片机、温度传感器、LCD第1页 共27页

北京经济管理职业学院09届毕业论文

显示屏、直流电动机等。其中单片机用作主控制器,控制其他器件的工作和处理数据;温度传感器用来检测环境中的实时温度,并将检测值送到单片机中进行数值对比;LCD显示屏用来显示温度、时间的数字值;直流电动机用来表示电加热炉的工作情况,转动表示电加热炉通电加热,停止转动表示电加热炉断电停止加热。

2.2方案二

系统由8051单片机、温度检测电路、模数转换电路、温度控制电路、8279键盘显示器等组成。炉内温度由热电阻测温元件和电阻元件构成的桥式电路测量并转换成电压信号送给放大器的输入端,使信号变成0-5V电压信号,再经多路转换开关CD4051将信号送入A/D转换器,将此数字量经过数字滤波,标度转换后,一方面通过LED将炉温显示出来;另一方面,将该温度值与被测温度值比较,根据其偏差值的大小,采用比例微分控制(PID控制),通过固态继电器控温电路控制电炉丝的加热功率大小,从而控制电炉的温度,使其逐渐趋于给定值且达到平衡。

2.3总体设计

综合方案一与方案二,总的设计思想是通过温、湿度传感器将温度、湿度值转换为电量输出,由A/D转换器对模拟信号进行数字化,被数字化的信号经过单片机处理后,送显示器及执行机构,完成温、湿度声光报警的功能,总体设计框图如图1所示。

图1

整体思路是这样的:首先我们通过按键设定所需要的温度值,然后利用温度传感器检测电加热炉的实时加热温度,并送至单片机与设定值进行比较。若检测值小于设定值,则无任何动作,电加热炉继续导通加热;若检测值大于设定值,则单片机控制光电耦合器导通,继电器动作,电加热炉断电停止加热。一旦炉温第2页 共27页

北京经济管理职业学院09届毕业论文

低于设定值,单片机又控制光电耦合器断开,继电器开关分离,电加热炉开始导通加热。这个过程中所设定的温度值和传感器检测到得温度值都要在LCD显示屏上显示出来,以方便操作人员观察。另外,还可以加上时钟模块,以方便计时。

这个设计思路相对比较简单,利用所学过的知识容易实现,加上光电耦合器用于隔离强电和弱电,比较安全。

3.系统的硬件设计

3.1主要硬件介绍

3.1.1单片机

8051有40条引脚。其中有2条主电源引脚,2条外接晶体引脚,4条控制或其它电源复用的引脚,32条I/O引脚。

MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布,请参照图2:

P0.0~P0.7 P0口8位双向口线(在引脚的39~32号端子)

P1.0~P1.7 P1口8位双向口线(在引脚的1~8号端子)

P2.0~P2.7 P2口8位双向口线(在引脚的21~28号端子)

P3.0~P3.7 P3口8位双向口线(在引脚的10~17号端子)

这4个I/O口 具有不完全相同的功能。

图2

第3页 共27页

北京经济管理职业学院09届毕业论文

3.1.2 Pt100型铂电阻温度传感器

图3 图4

概述:热电阻是利用物质在温度变化时本身电阻也随着发生变化的特性来测量温度的.当被测介体中有温度剃度存在时,所测的

温度是感温元件所在范围介质中的平均温度.

尽管各种热电阻的外形差异很大,但是它们的基本结构却大致相似,一般有感温元件,绝缘套管,保护管,和接线盒等主要部。

特点:

1) 压簧式感温元件,抗振性能好;

2) 测温精度高;

3) 机械强度高,耐压性能好;

4) 进口薄膜电阻元件,性能可靠稳定。

工作原理:

热电阻是利用物质在温度变化时,其电阻也随着发生变化的特征来测量温度的。当阻值变化时,工作仪表便显示出

阻值所对应的温度值。

3.1.3 放大器AD522

AD522是AD公司推出的高精度数据采集放大器,利用它可在恶劣的环境下获得高精度的数据。它的线性好,具有较高的共模抑制比、低电压漂移和低噪声的优点。

第4页 共27页

北京经济管理职业学院09届毕业论文

图5

AD522采用14脚DIP封装,图1.2给出了AD522的引脚排列,表1给出了各引脚的功能说明。

表1:AD522引脚说明

引脚 名称 功能

1 +INPUT 正输入端

2 R GAIN 增益补偿端

3 -INPUT 输入端

4 NULL 空端

5 V- 负电源端

6 NULL 空端

7 OUTPUT 输出端

8 V+ 正电源端

9 GND 地参考端

10 NC 不接

11 REF 参考端

12 SENSE 补偿端

13 DATA GUARD 数据保护端

14 R GAIN 增益补偿端

3.1.4模数转换器AD574

模拟量输入接口的功能是把工业生产控制现场送来的模拟信号转换成能接收的数字信号。

本次设计选用的A/D转换器为AD574。AD574是AD公司生产的12位逐次逼近型A/D转换芯片,它将A/D转换电路、基准电压、时钟、比较器、逐次逼近寄存器以及输出缓冲存储器等集成在一块芯片上,并具有三态输出。在一般情况下,无需加任何外部电路,只要接上+5V及-15V电源,加上模拟输入,给出启动转换信号,即可实现12位A/D转换。

第5页 共27页

北京经济管理职业学院09届毕业论文

图6

AD574的主要特性指标如下:

(1)分辨率 12位;

(2)转换时间 25µs;

(3)转换精度 ±2LSB;

(4)输入信号 单极性或双极性;

(5)电源 +5V及-15V;

AD574可由+5V及-15V供电,输入模拟电压可以是单极性0至+10V,或者是双极性+5V至-5V。输入电压极性可由BIP OFF引脚的连接方式而定。单极性输入时BIP OFF接地,双极性输入时应悬空或接+5V电源。

3.1.5 液晶显示屏

这里我选用LCDLM016L液晶显示屏作为系统的显示器件,如图所示,LCDLM016L采用标准的16脚接口,仿真时隐藏了背光正极和背光负极两个引脚。它通过D0-D78位数据端来与单片机进行数据和指令传输。

3.1.6开关器件

由于单片机与电动机之间需要用开关器件连接,并且前者用弱电控制,后者由强电控制,这就尤其需要注意安全问题。于是我想到了在课本中学过的高性能安全开关器件光电耦合器。光电耦合器是由一个发光器件和和一个光电转换器件组成,这里所用的光电耦合器OPTOCOUPLER-NPN是由一个发光二极管和一个光敏晶体管所组成。当发光二极管发光,就会使得光敏晶体管导通,继电器通电动作,将开关吸合,电动机回路断开。

3.2 温度检测电路设计

测量电路由测温元件和电阻元件构成的,如图1.3所示,此电路为典型的桥式测量电路,可在低电压、高阻抗、大噪声的环境中获得最佳性能。

第6页 共27页

北京经济管理职业学院09届毕业论文

图7

该桥式电路能够把温度变化所引起的热电阻阻值的变化转换成电压信号送给放大器的输入端,由于铂电阻安装在内,通过长导线接入控制台,为了减少引线电阻的影响采用三线制接法。

AD522是高精度集成放大器,AD522的第1引脚和第3引脚为信号差动输入端;第2、14引脚外接电阻RG用于调整放大倍数;第4、6引脚为条零端;第13引脚为数据屏蔽端;第12脚为测量端;第11脚为参考端;这两端的电压差即为加到负载上的电压信号。使用时,测量端与OUT输出端(第7脚)在外部相连接,输出放大后的信号。将信号地与放大器的电源地(第9脚)相连接为放大器的偏置电流提供通路。

3.3 A/D转换电路设计

在AD574由微处理器控制的情况下,可在初始化程序中将BC端置为高电平,DR端的状态由芯片内部决定,其初始状态也是高电平,此时输出总线处于高阻状态。当B/C端输入低电平信号后,AD574便开始转换。此时,DR端及输出端状态不变,经25µs后转换结束,DR端变低,延时500ns后,数据线上出现转换后的数据。当微处理器取完数据后转换命令可撤去,B/C置高电平。在B/C变化后的1.5µs,DR线随之自动变高,同时数据线呈现高阻,一次转换即完成。注意上次B/C命令撤除与下一次给出新的转换命令之间的时间间隔不得小于2µs,如果在转换进行期间B/C线变高,那么这次转换就停止,而且DR与数据线状态不变。

A/D转换结束时,A/D转换芯片会输出转换结束信号,通过CPU读取转换数据。

第7页 共27页

北京经济管理职业学院09届毕业论文

图8

3.4显示电路设计

这里我既然用LCDLM016L液晶显示屏作为系统的显示器件,那么这里我们将它与单片机的P2.0-P2.7、P0.0-P0.3口连接。

在显示屏上显示的内容包括单片机设定的温度值、传感器检测到的环境温度以及时钟,这个时钟是可以调整的,这样方便工作人员在对系统进行操作时有一个时间概念。

图9

3.5电气开关及工作电路

电器开关及工作电路如下图所示。

第8页 共27页

北京经济管理职业学院09届毕业论文

图10

如图所示,光电耦合器1脚接电源,2脚接单片机P3.2脚。工作过程用以下三个阶段来描述:

1)单片机将温度传感器送入的值与设定值进行比较,若送入值小于设定值,则P3.2脚保持高电平,这样发光二极管不发光,光敏晶体管保持高阻态,继电器也不会工作,电动机和灯泡维持导通,相当于电炉继续加热,指示灯亮;

2)一旦送入值比设定值大,单片机将会控制P3.2脚变为低电平,发光二极管导通发光,光敏晶体管受光照影响导通,继而继电器工作,电磁铁将单刀双掷开关吸向左端,使电动机和灯泡同时停止工作,这就相当于电炉断电,停止加热;

3)电炉短路一段时间后,必然导致炉温降低,而温度传感器在不间断地检测炉温,当检测值低于设定值后,单片机又控制P3.2脚恢复高电平,光电耦合器恢复高阻态,继电器断电,单刀双掷开关被弹回右端,电动机和灯泡又开始工作,这相当于电炉从新开始加热。

4系统软件设计

4.1程序设计

由于整个程序工程量比较大,我采用模块化设计方法来设计这个程序。首先定义在后面将会用到的变量,不可能一次定义准确,所以边定义边补充。然后编写子函数,包括LCM初始化子函数、显示指定坐标的一个字符子函数、AD574初始化函数、AD574延迟子函数、读取AD574当前温度子函数、液晶显示子函数、设定工作模式子函数、定时器t0中断子函数等子程序,最后是主函。设定加热炉温度初值函数、比较函数等等。

第9页 共27页

北京经济管理职业学院09届毕业论文

4.2主流程图

图11

4.3主程序

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define BUSY 0x80 //lcd忙检测标志

#define DATAPORT P0 //定义P0口为LCD通讯端口

#define PLAYE_ADDR XBYTE[0XBFFF] //语音报警地址

sbit RED_ALARM=P1^0; //红色指示灯

sbit WRITE_ALARM=P1^1; //白色指示灯

第10页 共27页

北京经济管理职业学院09届毕业论文

sbit GREEN_ALARM=P1^2; //绿色指示灯

sbit BLUE_ALARM=P1^3;

sbit P1_4=P1^4; //时钟调整

sbit P1_5=P1^5; //时钟加

sbit P1_6=P1^6; //时钟减

sbit DQ = P1^7; //定义ds18b20通信端口

sbit LCM_RS=P2^0; //数据/命令端

sbit LCM_RW=P2^1; //读/写选择端

sbit LCM_EN=P2^2;

sbit sda=P2^3; //IO口定义

sbit scl=P2^4; //LCD使能信号

sbit ad_busy=P3^2; //adc中断方式接口

sbit RECLED_EOC=P3^5; //ISD1420放音结束查询标志

sbit OUT=P3^7;

uchar ad_data; //ad采样值存储

uchar seconde; //定义并初始化时钟变量

uchar minite;

uchar hour;

uchar mstcnt=0;

uchar temp1,temp2,temp; //温度显示变量

uchar t,set;

uchar K;

bit ON_OFF=0;

bit outflag;

bit write=0;

uchar code str0[]={"--- : : --- "};

uchar code str1[]={"SET: C SA: . C"};

void delay_LCM(uint); //LCD延时子程序

void initLCM( void); //LCD初始化子程序

void lcd_wait(void); //LCD检测忙子程序

void WriteCommandLCM(uchar WCLCM,uchar BusyC); //写指令到ICM子函数

void WriteDataLCM(uchar WDLCM); //写数据到LCM子函数

void DisplayOneChar(uchar X,uchar Y,uchar DData) //显示指定坐标的一个字符子函数

void DisplayListChar(uchar X,uchar Y,uchar code *DData);//显示指定坐标的一串字符子函数

void init_timer0(void); //定时器初始化

void displayfun1(void);

void displayfun2(void);

void displayfun3(void);

void displayfun4(void);

void keyscan(void ); //键盘扫描子程序

第11页 共27页

北京经济管理职业学院09届毕业论文

void set_adj(void);

void inc_key(void);

void dec_key(void);

void delay_18B20(unsigned int i);

void Init_DS18B20(void) ;

uchar ReadOneChar(void);

void WriteOneChar(unsigned char dat);

void ReadTemperature(void);

void ad0809(void);

void playalarm(void);

/*********延时K*1ms,12.000mhz**********/

void delay_LCM(uint k)

{

uint i,j;

for(i=0;i

{

for(j=0;j<60;j++)

{;}

}

}

/**********写指令到LCM子函数************/

void WriteCommandLCM(uchar WCLCM,uchar BusyC)

{

if(BusyC)lcd_wait();

DATAPORT=WCLCM;

LCM_RS=0; // 选中指令寄存器

LCM_RW=0; // 写模式

LCM_EN=1;

_nop_();

_nop_();

_nop_();

LCM_EN=0;

}

/**********写数据到LCM子函数************/

void WriteDataLCM(uchar WDLCM)

{

lcd_wait( ); //检测忙信号

DATAPORT=WDLCM;

LCM_RS=1; // 选中数据寄存器

LCM_RW=0; // 写模式

LCM_EN=1;

_nop_();

第12页 共27页

北京经济管理职业学院09届毕业论文

_nop_();

_nop_();

LCM_EN=0;

}

/***********lcm内部等待函数*************/

void lcd_wait(void)

{

DATAPORT=0xff;

LCM_EN=1;

LCM_RS=0;

LCM_RW=1;

_nop_();

while(DATAPORT&BUSY)

{ LCM_EN=0;

_nop_();

_nop_();

LCM_EN=1;

_nop_();

_nop_();

}

LCM_EN=0;

}

/**********LCM初始化子函数***********/

void initLCM( )

{

DATAPORT=0;

delay_LCM(15);

WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号

delay_LCM(5);

WriteCommandLCM(0x38,0);

delay_LCM(5);

WriteCommandLCM(0x38,0);

delay_LCM(5);

WriteCommandLCM(0x38,1);//8bit数据传送,2行显示,5*7字型,检测忙信号

WriteCommandLCM(0x08,1); //关闭显示,检测忙信号

WriteCommandLCM(0x01,1); //清屏,检测忙信号

WriteCommandLCM(0x06,1); //显示光标右移设置,检测忙信号

WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号

}

/****************显示指定坐标的一个字符子函数*************/

void DisplayOneChar(uchar X,uchar Y,uchar DData)

{

Y&=1;

第13页 共27页

北京经济管理职业学院09届毕业论文

X&=15;

if(Y)X|=0x40; //若y为1(显示第二行),地址码+0X40

X|=0x80; //指令码为地址码+0X80

WriteCommandLCM(X,0);

WriteDataLCM(DData);

}

/***********显示指定坐标的一串字符子函数***********/

void DisplayListChar(uchar X,uchar Y,uchar code *DData)

{

uchar ListLength=0;

Y&=0x01;

X&=0x0f;

while(X<16)

{

DisplayOneChar(X,Y,DData[ListLength]);

ListLength++;

X++;

}

}

/***********ds18b20延迟子函数(晶振12MHz )*******/

void delay_18B20(unsigned int i)

{

while(i--);

}

/**********ds18b20初始化函数**********************/

void Init_DS18B20(void)

{

unsigned char x=0;

DQ = 1; //DQ复位

delay_18B20(8); //稍做延时

DQ = 0; //单片机将DQ拉低

delay_18B20(80); //精确延时 大于 480us

DQ = 1; //拉高总线

delay_18B20(14);

x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败

delay_18B20(20);

}

/***********ds18b20读一个字节**************/

unsigned char ReadOneChar(void)

{

uchar i=0;

第14页 共27页

北京经济管理职业学院09届毕业论文

uchar dat = 0;

for (i=8;i>0;i--)

{

DQ = 0; // 给脉冲信号

dat>>=1;

DQ = 1; // 给脉冲信号

if(DQ)

dat|=0x80;

delay_18B20(4);

}

return(dat);

}

/*************ds18b20写一个字节****************/

void WriteOneChar(uchar dat)

{

unsigned char i=0;

for (i=8; i>0; i--)

{

DQ = 0;

DQ = dat&0x01;

delay_18B20(5);

DQ = 1;

dat>>=1;

}

}

/**************读取ds18b20当前温度************/

void ReadTemperature(void)

{

unsigned char a=0;

unsigned char b=0;

unsigned char t=0;

Init_DS18B20();

WriteOneChar(0xCC); // 跳过读序号列号的操作

WriteOneChar(0x44); // 启动温度转换

delay_18B20(100); // this message is wery important

Init_DS18B20();

WriteOneChar(0xCC); //跳过读序号列号的操作

WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)就是温度

delay_18B20(100);

a=ReadOneChar(); //读取温度值低位

b=ReadOneChar(); //读取温度值高位

temp1=b<<4;

第15页 共27页

前两个

北京经济管理职业学院09届毕业论文

temp1+=(a&0xf0)>>4;

temp2=a&0x0f;

temp=((b*256+a)>>4); //当前采集温度值除16得实际温度值

}

/***************液晶显示子函数1正常显示*****************/

void displayfun1(void)

{

WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号

DisplayListChar(0,0,str0);

DisplayListChar(0,1,str1);

DisplayOneChar(3,0,hour/10+0x30); //液晶上显示小时

DisplayOneChar(4,0,hour%10+0x30);

DisplayOneChar(6,0,minite/10+0x30); //液晶上显示分

DisplayOneChar(7,0,minite%10+0x30);

DisplayOneChar(9,0,seconde/10+0x30); //液晶上显示秒

DisplayOneChar(10,0,seconde%10+0x30);

DisplayOneChar(4,1,K/10+0x30); //液晶上显示设定的温度

DisplayOneChar(5,1,K%10+0x30);

DisplayOneChar(11,1,temp1/10+0x30); //液晶上显示测得的温度

DisplayOneChar(12,1,temp1%10+0x30);

DisplayOneChar(14,1,temp2/10+0x30);

if(ON_OFF==0) //若温控标志为0

{

DisplayOneChar(14,0,0x4f); // 液晶上显示不控温的标志

DisplayOneChar(15,0,0x46);

}

else

{

DisplayOneChar(14,0,0x4f); // 液晶上显示控温的标志

DisplayOneChar(15,0,0x4e);

if(outflag==1)

DisplayOneChar(0,0,0x7c);

else

DisplayOneChar(0,0,0xef);

}

第16页 共27页

北京经济管理职业学院09届毕业论文

}

/************液晶显示子函数2***************/

void displayfun2(void)

{

WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号

DisplayListChar(0,0,str0);

DisplayListChar(0,1,str1);

DisplayOneChar(6,0,minite/10+0x30);

DisplayOneChar(7,0,minite%10+0x30);

DisplayOneChar(9,0,seconde/10+0x30);

DisplayOneChar(10,0,seconde%10+0x30);

DisplayOneChar(4,1,K/10+0x30);

DisplayOneChar(5,1,K%10+0x30);

DisplayOneChar(11,1,temp1/10+0x30);

DisplayOneChar(12,1,temp1%10+0x30);

DisplayOneChar(14,1,temp2/10+0x30);

WriteCommandLCM(0x0f,1); //显示屏打开,光标显示,闪烁,检测忙信号

DisplayOneChar(3,0,hour/10+0x30);

DisplayOneChar(4,0,hour%10+0x30);

}

/**************液晶显示子函数3*****************/

void displayfun3(void)

{

WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号

DisplayListChar(0,0,str0);

DisplayListChar(0,1,str1);

DisplayOneChar(3,0,hour/10+0x30);

DisplayOneChar(4,0,hour%10+0x30);

DisplayOneChar(9,0,seconde/10+0x30);

DisplayOneChar(10,0,seconde%10+0x30);

DisplayOneChar(4,1,K/10+0x30);

DisplayOneChar(5,1,K%10+0x30);

第17页 共27页

北京经济管理职业学院09届毕业论文

DisplayOneChar(11,1,temp1/10+0x30);

DisplayOneChar(12,1,temp1%10+0x30);

DisplayOneChar(14,1,temp2/10+0x30);

WriteCommandLCM(0x0f,1); //显示屏打开,光标显示,闪烁,检测忙信号

DisplayOneChar(6,0,minite/10+0x30);

DisplayOneChar(7,0,minite%10+0x30);

}

/**************液晶显示子函数4 *****************/

void displayfun4(void)

{

WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号

DisplayListChar(0,0,str0);

DisplayListChar(0,1,str1);

DisplayOneChar(3,0,hour/10+0x30);

DisplayOneChar(4,0,hour%10+0x30);

DisplayOneChar(6,0,minite/10+0x30);

DisplayOneChar(7,0,minite%10+0x30);

DisplayOneChar(9,0,seconde/10+0x30);

DisplayOneChar(10,0,seconde%10+0x30);

DisplayOneChar(11,1,temp1/10+0x30);

DisplayOneChar(12,1,temp1%10+0x30);

DisplayOneChar(14,1,temp2/10+0x30);

WriteCommandLCM(0x0f,1); //显示屏打开,光标显示,闪烁,检测忙信号

DisplayOneChar(4,1,K/10+0x30);

DisplayOneChar(5,1,K%10+0x30);

}

/**************键盘扫描子函数******************/

void keyscan(void)

{

uchar xx; //局部变量

第18页 共27页

北京经济管理职业学院09届毕业论文

P1=0xff;

if(P1!=0xff)

{

delay_LCM(50);

if(P1!=0xff)

{

xx=P1;

switch(xx) // 根据按键状态,调用不同的子函数

{

case 0xfe:set_adj(); break;

case 0xfd:inc_key(); break;

case 0xfb:dec_key(); break;

case

0xf7:{delay_LCM(150);ON_OFF=!ON_OFF;while(!BLUE_ALARM);} break;

default:break;

}

}

}

}

/**************设定工作模式子函数****************/

void set_adj(void)

{

delay_LCM(100);

set++;

if(set>=4)set=0;

while(!RED_ALARM);

}

/****************按键加法子函数******************/

void inc_key(void)

{

delay_LCM(150);

switch(set)

{

case 0:if(P1==0xf7){delay_LCM(150);ON_OFF=!ON_OFF;}

break;

case 1:hour++; if(hour>=23)hour=23; break;

case 2:minite++; if(minite>=59)minite=59;break;

case 3:K++;if(K>=99)K=99; break;

default:break;

}

while(!WRITE_ALARM);

}

/****************按键减法子函数*****************/

void dec_key(void)

第19页 共27页

北京经济管理职业学院09届毕业论文

{

delay_LCM(150);

switch(set)

{

case 0:if(P1==0xf7){delay_LCM(150);ON_OFF=!ON_OFF;} break;

case 1:hour--; if(hour<=0)hour=0; break;

case 2:minite--;if(minite<=0)minite=0;break;

case 3:K--;if(K<=1)K=1; break;

default:break;

}

while(!GREEN_ALARM);

}

/************24C02读写驱动程序**************/

void delay1(uchar x)

{

uint i;

for(i=0;i

}

void flash()

{ ; ; }

void x24c02_init() //24c02初始化子程序

{

scl=1;

flash();

sda=1;

flash();

}

void start() //启动I2C总线

{

sda=1;

flash();

scl=1;

flash();

sda=0;

flash();

scl=0;

flash();

}

void stop() //停止I2C总线

{

sda=0;

flash();

scl=1;

flash();

第20页 共27页

北京经济管理职业学院09届毕业论文

sda=1;

flash();

}

void writex(uchar j) //写一个字节

{

uchar i,temp;

temp=j;

for (i=0;i<8;i++)

{

temp=temp<<1;

scl=0;

flash();

sda=CY;

flash();

scl=1;

flash();

}

scl=0;

flash();

sda=1;

flash();

}

uchar readx() //读一个字节

{

uchar i,j,k=0;

scl=0;

flash();

sda=1;

for (i=0;i<8;i++)

{

flash();

scl=1;

flash();

if (sda==1) j=1;

else j=0;

k=(k<<1)|j;

scl=0;

}

flash();

return(k);

}

void clock() //I2C总线时钟

{

uchar i=0;

第21页 共27页

北京经济管理职业学院09届毕业论文

scl=1;

flash();

while ((sda==1)&&(i<255))i++;

scl=0;

flash();

}

////////从24c02的地址address中读取一个字节数据/////

uchar x24c02_read(uchar address)

{

uchar i;

start();

writex(0xa0);

clock();

writex(address);

clock();

start();

writex(0xa1);

clock();

i=readx();

stop();

delay1(10);

return(i);

}

//////向24c02的address地址中写入一字节数据info/////

void x24c02_write(uchar address,uchar info)

{

EA=0;

start();

writex(0xa0);

clock();

writex(address);

clock();

writex(info);

clock();

stop();

EA=1;

delay1(50);

}

/***************定时器t0初始化*******************/

void init_timer0(void)

{

TMOD=0x01; //time0为定时器,方式1

TH0=0x3c; //预置计数初值

第22页 共27页

北京经济管理职业学院09届毕业论文

TL0=0xb0;

EA=1;

ET0=1;

TR0=1;

}

/***********定时器t0中断子函数**************/

void timer0(void) interrupt 1 using 0 //定时器0方式1,50ms中断一次

{

TH0=0x3c;

TL0=0xb0;

mstcnt++;

if(mstcnt>=20 ) {seconde++; write=1; mstcnt=0; }

if(seconde>=60) {minite++; seconde=0;}

if(minite>=60 ) {hour++; minite=0; }

if(hour>=24 ) {hour=0;}

keyscan( ); //按键扫描

}

/***********the main funtion*************/

void main(void)

{

P1=0xff; //初始化p1口,全设为1

x24c02_init(); //初始化24C02

K=x24c02_read(2); //读出保存的数据赋于K

seconde=x24c02_read(4);

minite=x24c02_read(6);

hour=x24c02_read(8);

delay_LCM(500); //延时500ms启动

initLCM( ); //LCD初始化

init_timer0( ); //时钟定时器0初始化

Init_DS18B20( ) ; //DS18B20初始化

DisplayListChar(0,0,str0);

DisplayListChar(0,1,str1);

while (1)

{

keyscan(); //按键扫描

ReadTemperature(); //温度采集

switch(set) //LCD根据工作模式显示

{

case 0:displayfun1();delay_LCM(1000);break; //正常工作显示

case 1:displayfun2();delay_LCM(1000);break; //调整时显示

case 2:displayfun3();delay_LCM(1000);break; //调整分显示

case 3:displayfun4();delay_LCM(1000);break; //温度设定

第23页 共27页

北京经济管理职业学院09届毕业论文

default:break;

}

keyscan( ); //相当于延时

if(ON_OFF==1) //若温控标志位1, 控制LAMP动作

{

if(temp1>=K+1){outflag=1;OUT=0;}

if(temp1

{

delay_LCM(1000);

if(temp1

}

}

else{outflag=0;OUT=1;}

if(write==1) //判断计时器是否计时一秒

{

write=0; //清零

x24c02_write(8,hour); //在24c02的地址2中写入数据hour

delay_LCM(11);

x24c02_write(6,minite);

delay_LCM(11);

x24c02_write(4,seconde);

delay_LCM(11);

x24c02_write(2,K);

}

}

}

第24页 共27页

北京经济管理职业学院09届毕业论文

附录

总原理图

12V+15VR11121314INPUTRGAININPUTNULLV-NULLOUTPUTV+GNDNCREFSENSEGUARDRGAIN+12VPTVCCAD522RRG10KMOTOR

SERVO+rAVCC+15VR?POT2OPTOISO-POT23323134232221A12100+15V11121314+5VSTS12/8DB11 MSBCSDB10A0DB9R/CDB8CEDB7AD57415VDB6TEFOUTDB5ACDB4REFINDB3-15VDB2BIPOFFDB110V INDB0 LSB20V INDC+12V28272625242322212-15VLF3985V100100KP1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RST8051P3.0(RSD)P3.1(TSD)P3.2(INTO)P3.3(INT1)P3.4(T0)P3.5(T1)P3.6(WR)P3.7(RD)XTAL2XTAL1GNDVCCP0.0(AD0)P0.1(AD1)P0.2(AD2)P0.3(AD3)P0.4(AD4)P0.5(AD5)P0.6(AD6)P0.7(AD7)EA/VPPALE/PROGPSENP2.7(A15)P2.6(A14)P2.5(A13)P2.4(A12)P2.3(A11)P2.2(A10)P2.1(A9)P2.0(A8)8051LCD100K11121314-12V

第25页 共27页

北京经济管理职业学院09届毕业论文

结 论

在本设计系统中,用8051单片机作为主控机,通过外部程序扩展电路来实现大容量的软件程序的输入承载量,通过数据采集通道来实现对炉内各处温度的检测,在键盘及显示电路一体化的情况下来实现对数据的输入及对采集到的数据进行显示。在CPU中把数据进行进一步处理后一方面送去显示,并判断是否需要报警;另一方面与给定值进行比较,然后根据偏差值进行控制计算。本文一方面结合实际应用经验,力求做到较为系统和全面的介绍系统设计与实施技术;另一方面尽可能反应出温控系统的发展趋势,以及其先进性和实用性。

本系统在硬件设计的基础上,在软件编程上选择查询方式,再进行相关的软件设计和开发,通过所需的多机通信接口与总机的连接可实现实时监控,不漏报的技术要求。,虽然目前的工业炉温度控制技术已经很先进,但为了适应科学技术的不断进步,对炉温的控制技术还需进一步的提高。

第26页 共27页

北京经济管理职业学院09届毕业论文

参考文献

[1] 于海生.微型计算机控制技术.清华大学出版社,2004

[2] 谭浩强.C程序设计(第三版). 清华大学出版社,2006

[3] 戴焯. 传感与检测技术. 武汉理工大学出版社,2006

[4] 张毅刚. 单片机原理及应用. 高等教育出版社,2003

[5] 柯节成. 简明电子元件器件手册. 高等教育出版社,2005

[6] 沙占友.新型单片机开关电源的设计与应用.电子工业出版社,2001

[7] 皮大能,关鸿霞,南光群.一种实用的电炉控温方法[J].自动化仪表,2005

[8] 杨长松等.单片机测控系统干扰与抗干扰措施[J].自动化与仪表,2003

[9] 张小春. KP表在电阻炉温控系统中的应用[J].自动化仪表,2005

第27页 共27页