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

當(dāng)前位置:首頁(yè) > 技術(shù)學(xué)院 > 熱搜器件
[導(dǎo)讀]DS18B20溫度計(jì)的C語(yǔ)言程序

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

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

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

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

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

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

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

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

關(guān)鍵字: 騰訊 編碼器 CPU

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

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

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

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

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

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

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

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

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

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