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

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

51單片機的ds18b20驅動程序

作者:劉溫電   來源:本站原創   點擊數:  更新時間:2013年11月26日   【字體:

 

//////////////////////////////////////////////////////頭文件///////////////////////////////////////////////////////
/*******************************************************************************
*  標題:  18b20溫度芯片驅動程序                                                            *
*  文件:  18b20.h 18b20.c                                                                         *
*  日期:  2010-3-11                                                                                     *
*  版本:  1.12(試驗通過版)可用51hei單片機開發板               *
*  郵箱: 
acsdf139@163.com       qq:526083029                                 *
*  網站: 無                                                                                                  *
********************************************************************************
*  描述:                                                                                                          *
*         用法:首先在主程序內添加頭文件#include"18b20.c"                 *
*      在程序中使用ReadTemp();獲取溫度芯片內數據                             *
*      使用 temp_to_str();函數將時間數據轉換液晶字符                         *         
*                                                                                                                     *
********************************************************************************
*【版權】自己參照網上,朋友,以及書本資料上寫的,所以沒有版權       *
*【聲明】此程序,可用于學習,參考及實際設計中,歡迎轉載復制以及建議批評     *
*【技術支持】qq:526083029  小張                                                      *
********************************************************************************/
 
#ifndef _18B20_H_
#define _18B20_H_
#define uchar unsigned char
#define rerom1820            0x33      // 讀ROM指令   
#define matchrom1820         0x55      // 匹配ROM指令   
#define skiprom1820          0xCC      // 跳過ROM指令   
#define searchrom1820        0xF0      // 搜索ROM指令   
#define alarmsearch1820      0xEC      // 報警搜索指令   
#define wrscratchpad1820     0x4E      // 寫暫存寄存器指令   
#define rescratchpad1820     0xBE      // 讀暫存寄存器指令   
#define copyscratchpad1820   0x48      // 復制暫存寄存器指令   
#define convert1820          0x44      // 啟動溫度轉換指令   
#define recalle21820         0xB8      // 重新調出E2PROM的數據 
/***********ds18b20延遲子函數*******/
extern void delaydq(uchar i);
/**********ds18b20初始化函數**********************/
extern void dqinit(void);
/***********ds18b20讀一個字節**************/ 
extern uchar re1820b(void);
/*************ds18b20寫一個字節****************/ 
extern void wr1820b(uchar dat);
extern void ReadTemp(void);
extern void temp_to_str();
#endif
///////////////////////////////////////////////////////////c程序//////////////////////////////////////////////
#include <AT89X52.H>
#include "18b20.h"
#include <intrins.h>
//管腳定義
sbit DQ=P3^0;
 
