在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于89S51的實(shí)時數(shù)字溫度計(DS1302 18B20)

            基于89S51的實(shí)時數(shù)字溫度計(DS1302 18B20)

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




            #include
            #include
            #include

            本文引用地址:http://www.biyoush.com/article/201611/324044.htm

            #define uchar unsigned char
            #define uint unsigned int
            #define S_RST DS_RST=1
            #define C_RST DS_RST=0
            #define S_CLK DS_CLK=1
            #define C_CLK DS_CLK=0
            #define Write_Disable RW_DS1302(0x8e,0x80) //寫保護(hù)
            #define Write_Enable RW_DS1302(0x8e,0x00) //允許寫入

            sbit SET = P1^5; //設(shè)置按鍵
            sbit ADD = P1^4; //調(diào)整加
            sbit DEC = P1^6; //調(diào)整減
            #define RdefineT1 TH1=0;TL1=0;TR1=0;a=0; //初始化超時檢測


            //#define Delay2us() _nop_();_nop_(); //延時2us,每nop 1us
            //#define Delay8us() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

            #define ReDetectTime 20 //設(shè)置重復(fù)檢測次次數(shù),超出次數(shù)則超時

            //ds18b20命令
            #define SkipROM 0xCC
            #define MatchROM 0x55
            #define ReadROM 0x33
            #define SearchROM 0xF0
            #define AlarmSearch 0xEC

            #define Convert 0x44 //啟動溫度轉(zhuǎn)換
            #define WriteScr 0x4E
            #define ReadScr 0xBE
            #define CopyScr 0x48
            #define RecallEE 0xB8
            #define ReadPower 0xB4

            #define md collect_time[0]&0x0f
            #define mg (collect_time[0]&0x70)/16
            #define fd collect_time[1]&0x0f
            #define fg (collect_time[1]&0x70)/16
            #define sd collect_time[2]&0x0f
            #define sg (collect_time[2]&0x30)/16

            sbit DS_RST = P1^2; //DS復(fù)位端
            sbit DS_CLK = P1^0; //SCLK端
            sbit DS_IO = P1^1; //IO端
            sbit DS18B20 = P1^3; //溫度傳感器接口

            bit keyboard,flash,STA=1;
            uchar choose,a;
            uchar collect_time[3]={0x45,0x23,0x11};//定義變量秒分時
            uchar collect_temperature[2] = {0};
            uchar num[10] = {0x7e,0x48,0x3d,0x6d,0x4b,0x67,0x77,0x4c,0x7f,0x6f};
            //七段數(shù)碼管顯示的段碼
            uchar display[8] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};


            void delay(uint i)
            {
            uint k;
            while(i--)
            {
            for(k=0;k<120;k++){;}
            }
            }


            void Dat_Int(void)//數(shù)據(jù)初始化
            {
            P0=0xff;
            P1=0xff;
            P2=0xff;
            choose=0;
            flash=1;
            }

            void Time01_Int(void)
            {
            TMOD = 0x12; //定時器0為8位自動重載定時采樣,定時器1為16位超時檢測處理
            TCON = 0x00;
            TH0 = 0x60;
            TL0 = 0x60;
            TR0 = 1;

            IE = 0x0a; //允許定時器0、1中斷
            IP = 0x00;
            }

            /********************************************************
            * *
            * DS18B20溫度傳感器程序段 *
            * *
            ********************************************************/
            /***********11微秒延時函數(shù)**********/
            //
            void delayus(uint t)
            {
            for(;t>0;t--);
            }

            /***********18B20復(fù)位函數(shù)**********/
            void ow_reset(void)
            {
            char presence=1;
            while(presence)
            {
            while(presence)
            {
            DS18B20 = 1;_nop_();_nop_();
            DS18B20 = 0;
            delayus(50); // 550us
            DS18B20 = 1;
            delayus(6); // 66us
            presence=DS18B20; // presence=0繼續(xù)下一步
            }
            delayus(45); //延時500us
            presence = ~DS18B20;
            }
            DS18B20 = 1;
            }


            /**********18B20寫命令函數(shù)*********/
            //向 1-WIRE 總線上寫一個字節(jié)
            void write_byte(uchar val)
            {
            uchar i;
            for (i=8; i>0; i--) //
            {
            DS18B20 = 1;_nop_();_nop_();
            DS18B20 = 0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us
            DS18B20 = val&0x01; //最低位移出
            delayus(6); //66us
            val=val/2; //右移一位
            }
            DS18B20 = 1;
            delayus(1);
            }
            //
            /*********18B20讀1個字節(jié)函數(shù)********/
            //從總線上讀取一個字節(jié)
            uchar read_byte(void)
            {
            uchar i;
            uchar value = 0;
            for (i=8;i>0;i--)
            {
            DS18B20 = 1;_nop_();_nop_();
            value>>=1;
            DS18B20 = 0; //
            _nop_();_nop_();_nop_();_nop_(); //4us
            DS18B20 = 1;_nop_();_nop_();_nop_();_nop_(); //4us
            if(DS18B20)value|=0x80;
            delayus(6); //66us
            }
            DS18B20 = 1;
            return(value);
            }
            //
            /***********讀出溫度函數(shù)**********/
            //
            void Ds18b20_ReadEE(void)
            {
            ow_reset();
            write_byte(SkipROM); // Skip ROM
            write_byte(Convert); // 發(fā)轉(zhuǎn)換命令
            ow_reset(); //總線復(fù)位
            write_byte(SkipROM); // 發(fā)Skip ROM命令
            write_byte(ReadScr); // 發(fā)讀命令
            collect_temperature[0]=read_byte(); //溫度低8位
            collect_temperature[1]=read_byte(); //溫度高8位
            }


            /********************************************************
            * *
            * DS1302時鐘芯片程序段 *
            * *
            ********************************************************/
            void DS1302_InputByte(uchar byte) //往DS1302寫入1Byte數(shù)據(jù)
            {
            uchar i;
            uchar temp;
            temp = byte;
            for(i=8; i>0; i--)
            {
            DS_IO = temp&0x01;
            S_CLK;
            C_CLK;
            temp = temp >> 1;
            }
            }


            uchar DS1302_OutputByte(void) //從DS1302讀取1Byte數(shù)據(jù)
            {
            uchar i;
            uchar temp=0;

            for(i=0; i<8;i++)
            {
            C_CLK;
            if(DS_IO!=0) temp|=(1< S_CLK;
            }
            return(temp);
            }

            void RW_DS1302(uchar reg, uchar byte)//向DS1302寄存器寫數(shù)據(jù)
            {
            C_RST;
            C_CLK;
            S_RST;
            DS1302_InputByte(reg);
            DS1302_InputByte(byte);
            S_CLK;
            C_RST;
            }


            上一頁 1 2 下一頁

            評論


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

            關(guān)閉