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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ds18b20電冰箱控制系統(tǒng)

          ds18b20電冰箱控制系統(tǒng)

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

          # include "reg52.h"
          # include "math.h"
          #include

          本文引用地址:http://www.ex-cimer.com/article/201612/324235.htm

          # define uchar unsigned char
          # define uint unsigned int

          //寫eeprom存儲(chǔ)中
          sbit scl=P1^1;
          sbit sda=P1^2;

          sbit DQ = P3^0; //溫度輸入口
          sbit DQ2 = P3^1; //溫度輸入口

          sbit kmbj=P1^4; //開(kāi)門報(bào)警燈入口
          sbit motordc=P3^5; //直流電機(jī)入口
          sbit hghlgt=P3^6; //溫度高于設(shè)定值入口
          sbit motorout=P3^7;

          sbit setlclgt=P3^2; //設(shè)置提示燈入口
          sbit setldlgt=P1^6; //設(shè)置提示燈入口
          sbit addlgt=P3^3; //溫度加燈入口
          sbit sublgt=P3^4; //溫度減燈入口
          sbit syslgt=P1^7; //系統(tǒng)工作提示燈

          sbit setbtn=P1^0; //設(shè)置按鍵入口
          sbit addbtn=P1^1; //溫度加按鍵入口
          sbit subbtn=P1^2; //溫度減按鍵入口

          sbit opndr=P1^3; //開(kāi)門開(kāi)關(guān)
          sbit opndrspk=P1^5; //18度報(bào)警

          uchar data temp_data[2]={0x00, 0x00,}; //讀出溫度暫存
          uchar temp_buff[3]={0x00,0x00,0x00};
          uchar disp_buff[8]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a}; //顯示緩沖單元
          uint tt=0,tt2=0,tm=0,cjtm=0,flag_cj=0,open=0,ccount=0;

          char lcsetvalue=0,ldsetvalue=0;

          uchar code TABLE[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; //共陽(yáng)極0-9的代碼
          uchar code codeseat[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

          uchar flag_set=1,flag_temp=1,flag_opendr=0,flag_kmbj=0,flag_hbj=0;

          void delay(uint j)
          {
          uint i;
          for(i=0;i<=j;i++);
          }

          /*****************溫度設(shè)定函數(shù)*************************/
          void temp_set(void)
          {
          syslgt=1;
          while(flag_set) //設(shè)定冷藏室溫度和冷凍室溫度
          {
          if(flag_temp)
          {
          setbtn=1;
          if(!setbtn)
          { while(!setbtn)
          { setbtn=1;setlclgt=0; }//等待鍵的釋放
          flag_temp++;
          if(flag_temp==2)
          { setlclgt=0;setldlgt=1;}
          if(flag_temp==3)
          {setlclgt=1;addlgt=1;sublgt=1;setldlgt=0;}
          if(flag_temp==4)
          {flag_temp=1;setlclgt=1;setldlgt=1;addlgt=1;sublgt=1;syslgt=0;flag_set=0;}

          tm=0;
          disp_buff[0]=10; disp_buff[1]=10;
          disp_buff[2]=10; disp_buff[3]=10;
          }
          }
          if(flag_temp==2) //開(kāi)始冷藏室溫度加或者減
          {
          addbtn=1;
          if(!addbtn)
          { while(!addbtn)
          { addbtn=1;addlgt=0;sublgt=1;}//等待鍵的釋放
          lcsetvalue++;
          if(lcsetvalue>=60)
          lcsetvalue=60;
          if(lcsetvalue<0)
          disp_buff[0]=11;
          else
          disp_buff[0]=10;

          disp_buff[1]=abs(lcsetvalue)/10;
          disp_buff[2]=abs(lcsetvalue)%10;
          disp_buff[3]=0;
          if(!disp_buff[1]) {disp_buff[1]=10;}
          }
          subbtn=1;
          if(!subbtn)
          { while(!subbtn)
          { subbtn=1;sublgt=0;addlgt=1;}//等待鍵的釋放
          lcsetvalue--;
          if(lcsetvalue<0)
          disp_buff[0]=11;
          else
          disp_buff[0]=10;

          disp_buff[1]=abs(lcsetvalue)/10;
          disp_buff[2]=abs(lcsetvalue)%10;
          disp_buff[3]=0;
          if(!disp_buff[1]) {disp_buff[1]=10;}
          }
          }
          if(flag_temp==3) //開(kāi)始冷凍室溫度加或者減
          {
          addbtn=1;
          if(!addbtn)
          { while(!addbtn)
          { addbtn=1;addlgt=0;sublgt=1;}//等待鍵的釋放
          ldsetvalue++;
          if(ldsetvalue>=60)
          ldsetvalue=60;
          if(ldsetvalue<0)
          disp_buff[0]=11;
          else
          disp_buff[0]=10;

          disp_buff[1]=abs(ldsetvalue)/10;
          disp_buff[2]=abs(ldsetvalue)%10;
          disp_buff[3]=0;
          if(!disp_buff[1]) {disp_buff[1]=10;}
          }
          subbtn=1;
          if(!subbtn)
          { while(!subbtn)
          { subbtn=1;sublgt=0;addlgt=1;}//等待鍵的釋放
          ldsetvalue--;
          if(ldsetvalue<0)
          disp_buff[0]=11;
          else
          disp_buff[0]=10;

          disp_buff[1]=abs(ldsetvalue)/10;
          disp_buff[2]=abs(ldsetvalue)%10;
          disp_buff[3]=0;
          if(!disp_buff[1]) {disp_buff[1]=10;}
          }
          }
          }
          }


          /********************************計(jì)算溫度子函數(shù)**********************************************/
          void temp_work(void)
          {
          disp_buff[0]=10;

          if(temp_data[1]>127)
          {temp_data[1]=(255-temp_data[1]);temp_data[0]=(255-temp_data[0])+1;disp_buff[0]=11;} //負(fù)溫度求補(bǔ)碼
          tt=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4) ;

          disp_buff[1]=tt/10;
          disp_buff[2]=tt%10;
          disp_buff[3]=0;

          if(!disp_buff[1])
          disp_buff[1]=10;
          }

          /*******************************DS復(fù)位函數(shù)******************************/
          void ow_reset2(void)
          {
          uchar presence=1;

          while(presence)
          {
          while(presence)
          {
          DQ2=1; //DQ復(fù)位
          DQ2=0; //單片機(jī)將DQ拉低
          delay(50); //延時(shí)550毫秒
          DQ2=1; //拉高總線
          delay(6);
          presence=DQ2; //如果=0則初始化成功 =1則初始化失敗
          }
          delay(45);
          presence=~DQ2;
          }
          DQ2=1;
          }
          /*****************************DS寫命令函數(shù)*********************************/
          void write_byte2(uchar dat) //向1-WIRE總線上寫一字節(jié)
          {
          uchar i = 0 ;
          for (i = 8 ; i > 0 ; i--)
          {
          DQ2 = 0 ;
          DQ2 = dat&0x01 ;
          delay(7) ; //0時(shí)序延時(shí)至少60US
          DQ2 = 1 ;
          dat>>=1 ;
          }
          }
          /*******************************DS讀一字節(jié)函數(shù)****************************************************/
          uchar read_byte2(void)
          {
          uchar i = 0 ;
          uchar dat = 0 ;

          for (i = 8 ; i > 0 ; i--)
          {
          DQ2 = 0 ; // 給脈沖信號(hào)
          dat >>= 1 ;
          DQ2 = 1 ; // 給脈沖信號(hào)

          if(DQ2)
          dat |= 0x80 ;
          delay(7) ;
          }
          return (dat) ;
          }


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: ds18b20電冰箱控制系

          評(píng)論


          技術(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); })();