找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3378|回复: 2
打印 上一主题 下一主题
收起左侧

单片机压力报警系统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, 下载次数: 61)

原理图

原理图

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

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

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-6-16 01:07 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

板凳
ID:737870 发表于 2020-4-26 15:43 来自手机 | 只看该作者
admin 发表于 2019-6-16 01:07
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)

全部吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表