基于51单片机的PID温度控制串口上报OLED显示系统proteus仿真原理图PCB

功能介绍:
0.本系统采用STC89C52作为单片机
1.LCD1602液晶实时显示温度/PID参数/设定的温度上下限/PWM输出/通信地址
2.当温度超过上下限阈值时,蜂鸣器报警
3.采用增量式PID算法控制当前温度。
4.定时向串口发送当前温度
5.可通过串口发送命令更改配置参数
6.采用DC002作为电源接口可直接输入5V给整个系统供电

原理图:
基于51单片机的PID温度控制串口上报OLED显示系统proteus仿真原理图PCB_第1张图片

PCB :
基于51单片机的PID温度控制串口上报OLED显示系统proteus仿真原理图PCB_第2张图片

主程序:

#include  //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include 
#include "delay.h"
#include "pid.h"
#include "tlc0832.h"
#include "oled_iic.h"
#include "math.h"

/************************* 宏定义 *************************/
#define ON 0
#define OFF 1

#define T25 (273.15+25) //T25
#define Bx (4050.0) //B值
#define Ka (273.15) //绝对零度
#define Rp (10000.0) //ntc串联电阻
#define ntcR25 (10000.0) //25度时电阻

#define FRAME_HEADER  0x1a
#define FRAME_FUCTION_TEMP  0x00 //功能位,温度
#define FRAME_FUCTION_TARGET  0x01 //功能位,目标温度
#define FRAME_FUCTION_KP  0x02 //功能位,Kp
#define FRAME_FUCTION_KI  0x03 //功能位,Ki
#define FRAME_FUCTION_KD  0x04 //功能位,Kd
#define FRAME_FUCTION_TEMP_MIN  0x05 //功能位,温度下限
#define FRAME_FUCTION_TEMP_MAX  0x06 //功能位,温度上限
#define FRAME_FUCTION_ADDR  0x07 //功能位,通信地址
#define FRAME_END     0x3f

/************************* 引脚定义 *************************/
sbit BUZZER      = P3^7;
sbit L9110_A     = P1^3;
sbit L9110_B     = P1^4;

/************************* 变量定义 *************************/
PID_Calibration_Def xdata PID_Calibration; //PID结构体
PID_State_Def xdata PID_State; //PID结构体

float temperature; //实际温度
float f_tempVolt = 0;    //温度对应电压
float current = 0;
float Rt = 0;
int xdata tempMin = 20; //温度下限
int xdata tempMax = 50; //温度上限
char xdata dis0[16];           //定义显示区域临时存储数组

bit refreshFlag = 1;             //刷新标志
unsigned char setIndex = 0;
unsigned char PWMCnt = 0;
unsigned char address = 0; //通信地址

/************************* 函数声明 *************************/
void Timer0_Init(void); //函数声明
void KeyProcess(void); //按键处理
void Set_PID_Parameter(void); //PID参数初始化

void UART_Init(void); //串口初始化
void UART_SendByte(unsigned char dat); //串口发送单字节数据
// void UART_SendStr(unsigned char *s, unsigned char length); //发送定长度字符串
void SendData(unsigned char address, float temperature); //串口发送数据

void main(void)
{
   

    /************************* 初始化 *************************/
    Timer0_Init();
    
    OLED_Init();
    OLED_Clear();
    UART_Init();

    Set_PID_Parameter();

    /************************* 主循环 *************************/
    while (1

你可能感兴趣的:(51单片机,proteus)