欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

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

搜索
查看: 25352|回復(fù): 110
收起左側(cè)

基于DS18B20的數(shù)顯溫度計(jì) 數(shù)碼管顯示

  [復(fù)制鏈接]
ID:362076 發(fā)表于 2018-7-24 08:35 | 顯示全部樓層 |閱讀模式
本帖最后由 凌凈清河 于 2018-7-24 08:38 編輯

本作品采用STC15F104W單片機(jī)和四位共陰極數(shù)碼管設(shè)計(jì)

主要亮點(diǎn):
1.數(shù)碼管使用74HC595作為段選驅(qū)動(dòng),為初學(xué)者提供了新的思路
次要亮點(diǎn):
1.使用小巧的STC15F104W單片機(jī)

DS18B20的通信要點(diǎn)在于時(shí)序的嚴(yán)格對(duì)應(yīng),相比之下DHT11這一類的單總線通信時(shí)序要求更加寬松。
因?yàn)镈S18B20算是極為常用的學(xué)習(xí)器件,故不做過(guò)多講解,本次作品不涉及搜索BOM、精度調(diào)節(jié)等操作,只是單器件讀取溫度值,數(shù)據(jù)處理將可以顯示的溫度值設(shè)置為-20℃~80℃。

(事實(shí)證明不同器件之間會(huì)有差異,讀取的值也會(huì)不盡相同)
IMG_20180720_134627.jpg
DS18B20數(shù)據(jù)處理參考普中科技相關(guān)例程



#include<STC15.H>
sbit DSPORT=P3^5;//DS18B20管腳定義
#include<intrins.h>
#include"DS18B20.c"
sbit S1=P3^4;
sbit S2=P3^3;//數(shù)碼管位選管腳定義
sbit SER=P3^0;
sbit RCLK=P3^1;
sbit SRCLK=P3^2;//74HC595管腳定義

//全局變量表
unsigned char code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//給74HC595的段選值
unsigned char Display_Temperature[4]={0x40,0x40,0x40,0x40};
int Data_temperature=0;
unsigned char t0_cnt=0;
/*##############################################################################################
設(shè)計(jì)名稱:基于DS18B20的數(shù)顯溫度計(jì)
設(shè)計(jì)者:清河

平臺(tái):STC15F104W
硬件部分
數(shù)碼管顯示:位選使用74HC138改為2-4線譯碼、段選使用74HC595減少IO口使用
    使用4位共陰極數(shù)碼管,顯示無(wú)符號(hào)位

注意:由于STC15系列采用Y5內(nèi)核,所以有關(guān)DS18B20精準(zhǔn)延時(shí)部分在移植時(shí)應(yīng)首先考慮更換
##############################################################################################*/
void delay(unsigned int cnt)//調(diào)用該函數(shù)進(jìn)行一段時(shí)間的延時(shí)
{
    while(cnt--);
}

void hc595send(unsigned char dat)//使用SPI向74HC595發(fā)送一個(gè)字節(jié)的數(shù)據(jù)                                
{  
    unsigned char a;
    SRCLK=0;
    RCLK=0;
    for(a=0;a<8;a++)
    {
        SER=dat>>7;
        dat<<=1;
        SRCLK=1;
        _nop_();
        _nop_();
        SRCLK=0;   
    }
    RCLK=1;
    _nop_();
    _nop_();
    RCLK=0;
}

void smgdisplay()//數(shù)碼管顯示函數(shù),參數(shù)為需要顯示的數(shù)組
{
    unsigned char i;
    for(i=0;i<4;i++)
    {
        switch(i)//位選,選擇點(diǎn)亮的數(shù)碼管
        {
            case(0):
                S1=0;S2=1; break;
            case(1):
                S1=1;S2=0; break;
            case(2):
                S1=0;S2=0; break;
            case(3):
                S1=1;S2=1; break;   
        }
        hc595send(Display_Temperature);
        delay(10); //間隔一段時(shí)間掃描   
        hc595send(0x00);//消隱
    }
}

