找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机+DS18B20温控+流水灯电路问题

[复制链接]
跳转到指定楼层
楼主
ID:724218 发表于 2020-4-16 18:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大佬们
请问P3口接按键然后直接接地,
其他的接地的地方需不需要装一个二极管 比如晶振的接地端

还有 请问怎么操作才能让流水灯不影响我按键控制温度上下限


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

使用道具 举报

沙发
ID:724218 发表于 2020-4-16 18:49 | 只看该作者
  1. void main()
  2. {
  3.         unsigned int a,b,c,d,i;
  4.         i=0;
  5.         a=2;
  6.         b=7;
  7.         c=2;
  8.         d=4;
  9.         LED_BUS=0;                  
  10.         LED = 0 ;
  11.         heater = 0 ;       
  12.         Init_LCD1602();                                                                        //初始化LCD1602
  13.         LCD1602_write_com(0x80);                                                //指针指到第一行第一列
  14.         LCD1602_write_word("WELCOME TO USE");
  15.         Temp_Buffer = Get_temp();                                          //读取DS18B20的值
  16.         Delay_ms(1000);                                                                //等待1s等待DS18B20数据稳定
  17.         LCD1602_write_com(0x01);
  18.         while(1)
  19.         {
  20.                 if(TH11==0)
  21.                 {
  22.                         ++a;
  23.                 }
  24.                 if(TH12==0)
  25.                 {
  26.                         --a;
  27.                 }
  28.                 if(TH21==0)
  29.                 {
  30.                         ++b;
  31.                 }
  32.                 if(TH22==0)
  33.                 {
  34.                         --b;
  35.                 }
  36.                 if(TL11==0)
  37.                 {
  38.                         ++c;
  39.                 }
  40.                 if(TL12==0)
  41.                 {
  42.                         --c;
  43.                 }
  44.                 if(TL21==0)
  45.                 {
  46.                         ++d;
  47.                 }
  48.                 if(TL22==0)
  49.                 {
  50.                         --d;
  51.                 }
  52.                 if(a>=9)
  53.                 {
  54.                         a=9;
  55.                 }
  56.                 if(b>=9)
  57.                 {
  58.                         b=9;
  59.                 }
  60.                 if(c>=9)
  61.                 {
  62.                         c=9;
  63.                 }
  64.                 if(d>=9)
  65.                 {
  66.                         d=9;
  67.                 }
  68.     LED_BUS = tab[i];
  69.                 i++;
  70.                 if(i==8)
  71.                 {
  72.                         i=0;
  73.                 }
  74.                 LCD1602_write_com(0x80);
  75.                 LCD1602_write_word("TH=");
  76.                 LCD1602_write_data(a+0x30);
  77.                 LCD1602_write_data(b+0x30);
  78.                 LCD1602_write_data(0xdf);              
  79.                 LCD1602_write_data(0x43);       
  80.                 LCD1602_write_data(0x20);       
  81.                 LCD1602_write_word("TL=");
  82.                 LCD1602_write_data(c+0x30);
  83.                 LCD1602_write_data(d+0x30);
  84.                 LCD1602_write_data(0xdf);               
  85.                 LCD1602_write_data(0x43);       
  86.                 LCD1602_write_com(0x80+0x40);                                //指针指到第二行第一列
  87.                 LCD1602_write_word("TEMP = ");
  88.                 Temp_Buffer = Get_temp();                          //读取DS18B20的值
  89.                 if(flag_temper == 1)                                                //根据温度标志位显示温度正负
  90.                 {
  91.                         LCD1602_write_data('-');       
  92.                 }
  93.                 if( Temp_Buffer/1000 != 0 )                                        //如果第一位为0,忽略显示
  94.                 {
  95.                         LCD1602_write_data(Temp_Buffer/1000+0X30);           //显示温度百位值
  96.                 }
  97.                 if( Temp_Buffer/1000 == 0 && Temp_Buffer%1000/100 == 0 )                        //百位十位都为0,忽略显示
  98.                 {
  99.                 }
  100.                 else
  101.                 {
  102.                         LCD1602_write_data(Temp_Buffer%1000/100+0X30);           //显示温度十位值
  103.                 }
  104.                 LCD1602_write_data(Temp_Buffer%100/10+0X30);           //显示温度个位值
  105.                 LCD1602_write_data('.');                                                   //显示小数点
  106.                 LCD1602_write_data(Temp_Buffer%10+0X30);                //显示温度十分位值
  107.                 LCD1602_write_data(0xdf);               //显示字符°
  108.                 LCD1602_write_data(0x43);                                                   //显示字符C
  109.                 Delay_ms(500);       
  110.     if(Temp_Buffer%1000/100 >= a && Temp_Buffer%100/10 >= b)        //温度大于等于27℃停止加热
  111.                 {
  112.                         heater = 0;
  113.                         LED = 0;
  114.                 }
  115.                 if(Temp_Buffer%1000/100 <= c && Temp_Buffer%100/10 < d)        //温度小于23℃开始加热
  116.                 {
  117.                         heater = 1;
  118.                         LED = 1;
  119.                 }
  120.         }
  121. }
复制代码
回复

使用道具 举报

板凳
ID:452950 发表于 2020-4-16 23:02 | 只看该作者
不同IO口不会互相影响,按键按下只会把那一位的电平拉低。端口复用才有可能影响别的功能。
回复

使用道具 举报

地板
ID:729982 发表于 2020-4-16 23:26 | 只看该作者
楼主你问题不太清楚啊,首先你的设计思路我们不知道,代码太多了看着烦。然后为什么流水灯会影响上下限?你要说流水灯会让温度波动我倒是信,这个可以用pid控制解决。你这个影响上下限让我黑人问号脸。会不会是什么数组被修改了没改回来。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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