www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 技術學院 > 熱搜器件
[導讀]DS18B20溫度計的C語言程序

#include<reg51.h>
#include<intrins.h>
#include <math.H>  //要用到取絕對值函數(shù)abs()
//通過DS18B20測試當前環(huán)境溫度, 并通過數(shù)碼管顯示當前溫度值, 目前顯示范圍: -55~ +125度
sbit wela = P2^7;  //數(shù)碼管位選
sbit dula = P2^6;  //數(shù)碼管段選
sbit ds = P2^2;
int tempValue;
//0-F數(shù)碼管的編碼(共陽極)
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//0-9數(shù)碼管的編碼(共陽極), 帶小數(shù)點
unsigned char code tableWidthDot[]={0x40, 0x79, 0x24, 0x30,
0x19, 0x12, 0x02,0x78, 0x00, 0x10};
//延時函數(shù), 對于11.0592MHz時鐘, 例i=10,則大概延時10ms.
void delay(unsigned int i)
 {
  unsigned int j;
   while(i--)
    {
        for(j = 0; j < 125; j++);
    }
 }
 
//初始化DS18B20
//讓DS18B20一段相對長時間低電平, 然后一段相對非常短時間高電平, 即可啟動
void dsInit()
 {
   //對于11.0592MHz時鐘, unsigned int型的i, 作一個i++操作的時間大于?us
   unsigned int i;
   ds = 0;
    i = 100;   //拉低約800us, 符合協(xié)議要求的480us以上
    while(i>0) i--;
    ds = 1;    //產(chǎn)生一個上升沿, 進入等待應答狀態(tài)
     i = 4;
   while(i>0) i--;
 }
 