void Data_processing()
{
    float temperature=0.0;//【03c4】似乎只是一個(gè)用于更改值為float類型的中間變量,考慮刪去
    int temperature_middle;//為了不更改全局變量中讀取出來(lái)的Data_temperature設(shè)置此中轉(zhuǎn)值
    if(Data_temperature>0xf000)//當(dāng)溫度值為負(fù)數(shù)
    {
        Display_Temperature[0]=0x40;//顯示符號(hào)“-”的段碼
        //因?yàn)樽x取的溫度是實(shí)際溫度的補(bǔ)碼,所以減1,再取反求出原碼
        temperature_middle=Data_temperature-1;
        temperature_middle=~temperature_middle;
        temperature=temperature_middle;
        temperature_middle=temperature*0.0625*100+0.5;   
        //留兩個(gè)小數(shù)點(diǎn)就*100,+0.5是四舍五入,因?yàn)镃語(yǔ)言浮點(diǎn)數(shù)轉(zhuǎn)換為整型的時(shí)候把小數(shù)點(diǎn)
        //后面的數(shù)自動(dòng)去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進(jìn)1了,小于0.5的就
        //算加上0.5,還是在小數(shù)點(diǎn)后面。
        if(temperature_middle<2000)
        {
            if(temperature_middle>=1000)
            {
                Display_Temperature[1]=smgduan[temperature_middle%10000/1000];
                Display_Temperature[2]=smgduan[temperature_middle%1000/100]|0x80;
                Display_Temperature[3]=smgduan[temperature_middle%100/10];
            }
            else
            {
                Display_Temperature[1]=smgduan[temperature_middle%1000/100]|0x80;
                Display_Temperature[2]=smgduan[temperature_middle%100/10];
                Display_Temperature[3]=smgduan[temperature_middle%10];
            }
        }
        else
        {
            unsigned char i;
            for(i=0;i<4;i++)
            {
                Display_Temperature=0x40;
            }
        }
    }
    else
    {
        temperature=Data_temperature;//因?yàn)閿?shù)據(jù)處理有小數(shù)點(diǎn)所以將溫度賦給一個(gè)浮點(diǎn)型變量
        //如果溫度是正的那么,那么正數(shù)的原碼就是補(bǔ)碼它本身
        temperature_middle=(int)(temperature*0.0625*100+0.5);   
        //留兩個(gè)小數(shù)點(diǎn)就*100,+0.5是四舍五入,因?yàn)镃語(yǔ)言浮點(diǎn)數(shù)轉(zhuǎn)換為整型的時(shí)候把小數(shù)點(diǎn)
        //后面的數(shù)自動(dòng)去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進(jìn)1了,小于0.5的就
        //算加上0.5,還是在小數(shù)點(diǎn)后面。
        if(temperature_middle<8000)
        {
            if(temperature_middle>=1000)
            {
                Display_Temperature[0]=smgduan[temperature_middle%10000/1000];
                Display_Temperature[1]=smgduan[temperature_middle%1000/100]|0x80;
                Display_Temperature[2]=smgduan[temperature_middle%100/10];
                Display_Temperature[3]=smgduan[temperature_middle%10];
            }
            else
            {
                Display_Temperature[0]=0x00;
                Display_Temperature[1]=smgduan[temperature_middle/100]|0x80;
                Display_Temperature[2]=smgduan[temperature_middle%100/10];
                Display_Temperature[3]=smgduan[temperature_middle%10];
            }
        }
        else
        {
            unsigned char i;
            for(i=0;i<4;i++)
            {
                Display_Temperature=0x40;
            }
        }
    }
}

void sys_init()
{
    TH0=0;
    TL0=0;
    ET0=1;
    TR0=1;
    EA=1;
}

void main()
{
    sys_init();
    while(1)
    {
        smgdisplay();
    }
}

void Temperature_Refresh() interrupt 1
{
    TL0 = 0x00;
    TH0 = 0x28;//5ms初值
    if(t0_cnt==10)
    {
        hc595send(0x00);
        Data_temperature=DS18B20_GetTemperature();
        Data_processing();
        t0_cnt=0;
    }
    else
    {
        t0_cnt++;
    }
}
由于中斷時(shí)的數(shù)據(jù)讀取和處理會(huì)占用一部分時(shí)間,導(dǎo)致數(shù)碼管有輕微閃爍感,使用者可以考慮將轉(zhuǎn)換精度調(diào)為最低并修改轉(zhuǎn)換等待時(shí)間以減少數(shù)碼管的閃爍感,同時(shí)別忘記調(diào)一下數(shù)據(jù)處理函數(shù)中對(duì)應(yīng)的精度值。
上述程序仍然臃腫,但由于是普通器件的使用,沒(méi)有難點(diǎn),所以也沒(méi)有進(jìn)行優(yōu)化,以完成功能為目的。


新礦城學(xué)習(xí)基地 凌凈清河
游客,如果您要查看本帖隱藏內(nèi)容請(qǐng)回復(fù)

評(píng)分

參與人數(shù) 3黑幣 +110 收起 理由
兵臨天下 + 30 贊一個(gè)!
map0391 + 30
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:350006 發(fā)表于 2018-7-26 10:41 | 顯示全部樓層
溫度讀取值怎么轉(zhuǎn)換?
回復(fù)

使用道具 舉報(bào)

