标题: 单片机压力报警系统Proteus仿真+程序设计 [打印本页]

作者: gagalonghun    时间: 2019-6-13 13:54
标题: 单片机压力报警系统Proteus仿真+程序设计
系统组成:
(1)控制器。控制器是系统的核心部分,可以用工业计算机PLC、或者单片机。
(2)A /D转换器。A/D转换器可以把测得的模拟量转换成数字量输出,可以直接读取。
(3)继电器。继电器在电路中起到断电保护作用,是系统的安全保障。其种类很多,有电流继电器、电压及电器、速度继电器等等。
(4)键盘。通过键盘可以设置限制电流大小。
(5)液晶显显示。液晶可以显示设置电流以及实时电流值大小。
首先通过键盘设定电流值,然后检测电流值,转换成数字量通过数码管显示出来。当电流过大时继电器动作,切断电路,保护用电器。


代码如下:
#include<reg51.h>
#include"delay.h"
#include"lcd602.h"
#include"ds18b20.h"
//**************端口定义*******************
sbit LED = P1^0;
sbit k1 = P1^4;
sbit k2 = P1^5;
sbit k3 = P1^6;
//**************数组定义*******************
uchar code tab2[]={"Temp:     "}; //5
uchar code tab3[]={" H     "}; //3
uchar code tab4[]={"L     "}; //8
//**************变量定义*******************
int temp1 = 400;   //上限
int temp3 = 100;         //下限
bit flag = 0;         //上下限选择标志
int temp4; //当上限减到负数时
uchar temp5 = 0;
/*******************按键********************/
void key()
{
     if(flag == 0) //上限
         {
                 write_zifu(2,0,'*');
                 write_zifu(2,8,' ');
             if(k1 == 0)
                 {
                    delayxms(5);
                        while(k1 == 0);
                        temp1 += 10;
                 }

                 if(k2 == 0)
                 {
                    delayxms(5);
                        while(k2 == 0);
                        temp1 -= 10;
                 }
         }

         if(flag == 1)        //下限
         {
                 write_zifu(2,0,' ');
                 write_zifu(2,8,'*');
             if(k1 == 0)
                 {
                    delayxms(5);
                        while(k1 == 0);
                        temp3 += 10;
                 }

                 if(k2 == 0)
                 {
                    delayxms(5);
                        while(k2 == 0);
                        temp3 -= 10;
                 }
         }


         if(k3 == 0) //上下限选择标志
         {
            delayxms(5);
                while(k3 == 0);
                flag = ~flag;
         }
}
/*******************定时器T1初始化********************/
void T1_init()
{
          TMOD = TMOD | 0x10;            //设T1为方式1
          TH1 = (65535-20000)/256;       //计数20000个
          TL1 = (65535-20000)%256;
          EA = 1;                        //开启总中断         
          ET1 = 1;                       //允许T1中断
          TR1 = 1;                       //启动
}
/*******************主函数********************/
void main()
{        
            chushihua();//lcd1602初始化
          write_string(1,0,tab2);
          write_string(2,0,tab3);
          write_string(2,9,tab4);
          T1_init();
          while(1)
          {
                          key();
                          ds1820disp();
                          /*温度上限*/
                      if(temp1 < 0)
                          {
                                   write_zifu(2,2,'-');
                                   temp4 = temp1;
                                   temp4 = ~temp4;
                                   temp4 += 1;
                                     write_num3(2,3,temp4);
                                   write_zifu(2,7,' ');
                          }
                          else
                          {
                                     write_zifu(2,2,'+');
                                   if(temp1>=1000)
                                   {
                                              write_num4(2,3,temp1);
                                   }
                                   else
                                   {
                                              write_num3(2,3,temp1);
                                   }
                          }

                          /*温度下限*/
                      if(temp3 < 0)
                          {
                                   write_zifu(2,10,'-');
                                     write_num3(2,11,-(temp3));
                                   write_zifu(2,15,' ');
                          }
                          else
                          {
                                     write_zifu(2,10,'+');
                                   if(temp3>=1000)
                                   {write_num4(2,11,temp3);}
                                   else
                                   {write_num3(2,11,temp3);}
                          }

                          /*报警*/
                          if(flag_temp == 1) //温度小于零
                          {
                              if((-t)>temp1 || (-t)<temp3) {LED = 0;}
                              else {LED = 1;}
                          }
                          else //温度大于零
                          {
                              if(t>temp1 || t<temp3) {LED = 0;}
                              else {LED = 1;}
                          }
          }           
}
/**************************定时器T1中断服务函数************************************/
void T1_time() interrupt 3   
{
      TH1 = (65535-20000)/256;       //计数20000个
          TL1 = (65535-20000)%256;
          temp5 += 1;
          if(temp5 >= 25)
          {
             temp5 = 0;
                 TR1 = 0;
                 ReadTemperature();
                 TR1 = 1;
          }
}


原理图.jpg (64.83 KB, 下载次数: 94)

原理图

原理图

单片机压力报警系统设计.zip

136.27 KB, 下载次数: 54, 下载积分: 黑币 -5


作者: admin    时间: 2019-6-16 01:07
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
作者: 1835295832    时间: 2020-4-26 15:43
admin 发表于 2019-6-16 01:07
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)

全部吗




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1