基于STC单片机恒温控制系统的设计及C语言程序_第1页
基于STC单片机恒温控制系统的设计及C语言程序_第2页
基于STC单片机恒温控制系统的设计及C语言程序_第3页
基于STC单片机恒温控制系统的设计及C语言程序_第4页
基于STC单片机恒温控制系统的设计及C语言程序_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 目录第1章 恒温控制系统完成的功能1 第2章  总体设计方案1  2.1  单片机主控制电路1   2.3  温度测量与控制模块1  2.2  人机交互模块2第3 章 硬件电路详细设计 2  3.1  单片机最小系统2  3.2  人机交互模块3 3.3  测温模块5  3.4  温度控制模块5  3.5  总电路图6  第4 章 系统软件设计6 4.1  原理框图6  4.

2、2  详细程序8  结论16参考文献16 第1章 恒温控制系统完成的功能 本恒温控制系统设计采用现在流行的51系列单片机,配以DS18B20数字温度传感器,能够较精确的控制温度,并显示设定温度与当前温度。单片机将实时检测到的温度与设定的温度进行比较,根据两者差值决定是否让加热电阻加热以及加热多长时间。 实现了基本的温度控制功能:当温度低于设定温度1时,单片机输出高电平,控制大功率三极管导通,进而使得加热电阻通电,加热电阻加热,温度快速上升,同时红灯亮。当温度上升到与设定温度差值小于1时,单片机输出高低电平的时间不相等,也就是加热电阻的通断时间不等,使得温度缓慢上升

3、,同时红、绿灯都亮。当温度上升到设定温度时,单片机输出低电平,三极管截止,加热电阻停止加热,同时绿灯亮。 数码管实时显示温度,精确到小数点后一位,同时可以通过2个按键调节设定温度。 第2章  总体设计方案系统总体框图如图1所示。 单 片 机 被 控 制 对 象温度测量人机交互模块 温度控制2.1 单片机主控制电路  主控制电路采用STC 89C52的单片机作为控制主机。89C52作为51系列单片机的一种,其使用性能稳定,价格便宜,完全能够满足此次设计的需求。89C52内部集成了程序存储器,可以装载用户程序,方便使用。 外 部 接 口 电 路 电 源 ST

4、C 89C52 单 片 机 时钟电路 复位电路烧录口2.2 温度测量与控制模块 温度测量模块采用美国DALLAS半导体公司的DS18B20温度传感器。该传感器与传统的热敏电阻等测温元件相比,它能直接读出被测温度。这一部分主要完成对温度信号的采集和转换工作,由DS18B20数字温度传感器及其与单片机的接口部分组成。数字温度传感器DS18B20把采集到的温度通过数据引脚P1.3传到单片机,单片机接受温度并存储。 温度控制模块采用FAIRYCHILD的8N60C开关管、10W10的水泥电阻。由单片机根据设定温度与测量温度之差决定输出高低电平,控制8N60C开关管的通断,近而控制水泥电阻加热

5、。STC 89C52单片机被 控 制对 象DS18B20温度传感器控制信号8N60C开关管10W1的水泥电阻10V直流电2.2 人机交互模块 人机交互模块主要包括键盘、数码管、LED指示灯,其中键盘用于供用户输入温度期望值,数码管用于显示用户设定温度及控制对象中温度,LED指示灯用于指示系统工作状态(加热中,加热过高时)。 键盘 STC 89C52 单 片 机 数码管 LED指示灯 第3章  硬件电路详细设计3.1 单片机最小系统: 包括电源电路、复位电路、时钟电路、烧录口共四个单元,其中电源电路与烧录口省略。电路图如下: 其中,31端口接高电平,表明单片机复位后

6、访问内部程序存储器;由于P0口作为输出口时处于漏极开路状态,所以必须外接上拉电阻,如果后期实验中不使用其作为输出口,则此处可省略。 3.2 人机交互模块:(1) 、数码管: 其中,采用8段共阴数码管,P0、P2口输出段码、位码,P1.4和P1.6为段锁存,P1.5和P1.7为位锁存。数码管上面四位显示用户测量温度,下面四位显示用户设定温度。(2) 、LED指示灯: 其中,指示灯绿色用于指示加热温度过高、红色用于指示加热中,当两个LED均亮起时,表示当前温度接近设定温度,也可理解成保温状态。(3) 、按键 其中,上面的按键表示温度上升1、下面的按键表示温度下降1。3.3 测温

