找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2051|回复: 0
收起左侧

基于单片机的温度测量报警风扇

[复制链接]
ID:411550 发表于 2019-10-21 23:13 | 显示全部楼层 |阅读模式
芯片:51单片机
测温模块Ds18b26  LCD1602显示温度 按键设置警戒值
proteus仿真图: 1571670566.png
单片机源程序如下:
  1. #include<reg51.h>
  2. #include"lcd.h"
  3. #include"temp.h"

  4. sbit  upSETUP=P1^0;
  5. sbit  upSETDOWN=P1^1;
  6. sbit  downSETUP=P1^2;
  7. sbit  downSETDOWN=P1^3;
  8. sbit  beep=P3^2;
  9. sbit  moto=P1^4;

  10. uchar CNCHAR[6] = "摄氏度";
  11. uchar up[]="Up";
  12. uchar down[]="Down";
  13. uchar TemputerData[]="TemputerData";
  14. uint upchu[]={2,9};
  15. uint downchu[]={1,7};
  16. uchar datas[] = {0, 0, 0, 0, 0};
  17. void LcdDisplay(int);

  18. void delay(uint i)
  19. {
  20.         while(i--);        
  21. }

  22. void Delayset(uint c)   //误差 0us
  23. {
  24.     uchar a,b;
  25.         for (; c>0; c--)
  26.         {
  27.                  for (b=199;b>0;b--)
  28.                  {
  29.                           for(a=1;a>0;a--);
  30.                  }      
  31.         }
  32.             
  33. }

  34. void yuxianshi()         //显示字母
  35. {
  36.            uchar i,x,z;
  37.          LcdWriteCom(0xCF);        //写地址 80表示初始地址
  38.         LcdWriteData('C');
  39.         LcdWriteCom(0x85);
  40.         LcdWriteData('C');
  41.         LcdWriteCom(0x8F);
  42.         LcdWriteData('C');
  43.         LcdWriteCom(0x82);
  44.         LcdWriteData(':');
  45.         LcdWriteCom(0x8C);
  46.         LcdWriteData(':');
  47.         LcdWriteCom(0xCC);
  48.         LcdWriteData(':');
  49.         Delayset(5);
  50.         for(i=0;i<2;i++)
  51.         {
  52.           LcdWriteCom(0x80+i);
  53.           LcdWriteData(up[i]);
  54.         }
  55.         for(x=0;x<4;x++)
  56.         {
  57.           LcdWriteCom(0x88+x);
  58.           LcdWriteData(down[x]);
  59.         }
  60.         for(z=0;z<12;z++)
  61.         {
  62.           LcdWriteCom(0xC0+z);
  63.           LcdWriteData(TemputerData[z]);
  64.         }

  65. }




  66. void setupdown()        //设置上下限
  67. {
  68.         LcdWriteCom(0x83);                 
  69.         LcdWriteData('0'+upchu[0]);
  70.         SBUF = '0'+upchu[0];
  71.         while (!TI);                             
  72.         TI = 0;

  73.            LcdWriteCom(0x84);                 
  74.         LcdWriteData('0'+upchu[1]);
  75.         SBUF = '0'+upchu[1];
  76.         while (!TI);                             
  77.         TI = 0;
  78.                
  79.         LcdWriteCom(0x8D);                 
  80.         LcdWriteData('0'+downchu[0]);
  81.         SBUF = '0'+downchu[0];
  82.         while (!TI);                             
  83.         TI = 0;

  84.          LcdWriteCom(0x8E);                 
  85.         LcdWriteData('0'+downchu[1]);
  86.         SBUF = '0'+downchu[1];
  87.         while (!TI);                             
  88.         TI = 0;
  89. }

  90. void setkey()
  91. {         uchar i;
  92.         if(downSETUP==0)        // 下限+1
  93.         {
  94.                 Delayset(1);
  95.                 if(downSETUP==0)
  96.                 {
  97.                          if(downchu[1]==9)
  98.                                  {
  99.                                           downchu[0]+=1;
  100.                                         downchu[1]=0;
  101.                                  }
  102.                          else
  103.                                  {
  104.                                          downchu[1]+=1;
  105.                                  }
  106.                 }
  107.                 while((i<50)&&(downSETUP==0))         //检测按键是否松开
  108.                                 {
  109.                                         Delayset(1);
  110.                                         i++;
  111.                                 }
  112.                                 i=0;
  113.         }
  114.         if(downSETDOWN==1)         //下限-1
  115.         {         Delayset(5);
  116.                  if(downSETDOWN==0)
  117.                         {
  118.                           if(downchu[1]==0)
  119.                          {
  120.                                   downchu[0]-=1;
  121.                                 downchu[1]=9;
  122.                          }
  123.                          else
  124.                          {
  125.                                  downchu[1]-=1;
  126.                          }
  127.                         }
  128.                 while((i<50)&&(downSETDOWN==0))         //检测按键是否松开
  129.                         {
  130.                                         Delayset(1);
  131.                                         i++;
  132.                         }
  133.                                 i=0;
  134.         }
  135.          
  136.                 if(upSETUP==0)          //上限+1
  137.                 {
  138.                          if(upSETUP==0)
  139.                         {
  140.                         if(upchu[1]==9)
  141.                          {
  142.                                   upchu[0]+=1;
  143.                                 upchu[1]=0;
  144.                          }
  145.                          else
  146.                          {
  147.                                  upchu[1]+=1;
  148.                          }
  149.                         }
  150.                         while((i<50)&&(upSETUP==0))         //检测按键是否松开
  151.                                 {
  152.                                         Delayset(1);
  153.                                         i++;
  154.                                 }
  155.                                 i=0;
  156.                 }
  157.                 if(upSETDOWN==0)         //上限-1
  158.                 {        if(upSETDOWN==0)
  159.                 {
  160.                           if(upchu[1]==0)
  161.                          {
  162.                                   upchu[0]-=1;
  163.                                 upchu[1]=9;
  164.                          }
  165.                          else
  166.                          {
  167.                                  upchu[1]-=1;
  168.                          }
  169.                 }
  170.                          while((i<50)&&(upSETDOWN==0))         //检测按键是否松开
  171.                                 {
  172.                                         Delayset(1);
  173.                                         i++;
  174.                                 }
  175.                                 i=0;

  176.                 }

  177.                  

  178. }


  179. void sound()
  180. {
  181.         long unsigned int i=10000;
  182.         while(i--)
  183.         {
  184.                 beep=~beep;
  185.                 delay(10);
  186.         }

  187. }

  188. void warning()         //报警
  189. {
  190.          uchar i;
  191.         if( ( datas[1]>upchu[0] )||( datas[1]<downchu[0] )||(datas[1]==upchu[0]&&datas[2]>upchu[1]) || (datas[1]==downchu[0]&&datas[2]<downchu[1]) )
  192.                 {
  193.                         if(datas[1]!=8||datas[2]!=5)
  194.                         {
  195.                                 sound();
  196.                                 for(i=0;i<200;i++)
  197.                                 {
  198.                                   moto=1;
  199.                                   delay(5000);
  200.                                 }
  201.                                 moto=0;
  202.                         }        
  203.                 }
  204.                         

  205. }

  206. /*void motogo()
  207. {
  208.    uchar r;
  209.    moto=0;
  210.    if( ( datas[1]>upchu[0] )||( datas[1]<downchu[0] )||(datas[1]==upchu[0]&&datas[2]>upchu[1]) || (datas[1]==downchu[0]&&datas[2]<downchu[1]))
  211.                 {
  212.          if(datas[1]!=8||datas[2]!=5)
  213.                   {
  214.                         for(r=0;r<100;r++)
  215.                         {
  216.                           moto=1;
  217.                           delay(5000);
  218.                         
  219.                         }        
  220.                           moto=0;
  221.                   }
  222.                 }


  223. }                                  */
复制代码
全部资料51hei下载地址:
基于单片机的温度测量报警风扇.zip (128.88 KB, 下载次数: 31)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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