找回密码
 立即注册

QQ登录

只需一步,快速开始

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

两路AD输入继电器输出数显按键温度报警开关模块(单片机源码+电路图资料)

[复制链接]
跳转到指定楼层
楼主
温度报警开关按键设定报警值
一、简要说明
模块尺寸:长88.1mmX宽44.7mm X 高20mm
工作电压:直流12伏;
模块功耗:0.03A(继电器吸合)
主要芯片:STC12C5204AD或STC12C5604AD、LM7805
二、特点:
1、 可编程(通过下载口下载),标准TTL接口
2、三个按键调节,可以编程实现想要的调节功能
3、下载程序时,通过USB转TTL免断电下载线,有需要顾客请点此
4、使用C语言编程,和普通51单片机编程一样,使用keil软件编程
5、有两路路输入控制端(低电平有效,即用电源负极触发)
6、两路输入也可做AD采集,采集0到5V电压               
7、有电源带指示灯
8、继电器吸合时有指示灯
9、可控制交流220V/10A一下设备。(最大控制设备2000W)
10、提供程序免费定制服务
11、提供相关程序例程、原理图、使用说明和相关资料
、使用场合:
工业控制、汽车设备改装、电子竞赛、毕业设计、单片机学习等等
、接线说明:
1、DS18B20位置也可接10k电位器,通过编程采集电位器电压值来,来实现各种延时时间的调节参数
2、三个按键调节可以通过编程实现各种调节功能,比如时间设定等
3、IN1和IN2两路模拟量输入,可以采集0到5V模拟电压
、下载程序步骤:


1、下载硬件连接

2、使用stc下载软件下载程序
六、默认功能:
注意:如顾客无特殊要求,板子下载默认功能程序
  • 温度设定要有存储功能,断电重新启动时,设定的温度值有记忆。
  • 设定报警温度值,设定温度范围是0到125度
  • 温度设定用三个按键完成。分别为:key1功能键、key2调节键
  • 按键要有防抖动功能。
  • 功能key1时显示上次的温度设定值。同时设定温度的百位值闪烁,按上调键一次温度升高一度,同理,再次按下功能键时,十位进行调节。。
  • 开机显示设定温度值,过5秒后显示实测温度。
  • 当超过设定温度值时继电器吸合,低于设定温度时断开
、DS18B20简介
DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
1: 技术性能描述
①、 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
② 、测温范围 -55℃~+125℃,固有测温误差(注意,不是分辨率,这里之前是错误的)0.5℃。
③、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
④、工作电源: 3~5V/DC
⑤ 、在使用中不需要任何外围元件
⑥、 测量结果以9~12位数字量方式串行传送
⑦ 、不锈钢保护管直径 Φ6
⑧ 、适用于DN15~25, DN40~DN250各种介质工业管道和狭小空间设备测温
⑨、 标准安装螺纹 M10X1, M12X1.5, G1/2”任选
⑩ 、PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接
整板标注
1、用于各类延时,可用电位器调节延时时间
  • 如用电位器调节延时时间的话,最大调节时间范围是0-255s
  • 如用按键调节,最大调节时间是0-9999,具有掉电存储功能
  • IN1和IN2两路信号输入端,可作为AD采样输入用
2、用于温度控制
下载程序图示
改装晶振后485接口传送温度
产品展示
提供开发相关例程