7、模块: 测温模块采用美国DALLAS半导体公司的DS18B20温度传感器。其输出与P1.3相连。3.4 温度控制模块: 8N60C是仙童公司出品的一款N沟道的MOSFET,最小开启电压为4V,最大关断电压为2V,故可以直接接在单片机IO口,由高低电平控制通断。 8N60C的栅极(G)与P1.2相连,源级(S)接地(注意与单片机控制端共地,否则将导致无法关断),漏极(D)接水泥电阻,水泥电阻另一端接10V直流电。 水泥电阻是将电阻线绕在无碱性耐热瓷件上,外面加上耐热、耐湿及耐腐蚀材料,并把绕线电阻体放入方形瓷器框内,用特殊不燃性耐热水泥充填密封而成。水泥电阻的外侧主要是陶瓷材质。3.5

8、 总电路图: 第4章 系统软件设计4.1 原理框图:(1) 、主程序 开始 按键输入端口置高,定时器初始化调用读温度子程序显示被测温度和用户设定温度Y是否按下加温度设定键?设定温度加1NY是否按下减温度设定键?设定温度减1N初始设定温度为20当前温度<设定温度1YP1.2置高电平,加热电阻加热,红灯亮NY当前温度>=设定温度?P1.2置低电平,加热电阻停止加热,绿灯亮N调节P1.2的高低电平时间长短的比例,红绿灯同时亮系统是否断电?NY 结束(2) 、定时器T0中断程序定时器T0中断 定时器初始化调用数码管显示子程序N计数>300?Y 读温度标志置1 中断

9、返回4.2 详细程序:(1)、主程序/*- 名称:恒温控制系统采用DS18b20并用数码管显示当前测的温度 和用户设定的温度,用户可用按键增加或减小温度。 编写:1013105班小组 日期:2013.10 内容:精确到小数点后一位,显示格式 符号 xxx.x C-*/#include<reg52.h> /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include "18b20.h"#include "delay.h"#define DataPort0 P0 /定义数据端口 程序中遇到DataPort0 则用P0

10、替换#define DataPort1 P2 /定义数据端口 程序中遇到DataPort1 则用P1 替换sbit LED_Green=P10;/定义绿色指示灯sbit LED_Red=P11;/定义红色指示灯sbit PWM=P12; /定义加热端口sbit LATCH1=P14;/定义锁存使能端口 段锁存sbit LATCH2=P15;/ 位锁存sbit LATCH3=P16;/定义锁存使能端口 段锁存sbit LATCH4=P17;/ 位锁存sbit KEY_ADD=P32;/定义按键输入端口 增加1度sbit KEY_DEC=P33;/减小1度bit ReadTempFlag1;/定义

11、读时间标志1unsigned char code DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示段码值09unsigned char code WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分别对应相应的数码管点亮,即位码unsigned char TempData18; /存储显示值的全局变量1unsigned char TempData28; /存储显示值的全局变量2/*- 函数声明-*/void DelayUs2x(unsigned char t);/us延时函

12、数 void DelayMs(unsigned char t); /ms延时函数void Display1(unsigned char FirstBit,unsigned char Num);/数码管1显示当前测的温度函数void Display2(unsigned char FirstBit,unsigned char Num);/数码管2显示用户设定温度函数void Init_Timer0(void);/定时器T0初始化函数/*- 主函数-*/void main (void) unsigned int TempH,TempL,temp; unsigned char usertemp=20;

13、/开机设定20度 KEY_ADD=1; /按键输入端口电平置高 KEY_DEC=1; Init_Timer0(); while (1) /主循环 /*- 显示当前测得的温度-*/ if(ReadTempFlag1=1) ReadTempFlag1=0; temp=ReadTemperature(); TempH=temp>>4; TempL=temp&0x0F; TempL=TempL*6/10;/小数近似处理 if(TempH/10=0) /不考虑负温度 TempData10=0;/消隐 else TempData10=DuanMaTempH/10; /十位温度 Temp

14、Data11=DuanMaTempH%10|0x80; /个位温度,带小数点 TempData12=DuanMaTempL;/显示小数点后一位 TempData13=0x39; /显示C符号 /*- 显示用户设定的温度-*/ if(!KEY_ADD) /如果检测到低电平,说明按键按下 DelayMs(10); /延时去抖,一般10-20ms if(!KEY_ADD) /再次确认按键是否按下,没有按下则退出 while(!KEY_ADD);/如果确认按下按键等待按键释放,没有释放则一直等待 if(usertemp<50) /加操作 usertemp+; if(!KEY_DEC) /如果检测

