<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 51單片機(jī)-溫度控制器設(shè)計詳解+電路+代碼

          51單片機(jī)-溫度控制器設(shè)計詳解+電路+代碼

          作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏

          單片機(jī)通過引腳輸出 1 0來實現(xiàn)控制外圍電路,以P1^0[P1端口的第1位引腳]為例,當(dāng)P1^0輸出1的時候,引腳會產(chǎn)生一個5V的高電平.當(dāng)P1^0輸出0的時候,引腳會產(chǎn)生一個0V的低電平


          注:繼電器原理圖來自百度百科->http://baike.baidu.com/view/39560.htm繼電器原理:當(dāng)控制電路兩端有電流通過時,電和金屬發(fā)生電磁感應(yīng),使得銜鐵被磁力吸引而控制工作電路的開關(guān)

          繼電器和P1^0引腳之間的關(guān)系電路圖如下:


          當(dāng)P1^0輸出1[即5V]時,控制電路兩端沒有電流通過,因為沒有電壓差的緣故,所以繼電器還是把開關(guān)B G 通路,但是當(dāng)P1^0輸出0的時候,左邊的電
          壓為5V,右邊的電壓位0V,于是電流就從左向右流過,這個時候繼電器會把開關(guān)K G 變?yōu)橥?/div>

          同理,主控芯片的工作指示燈也是這個原理,你可以去看看上面的EEPROM讀取數(shù)據(jù)代碼和主控芯片及外圍器件電路結(jié)合起來一起看看,相信你也
          會把這個原理給弄明白


          八路溫度控制器實物圖如下[八路只使用了其中一路,程序也實地運(yùn)行過,由于室內(nèi)溫度調(diào)節(jié)問題,繼電器沒有反應(yīng),因為給EEPROM設(shè)置30度報警

          溫度,而且還有零下報警代碼沒有寫和報警溫度小數(shù)位判斷沒有寫]:


          實物圖和電路原理圖基本一致,這個大家不用擔(dān)心



          代碼和大家分享,可以再這個基礎(chǔ)上再加以改進(jìn),也歡迎你們在使用代碼的時候找到BUG然后修改..

          代碼及其電路圖下載:http://www.51hei.com/f/DS18B20+EEPROM.rar

          下面是main.c 文件:
          #include
          #define uchar unsigned char
          #define uint unsigned int

          #define EEPROM_StartAddr 0x4E
          #define EEPROM_StartFlag 0xB0
          /*
          #define EEPROM_EndFlag 0xC0
          #define EEPROM_EndAddr 0x4E+2+24 //8個數(shù)據(jù)總數(shù)x3個數(shù)據(jù)位
          //EEPROM_EndAddr=0x4E+2+8x03 每個數(shù)據(jù)占3字節(jié)(兩個主要數(shù)據(jù)和一個NULL),0x49系獲得數(shù)據(jù)項目總數(shù)
          */
          typedef int CTRL_TOTAL;//列表總項目

          typedef struct EEPROM_DataList//EEPROM數(shù)據(jù)結(jié)構(gòu)
          {
          int AlarmTemp;//報警溫度
          int CtrlPort; //控制端口
          } CTRL_DATALIST;

          uint get_temp();
          void tmpchange(void);
          void delayb(uint count);
          void init();
          void write_add(uchar address,uchar date);
          uchar read_add(uchar address);

          void CtrlPort(int PortCode,int Ctrl);

          sbit Beep=P3^4; // 測試用,可略
          sbit LED=P2^7;

          sbit CtrlPort1=P1^0;
          sbit CtrlPort2=P1^1;
          sbit CtrlPort3=P1^2;
          sbit CtrlPort4=P1^3;
          sbit CtrlPort5=P1^4;
          sbit CtrlPort6=P1^5;
          sbit CtrlPort7=P1^6;
          sbit CtrlPort8=P1^7;

          CTRL_TOTAL ListTotal;
          CTRL_DATALIST CtrlList[8];
          void delayb(uint count) ;
          void main()
          {
          int BitData; // EEPROM位數(shù)據(jù)緩存
          int i;// 計數(shù)循環(huán)變量
          int TempData;// 當(dāng)前溫度值
          int CtrlListPort;// 將要控制的引腳
          int CtrlElec;// 將要控制的引腳輸出電平

          LED=1;
          init();
          BitData=read_add(EEPROM_StartAddr);

          if (BitData!=EEPROM_StartFlag){while(1);} // 卡住它,不要讓它重新運(yùn)行
          // 關(guān)于EEPROM獲取數(shù)據(jù)信息可以從同文件夾中圖片有指導(dǎo)
          ListTotal=read_add(EEPROM_StartAddr+1);
          for(i=0;i {
          CtrlList[i].AlarmTemp=read_add((EEPROM_StartAddr+2)+i*3);
          CtrlList[i].CtrlPort =read_add((EEPROM_StartAddr+2)+i*3+1);
          }
          tmpchange();

          for(i=0;i<=7;i++) CtrlPort(i,1);//輸出高電位
          LED=0;//工作指示燈開啟

          while(1)
          {
          TempData=get_temp();
          BitData=(TempData%1000/100)*10;//十位溫度。
          BitData=(TempData%1000%100/10)+BitData;//個位溫度。
          for(i=0;i {
          CtrlElec=(CtrlList[i].AlarmTemp>=BitData)?0:1;
          CtrlListPort=CtrlList[i].CtrlPort;
          CtrlPort(CtrlListPort,CtrlElec); //符合條件輸出底電,不符合輸出高電
          delayb(100);
          }
          delayb(200);
          }
          }

          void CtrlPort(int PortCode,int Ctrl)//控制P1.0-P1-7
          {
          switch(PortCode)
          {
          case 1: CtrlPort1=Ctrl;
          case 2: CtrlPort2=Ctrl;
          case 3: CtrlPort3=Ctrl;
          case 4: CtrlPort4=Ctrl;
          case 5: CtrlPort5=Ctrl;
          case 6: CtrlPort6=Ctrl;
          case 7: CtrlPort7=Ctrl;
          case 8: CtrlPort8=Ctrl;
          }
          }


          上一頁 1 2 下一頁

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();