触发启动停止继电器通、断时间都可调控制单片机源程序如下:
  1. /********************************************************************
  2.                    按键调节延时控制类
  3. 实现功能:带停止,启动控制继电器通、断时间都可调控制程序(eeprom)
  4. 使用芯片:STC12C5204AD
  5. 晶振:11.0592MHZ
  6. 编译环境:Keil
  7. 硬件环境:四位数显两路输入三按键
  8. 作者:yang
  9. QQ:790244909
  10. /********************************************************************   
  11. /********************************************************************
  12. 功能说明:继电器循环通断控制程序
  13. 继电器接通、断开时间都可调,
  14. IN1启动按键,短接GND,注意该触发端电压不能高于5V,否则烧坏单片机
  15. IN2停止按键,短接GND,注意该触发端电压不能高于5V,否则烧坏单片机
  16. key1功能键:调节模式与实时显示模式转换
  17. keynum=0:实时显示计时模式
  18. keynum=1:调整继电器设定闭合秒
  19. keynum=2:调整继电器设定闭合分
  20. keynum=3:调整继电器设定断开秒
  21. keynum=4:调整继电器设定断开分
  22. 以上四个设定值设定好后都存入eeprom,掉电可记忆
  23. 上电时,继电器吸合,数显开始计时,到达设定闭合时间后断开;数显清零,
  24.                     数显开始计时,到设定时间,继电器闭合,数显清零。。。
  25.                                         循环下去。。

  26. 设定断开时间最大是99分59秒
  27. 设定闭合时间最大是99分59秒
  28. ********************************************************************/
  29. #include<STC12C5A60S2.H>                 //库文件
  30. #include <intrins.h>
  31. #include"eprom.h"
  32. #define uchar unsigned char//宏定义无符号字符型
  33. #define uint unsigned int  //宏定义无符号整型

  34. #define DUAN P2          //P0口控制段
  35. #define WEI  P1          //P2口控制位
  36. //输入控制端
  37. sbit IN1=P1^6;
  38. sbit IN2=P1^7;

  39. sbit jdq= P3^7;
  40. sbit key1=P3^2;        //功能按键
  41. sbit key2=P3^3;        //增加
  42. sbit key3=P3^4;        //减小
  43. /********************************************************************
  44.                             初始定义
  45. *********************************************************************/
  46. code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示段码 数码管字跟
  47. uchar wei[4]={0X01,0X02,0X04,0X08};                                 //位的控制端
  48. uchar numb[4];              //定义字符串
  49. uchar cnt,keynum;
  50. uchar setfen,setmiao;
  51. uchar setdf,setdm;
  52. uchar miao,fen;
  53. void IapEraseSector(uint addr);
  54. void IapProgramByte(uint addr,uchar dat);
  55. uchar IapReadByte(uint addr);
  56. bit flag=1;        //闭合断开标志位
  57. /********************************************************************
  58.                             延时函数
  59. *********************************************************************/
  60. void delay(uchar x)    //延时程序 0.1秒
  61. {
  62.         uchar m,n,s;
  63.         for(m=x;m>0;m--)
  64.         for(n=20;n>0;n--)
  65.         for(s=248;s>0;s--);
  66. }
  67. /********************************************************************
  68.                             显示函数
  69. *********************************************************************/        
  70. void display(uchar a ,uchar b)   //显示函数
  71. {
  72.       WEI&=0XF0;
  73.           DUAN=seg7code[a/10];
  74.           WEI|=wei[0];
  75.           delay(2);

  76.           WEI&=0XF0;  
  77.       DUAN=seg7code[a%10]&0x7f;
  78.           WEI|=wei[1];
  79.           delay(2);

  80.           WEI&=0XF0;  
  81.              DUAN=seg7code[b/10];
  82.           WEI|=wei[2];
  83.           delay(2);

  84.           WEI&=0XF0;  
  85.       DUAN=seg7code[b%10];
  86.           WEI|=wei[3];
  87.           delay(2);
  88.           
  89.           WEI&=0XF0;
  90. }
  91. /********************************************************************
  92.                             按键扫描
  93. *********************************************************************/
  94. void keyscan(void)
  95. {
  96. if(key1==0)
  97. {  delay(1);
  98.     if(key1==0)
  99.     {
  100.            while(!key1);
  101.            keynum++;
  102.            if(keynum>=1&&keynum<=4)
  103.            {
  104.              TR0=0;
  105.                  cnt=0;
  106.                  miao=0;
  107.                  jdq=1;
  108.                  fen=0;
  109.            }

  110.            if(keynum>=5)
  111.            {
  112.              keynum=0;
  113.                  miao=fen=0;
  114.                  TR0=1;
  115.                  jdq=0;
  116.           }
  117.     }
  118.   }
  119.   switch(keynum)
  120.   {
  121.     case 1: if(key2==0)
  122.                 {
  123.                           delay(5);
  124.                           if(key2==0)
  125.                   {
  126.                                   while(!key2)display(setfen,setmiao);
  127.                                   setmiao++;
  128.                                   if(setmiao>59)
  129.                                      setmiao=59;
  130.                                   IapEraseSector(0);
  131.                                   IapProgramByte(0,setmiao);  //写入函数
  132.                           }
  133.                          }
  134.                         if(key3==0)
  135.                         {
  136.                           delay(5);
  137.                           if(key3==0)
  138.                   {
  139.                             while(!key3)display(setfen,setmiao);
  140.                             setmiao--;
  141.                                 if(setmiao==0||setmiao>=250)
  142.                                   setmiao=0;
  143.                             IapEraseSector(0);
  144.                             IapProgramByte(0,setmiao);  //写入函数
  145.                           }
  146.                         }
  147.                  display(setfen,setmiao);
  148.                         break;
  149.      case 2: if(key2==0)
  150.                  {
  151.                                   delay(5);
  152.                                   if(key2==0)
  153.                           {
  154.                                           while(!key2)display(setfen,setmiao);
  155.                                           setfen++;
  156.                                           if(setfen>99)
  157.                                          setfen=99;
  158.                                           IapEraseSector(512);
  159.                                           IapProgramByte(512,setfen);  //写入函数
  160.                           }
  161.                          }
  162.                          if(key3==0)
  163.                          {
  164.                                   delay(5);
  165.                                   if(key3==0)
  166.                           {
  167.                                     while(!key3)display(setfen,setmiao);
  168.                                     setfen--;
  169.                                     if(setfen==0||setfen>=250)
  170.                                        setfen=0;
  171.                                     IapEraseSector(512);
  172.                                     IapProgramByte(512,setfen);  //写入函数
  173.                                   }
  174.                         }
  175.                 //        display(setfen,setmiao);
  176.                         break;
  177.                 case 3:
  178.                     if(key2==0)
  179.                 {
  180.                           delay(5);
  181.                           if(key2==0)
  182.                   {
  183.                                   while(!key2)display(setdf,setdm);
  184.                                   setdm++;
  185.                                   if(setdm>59)
  186.                                      setdm=59;
  187.                                   IapEraseSector(0);
  188.                                   IapProgramByte(0,setmiao);  //写设定闭合时间秒
  189.                                   IapProgramByte(1,setdm);  //写设定断开时间秒
  190.                           }
  191.                          }
  192.                         if(key3==0)
  193.                         {
  194.                           delay(5);
  195.                           if(key3==0)
  196.                   {
  197.                             while(!key3)
  198.                                 display(setdf,setdm);
  199.                             setdm--;
  200.                                 if(setdm==0||setdm>=250)
  201.                                   setdm=0;
  202.                             IapEraseSector(0);
  203.                             IapProgramByte(0,setmiao);  //写设定闭合时间秒
  204.                                 IapProgramByte(1,setdm);  ////写设定断开时间秒
  205.                           }
  206.                         }
  207.                         break;
  208.                 case 4:if(key2==0)
  209.                  {
  210.                                   delay(5);
  211.                                   if(key2==0)
  212.                           {
  213.                                           while(!key2)
  214.                                           display(setdf,setdm);;
  215.                                           setdf++;
  216.                                           if(setdf>10)
  217.                                          setdf=10;
  218.                                           IapEraseSector(512);
  219.                                           IapProgramByte(512,setfen);  //写设定闭合时间分
  220.                                           IapProgramByte(513,setdf);  //写设定断开时间秒
  221.                           }
  222.                          }
  223.                          if(key3==0)
  224.                          {
  225.                                   delay(5);
  226.                                   if(key3==0)
  227.                           {
  228.                                     while(!key3)
  229.                                         display(setdf,setdm);
  230.                                     setdf--;
  231.                                     if(setdf==0||setdf>=250)
  232.                                        setdf=0;
  233.                                     IapEraseSector(512);
  234.                                     IapProgramByte(512,setfen);  //写设定闭合时间分
  235.                                         IapProgramByte(513,setdf);  //写设定断开时间分
  236.                                   }
  237.                         }
  238.                 //       
  239.                         break;
  240.          default : break;
  241.   }
  242. }
  243. /********************************************************************
  244.                            定时器T0初始化
  245. *********************************************************************/
  246. void cshh()
  247. {
  248.          TMOD|=0X01; //定义定时器工作方式
  249.          TH0=(65535-50000)/256;
  250.          TL0=(65535-50000)%256;
  251.          ET0=1;
  252.         // TR0=1;      //开定时器
  253.          EA=1;       //开中断
  254. }
  255. /********************************************************************
  256.                             初始化函数
  257. *********************************************************************/
  258. void init_all(void)   
  259. {
  260.         P2M1=0;
  261.         P2M0=0xff;
  262.         P1M1=0;
  263.         P1M0=0x0f;
  264.         P3M1&=0x7f;
  265.         P3M0|=0x80;
  266.         P3=0xff;       
  267. }                  
  268. /********************************************************************
  269.                             主函数
  270. *********************************************************************/
  271. void main()
  272. {         
  273.         init_all();
  274.         setfen=IapReadByte(512);           //读设定闭合分钟
  275.         setdf= IapReadByte(513);                   //读设定断开分钟
  276.         setmiao=IapReadByte(0);                          //读设定闭合秒钟
  277.         setdm=IapReadByte(1);                          //读设定断开秒钟
  278.         cshh();
  279.         while(1)
  280.         {  
  281.            if(keynum==0)   //实时计时模式
  282.            {
  283.              display(fen,miao);
  284.            }
  285.            if(keynum>0&&keynum<3) //设定闭合分和秒模式
  286.              display(setfen,setmiao);
  287.            if(keynum>=3&&keynum<5) //设定断开分和秒模式
  288.              display(setdf,setdm);
  289.        keyscan();
  290.            if(IN1==0)
  291.            {
  292.                       delay(5);
  293.                    if(IN1==0)
  294.                {
  295.                      TR0=1;
  296.                          cnt=0;
  297.                          miao=0;fen=0;
  298.                          jdq=0;                         //定时器初始化
  299.                          while(!IN1);
  300.                }
  301.            }
  302.             if(IN2==0)
  303.            {
  304.                       delay(5);
  305.                    if(IN2==0)
  306.                {
  307.                      TR0=0;
  308.                          jdq=1;                         //定时器初始化
  309. ……………………

  310. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
011、三路模拟量采集并显示(AD—UART发送)\
01、设定报警温度范围-55到125度\
01、设定报警温度范围-55到125度 - 共阴\
02、继电器通、断时间都可调控制程序(eeprom)\
04、0~5V模拟量采集显示\
05、用电位器调节继电器延时闭合(0到255秒)可调\
05、采用ADC控制继电器延时通断时间(0~255)秒、分可调\
06、接通电源延时30分钟断开2012.12.28\
07、继电器循环通断控制程序(eeprom)\
08、DS18B20基础程序\
09、用电位器调节继电器延时时间\
10、按键调节时间可调掉电记忆\
顾客定制\
01、设定报警温度范围-55到125度.zip



全部资料51hei下载地址:
两入一出数显按键温度发货资料.7z (7.39 MB, 下载次数: 55)


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

使用道具 举报

沙发
ID:1 发表于 2018-3-5 04:40 | 只看该作者
源码注释详细,值得学习.
回复

使用道具 举报

板凳
ID:243748 发表于 2018-3-7 00:32 来自手机 | 只看该作者
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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