void dsWait()
 {
     unsigned int i;
     while(ds);
    while(~ds);  //檢測到應答脈沖
    i = 4;
    while(i > 0) i--;
}
//向DS18B20讀取一位數(shù)據(jù)
//讀一位, 讓DS18B20一小周期低電平, 然后兩小周期高電平,
//之后DS18B20則會輸出持續(xù)一段時間的一位數(shù)據(jù)
bit readBit()
{
    unsigned int i;
   bit b;
   ds = 0;
  i++;   //延時約8us, 符合協(xié)議要求至少保持1us
  ds = 1;
  i++; i++;  //延時約16us, 符合協(xié)議要求的至少延時15us以上
   b = ds;
    i = 8;
    while(i>0) i--;  //延時約64us, 符合讀時隙不低于60us要求
   return b;
}
//讀取一字節(jié)數(shù)據(jù), 通過調用readBit()來實現(xiàn)
unsigned char readByte()
{
   unsigned int i;
     unsigned char j, dat;
    dat = 0;
   for(i=0; i<8; i++)
   {
        j = readBit();
       //最先讀出的是最低位數(shù)據(jù)
       dat = (j << 7) | (dat >> 1);
    }
    return dat;
}
//向DS18B20寫入一字節(jié)數(shù)據(jù)
void writeByte(unsigned char dat)
{
 unsigned int i;
   unsigned char j;
    bit b;
  for(j = 0; j < 8; j++)
   {
       b = dat & 0x01;
       dat >>= 1;
       //寫"1", 將DQ拉低15us后, 在15us~60us內(nèi)將DQ拉高, 即完成寫1
        if(b)
       {
            ds = 0;
           i++; i++;  //拉低約16us, 符號要求15~60us內(nèi)
            ds = 1; 
           i = 8; while(i>0) i--;  //延時約64us, 符合寫時隙不低于60us要求
       }
      else  //寫"0", 將DQ拉低60us~120us
           ds = 0;
            i = 8; while(i>0) i--;  //拉低約64us, 符號要求
            ds = 1;
           i++; i++;  //整個寫0時隙過程已經(jīng)超過60us, 這里就不用像寫1那樣, 再延時64us了
    
    }
}
//向DS18B20發(fā)送溫度轉換命令
void sendChangeCmd()
{
   dsInit();    //初始化DS18B20, 無論什么命令, 首先都要發(fā)起初始化
   dsWait();   //等待DS18B20應答
   delay(1);    //延時1ms, 因為DS18B20會拉低DQ 60~240us作為應答信號
    writeByte(0xcc); //寫入跳過序列號命令字 Skip Rom
   writeByte(0x44); //寫入溫度轉換命令字 Convert T
}
//向DS18B20發(fā)送讀取數(shù)據(jù)命令
void sendReadCmd()
{
   dsInit();
   dsWait();
   delay(1);
   writeByte(0xcc); //寫入跳過序列號命令字 Skip Rom
   writeByte(0xbe); //寫入讀取數(shù)據(jù)令字 Read Scratchpad
}
//獲取當前溫度值
int getTmpValue()
{
    unsigned int tmpvalue;
   int value; //存放溫度數(shù)值
  float t;
    unsigned char low, high;
   sendReadCmd();
    //連續(xù)讀取兩個字節(jié)數(shù)據(jù)
  low = readByte();
  high = readByte();
    //將高低兩個字節(jié)合成一個整形變量
    //計算機中對于負數(shù)是利用補碼來表示的
    //若是負值, 讀取出來的數(shù)值是用補碼表示的, 可直接賦值給int型的
value
    tmpvalue = high;
    tmpvalue <<= 8;
    tmpvalue |= low;
   value = tmpvalue;
 
    //使用DS18B20的默認分辨率12位, 精確度為0.0625度, 即讀回數(shù)據(jù)的最低位代表0.0625度
   t = value * 0.0625;
    //將它放大100倍, 使顯示時可顯示小數(shù)點后兩位, 并對小數(shù)點后第三進行4舍5入
   //如t=11.0625, 進行計數(shù)后, 得到value = 1106, 即11.06 度
   //如t=-11.0625, 進行計數(shù)后, 得到value = -1106, 即-11.06 度
    value = t * 100 + (value > 0 ? 0.5 : -0.5); //大于0加0.5, 小于0減0.5
   return value;
}
unsigned char const timeCount = 3; //動態(tài)掃描的時間間隔
//顯示當前溫度值, 精確到小數(shù)點后一位
//若先位選再段選, 由于IO口默認輸出高電平, 所以當先位選會使數(shù)碼管出現(xiàn)亂碼
void display(int v)
{
    unsigned char count;
   unsigned char datas[] = {0, 0, 0, 0, 0};
   unsigned int tmp = abs(v);
    datas[0] = tmp / 10000;
   datas[1] = tmp % 10000 / 1000;
   datas[2] = tmp % 1000 / 100;
    datas[3] = tmp % 100 / 10;
    datas[4] = tmp % 10;
   if(v < 0)
    {
       //關位選, 去除對上一位的影響
       P0 = 0xff;
       wela = 1; //打開鎖存, 給它一個下降沿量
       wela = 0;
       //段選
      P0 = 0x40; //顯示"-"號
       dula = 1;  //打開鎖存, 給它一個下降沿量
      dula = 0;
       //位選
      P0 = 0xfe;
       wela = 1; //打開鎖存, 給它一個下降沿量
        wela = 0;
      delay(timeCount);
    }
    for(count = 0; count != 5; count++)
    {
        //關位選, 去除對上一位的影響
       P0 = 0xff;
      wela = 1; //打開鎖存, 給它一個下降沿量
       wela = 0;
        //段選
        if(count != 2)
      {
    
               P0 = table[datas[count]];  //顯示數(shù)字
        }
       else
        {
            P0 = tableWidthDot[datas[count]]; //顯示帶小數(shù)點數(shù)字
       }
        dula = 1;  //打開鎖存, 給它一個下降沿量
        dula = 0;
        //位選
        P0 = _crol_(0xfd, count); //選擇第(count + 1) 個數(shù)碼管
       wela = 1; //打開鎖存, 給它一個下降沿量
       wela = 0;
       delay(timeCount);
    }
}
void main()
{
  unsigned char i;
 
   while(1)
    {
        //啟動溫度轉換
       sendChangeCmd();
       //顯示5次
        for(i = 0; i < 40; i++)
        {
           display(tempValue);
     }
        tempValue = getTmpValue();
    }

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