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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3767|回復(fù): 13
打印 上一主題 下一主題
收起左側(cè)

DS1820 溫度檢測(cè),串口輸出

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:283037 發(fā)表于 2018-2-27 09:17 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

請(qǐng)教一下大神,我用STC15W408AS+DS18B20, 想實(shí)現(xiàn)串口輸出文本類型的溫度數(shù)值,類似28.50這樣的溫度數(shù)值,用下面這個(gè)代碼需要怎么樣改,感謝。

#ifndef _DS18B20_H  
#define _DS18B20_H  

#include "reg51.h"
#include "intrins.h"

#define uchar unsigned char  
#define uint  unsigned int  

sbit DQ = P3^2;         //DS1820數(shù)據(jù)線IO口  
bit nflag;                //溫度正負(fù)標(biāo)志  


/*****************************************************
    延時(shí)函數(shù):延時(shí)1us
******************************************************/  
void delayus(uint i)  
{  
    while(i--);  
}  

/*****************************************************
    功能:         延時(shí),最小單位為ms(晶振為11.0592
    計(jì)算方法:一個(gè)for循環(huán) = 8個(gè)指令周期 = 8*12個(gè)機(jī)器周期
                        = 8*12*1/11.0592 = 0.0086ms
                        xms = 0.0086 * 110 = 0.946 ms
******************************************************/  
void delayms(uint xms)  
{  
    uint i,j;  
    for(i=xms;i>0;i--)            
        for(j=110;j>0;j--);  
}  

/*****************************************************
    DS18B20復(fù)位函數(shù):
    1 數(shù)據(jù)線拉低,延時(shí)480us
    2 數(shù)據(jù)線拉高,延時(shí)480us
******************************************************/  
void ds1820rst()         
{  

    DQ = 1;             //初始狀態(tài)  
    delayus(4);      
    DQ = 0;             //拉低  
    delayus(480);   //延時(shí)480us  
    DQ = 1;             //拉高  
    delayus(480);   
}  


/****************************************************
    18b20讀數(shù)據(jù):由低位到高位,重復(fù)八次,讀一個(gè)字節(jié)
    1 數(shù)據(jù)線拉低,延時(shí)4us
    2 數(shù)據(jù)線拉高,延時(shí)10us
    3 讀數(shù)據(jù)線狀態(tài)一位,處理數(shù)據(jù),延時(shí)45us
    4 重復(fù)步驟1-3
*****************************************************/  
uchar ds1820rd()  
{  
    uchar i = 0;  
    uchar dat = 0;  
    for(i=8;i>0;i--)  
    {  
        DQ = 0;         //拉低數(shù)據(jù)線  
        delayus(4);  
        dat>>=1;      //空出第一位  
        DQ = 1;         //拉高數(shù)據(jù)線  
        delayus(10);  
        if(DQ)          //若為高電平,則最高位置一  
            dat|=0x80;  
        delayus(45);//延時(shí)45us  
    }  
    return(dat);  
}  


/**************************************************
    18b20寫數(shù)據(jù):由低位到高位,重復(fù)八次,寫一個(gè)字節(jié)
    1 數(shù)據(jù)線拉低,延時(shí)15us
    2 送一位數(shù)據(jù)到數(shù)據(jù)線,延時(shí)60us
    3 數(shù)據(jù)線拉高
    4 重復(fù)步驟1-3
**************************************************/  
void ds1820wr(uchar wdata)  
{  
    uchar i = 0;  
    for (i=8; i>0; i--)  
    {  
        DQ = 0;                  //數(shù)據(jù)線拉低  
        delayus(15);  
        DQ = wdata&0x01; //將數(shù)據(jù)最低位送入數(shù)據(jù)線  
        delayus(60);         //延時(shí)10us  
        DQ = 1;                  //數(shù)據(jù)線拉高  
        wdata>>=1;             //字節(jié)右移一位  
    }  
}  


