找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2196|回復(fù): 3
收起左側(cè)

單片機(jī)+DS18B20溫控+流水燈電路問(wèn)題

[復(fù)制鏈接]
ID:724218 發(fā)表于 2020-4-16 18:47 | 顯示全部樓層 |閱讀模式
各位大佬們
請(qǐng)問(wèn)P3口接按鍵然后直接接地,
其他的接地的地方需不需要裝一個(gè)二極管 比如晶振的接地端

還有 請(qǐng)問(wèn)怎么操作才能讓流水燈不影響我按鍵控制溫度上下限


回復(fù)

使用道具 舉報(bào)

ID:724218 發(fā)表于 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數(shù)據(jù)穩(wěn)定
  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)                                                //根據(jù)溫度標(biāo)志位顯示溫度正負(fù)
  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);           //顯示溫度個(gè)位值
  105.                 LCD1602_write_data('.');                                                   //顯示小數(shù)點(diǎn)
  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℃開(kāi)始加熱
  116.                 {
  117.                         heater = 1;
  118.                         LED = 1;
  119.                 }
  120.         }
  121. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:452950 發(fā)表于 2020-4-16 23:02 | 顯示全部樓層
不同IO口不會(huì)互相影響,按鍵按下只會(huì)把那一位的電平拉低。端口復(fù)用才有可能影響別的功能。
回復(fù)

使用道具 舉報(bào)

ID:729982 發(fā)表于 2020-4-16 23:26 | 顯示全部樓層
樓主你問(wèn)題不太清楚啊,首先你的設(shè)計(jì)思路我們不知道,代碼太多了看著煩。然后為什么流水燈會(huì)影響上下限?你要說(shuō)流水燈會(huì)讓溫度波動(dòng)我倒是信,這個(gè)可以用pid控制解決。你這個(gè)影響上下限讓我黑人問(wèn)號(hào)臉。會(huì)不會(huì)是什么數(shù)組被修改了沒(méi)改回來(lái)。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表