找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ds18b20写的温度控制器,设定温度只能到个位数,怎么改能控制到小数

[复制链接]
跳转到指定楼层
楼主

单片机源程序如下:
  1. void key_pros()  //按键处理函数
  2. {
  3.         if(k1==0)
  4.         {
  5.                 delay(1000); //按键消抖
  6.                 if(k1==0)                           //按键1菜单
  7.                 {
  8.                         mode++;
  9.                         if(mode==5)mode=0;
  10.                         wrc(0x01);
  11.                 }
  12.                 while(!k1);
  13.         }
  14.         if(mode==1)                  //对温度上限设定
  15.         {
  16.                 if(k2==0)                  //加        //按键2加
  17.                 {
  18.                         delay(1000);   //按键消抖
  19.                         if(k2==0)
  20.                         {
  21.                                 temph++;
  22.                                 if(temph>=80)temph=80;
  23.                         }
  24.                         while(!k2);
  25.                 }
  26.                 if(k3==0)           //减
  27.                 {
  28.                         delay(1000);
  29.                         if(k3==0)                  //按键3减
  30.                         {
  31.                                 temph--;
  32.                                 if(temph<=0)temph=0;
  33.                         }
  34.                         while(!k3);
  35.                 }
  36.         }
  37.         if(mode==2)                  //对温度下限设定
  38.         {
  39.                 if(k2==0)                  //加
  40.                 {
  41.                         delay(1000);
  42.                         if(k2==0)
  43.                         {
  44.                                 templ++;
  45.                                 if(templ>=80)templ=80;
  46.                         }
  47.                         while(!k2);
  48.                 }
  49.                 if(k3==0)           //减
  50.                 {
  51.                         delay(1000);
  52.                         if(k3==0)
  53.                         {
  54.                                 templ--;
  55.                                 if(templ<=0)templ=0;
  56.                         }
  57.                         while(!k3);
  58.                 }
  59.         }
  60.         if(mode==3)                  //对湿度上限设定
  61.         {
  62.                 if(k2==0)                  //加
  63.                 {
  64.                         delay(1000);
  65.                         if(k2==0)
  66.                         {
  67.                                 humih++;
  68.                                 if(humih>=80)humih=80;
  69.                         }
  70.                         while(!k2);
  71.                 }
  72.                 if(k3==0)           //减
  73.                 {
  74.                         delay(1000);
  75.                         if(k3==0)
  76.                         {
  77.                                 humih--;
  78.                                 if(humih<=0)humih=0;
  79.                         }
  80.                         while(!k3);
  81.                 }
  82.         }
  83.         if(mode==4)                  //对湿度下限设定
  84.         {
  85.                 if(k2==0)                  //加
  86.                 {
  87.                         delay(1000);
  88.                         if(k2==0)
  89.                         {
  90.                                 humil++;
  91.                                 if(humil>=80)humil=80;
  92.                         }
  93.                         while(!k2);
  94.                 }
  95.                 if(k3==0)           //减
  96.                 {
  97.                         delay(1000);
  98.                         if(k3==0)
  99.                         {
  100.                                 humil--;
  101.                                 if(humil<=0)humil=0;
  102.                         }
  103.                         while(!k3);
  104.                 }
  105.         }
  106. }

  107. void lcd_init_display()           //LCD初始化显示
  108. {
  109.         uint8 i;
  110.         for(i=0;i<5;i++)
  111.         {
  112.                 wrc(0x80+i);
  113.                 wrd(str1[i]);        
  114.         }

  115.         for(i=0;i<5;i++)
  116.         {
  117.                 wrc(0xc0+i);
  118.                 wrd(str2[i]);        
  119.         }
  120. }

  121. void data_pros()        //数据处理函数
  122. {
  123.         uint8 i;              
  124.         uint8 temp_buf[2],humi_buf[2];
  125.         uint8 temphbuf[2],templbuf[2],humihbuf[2],humilbuf[2];
  126.         float dio;        //测量温度值
  127.         uint16 k;  //取小数点后两位有效数字

  128.         tempvalue=readtemp();        //读取温度
  129.         DHT11_Read_Data(&temp,&humi);
  130.         temp_buf[0]=temp/10+0x30;          //LCD显示温度做准备
  131.         temp_buf[1]=temp%10+0x30;

  132.         humi_buf[0]=humi/10+0x30;          //LCD显示湿度做准备
  133.         humi_buf[1]=humi%10+0x30;
  134.         
  135.         dio=a*0.0625;
  136.         k=dio*10000;//取小数点后两位有效数字

  137.         temphbuf[0]=temph/10+0x30;           //LCD显示上下限温度做准备
  138.         temphbuf[1]=temph%10+0x30;
  139.         templbuf[0]=templ/10+0x30;
  140.         templbuf[1]=templ%10+0x30;

  141.         humihbuf[0]=humih/10+0x30;           //LCD显示上下限湿度做准备
  142.         humihbuf[1]=humih%10+0x30;
  143.         humilbuf[0]=humil/10+0x30;
  144.         humilbuf[1]=humil%10+0x30;

  145.         if(mode==0)                   //测量温度,湿度显示
  146.         {
  147.                 lcd_init_display();                          //LCD显示函数
  148.                 wrc(0x85);                                         //LCD显示温度位置
  149.                 wrd(num[tempvalue%100/10]);         //测量温度十位显示
  150.                 wrd(num[tempvalue%100%10]);         //测量温度个位显示
  151.                 wrd('.');
  152.                 wrd(num[k/1000]);  //取小数点后两位有效数字
  153.                 wrd(0xdf);
  154.                 wrd('C');                 //测量温度符号
  155.         
  156.                 for(i=0;i<2;i++)
  157.                 {
  158.                         wrc(0Xc5+i);           //LCD显示湿度位置
  159.                         wrd(humi_buf[i]); //测量湿度十个位显示                  
  160.                 }        
  161.                 for(i=0;i<3;i++)
  162.                 {
  163.                         wrc(0Xc7+i);         //LCD显示符号位置
  164.                         wrd(str5[i]);        //测量湿度符号        %RH  
  165.                 }        
  166.         }
  167.         if(mode==1)                          //温度上限显示
  168.         {
  169.                 wrc(0x80);
  170.                 for(i=0;i<6;i++)
  171.                 {
  172.                         wrd(str6[i]);                  
  173.                 }
  174.                 wrd(temphbuf[0]);
  175.                 wrd(temphbuf[1]);                        
  176.         }
  177.         if(mode==2)                          //温度下限显示
  178.         {
  179.                 wrc(0x80);
  180.                 for(i=0;i<6;i++)
  181.                 {
  182.                         wrd(str7[i]);                  
  183.                 }
  184.                 wrd(templbuf[0]);
  185.                 wrd(templbuf[1]);                        
  186.         }
  187.         if(mode==3)                          //湿度上限显示
  188.         {
  189.                 wrc(0x80);
  190.                 for(i=0;i<6;i++)
  191.                 {
  192.                         wrd(str8[i]);                  
  193.                 }
  194.                 wrd(humihbuf[0]);
  195.                 wrd(humihbuf[1]);                        
  196.         }
  197.         if(mode==4)                          //湿度下限显示
  198.         {
  199.                 wrc(0x80);
  200.                 for(i=0;i<6;i++)
  201.                 {
  202.                         wrd(str9[i]);                  
  203.                 }
  204.                 wrd(humilbuf[0]);
  205.                 wrd(humilbuf[1]);                        
  206.         }
  207. }

复制代码


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

使用道具 举报

沙发
ID:7485 发表于 2018-4-23 09:30 | 只看该作者
控制部分的温度设定值扩大10倍(假设你仅使用1位小数),实测温度值也扩大10倍然后进行比较。显示时在个位加上小数点即可。

如果有负数(零下)可以把设定值(上限制和下限值)加上50(假设你最低到零下50度)实测值也加上50进行比较。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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