久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

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

作者:胡永明   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年12月10日   【字體:


# include "reg52.h"
# include "math.h"
#include<intrins.h>

# define uchar unsigned char
# define uint unsigned int

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

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

sbit kmbj=P1^4; //開(kāi)門(mén)報(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)門(mén)開(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寫(xiě)命令函數(shù)*********************************/
 void write_byte2(uchar dat)  //向1-WIRE總線上寫(xiě)一字節(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) ;
}
/*******************************DS復(fù)位函數(shù)******************************/
void ow_reset(void)
{
  uchar presence=1;

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

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

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

 /******************************讀出溫度函數(shù)*************************************************/
 void read_temp(void)
 {
  ow_reset(); 
  write_byte(0xcc);//skip ROM
  write_byte(0x44);// 啟動(dòng)溫度轉(zhuǎn)換

  ow_reset();
  write_byte(0xcc);
  write_byte(0xbe);  //讀取溫度寄存器
 
  temp_data[0]=read_byte();                 //溫度低8位
  temp_data[1]=read_byte();     //溫度高8位

 }

 
/*****************第二個(gè)ds18b20處理函數(shù)******************/

    /******************************讀出溫度函數(shù)*************************************************/
 void read_temp2(void)
 {
  ow_reset2(); 
  write_byte2(0xcc);//skip ROM
  write_byte2(0x44);// 啟動(dòng)溫度轉(zhuǎn)換

  ow_reset2();
  write_byte2(0xcc);
  write_byte2(0xbe);  //讀取溫度寄存器
 
  temp_data[0]=read_byte2();                 //溫度低8位
  temp_data[1]=read_byte2();     //溫度高8位

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

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

 }
/**********eeprom函數(shù)******************/
////////延時(shí)//////////////////////////////////
void flash()
{  ;  ; }
void x24c02_init()  //24c02初始化子程序
{
 scl=1; //拉高
 flash(); //延時(shí)
 sda=1;
 flash();//同上
}
void start()        //啟動(dòng)I2C總線
{
 sda=1;
 flash();
 scl=1;
 flash();
 sda=0;
 flash();
 scl=0;
 flash();
}
void stop()         //停止I2C總線
{
 sda=0;
 flash();
 scl=1;
 flash();
 sda=1;
 flash();
}
void writex(uchar j)  //寫(xiě)一個(gè)字節(jié)
{
 uchar i,temp;
    temp=j;
    for (i=0;i<8;i++)
  {
   temp=temp<<1;
   scl=0;
   flash();
   sda=CY;
   flash();
   scl=1;
   flash();
  }

 scl=0;
 flash();
 sda=1;
 flash();
}
char readx()   //讀一個(gè)字節(jié)
{
 char i,j,k=0;
 scl=0;
 flash();
 sda=1;
    for (i=0;i<8;i++)
  {
   flash();
   scl=1;
   flash();
   if (sda==1) j=1;
   else j=0;
   k=(k<<1)|j;
   scl=0;
  }
 flash();
 return(k);
}
void clock()         //I2C總線時(shí)鐘,在此作第個(gè)時(shí)鐘
{
 
 scl=1;
 flash();
 while (sda==1);//如果SDA為0即收到應(yīng)答則跳過(guò),為1則等應(yīng)答
 scl=0;
 flash();
}

////////從24c02的地址address中讀取一個(gè)字節(jié)數(shù)據(jù)/////

char x24c02_read(uchar address)
{
 char i;
 start();
 writex(0xa0);
 clock();//第9個(gè)時(shí)鐘
 writex(address);//選中24C02
 clock();
 start();
 writex(0xa1); //選中24C02中的存儲(chǔ)器地址
 clock();
 i=readx();
 stop();
 delay(10);
 return(i);
}

void x24c02_write(char address,char info)
{
 EA=0;
 start();
 writex(0xa0);
 clock();
 writex(address);
 clock();
 writex(info);
 clock();
 stop();
 EA=1;
 delay(50);
}

 /*******************************主函數(shù)**********************************************************/
 void main (void)
 {
   char i,num1,num2;
   TMOD=0x11; //定時(shí)器0設(shè)置方式1,定時(shí)器1設(shè)置方式1
   TH0=0xf4;   //定時(shí)3ms 為了計(jì)數(shù)值顯示的需要
   TL0=0x48;

   TH1=0xbf;   //定時(shí)16.6ms 為了計(jì)數(shù)值顯示的需要
   TL1=0x28;

   EA=1;  //開(kāi)總中斷
   ET0=1;    //定時(shí)器中斷使能
   ET1=1;
   TR0=1;    //啟動(dòng)定時(shí)器0
   TR1=1;

   P2=0x00;
   
   kmbj=0;
   motordc=0;

   hghlgt=0;
   setlclgt =0;
   syslgt=1;

   opndrspk=0;

 
主程序略。

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 欧日韩不卡在线视频 | 国产精品精品 | www.日本国产| 亚洲精品成人av | 欧美一区二区 | 在线一区 | 久久99精品久久久久蜜桃tv | 日韩精品在线网站 | 亚洲欧美在线观看 | 一级毛片在线播放 | 99综合| 中文字幕一级毛片视频 | 北条麻妃一区二区三区在线视频 | 久久久久久国 | 国产1区 | 成人3d动漫一区二区三区91 | 99自拍视频 | 九九热这里 | 国产精品一区二区三区四区 | 亚洲免费一区二区 | 欧美男人天堂 | 亚洲精品久久久久久一区二区 | 欧产日产国产精品视频 | 男女一区二区三区 | 色综合天天天天做夜夜夜夜做 | 国产一二三区精品视频 | av一区二区三区四区 | 97人人超碰 | 最新超碰 | 国产免费观看一区 | 在线观看亚洲专区 | 精品久久久久一区二区国产 | 亚洲视频免费播放 | 午夜免费网站 | 九九视频在线观看 | 国产高清免费 | 欧美二三区| 日韩毛片在线免费观看 | 日日夜夜天天干 | 欧美色a v| 一区二区三区四区免费在线观看 |