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

標題: 基于DS18B20的數(shù)顯溫度計 數(shù)碼管顯示 [打印本頁]

作者: 凌凈清河    時間: 2018-7-24 08:35
標題: 基于DS18B20的數(shù)顯溫度計 數(shù)碼管顯示
本帖最后由 凌凈清河 于 2018-7-24 08:38 編輯

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

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

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

(事實證明不同器件之間會有差異,讀取的值也會不盡相同)

DS18B20數(shù)據(jù)處理參考普中科技相關例程



#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;
/*##############################################################################################
設計名稱:基于DS18B20的數(shù)顯溫度計
設計者:清河

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

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

void hc595send(unsigned char dat)//使用SPI向74HC595發(fā)送一個字節(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)//位選,選擇點亮的數(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); //間隔一段時間掃描   
        hc595send(0x00);//消隱
    }
}

void Data_processing()
{
    float temperature=0.0;//【03c4】似乎只是一個用于更改值為float類型的中間變量,考慮刪去
    int temperature_middle;//為了不更改全局變量中讀取出來的Data_temperature設置此中轉(zhuǎn)值
    if(Data_temperature>0xf000)//當溫度值為負數(shù)
    {
        Display_Temperature[0]=0x40;//顯示符號“-”的段碼
        //因為讀取的溫度是實際溫度的補碼,所以減1,再取反求出原碼
        temperature_middle=Data_temperature-1;
        temperature_middle=~temperature_middle;
        temperature=temperature_middle;
        temperature_middle=temperature*0.0625*100+0.5;   
        //留兩個小數(shù)點就*100,+0.5是四舍五入,因為C語言浮點數(shù)轉(zhuǎn)換為整型的時候把小數(shù)點
        //后面的數(shù)自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
        //算加上0.5,還是在小數(shù)點后面。
        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;//因為數(shù)據(jù)處理有小數(shù)點所以將溫度賦給一個浮點型變量
        //如果溫度是正的那么,那么正數(shù)的原碼就是補碼它本身
        temperature_middle=(int)(temperature*0.0625*100+0.5);   
        //留兩個小數(shù)點就*100,+0.5是四舍五入,因為C語言浮點數(shù)轉(zhuǎn)換為整型的時候把小數(shù)點
        //后面的數(shù)自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
        //算加上0.5,還是在小數(shù)點后面。
        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ù)據(jù)讀取和處理會占用一部分時間,導致數(shù)碼管有輕微閃爍感,使用者可以考慮將轉(zhuǎn)換精度調(diào)為最低并修改轉(zhuǎn)換等待時間以減少數(shù)碼管的閃爍感,同時別忘記調(diào)一下數(shù)據(jù)處理函數(shù)中對應的精度值。
上述程序仍然臃腫,但由于是普通器件的使用,沒有難點,所以也沒有進行優(yōu)化,以完成功能為目的。


新礦城學習基地 凌凈清河

作者: 空格鍵~~    時間: 2018-7-26 10:41
溫度讀取值怎么轉(zhuǎn)換?
作者: 凌凈清河    時間: 2018-7-26 16:57
空格鍵~~ 發(fā)表于 2018-7-26 10:41
溫度讀取值怎么轉(zhuǎn)換?

溫度轉(zhuǎn)換在Data_processing()函數(shù)中,分正負數(shù)之后,temperature_middle就是轉(zhuǎn)換之后溫度值*100
作者: manpingshui    時間: 2018-7-26 19:36
可否有源程序和電路圖可以下載
作者: 凌凈清河    時間: 2018-7-27 12:57
manpingshui 發(fā)表于 2018-7-26 19:36
可否有源程序和電路圖可以下載

源程序回復之后就應該可以下載了,原理圖沒有的,74HC595驅(qū)動數(shù)碼管的典型應用電路在STC單片機的手冊上可以找到,138是基本模塊也不用解釋,單片機一共就6個IO口,定義在程序開頭處已經(jīng)表明出來了,嘗試一下,看不明白再問。
作者: qiangcn    時間: 2018-7-28 08:08
這個溫度計的硬件設計思路很好。簡單實用。
作者: pengyongnet    時間: 2018-7-28 15:59
下載學習下
作者: 龍老大    時間: 2018-8-8 23:02
下載學習下
作者: tigherl    時間: 2018-8-13 14:55
喜歡。。。。。。。。。。。。
作者: huojunan    時間: 2018-8-21 16:19
下載學習下
作者: huojunan    時間: 2018-8-21 16:19
下載學習下
作者: 花開不敗111    時間: 2018-8-22 10:05
下載學習下
作者: aking991    時間: 2018-8-22 11:16
我一直有要作這個的方案,結(jié)果讓你先實現(xiàn)了
作者: 凌凈清河    時間: 2018-9-4 21:51
aking991 發(fā)表于 2018-8-22 11:16
我一直有要作這個的方案,結(jié)果讓你先實現(xiàn)了

hhh,不好意思啦~不過你可以試試別的模塊呀,BMP180、DHT11、這些常用的傳感器精度和可用性都不輸于DS18B20,配上OLED小屏幕,再加一個無線顯示功能,無線方式傳輸顯示多個不同位置傳感器的數(shù)據(jù)。
作者: ywzlq    時間: 2018-9-5 08:19
下載學習下
作者: yanzeyuan333    時間: 2018-9-5 10:07
謝謝分享
作者: wis98    時間: 2018-9-9 08:47
學習數(shù)碼管顯示
作者: rs7cai    時間: 2018-9-9 09:19
可否有源程序和電路圖可以下載
作者: rs7cai    時間: 2018-9-9 09:21
學習數(shù)碼管顯示
作者: 文鳳軒    時間: 2018-9-9 16:08
這個比較小巧經(jīng)典
作者: a704625084    時間: 2018-9-10 15:43
謝謝分享
作者: lemon0210    時間: 2018-9-11 10:43
回復了看下,學習了
作者: 凌凈清河    時間: 2018-9-11 11:08
rs7cai 發(fā)表于 2018-9-9 09:19
可否有源程序和電路圖可以下載

這個真沒有,這款單片機只有6個IO,DS18B20是單總線通信,再加上一個595驅(qū)動的數(shù)碼管顯示電路,當初制作的時候是直接焊接的,根本沒畫電路圖。
作者: dengsg    時間: 2018-9-17 22:53
感謝分享,
作者: q4189513    時間: 2018-9-18 22:06
下載學習一下
作者: map0391    時間: 2018-9-19 17:52
謝謝分享,
作者: 絆腳石13    時間: 2018-9-23 16:33
新手學習學習溫度模塊
作者: beyonbirth    時間: 2018-10-8 16:26
學習學習
作者: 164652999    時間: 2018-10-8 21:50
做得很漂亮
作者: qq1846079086    時間: 2018-10-15 21:41
下載學習下
作者: FLY581    時間: 2018-10-16 08:40
謝謝分享!
作者: 好又快維修部    時間: 2018-10-18 11:22
樓主厲害啊

作者: middfat    時間: 2018-10-18 14:21
用C語言好幾次都不成功(導師說是1T的51單片機定時中斷不好控制),改成匯編的就行了。佩服樓主調(diào)試的耐性。
作者: puyiming    時間: 2018-10-18 15:14
謝謝作者的分享和制作
作者: chenwg    時間: 2019-4-10 18:34
簡單實用!!1
作者: 海潮最可愛    時間: 2019-4-11 01:30
不錯,頂一下
作者: lclyjh    時間: 2019-4-11 08:49
學習一下
作者: lin176    時間: 2019-4-11 19:21
學習一下
作者: APHEBC    時間: 2019-4-12 21:46
給您點贊
作者: lucq7896    時間: 2019-4-14 10:32
下來學習
作者: 一群想不出來    時間: 2019-4-14 20:45
!想知道使用的元器件種類和數(shù)目
作者: 1653359726    時間: 2019-4-14 20:56
感謝共享資料
作者: 凌凈清河    時間: 2019-4-15 12:34
一群想不出來 發(fā)表于 2019-4-14 20:45
!想知道使用的元器件種類和數(shù)目

四位共陰數(shù)碼管*1
74HC595*1
74HC138*1
STC15F104W*1
DS18B20*1
microUSB母座*1
10K電阻*1
洞洞板5cm*7cm*1
排針共11針
焊錫若干
16腳芯片座*2
8腳芯片座*1

作者: 1504010502    時間: 2019-5-22 20:54
我要下載程序
作者: bhjyqjs    時間: 2019-5-24 14:27
似乎有些得不償失,用一個多I/O口的CPU,電路和編程要簡單得多。
作者: 芒果不要糖    時間: 2019-5-30 14:49
學習了
作者: TheHellc    時間: 2019-5-30 15:54
18B20小巧,價格相對DTH11更加便宜
作者: wbwcf13e    時間: 2019-5-30 18:12
我要看看他的帖子
作者: 573912308    時間: 2019-5-30 19:47
謝謝樓主
作者: 1162434585    時間: 2019-5-31 18:49
挺好,正需要用的
作者: 關外秀才    時間: 2019-5-31 21:19
學習一下
作者: 811787454    時間: 2019-6-5 05:41
多謝分享!
作者: 墨白    時間: 2019-6-11 17:42
借用下代碼
作者: xge0302    時間: 2019-6-12 20:50
正需要
作者: fmboy    時間: 2019-6-16 20:08
謝謝!
作者: qwerfghnm    時間: 2019-6-18 19:00
很實用

作者: 鵬博士PBs    時間: 2019-6-21 05:49
好文章
作者: hu2018y    時間: 2019-6-23 21:43
學習數(shù)碼管顯示,可以修改為一個溫度調(diào)整器?
作者: 兵臨天下    時間: 2019-6-24 12:16
謝謝分享!
作者: 李春解決    時間: 2019-9-6 11:45
是的我很想看啊
作者: zhang1314hong    時間: 2019-9-9 14:13
最近在研究學習一下
作者: zhaoyeyun    時間: 2019-9-9 21:52
很好。。。。。
作者: 碎夢    時間: 2019-9-18 09:21
贊一個
作者: angus520    時間: 2019-9-18 11:34
贊一個
作者: mcu_mpu    時間: 2019-9-18 14:24
好東西,學習牛人。
作者: m66221    時間: 2019-9-19 17:03
下載學習下
作者: yfpc2006    時間: 2019-9-20 00:57
學習一下
作者: fgqnh    時間: 2019-9-20 07:11
值得學習,仔細研究一下。
作者: fgqnh    時間: 2019-9-20 07:12
值得學習,好好研究一下。
作者: sxyufu    時間: 2019-9-22 09:22
做的不錯,很有啟發(fā)。謝謝。
作者: chuailiwei    時間: 2019-9-22 15:21
借鑒借鑒!
作者: yinnan128    時間: 2019-9-26 11:46
來看看
作者: 一路開顏2    時間: 2019-9-27 18:24
看看學習一下
作者: HXN1    時間: 2019-10-6 12:43
謝謝分享
作者: ZNXC    時間: 2019-11-4 22:06
下來學習
作者: myaff    時間: 2019-11-7 14:56
感謝樓主

作者: 急急急就    時間: 2019-11-8 15:27
回復有源文件吧
作者: 18477550957    時間: 2019-12-9 16:18
您好 ,可以分享一下數(shù)據(jù)嘛?跪謝

作者: konamy    時間: 2019-12-21 18:53
學習下          ,郁悶死了我的程序怎么都不對

作者: lijianbin    時間: 2019-12-22 00:14
不錯不錯,我也做一個
作者: zxule    時間: 2019-12-22 10:58
太好了,謝謝分享
作者: ppp123    時間: 2019-12-25 09:55
圖可以
作者: roses1417    時間: 2019-12-25 20:19
下載學習下
作者: 473353    時間: 2019-12-26 09:08
可以設置溫度報警嗎?
作者: 凌凈清河    時間: 2019-12-26 11:42
473353 發(fā)表于 2019-12-26 09:08
可以設置溫度報警嗎?

這個版本不能,可以自己添加報警功能,但是本設計中使用的是6個IO的單片機,已經(jīng)沒有多余的引腳了,所以報警要么使用數(shù)碼管顯示其它數(shù)字,要么就得換單片機。
作者: zxule    時間: 2020-2-3 21:11
太棒了!就是能不能簡單說一下連接方法,新手還不會通過源程序接線,謝謝
作者: 凌凈清河    時間: 2020-2-4 08:43
周栩樂 發(fā)表于 2020-2-3 21:11
太棒了!就是能不能簡單說一下連接方法,新手還不會通過源程序接線,謝謝

嗯。。。大概就是595驅(qū)動數(shù)碼管的段選,程序中的段選表根據(jù)595和數(shù)碼管的連接方式確定;138驅(qū)動位選,把地址線的A2接到固定電平當成2-4譯碼來用;這樣控制138的有兩個IO,控制595的有3個IO,這5個顯示用IO連到單片機,用程序中的sbit定義,單片機剩下的那個IO連到單總線的18B20上。
作者: zxule    時間: 2020-2-4 17:11
謝謝,大概知道了!下次試試哈
作者: 碎碎念    時間: 2020-2-21 20:36
謝謝大哥,非常有用

作者: 710253949    時間: 2020-2-27 18:35
大佬能觀摩一下代碼不

作者: tt1365750914    時間: 2020-3-9 17:21
學習 感謝博主
作者: imjoe88    時間: 2020-4-26 00:04
可否有源程序和電路圖可以下載
作者: cjb1234    時間: 2020-4-26 09:31
謝謝分享!
作者: zv1185    時間: 2020-5-1 16:35
學習數(shù)碼管顯示
作者: lon7085    時間: 2020-5-1 17:24
謝謝分享
作者: 逍遙落葉    時間: 2020-5-2 08:50
下來學習
作者: A142989    時間: 2020-5-5 16:28
資料不錯
作者: Honeylulu1    時間: 2020-5-15 11:16
學習mark
作者: mengchen12    時間: 2020-5-15 11:59
謝謝分享
作者: heen1964    時間: 2020-5-17 22:33
下載學習下,謝謝分享!




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1