一、硬件组成
系统由单片机STC89C52、液晶显示模块LCD1602、温度检测模块、按键模块、报警模块、加热继电器控制模块、冷却继电器控制模块所组成。
部分原理图:
二、系统功能
系统采用DS18B20对温度进行检测,在LCD1602上实时显示温度。用户可以通过按键设置上限和下限温度,当温度超过上限温度时,系统通过继电器使冷却器件导通工作,当温度低于下限温度时,系统通过继电器使加热器件工作。当温度在上限和下限之间时维持原状态,后续算法上可以加入pid控制调节,此功能可私信定制。
三、仿真
Protues仿真运行截图如图所示:
四、代码
//功能说明:使用DS18B20测量室内温度,并将它显示在1602液晶上。
#include <reg52.h>
//端口及函数声明---------------------------------------------------------
sbit LCD_RS=P1^0; //片选信号
sbit LCD_RW=P1^1; //读写信号
sbit LCD_E=P1^2; //使能信号
sbit DQ = P2^2;
sbit BEEP=P1^3; //高电平亮灯,超过设定值
sbit RED = P2^0;
sbit GREEN = P2^1;
sbit Key_2 = P1^4; //按一次出现H 30,可以进行上限温度设置 按两次出现L 20,可以进行下限温度设置 按第三次恢复温度显示
sbit Key_3 = P1^5; //增加键,可以对上限温度或下限温度进行增大调整
sbit Key_4 = P1^6; //减小键,可以对下限温度或下限温度进行减小调整
#define LCD_DB P0 //LCD1602数据信号
#define LocationX 0 //横排的位置,即X得坐标值 取值范围0~15
#define LocationY 1 //竖排的位置,即Y得坐标值 取值范围为 2,1
unsigned char code dis_char[]={"Temperature is"};
unsigned char code dis_char1[]={"Htemp= C "};
unsigned char code dis_char2[]={"Ltemp= C "};
//LCD1602函数定义
void LCD_init(void); //LCD1602初始化函数
void LCD_write_command(unsigned char command); //LCD1602写指令函数
void LCD_write_data(unsigned char dat); //LCD1602写数据函数
void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat); //在某个屏幕位置上显示一个字符,X(0-15),y(1-2)
void delay_n40us(unsigned int n);
//DS18B20函数定义
void delayms(unsigned int z); //延时(z)毫秒
void SetReset(void); //产生复位信号
void CheckReply(void); //检测器件应答信号
bit MainReadBit(void); //从总线读一个bit
unsigned char MainReadByte(void); //从总线读一个字节
void MainWriteByte(unsigned char dat); //向总线写一个字节
void StartConvertTemperature(void); //启动一次温度转换
unsigned long int ReadTemperature(void); //读取温度数据
五、资源下载
资料截图及下载链接(含参考论文)