ID:362076 發(fā)表于 2018-7-26 16:57 | 顯示全部樓層
空格鍵~~ 發(fā)表于 2018-7-26 10:41
溫度讀取值怎么轉(zhuǎn)換?

溫度轉(zhuǎn)換在Data_processing()函數(shù)中,分正負(fù)數(shù)之后,temperature_middle就是轉(zhuǎn)換之后溫度值*100
回復(fù)

使用道具 舉報(bào)

ID:323496 發(fā)表于 2018-7-26 19:36 | 顯示全部樓層
可否有源程序和電路圖可以下載
回復(fù)

使用道具 舉報(bào)

ID:362076 發(fā)表于 2018-7-27 12:57 | 顯示全部樓層
manpingshui 發(fā)表于 2018-7-26 19:36
可否有源程序和電路圖可以下載

源程序回復(fù)之后就應(yīng)該可以下載了,原理圖沒(méi)有的,74HC595驅(qū)動(dòng)數(shù)碼管的典型應(yīng)用電路在STC單片機(jī)的手冊(cè)上可以找到,138是基本模塊也不用解釋,單片機(jī)一共就6個(gè)IO口,定義在程序開(kāi)頭處已經(jīng)表明出來(lái)了,嘗試一下,看不明白再問(wèn)。
回復(fù)

使用道具 舉報(bào)

ID:203000 發(fā)表于 2018-7-28 08:08 | 顯示全部樓層
這個(gè)溫度計(jì)的硬件設(shè)計(jì)思路很好。簡(jiǎn)單實(shí)用。
回復(fù)

使用道具 舉報(bào)

ID:79874 發(fā)表于 2018-7-28 15:59 | 顯示全部樓層
下載學(xué)習(xí)下
回復(fù)

使用道具 舉報(bào)

ID:56186 發(fā)表于 2018-8-8 23:02 | 顯示全部樓層
下載學(xué)習(xí)下
回復(fù)

使用道具 舉報(bào)

ID:385800 發(fā)表于 2018-8-13 14:55 | 顯示全部樓層
喜歡。。。。。。。。。。。。
回復(fù)

使用道具 舉報(bào)

ID:108366 發(fā)表于 2018-8-21 16:19 | 顯示全部樓層
下載學(xué)習(xí)下
回復(fù)

使用道具 舉報(bào)

ID:108366 發(fā)表于 2018-8-21 16:19 | 顯示全部樓層
下載學(xué)習(xí)下
回復(fù)

使用道具 舉報(bào)

ID:388788 發(fā)表于 2018-8-22 10:05 | 顯示全部樓層
下載學(xué)習(xí)下
回復(fù)

使用道具 舉報(bào)

ID:65956 發(fā)表于 2018-8-22 11:16 | 顯示全部樓層
我一直有要作這個(gè)的方案,結(jié)果讓你先實(shí)現(xiàn)了
回復(fù)

使用道具 舉報(bào)

ID:362076 發(fā)表于 2018-9-4 21:51 | 顯示全部樓層
aking991 發(fā)表于 2018-8-22 11:16
我一直有要作這個(gè)的方案,結(jié)果讓你先實(shí)現(xiàn)了

hhh,不好意思啦~不過(guò)你可以試試別的模塊呀,BMP180、DHT11、這些常用的傳感器精度和可用性都不輸于DS18B20,配上OLED小屏幕,再加一個(gè)無(wú)線顯示功能,無(wú)線方式傳輸顯示多個(gè)不同位置傳感器的數(shù)據(jù)。

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:90140 發(fā)表于 2018-9-5 08:19 | 顯示全部樓層
下載學(xué)習(xí)下
回復(fù)

使用道具 舉報(bào)

ID:33449 發(fā)表于 2018-9-5 10:07 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:33544 發(fā)表于 2018-9-9 08:47 | 顯示全部樓層
學(xué)習(xí)數(shù)碼管顯示
回復(fù)

使用道具 舉報(bào)

ID:187675 發(fā)表于 2018-9-9 09:19 | 顯示全部樓層
可否有源程序和電路圖可以下載
回復(fù)

使用道具 舉報(bào)

ID:187675 發(fā)表于 2018-9-9 09:21 | 顯示全部樓層
學(xué)習(xí)數(shù)碼管顯示
回復(fù)

使用道具 舉報(bào)

ID:386381 發(fā)表于 2018-9-9 16:08 來(lái)自觸屏版 | 顯示全部樓層
這個(gè)比較小巧經(jīng)典
回復(fù)

使用道具 舉報(bào)