15、到低电平,说明按键按下 DelayMs(10); /延时去抖,一般10-20ms if(!KEY_DEC) /再次确认按键是否按下,没有按下则退出 while(!KEY_DEC);/如果确认按下按键等待按键释放,没有释放则一直等待 if(usertemp>10) /减操作 usertemp-; TempData20=DuanMausertemp/10; TempData21=DuanMausertemp%10|0x80; TempData22=DuanMa0; TempData23=0x39; Display2(0,4);/*- 红绿灯指示加温状态 -*/ if(TempH<use

16、rtemp-1)/当测的温度低于用户设定温度1度时,红灯亮, /PWM=1三极管导通,加热电阻快速加热 LED_Red=0; LED_Green=1; PWM=1; else if(TempH>=usertemp)/当测的温度高于用户设定温度时,绿灯亮, /PWM=0三极管关闭,加热电阻停止加热 LED_Red=1; LED_Green=0; PWM=0; else / 当测的温度与用户设定温度的差值小于1度且没达到用户设定温度时,加热 LED_Red=0;/电阻加热,红绿灯都亮,当温度超过设定温度时,绿灯亮,加热电阻又 LED_Green=0;/会断开,从而导致温度维持一定范围,红灯会

17、闪烁,代表温度恒定。 PWM=1; /*- 显示函数,用于动态扫描数码管 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示 如输入0表示从第一个显示。 Num表示需要显示的位数,如需要显示99两位数值则该值输入2-*/void Display1(unsigned char FirstBit,unsigned char Num) static unsigned char i=0; DataPort0=0; /清空数据,防止有交替重影 LATCH1=1; /段锁存 LATCH1=0; DataPort0=WeiMai+FirstBit; /取位码 LATCH2=

18、1; /位锁存 LATCH2=0; DataPort0=TempData1i; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; i+; if(i=Num) i=0;void Display2(unsigned char FirstBit,unsigned char Num) unsigned char i; for(i=0;i<Num;i+) DataPort1=0; /清空数据,防止有交替重影 LATCH3=1; /段锁存 LATCH3=0; DataPort1=WeiMai+FirstBit; /取位码 LATCH4=1; /位锁存 LATCH4=0; Data

19、Port1=TempData2i; /取显示数据,段码 LATCH3=1; /段锁存 LATCH3=0; DelayMs(2); / 扫描间隙延时,时间太长会闪烁,太短会造成重影 /*- 定时器T0初始化子程序-*/void Init_Timer0(void) TMOD |= 0x01; /使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响 /TH0=0x00; /给定初值 /TL0=0x00; EA=1; /总中断打开 ET0=1; /允许定时器T0中断 TR0=1; /启动定时器T0/*- 定时器T0中断子程序-*/void Timer0_isr(v

20、oid) interrupt 1 static unsigned int num; TH0=(65536-2000)/256; /重新赋值 2ms TL0=(65536-2000)%256; Display1(0,4); / 调用数码管扫描 num+; if(num=300) / num=0; ReadTempFlag1=1; /读标志位置1(2) 、18B20.c程序#include"delay.h"#include"18b20.h"/*- 18b20初始化-*/bit Init_DS18B20(void) bit dat=0; DQ = 1; /DQ

21、复位 DelayUs2x(5); /稍做延时 DQ = 0; /单片机将DQ拉低 DelayUs2x(200); /精确延时 大于 480us 小于960us DelayUs2x(200); DQ = 1; /拉高总线 DelayUs2x(50); /1560us 后 接收60-240us的存在脉冲 dat=DQ; /如果x=0则初始化成功, x=1则初始化失败 DelayUs2x(25); /稍作延时返回 return dat;/*- 读取一个字节-*/unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0

22、;for (i=8;i>0;i-) DQ = 0; / 给脉冲信号 dat>>=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; DelayUs2x(25); return(dat);/*- 写入一个字节-*/void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i>0; i-) DQ = 0; DQ = dat&0x01; DelayUs2x(25); DQ = 1; dat>>=1; DelayUs2x(25);/*- 读取温度-*/unsign

23、ed int ReadTemperature(void)unsigned char a=0;unsigned int b=0;unsigned int t=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换DelayMs(10);Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar(); /低位b=ReadOneChar(); /高

24、位b<<=8;t=a+b;return(t);(3) 、18B20.h程序#ifndef _DS18B20_H_#define _DS18B20_H_#include<reg52.h> /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include<intrins.h>#define uchar unsigned char#define uint unsigned int;/*- 端口定义-*/sbit DQ=P13;/ds18b20 端口/*- 函数声明-*/unsigned int ReadTemperature(void);bit I

25、nit_DS18B20(void);unsigned char ReadOneChar(void);void WriteOneChar(unsigned char dat);#endif(4) 、delay.c程序#include "delay.h"/*- uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS -*/void DelayUs2x(unsigned char t) while(-t);/*-

26、 mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,精确延时请使用汇编-*/void DelayMs(unsigned char t) while(t-) /大致延时1mS DelayUs2x(245); DelayUs2x(245); (5) 、delay.h程序#ifndef _DELAY_H_#define _DELAY_H_/*- uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS -*/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论