uchar TempBuffer[8];
uchar temp_value,temp2,xs,fflag;
             
 
/*************************************
函數名:delaydq
函數功能:延時
參數:i(秒數)
返回:無
備注:無
*************************************/
void delaydq(uchar i)
{
       while(i--);
}
/*************************************
函數名:dqinit
函數功能:初始化
參數:無
返回:無
備注:無
*************************************/
void dqinit(void)
{
        uchar x=0;
        DQ = 1;          //DQ復位
        delaydq(8); //稍做延時
        DQ = 0;          //單片機將DQ拉低
        delaydq(80); //精確延時 大于 480us
        DQ = 1;          //拉高總線
        delaydq(14);
        x=DQ;            //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
        delaydq(20);
}
/*************************************
函數名:re1820b
函數功能:讀數據
參數:無
返回:dat(數據)
備注:無
*************************************/
uchar re1820b(void)
{
       uchar i=0;
       uchar dat = 0;
       for (i=8;i>0;i--)
        {
               DQ = 0; // 給脈沖信號
               dat>>=1;
               DQ = 1; // 給脈沖信號
               if(DQ)
               dat|=0x80;
               delaydq(4);
        }
      return(dat);
}
/*************************************
函數名:wr1820b
函數功能:寫數據
參數:dat(數據)
返回:無
備注:無
*************************************/
void wr1820b(uchar dat)
{
      unsigned char i=0;
      for (i=8; i>0; i--)
      {
            DQ = 0;
             DQ = dat&0x01;
           delaydq(5);
             DQ = 1;
           dat>>=1;
      }
}
/*************************************
函數名:ReadTemp
函數功能:溫度轉換
參數:無
返回:無
備注:無
*************************************/
void ReadTemp(void)
{
       unsigned char a=0;
       unsigned char b=0;
       unsigned char t=0;
 
       dqinit();
       wr1820b(0xCC);        // 跳過讀序號列號的操作
       wr1820b(0x44);    // 啟動溫度轉換
 
       delaydq(100);      
       dqinit();
       wr1820b(0xCC);   //跳過讀序號列號的操作
       wr1820b(0xBE);  //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
 
       delaydq(100);
 
       a=re1820b();       //讀取溫度值低位
       b=re1820b();              //讀取溫度值高位
    if(b>127)
       {
       b=(256-b);a=(256-a);fflag=1; //負溫度求補碼
       }
       temp_value=b<<4;
       temp_value+=(a&0xf0)>>4;  
    temp2=a&0x0f;             //小數的值
      
 
   xs=temp2*0.0625*10; //小數位,若為0.5則算為5來顯示   xs小數
 
        
}
 
/*************************************
函數名:temp_to_str
函數功能:溫度顯示
參數:無
返回:無
備注:無
*************************************/
void temp_to_str()   //溫度數據轉換成液晶字符顯示
{
 if(fflag==1)
 { TempBuffer[0]='-';
            TempBuffer[1]=temp_value/10+'0'; //十位
            TempBuffer[2]=temp_value%10+'0';  //個位
            TempBuffer[3]='.';
            TempBuffer[4]=xs+'0';
            TempBuffer[5]=0xdf;   //溫度符號
            TempBuffer[6]='C';
            TempBuffer[7]='\0';
 }
 else
 {
            TempBuffer[0]='+';
            TempBuffer[1]=temp_value/10+'0';  //十位
            TempBuffer[2]=temp_value%10+'0'; //個位
            TempBuffer[3]='.';
            TempBuffer[4]=xs+'0';
            TempBuffer[5]=0xdf;   //溫度符號
            TempBuffer[6]='C';
            TempBuffer[7]='\0';
 
 }
 
}
 
關閉窗口

相關文章

主站蜘蛛池模板: 中文成人无字幕乱码精品 | 波多野结衣一区二区三区在线观看 | 精品无码久久久久久国产 | 欧美一级淫片免费视频黄 | 国产高清免费视频 | 一区二区三区四区五区在线视频 | 97国产精品视频 | 2020亚洲天堂 | 日本不卡一区 | 人人爽日日躁夜夜躁尤物 | 国产欧美日韩综合精品一区二区 | 欧洲一级毛片 | 日韩视频免费看 | 中文字幕一区二区三区四区五区 | 黄网站在线观看 | www狠狠干 | 国产精品96久久久久久 | 成人在线观看免费爱爱 | 亚洲成人精品免费 | 婷婷开心激情综合五月天 | 午夜久久| 成年视频在线观看福利资源 | 日韩中文在线视频 | 综合二区 | 亚洲免费在线 | www.97国产 | www.国产日本 | 国产精品99久久久久久久久久久久 | 成人a视频片观看免费 | 日本免费一区二区三区四区 | 精品久久久久久亚洲综合网 | 逼逼网| 精品一二三区在线观看 | 少妇一级淫片免费放播放 | 精品视频一区二区 | 国产成人综合一区二区三区 | 久久精品小视频 | 日本不卡免费新一二三区 | 国产一区2区| 亚洲国产成人在线观看 | 欧美一区二区免费视频 |