找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC89C52单片机温控继电器代码

[复制链接]
跳转到指定楼层
楼主
ID:145511 发表于 2018-10-23 21:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
打开实验板上的蜂鸣,响0.3秒,然后关闭0.3秒,然后依次这样循环,
同时在实验板上继电器旁边的发光二极管也会跟随继电器不停地闪烁

单片机源程序如下:
  1. /***************************************************************************
  2. 标题:        温控继电器实验
  3. 实验板:LY5A-L2A开发板
  4. 作者:        林洋电子-单片机
  5. 说明:        温度低于下线值启动继电器,达到上线值关闭继电器,注意:使用12M晶振下调试
  6. ******************************************************************************/

  7. //头文件:
  8. #include <reg52.h>
  9. #include "ds18b20.h"        //引入DS18B20头文件

  10. //引脚定义:               
  11. sbit JDQ=P1^4;                //继电器控制
  12. sbit SMG_q = P1^0;        //定义数码管阳级控制脚(千位)
  13. sbit SMG_b = P1^1;        //定义数码管阳级控制脚(百位)
  14. sbit SMG_s = P1^2;        //定义数码管阳级控制脚(十位)
  15. sbit SMG_g = P1^3;        //定义数码管阳级控制脚(个位)

  16. //变量定义:
  17. unsigned char ly_dis[4];//定义显示缓冲区
  18. unsigned char DSU=32;        //上线温度
  19. unsigned char DSD=30;        //下线温度
  20. code unsigned char table[]=
  21.                         {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  22.                                         //表:共阳数码管 0-9
  23. unsigned char l_posit=0;        //显示位置

  24. //函数声明:
  25. void display(void);//显示函数,显示缓冲区内容
  26. void delay(void);

  27. //主函数,C语言的入口函数:       
  28. void main()
  29. {       
  30.         unsigned int i=0;
  31.         float tt;
  32.         int ltemp;
  33.         while(1){
  34.                 if(i==0)
  35.                         tmpchange();              //温度转换
  36.                 if(i==100){
  37.                         tt=tmp()*0.0625;          //得到真实十进制温度值,因为DS18B20
  38.                                                                 //可以精确到0.0625度,所以读回数据的最低位代表的是0.0625度。
  39.                         if(tt<=DSD)                //低于下线温度启动继电器
  40.                                 JDQ=0;               
  41.                         if(tt>=DSU)                //达到上线温度关闭继电器
  42.                                 JDQ=1;

  43.                           ltemp=tt*10+0.5;           //放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。
  44.                         if(ltemp<0){                //判断第一位显示整数还是负号
  45.                                 ly_dis[0]=0xbf;
  46.                                 ltemp=0-ltemp;       
  47.                         }
  48.                         else
  49.                                 ly_dis[0]=ltemp/1000;//显示百位值
  50.                         ltemp=ltemp%1000;
  51.                         ly_dis[1]=ltemp/100;        //显示温度十位值
  52.                         ltemp=ltemp%100;
  53.                         ly_dis[2]=ltemp/10;                //显示温度个位值
  54.                         ly_dis[3]=ltemp%10;                //显示小数点后一位
  55.                 }
  56.                 i++;
  57.                 if(i==3000)
  58.                         i=0;
  59.                 display();        //调用显示       
  60.                 delay();       
  61.         }
  62. }

  63. //显示函数,参数为显示内容
  64. void display()
  65. {
  66.         P0=0XFF;                        //       
  67.         switch(l_posit){
  68.         case 0:                //选择千位数码管,关闭其它位
  69.                 SMG_q=0;
  70.                 SMG_b=1;       
  71.                 SMG_s=1;               
  72.                 SMG_g=1;
  73.                 P0=table[ly_dis[0]];        //输出显示内容
  74.                 break;
  75.         case 1:                //选择百位数码管,关闭其它位
  76.                 SMG_q=1;
  77.                 SMG_b=0;       
  78.                 SMG_s=1;               
  79.                 SMG_g=1;
  80.                 P0=table[ly_dis[1]];
  81.                 break;
  82.         case 2:                //选择十位数码管,关闭其它位
  83.                 SMG_q=1;
  84.                 SMG_b=1;       
  85.                 SMG_s=0;               
  86.                 SMG_g=1;
  87.                 P0=table[ly_dis[2]]&0x7f;
  88.                 break;
  89.         case 3:                //选择个位数码管,关闭其它位
  90.                 SMG_q=1;
  91.                 SMG_b=1;       
  92.                 SMG_s=1;               
  93.                 SMG_g=0;
  94.                 P0=table[ly_dis[3]];
  95.                 break;
  96.         }
  97.         l_posit++;                //每调用一次将轮流显示一位
  98.         if(l_posit>3)
  99.                 l_posit=0;       
  100. }

  101. //延时子函数,短暂延时
  102. void delay(void){               
  103.         unsigned char i=10;
  104.         while(i--);
  105. }
复制代码

所有资料51hei提供下载:
温控继电器.rar (43.53 KB, 下载次数: 29)


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

使用道具 举报

沙发
ID:1 发表于 2018-10-24 01:02 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

板凳
ID:108622 发表于 2018-11-4 18:11 | 只看该作者
能发个电路图给我吗
回复

使用道具 举报

地板
ID:442459 发表于 2018-12-8 23:47 | 只看该作者
这个程序写的真的好厉害
回复

使用道具 举报

5#
ID:519766 发表于 2019-4-23 17:19 | 只看该作者
请问,有人知道控制 型号是CM1106的红外二氧化碳传感器模块 的c语言代码吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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