基于单片机的水温控制系统(C语言)
下载后可任意编辑 过程控制系统课程设计 实验报告 课程设计题目基于单片机的水温控制系统 指导老师许丽佳 小组成员李飞 20243789 王金 20243795 李科 20243787 王鹏 20243567 一、 系统总方案设计 DS18B20 LED显示 指示灯 单 片 机 加热继电器 按键 复位电路 时钟电路 图1-1 系统框图 本系统的电路设计方框图如图1-1所示,它由七部分组成①控制部分主芯片采纳单片机STC89C52;②显示部分采纳4位共阳极LED数码管以动态扫描方式实现温度显示;③温度采集部分采纳DS18B20温度传感器;④加热控制部分采纳继电器电路;⑤时钟电路;⑥复位电路;⑦单列3按键键盘输入设定温度值。 二、 硬件电路设计 1. 时钟电路设计 时钟电路是用来产生STC89C52单片机工作时所必须的时钟信号,STC89C52本身就是一个复杂的同步时序电路,为保证工作方式的实现,STC89C52在唯一的时钟信号的控制下严格的按时序执行指令进行工作 ,时钟的频率影响单片机的速度和稳定性。通常时钟由于两种形式内部时钟和外部时钟。 我们系统采纳内部时钟方式来为系统提供时钟信号。STC89C52内部有一个用于构成振荡器的高增益反向放大器,该放大器的输入输出引脚为XTAL1和XTAL2,它们跨接在晶体振荡器和用于微调的电容,便构成了一个自激励振荡器。 电路中的C1、C2的选择在30PF左右,但电容太小会影响振荡的频率、稳定性和快速性。晶振频率为在1.2MHZ~12MHZ之间,频率越高单片机的速度就越快,但对存储器速度要求就高。为了提高稳定性我们采纳温度稳定性好的30pf的贴片电容,采纳的晶振频率为12MHZ。本次系统的时钟电路设计如图2-1所示。 图 2-1 时钟电路图 2.系统复位电路 在图2-2 中复位开关K1 被按下并松开,使端获得低电平,RST 端输出复位信号,单片机复位。 图2-2 复位电路 3.报警与控制电路设计 当水箱内的温度超出或低于设定的温度超出1℃时,P1.4输出低电平“0”时,晶体管导通,压电蜂鸣器两端获得约5V电压而鸣叫,出报警声音;单片机的P1.1输出低电平,此时红色指示灯亮,直到低于设定的最低温度时,P1.4输出高电平常,三极管截止,蜂鸣器停止发声,P1.1输出电平高电平,发光二极管灭,(由于实验器材有限,本设计的蜂鸣器使用发光二级管替代)报警和控制电路而下图2-3所示 图2-3 报警与控制电路与单片机的连接 4 LED显示电路设计 在本设计中采纳了四位共阳极八段数码管,用动态驱动来显示温度的值,如图2-4-2所示,其结构如2-4-1所示 图2-4-1 数码管内部结构 图2-4-2 LED显示电路 5温度检测电路设计 本次设计所采纳的温度传感器为DS18B20,无需A/D转换,因此从主机CPU到DSl8B20仅需一条线,当DS18B20接收到温度转换命令后,开始启动转换。 DS18B20的测量温度范围为 -55C--125C,在-10--85C范围内,精度为0.5C。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。图2-5为DS18B20与单片机的连接图 图2-5 DS18B20与STC89C52单片机的连接 6按键电路设计 键盘共有三个键,推断K2-K4键是否按下,可采纳软件查询和中断的方法,当某个键按下时,低电平有效。3个键K2-K4的功能定义如表所示。 K2-K4键的定义 按键 键名 功能 K2 功能转换键 此键按下,显示温度设定值,按键松开,显示当前温度 K3 加1键 设定温度值加1 K4 减1键 设定温度值减1 图 2-6 按键电路 7 继电器控制电路 控制P10的高低电平来控制继电器的断开和闭合,当P10口为低电平常,三极管导通,发光二极管亮,控制继电器开始加热,当P10为高电平常,三极管截止,继电器断开,停止加热。(由于实验设备有限,本设计使用发光二级管代替继电器加热装置,当二极管发亮时代表正在加热)。 图2-7 继电器控制加热装置电路图 三、软件设计 1 .系统总流程图 图3-1 系统总流程图 2.主程序 主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图3-2所示。 通过调用读温度子程序把存入内存储中的整数部分与小数部分分开存放在不同的两个单元中,然后通过调用显示子程序显示出来。 图3-2 主程序流程图 3.读出温度子程序 DS18B20复位、应答子程序 读温度命令子程序 写入子程序 跳过ROM匹配命令 DS18B20复位、应答子程序 显示子程序延时 写入子程序 温度转换命令 写入子程序 跳过ROM匹配命令 终 止 图4-3 读出温度子程序 4.数码管显示模块 图4-4 数码管显示模块 附录一 系统电路图 附录二 系统源代码 include reg52.h //52系列头文件 include stdio.h define uchar unsigned char define uint unsigned int sbit dsP34; sbit dulaP26; sbit beepP14; //定义蜂鸣器 sbit ledP11; sbit jdqP10; uint temp,t,w; //定义整型的温度数据 uchar flag; float f_temp; //定义浮点型的温度数据 uint low; //定义温度下限值 是温度乘以10后的结果 uint high; //定义温度的上限值 sbit led1P10; //控制发光二极管 sbit led2P11; //控制发光二极管 sbit s1P35; sbit s2P36; sbit s3P37; uchar flag1,flag2,flag3,flag4,s1num,qian,bai,shi,ge; uchar code table[] { 0 xc0,0 xf9,0 xa4,0 xb0,0 x99, 0 x92,0 x82,0 xf8,0 x80,0 x90,0 xc6 };