×
单片机 > 单片机程序设计 > 详情

基于51单片机的温度控制系统设计与制作

发布时间:2020-06-17 发布时间:
|

本装置可以模拟温度报警系统,可以进行目标温度和警报温度的设计,未达到目标温度模拟加热的Led灯会出现一闪一闪的情况,达到设定的目标温度会停止模拟加热,当当前温度高于设定的警报温度时,蜂鸣器会进行报警。具体使用说明见设计书,还有就是有一点,不太会画PCB,所以可以不用打开PCB


仿真原理图如下
 
制作出来的实物图如下:
 
Altium Designer画的原理图和PCB图如下:

#include

#include"lcd.h"

#include"temp.h"

#include"general.h"

#include"ds1302.h"


/*******************************************************************************

* 函数名         : main

* 函数功能   :进入目标温度和报警温度设置页面后,需要返回温度显示页面,必须先返回万年历页面,此时再按温度显示键,方可进入温度显示页面

* 输入           : 无

* 输出                  : 无

*******************************************************************************/

//全局函数

void LcdDisplay(int);

void DS1302_LcdDisplay();

void RES();//结果运算函数

void aim();

void alarm();

void change_temp();



//--定义全局变量

typedef unsigned int u16; 

unsigned char Runmodel = Calendar;

unsigned char Temp[] = "Temperature";                           //温度

unsigned char Date[] = "calendar";                        //万年历

unsigned char  Aim_tp[] = "AIM_TEMP";

unsigned char Alarm_tp[] = "Alarm_tp";

unsigned char Aim_temp = 27;                //目标温度初始值

unsigned char Alarm_temp = 95;   //报警温度初始值

unsigned char Aim_h,Aim_l,Alarm_h,Alarm_l,Alarm_mh;

int Now_temp;


//IO口设定

#define GPIO_KEY P1

sbit K1 = P2^0;        //选择按键1,进入万年历模式

sbit K2 = P2^1;        //选择按键2,进入温度测量模式

sbit K3 = P2^2; //选择按键3,进行目标温度和最高温度警报设置

sbit K4 = P1^0;        //自加按键

sbit K5 = P1^1;        //自减按键

sbit led = P2^3;

sbit beep=P1^5;  //蜂鸣器响应

sbit reset = P3^2; //复位按键

void delay(u16 i)

{

     while(i--);       

}

        

void main()

{

        unsigned char i = 0;

        Isrint();

        LcdInit();                         //初始化LCD1602

        while(1)

        {

                Runmodel = Run_Model();

                if(K3 == PutDown)

                {

                        Delay10ms(1);

                        if(K3 == PutDown)

                        {

                                LcdWriteCom(0x01);

                                LcdWriteCom(0x83);

                                for(i = 0;i<8;i++)

                                LcdWriteData(Aim_tp[i]);                        //第一次按下K3进行目标温度设定

                                LcdWriteCom(0xc5);

                                aim();

                                LcdWriteData(Aim_h);

                                LcdWriteData(Aim_l);

                                LcdWriteData(0xdf);

                                LcdWriteData('C');

                                while(1)

                                {

                                        Delay10ms(10);                                 //这里必须加个延迟,不然温度会一下子加三下

                                        if(K4 == PutDown)                        //设置目标温度进行自加

                                        {

                                                Delay10ms(2);

                                                if(K4 == PutDown)

                                                {        

                                                        Aim_temp++;                   //设置目标温度进行自加

                                                        aim();

                                                        LcdWriteCom(0xc5);

                                                        LcdWriteData(Aim_h);

                                                        LcdWriteData(Aim_l);

                                                        LcdWriteData(0xdf);

                                                        LcdWriteData('C');

                                                }

                                        }

                                        

                                        if(K5 == PutDown)                  //设置目标温度进行自减

                                        {

                                                Delay10ms(1);

                                                if(K5 == PutDown)

                                                {

                                                        Aim_temp--;

                                                        aim();

                                                        LcdWriteCom(0xc5);



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址