基于51单片机恒温箱设计
(程序+原理图+设计报告)
功能介绍
具体功能:
本设计由STC89C52单片机电路+数字温度传感器DS18B20电路+按键电路+蜂鸣器报警电路+继电器控制电路+LCD1602液晶显示电路+电源电路组成。
1.LCD1602液晶实时显示当前温度值和设置的温度上下限报警值,温度上下限可以通过按键设置,超出之后会通过继电器自动调节回设置温度(继电器需要外接加热器和散热器);
2.如果温度超过上限,温度过高打开制冷继电器,如果温度低于下限,温度过低打开制热继电器;
2.如果1分钟内,没有温度调节到上下限范围内,则蜂鸣器报警;
演示视频:
基于51单片机恒温箱设计
添加图片注释,不超过 140 字(可选)
程序
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include "delay.h"
#include "math.h"
#include "adxl345.h"
#include "1602.h"
/***公众号:木子单片机****/
sbit led=P1^4; //引脚定义unsigned char ReadAdxl345; //定时读取adxl345
char dis0[16]; //串口数据显示
xdata char dis1[16]; //串口数据显示
xdata char dis2[16]; //串口数据显示
unsigned long time_20ms=0; //定时器计数
unsigned char ReportFlag=0; //数据上报标志unsigned int BuShu=0; //累计步数
float JuLi=0; //累计距离
float KaLuLi=0; //累计卡路里
unsigned char statFlag = 0;//状态
void Init_Timer0(void); //函数声明
void SendStr(unsigned char *s,unsigned char length);
void UART_Init(void);
void SendByte(unsigned char dat);
void BuShuCheck(void);void main (void)
{ Init_Timer0(); //定时器0初始化UART_Init();LCD_Init(); //初始化液晶DelayMs(20); //延时有助于稳定LCD_Clear(); Init_ADXL345(); //清屏if(Single_Read_ADXL345(0X00)==0xe5) //读出的数据为0XE5,表示正确{DelayMs(5);}else{DelayMs(3);}led=1;while (1) //主循环{if(ReadAdxl345==1) //定时读取adxl345数据{BuShuCheck(); //检测步数sprintf(dis1,"B:%04d J:%4.1fm ",BuShu/2,JuLi); //打印LCD_Write_String(0,0,dis1);//显示sprintf(dis2,"%7.2fcal ",KaLuLi); //打印LCD_Write_String(0,1,dis2);//显示 if(statFlag == 0)//站着状态{LCD_Write_String(11,1,"Stand");}else if(statFlag == 1)躺着状态{LCD_Write_String(11,1,"Lie ");}else if(statFlag == 2)//跑着状态{LCD_Write_String(11,1,"Run ");}else if(statFlag == 3)//走着状态{LCD_Write_String(11,1,"Walk ");}}if(ReportFlag==1) //2s{ReportFlag=0;sprintf(dis0,"*B:%04d",BuShu/2); //上报步数SendStr(dis0,7);sprintf(dis0,"J:%04.1fm",JuLi); //上报距离SendStr(dis0,7);sprintf(dis0,"K:%07.2fcal",KaLuLi); //上报卡路里SendStr(dis0,12);if(statFlag == 0)//站着状态{SendStr("Stand#",6);}else if(statFlag == 1)躺着状态{SendStr("Lie #",6);}else if(statFlag == 2)//跑着状态{SendStr("Run #",6);}else if(statFlag == 3)//走着状态{SendStr("Walk #",6);}SendStr("\r\n",2);}}
}void BuShuCheck(void)
{static unsigned char ErrorNum=0; //变量定义static unsigned char NormalNum=0;static unsigned char CheckNum=0; //变量定义static unsigned char shuNum=0;static unsigned char ceNum=0;static unsigned int remBuShu=0;ReadAdxl345=0;ReadData_x();CheckNum++;//检测次数if((temp_X<650)||(abs(temp_Y)>400)) //查看正常次数{led=0; //呼吸灯ErrorNum++; //记录次数shuNum++;//竖直状态++}else{NormalNum++; ceNum++;led=1;} //呼吸灯//侧着状态++ if((NormalNum!=0)&&(ErrorNum!=0)) // 从角度判断走了一步{ErrorNum=0;NormalNum=0;BuShu++;JuLi=(float)(BuShu/2)*0.45; //计算距离KaLuLi=JuLi*70*0.832; //卡路里计算 走路 距离*体重*系数}if(CheckNum>=20){if((ceNum!=0)&&(shuNum==0)){statFlag = 0;//站着状态}else if((ceNum==0)&&(shuNum!=0)){statFlag = 1;//躺着状态}else if((ceNum!=0)&&(shuNum!=0)){if((BuShu - remBuShu)>=6)//跑着 一个周期大于3步{statFlag = 2;}//跑着状态else{statFlag = 3;}//走着状态remBuShu = BuShu;//记录上次步数 } CheckNum=0;ceNum=0; //清空计数shuNum=0; }
}
void Init_Timer0(void)
{TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响 TH0=(65536-20000)/256; //重新赋值 20msTL0=(65536-20000)%256;EA=1; //总中断打开ET0=1; //定时器中断打开TR0=1; //定时器开关打开
}void Timer0_isr(void) interrupt 1
{TH0=(65536-20000)/256; //重新赋值 20msTL0=(65536-20000)%256;time_20ms++;if(time_20ms%5==0){ReadAdxl345=1;}if(time_20ms%50==0){ReportFlag=1;}
}void UART_Init(void)
{SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收 TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHzTL1 = TH1; TR1 = 1; // TR1: timer 1 打开 EA = 1; //打开总中断ES = 1; //打开串口中断
}void SendByte(unsigned char dat)//串口发送单字节数据
{unsigned char time_out;time_out=0x00;SBUF = dat; //将数据放入SBUF中while((!TI)&&(time_out<100)) //检测是否发送出去{time_out++;DelayUs2x(10);} //未发送出去 进行短暂延时TI = 0; //清除ti标志
}void SendStr(unsigned char *s,unsigned char length) //发送定长度字符串
{unsigned char NUM;NUM=0x00;while(NUM<length) //发送长度对比{SendByte(*s); //放松单字节数据s++; //指针++NUM++; //下一个++}
}
硬件设计
使用元器件:
单片机:STC89C52;
(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)
无极性电容:30P;DC座(小);
极性电容:10uF;LED灯;
5.08接线端子3芯;5V继电器;
LCD1602液晶;电源开关;
蓝白电位器;直插三极管;
电阻:1K、10K;按键;
IC座:40pin;蜂鸣器;
DS18B20温度芯片;
晶振:11.0592M;
2.54单排针:16pin;
2.54单排座:16pin;
导线:若干;
添加图片注释,不超过 140 字(可选)
流程图:
添加图片注释,不超过 140 字(可选)
设计资料
01原理图
本系统原理图采用Altium Designer19设计,具体如图!
添加图片注释,不超过 140 字(可选)
02程序
本设计使用软件keil5版本编程设计!具体如图!
添加图片注释,不超过 140 字(可选)
03设计报告
一万五千字设计报告,具体如下!
添加图片注释,不超过 140 字(可选)
04设计资料
资料获取请关注同名公众号,全部资料包括程序(含注释)、AD原理图、任务书、设计报告、流程图、结构框图、实物图、元件清单等。具体内容如下,全网最全! !
可以关注下方公众号!
点赞分享一起学习成长。