/*****************************************************
    讀溫度并轉(zhuǎn)換,根據(jù)RAM命令表寫命令
        0xcc:               不讀取序列地址
        0x44:               啟動(dòng)溫度轉(zhuǎn)換
        0xbe:               讀取溫度
******************************************************/  
uint read_temp()     
{  
    uchar TL,TH;                                        //TL:低八位 TH:高八位  
    uchar wd;                                               //最終溫度的絕對(duì)值  

    ds1820rst();                                    //先復(fù)位  
    ds1820wr(0xcc);                             //不讀取64位地址,因?yàn)榭偩上只有一個(gè)DB1820,單片工作  
    ds1820wr(0x44);                               //啟動(dòng)溫度轉(zhuǎn)換  

    delayus(125);  

    ds1820rst();  
    ds1820wr(0xcc);                             //跳過(guò)讀序列號(hào)  
    ds1820wr(0xbe);                             //讀取溫度  

    TL = ds1820rd();                                //讀低八位  
    TH = ds1820rd();                                //讀高八位  

    wd = TL/16+TH*16;  
//  tvalue = TH;                                //tvalue為16位  
//  tvalue = (tvalue<<8)+TL;  
//  if((tvalue&0xf800) == 0xf800)       //判斷負(fù)溫度  
//  {  
//      tvalue=~tvalue+1;                           //補(bǔ)碼=反碼+1  
//      nflag = 0;                                      //置標(biāo)志位為0  
//  }  
//  else  
//      nflag = 1;  
//   
//  wd = tvalue*0.625;                          //計(jì)算溫度值  
    return(wd);                                         //返回溫度值  
}  


/*****************************************************
    串口初始化函數(shù):
******************************************************/  
void init()  
{                 
    P1M0 = 0;P1M1 = 0;  
    SCON = 0x40;  
    T2L  = 0xe0;  
    T2H  = 0xfe;  
    AUXR = 0x14;  
    AUXR |= 0x01;  
    TI = 1;  
}  


/*****************************************************
    串口通訊函數(shù):發(fā)送兩個(gè)字節(jié),首字節(jié)為正負(fù)標(biāo)志位,
                                第二個(gè)字節(jié)為溫度值
******************************************************/  
void comm(uchar temper)  
{  

//  while(!TI == 1);  
//  {  
//      TI = 0;  
//      SBUF = nflag;  
//  }  
    while(!TI == 1);  
    {  
        TI = 0;  
        SBUF = temper;  
    }  
}  


#endif  


void main()  
{  
    uchar temp;                     //臨時(shí)變量存儲(chǔ)溫度  
    init();                             //串口的初始化  

    while(1)  
    {  
        temp=read_temp();       //讀取溫度  
        delayms(500);               //延時(shí)0.5s  
        comm(temp);                 //發(fā)送至上位機(jī)  
    }  
}   

評(píng)分

參與人數(shù) 1黑幣 +1 收起 理由
deaker + 1 很給力!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:285855 發(fā)表于 2018-2-27 10:05 | 只看該作者
基本都有了,把串口參數(shù)波特率設(shè)置好就可以了吧
回復(fù)

使用道具 舉報(bào)

板凳
ID:96072 發(fā)表于 2018-2-27 11:24 | 只看該作者
加串口參數(shù)波特率
回復(fù)

使用道具 舉報(bào)

地板
ID:151348 發(fā)表于 2018-2-27 11:25 | 只看該作者
//  tvalue = TH;                                //tvalue為16位  
//  tvalue = (tvalue<<8)+TL;  
//  if((tvalue&0xf800) == 0xf800)       //判斷負(fù)溫度  
//  {  
//      tvalue=~tvalue+1;                           //補(bǔ)碼=反碼+1  
//      nflag = 0;                                      //置標(biāo)志位為0  
//  }  
//  else  
//      nflag = 1;  
//   
//  wd = tvalue*0.625;                          //計(jì)算溫度值  
    return(wd);                                         //返回溫度值  
被注釋掉的這段就是把溫度轉(zhuǎn)換為10進(jìn)制,另外,數(shù)字轉(zhuǎn)字符方法:數(shù)字0~9+0x30,就是將數(shù)字0-9轉(zhuǎn)換為字符'0'~'9'
回復(fù)