ID:388870 發(fā)表于 2018-9-10 15:43 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:87193 發(fā)表于 2018-9-11 10:43 | 顯示全部樓層
回復(fù)了看下,學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:362076 發(fā)表于 2018-9-11 11:08 | 顯示全部樓層
rs7cai 發(fā)表于 2018-9-9 09:19
可否有源程序和電路圖可以下載

這個(gè)真沒(méi)有,這款單片機(jī)只有6個(gè)IO,DS18B20是單總線通信,再加上一個(gè)595驅(qū)動(dòng)的數(shù)碼管顯示電路,當(dāng)初制作的時(shí)候是直接焊接的,根本沒(méi)畫(huà)電路圖。
回復(fù)

使用道具 舉報(bào)

ID:310820 發(fā)表于 2018-9-17 22:53 | 顯示全部樓層
感謝分享,
回復(fù)

使用道具 舉報(bào)

ID:16663 發(fā)表于 2018-9-18 22:06 來(lái)自觸屏版 | 顯示全部樓層
下載學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

ID:216625 發(fā)表于 2018-9-19 17:52 | 顯示全部樓層
謝謝分享,
回復(fù)

使用道具 舉報(bào)

ID:258542 發(fā)表于 2018-9-23 16:33 | 顯示全部樓層
新手學(xué)習(xí)學(xué)習(xí)溫度模塊
回復(fù)

使用道具 舉報(bào)

ID:291850 發(fā)表于 2018-10-8 16:26 | 顯示全部樓層
學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:405456 發(fā)表于 2018-10-8 21:50 來(lái)自觸屏版 | 顯示全部樓層
做得很漂亮

評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
凌凈清河 + 5 蟹蟹!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:409954 發(fā)表于 2018-10-15 21:41 | 顯示全部樓層
下載學(xué)習(xí)下
回復(fù)

使用道具 舉報(bào)

ID:204228 發(fā)表于 2018-10-16 08:40 | 顯示全部樓層
謝謝分享!
回復(fù)

使用道具 舉報(bào)

ID:101014 發(fā)表于 2018-10-18 11:22 來(lái)自觸屏版 | 顯示全部樓層
樓主厲害啊

評(píng)分

參與人數(shù) 1黑幣 +15 收起 理由
凌凈清河 + 15 蟹蟹,不過(guò)沒(méi)有很厲害啦

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:3212 發(fā)表于 2018-10-18 14:21 | 顯示全部樓層
用C語(yǔ)言好幾次都不成功(導(dǎo)師說(shuō)是1T的51單片機(jī)定時(shí)中斷不好控制),改成匯編的就行了。佩服樓主調(diào)試的耐性。

評(píng)分

參與人數(shù) 1黑幣 +15 收起 理由
凌凈清河 + 15 其實(shí)還好,這些器件的通訊協(xié)議沒(méi)有特別嚴(yán)格.

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:148003 發(fā)表于 2018-10-18 15:14 | 顯示全部樓層
謝謝作者的分享和制作

評(píng)分

參與人數(shù) 1黑幣 +15 收起 理由
凌凈清河 + 15 蟹蟹,客氣了~

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:58241 發(fā)表于 2019-4-10 18:34 | 顯示全部樓層
簡(jiǎn)單實(shí)用!!1

評(píng)分

參與人數(shù) 1黑幣 +12 收起 理由
NPC-1024 + 12 黑幣補(bǔ)貼

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:499474 發(fā)表于 2019-4-11 01:30 來(lái)自觸屏版 | 顯示全部樓層
不錯(cuò),頂一下

評(píng)分

參與人數(shù) 1黑幣 +12 收起 理由
NPC-1024 + 12 黑幣補(bǔ)貼

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:106887 發(fā)表于 2019-4-11 08:49 | 顯示全部樓層
學(xué)習(xí)一下

評(píng)分

參與人數(shù) 1黑幣 +12 收起 理由
NPC-1024 + 12 黑幣補(bǔ)貼

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:509665 發(fā)表于 2019-4-11 19:21 來(lái)自觸屏版 | 顯示全部樓層
學(xué)習(xí)一下

評(píng)分

參與人數(shù) 1黑幣 +12 收起 理由
NPC-1024 + 12 黑幣補(bǔ)貼

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:510842 發(fā)表于 2019-4-12 21:46 | 顯示全部樓層
給您點(diǎn)贊

評(píng)分

參與人數(shù) 1黑幣 +12 收起 理由
NPC-1024 + 12 黑幣補(bǔ)貼

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:171746 發(fā)表于 2019-4-14 10:32 | 顯示全部樓層
下來(lái)學(xué)習(xí)

評(píng)分

參與人數(shù) 1黑幣 +12 收起 理由
NPC-1024 + 12 黑幣補(bǔ)貼

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表