<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        DS18B20溫度測試程序(51單片機數碼管顯示)+電路圖

        作者:huqin   來源:本站原創   點擊數:  更新時間:2014年10月24日   【字體:
        • 下面是電路圖 采用4位數碼管顯示 程序一共有2個文件 :


         
        /***********************************************************************************************************************

        ds18b20.h 頭文件
        ***********************************************************************************************************************/
        #ifndef _DS18B20_H_
        #define _DS18B20_H_
        #include <reg51.h>
        #define led P1
        #define ledw P2 
        extern unsigned char f;
        extern void ds18b20_reset();
        extern void dela(unsigned char i);
        extern void ds18b20_write(unsigned char dat);
        extern unsigned char ds18b20_read();
        extern unsigned char ds18b20_temp();
        extern unsigned char ledtab[];
        #endif
         


        /********************************************************************************************************************
         ds18b20.c 文件
        ********************************************************************************************************************/
        #include"ds18b20.h"
        #define uchar unsigned char
        #define uint unsigned int
        #define led P1
        #define ledw P2 
        uchar ledtab[]={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
        sbit dq=P3^7 ;
        uchar delay,f;
        //uchar f;            
        void dela(uchar i)   //5us   t=5+i*2
        {
         while(--i);
        }
        void ds18b20_reset()
        {
         while(1)
         {
         dq=1;
         dq=0;
         delay=250;    //540us延時,當delay=1時延時為2us ,T=2*x
         while(--delay);
         dq=1;
         delay=25;
         while(--delay);
         while(dq==0)
         {
          delay=220;
          while(--delay);
          if(dq==1)
          break;  
         }
         delay=150;
         while(--delay);
         break; 
           }
        }
        void ds18b20_write(uchar dat)
        {
         uchar i=0;
         for(i=0;i<8;i++)
         {
          dq=1;
          dq=0;
          delay=3;
          while(--delay);
          dq=dat&0x01;
          delay=35;
          while(--delay);
          dq=1;
          dat=dat>>1;
         }
        }
        uchar ds18b20_read()
        {
         uchar i=0,m=0;
         for(i=0;i<8;i++)
           {
            //m>>=1
            dq=1;
          dq=0;
          delay=4;
          while(--delay);
          dq=1;
          delay=4;
          while(--delay);
          if(dq==1)
          m|=0x01<<i;
          //m=m|0x80;
           delay=25;
           while(--delay);
           dq=1;
           delay=1;
           while(--delay);  
           } 
           return m;
        }
                 
        uchar ds18b20_temp()
        {
         uchar temp=0,temph=0,templ=0,k=0;
         ds18b20_reset();
         ds18b20_write(0xcc);
         ds18b20_write(0x44);
         ds18b20_reset();
         ds18b20_write(0xcc);
         ds18b20_write(0xbe);
         templ=ds18b20_read();
         temph=ds18b20_read();
         if((temph&0xf80)!=0)
         {
          f=1;
          templ=~templ;
          temph=~temph;
          k=templ+1;
          templ=k;
          if(templ>0xff)
          {
          temph++;
          }
         }
         else
         f=0;
         templ=templ>>4;
         temph=temph<<4;
         temp=templ|temph;
         return temp;
        }
         


        /******************************************************************************************************************
        main.c 主文件
        *******************************************************************************************************************/
        #include<reg51.h>
        #include"ds18b20.h"
        #define uchar unsigned char
        void main()
        {
         uchar a=0,b=0,c=0,temp=0;
         while(1)
         {  
         temp=ds18b20_temp();
         a=temp/100;
         b=temp0/10;
         c=temp;
         
         if(f==1)
         {
          led=0xbf;
          ledw=1;
          dela(5000);
          ledw=0;
          dela(600);
         }
         led=ledtab[c];
         ledw=8;
         dela(5000);
         ledw=0;
         dela(600) ;
          
          led=ledtab[b];
          ledw=4;
            dela(5000);
          ledw=0;
          dela(600) ;
         
         
          led=ledtab[a];
          ledw=2;
          dela(5000);
          ledw=0;
          dela(600) ;
          }
        }
         

         

         

        關閉窗口
        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