使用道具 舉報(bào)

5#
ID:283037 發(fā)表于 2018-2-27 11:33 | 只看該作者
這個(gè)程序是學(xué)習(xí)別人的,輸出是hex格式,我想要文本格式的。
回復(fù)

使用道具 舉報(bào)

6#
ID:285771 發(fā)表于 2018-2-27 13:12 | 只看該作者
把得到的temp 轉(zhuǎn)換成ascii碼,然后串口打印出來(lái)就好了
回復(fù)

使用道具 舉報(bào)

7#
ID:285953 發(fā)表于 2018-2-27 13:48 | 只看該作者
有時(shí)間一定好好學(xué)習(xí)一下!不錯(cuò)
回復(fù)

使用道具 舉報(bào)

8#
ID:94031 發(fā)表于 2018-2-27 14:30 | 只看該作者
你用串口發(fā)送,完全沒(méi)有必要考慮轉(zhuǎn)成字符,你按浮點(diǎn)發(fā)送,上位機(jī)會(huì)把浮點(diǎn)轉(zhuǎn)成字符的。
回復(fù)

使用道具 舉報(bào)

9#
ID:283037 發(fā)表于 2018-2-27 16:16 | 只看該作者
xuyaqi 發(fā)表于 2018-2-27 14:30
你用串口發(fā)送,完全沒(méi)有必要考慮轉(zhuǎn)成字符,你按浮點(diǎn)發(fā)送,上位機(jī)會(huì)把浮點(diǎn)轉(zhuǎn)成字符的。

我試了,上位機(jī)收到的就是15,換算成10進(jìn)制就是21度。我想直接收到21.00這樣的溫度數(shù)值,不知道怎么改。
回復(fù)

使用道具 舉報(bào)

10#
ID:190832 發(fā)表于 2018-2-27 17:16 | 只看該作者
把printf函數(shù)重映射,即重寫int fputc(int ch)函數(shù),把串口發(fā)送一個(gè)字節(jié)函數(shù)放進(jìn)去就行了

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

11#
ID:274747 發(fā)表于 2018-2-27 21:22 | 只看該作者
不是要改成浮點(diǎn)型嗎

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

12#
ID:283037 發(fā)表于 2018-2-28 17:36 | 只看該作者
已經(jīng)搞定,感謝大家?guī)兔Α?/td>
回復(fù)

使用道具 舉報(bào)

13#
ID:286508 發(fā)表于 2018-3-1 09:58 | 只看該作者

加串口參數(shù)波特率
回復(fù)

使用道具 舉報(bào)

14#
ID:618577 發(fā)表于 2020-6-26 16:57 | 只看該作者
有時(shí)間可以一起交流下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人在线观看中文字幕 | 国产精品久久国产精品99 gif | 99久久精品免费看国产高清 | 精品视频在线一区 | 青青久在线视频 | 国产成人一区 | 日本高清不卡视频 | 午夜小视频免费观看 | 欧美狠狠操 | 亚洲狠狠爱 | 在线观看视频91 | 91资源在线 | 91视频亚洲 | 国内久久精品 | 亚洲中午字幕 | 日日操av| 亚洲一区中文字幕在线观看 | 亚洲视频一区二区三区 | 毛片在线免费 | 国产精品久久一区二区三区 | 国产亚洲一区二区三区在线 | 欧美视频网 | 欧美日韩一区二区电影 | 精品色 | 久久99视频精品 | 精品欧美 | 欧美日韩亚洲一区 | 亚洲欧洲成人av每日更新 | 亚洲三区在线播放 | 草久久免费视频 | 欧美一区二区三区精品 | 欧美www在线 | 黄色91在线 | 在线免费观看成人 | 男人的天堂avav | 国产亚洲精品综合一区 | 日韩在线精品视频 | 久久久精品网 | 久久精品一区二区 | 99综合 | 中文精品视频 |