娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年12月26日(星期四)

正在發(fā)生

2019年12月26日 | 基于DS18B20的數(shù)顯溫度計 數(shù)碼管顯示

發(fā)布者:腦洞飛揚 來源: 51hei關(guān)鍵字:DS18B20  數(shù)顯溫度計  數(shù)碼管顯示 手機看文章 掃描二維碼
隨時隨地手機看文章

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

次要亮點:
1.使用小巧的STC15F104W單片機

DS18B20的通信要點在于時序的嚴格對應(yīng),相比之下DHT11這一類的單總線通信時序要求更加寬松。

因為DS18B20算是極為常用的學(xué)習(xí)器件,故不做過多講解,本次作品不涉及搜索BOM、精度調(diào)節(jié)等操作,只是單器件讀取溫度值,數(shù)據(jù)處理將可以顯示的溫度值設(shè)置為-20℃~80℃。

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


#include 
sbit DSPORT=P3^5;//DS18B20管腳定義
#include
#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è)計名稱:基于DS18B20的數(shù)顯溫度計
設(shè)計者:清河

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


使用4位共陰極數(shù)碼管,顯示無符號位

注意:由于STC15系列采用Y5內(nèi)核,所以有關(guān)DS18B20精準延時部分在移植時應(yīng)首先考慮更換
##############################################################################################*/
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設(shè)置此中轉(zhuǎn)值
    if(Data_temperature>0xf000)//當(dāng)溫度值為負數(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ù)讀取和處理會占用一部分時間,導(dǎo)致數(shù)碼管有輕微閃爍感,使用者可以考慮將轉(zhuǎn)換精度調(diào)為最低并修改轉(zhuǎn)換等待時間以減少數(shù)碼管的閃爍感,同時別忘記調(diào)一下數(shù)據(jù)處理函數(shù)中對應(yīng)的精度值。


上述程序仍然臃腫,但由于是普通器件的使用,沒有難點,所以也沒有進行優(yōu)化,以完成功能為目的。

關(guān)鍵字:DS18B20  數(shù)顯溫度計  數(shù)碼管顯示 引用地址:基于DS18B20的數(shù)顯溫度計 數(shù)碼管顯示

上一篇:兩個74HC595驅(qū)動8位數(shù)碼管程序+Proteus仿真
下一篇:單片機籃球比賽計分器設(shè)計方案與程序詳解

推薦閱讀

以下內(nèi)容在stm32f4xx_rcc.h內(nèi) /** ****************************************************************************** * @file stm32f4xx_rcc.h * @author MCD Application Team * @version V1.5.1 * @date 22-May-2015 * @brief This file contains all the functions prototypes for the RCC firmware li...
工業(yè)機器人是智能制造業(yè)最具代表性的裝備。據(jù)R預(yù)測,隨著產(chǎn)業(yè)轉(zhuǎn)型升級的需求,人力成本的上升,以及國家政策的扶持,2017-2022年我國工業(yè)機器人未來的增速可達30%以上,到2022年我國工業(yè)機器人年銷售量超過27萬臺。 工業(yè)機器人在行業(yè)中應(yīng)用廣泛,目前在汽車、金屬制品、、橡膠及塑料等行業(yè)已經(jīng)得到應(yīng)用。同時,隨著技術(shù)的不斷提升,工業(yè)機器人的應(yīng)用領(lǐng)...
26日,天眼查信息顯示,華為旗下哈勃科技投資有限公司對外投資新增一家企業(yè)湖北九同方微電子有限公司。除華為哈勃外,深圳市紅土善利私募股權(quán)投資基金合伙企業(yè)(有限合伙)也對其進行投資,湖北九同方微電子注冊資本從693.5838萬元人民幣變更為866.9798萬元人民幣。湖北九同方微電子有限公司成立于2011年,是一家專注IC設(shè)計服務(wù)的國際化軟件公司。公司擁有...
根據(jù)最新發(fā)布的海報,聯(lián)想拯救者Y90將采用AMOLED屏幕,它是一塊6.92英寸的E4 AMOLED面板,刷新率為144Hz,觸摸采樣率為720Hz。它的主要顯示功能之一將是防藍光功能。此外,海報還證實,這款游戲手機將采用雙擎風(fēng)冷技術(shù)。這意味著這款手機將擁有自己的冷卻風(fēng)扇,可能類似于之前看到的雙渦輪風(fēng)扇增壓液體冷卻系統(tǒng)。此外,有消息稱這款智能手機將搭載高通驍...

史海拾趣

問答坊 | AI 解惑

請教幾道英文的模電專業(yè)題目

請教幾道英文的模電專業(yè)題目 Which is the physical state of a MOS transistor which is switched on? ²Accumulation ²Cut-off ²Strong inversion Statement i): The small signal output resistance of a MOS transi ...…

查看全部問答∨

請教yaffs2的問題。

小弟是新手,現(xiàn)在遇到兩個問題,向各位大俠請教。     目前我在玩一個ARM-linux的開發(fā)板,根文件系統(tǒng)是jffs2,掛在mtdblk2,我想把它換成yaffs2。 第一個問題:     啟動后我把mtdblk3以yaffs2的方式掛載的/mnt目錄,然后把 ...…

查看全部問答∨

c語言---avr單片機

我是大三學(xué)生,大一時學(xué)的c語言,現(xiàn)在avr單片機剛剛學(xué)過,現(xiàn)在才知道c語言編程對單片機的應(yīng)用是多么重要!但由于當(dāng)時c語言學(xué)的不怎么好,所以現(xiàn)在對用c語言編程非常迷茫。所以希望大家能幫幫我,我真的很喜歡單片機....哪位高手能指點一下或推薦點 ...…

查看全部問答∨

還是點陣電源問題

之前說過16*64點陣顯示屏的電源模塊,我不清楚需要怎樣一個電源電路,還是說直接正極和正極連起來,負極和負極接起來,然后接上幾V幾V的電源就可以,我電路不太行,是否有個參考電路可以讓我學(xué)學(xué),麻煩了。…

查看全部問答∨

AVR單片機圣經(jīng)級電子書,送給有需要的人

師兄們留下來的資料,保證每本書都是精挑細選出來的,送給有需要的朋友們,祝你們早日成功! 還有一本個人覺得比較好的《AVR單片機C語言入門指導(dǎo)》因為大于15M沒傳上來,有需要的找我要!…

查看全部問答∨

三菱變頻器的故障處理

三菱變頻器的故障處理 在國內(nèi)市場上,三菱因為其穩(wěn)定的質(zhì)量,強大的品牌影響,有著相當(dāng)廣闊的市場,并已深入了各個領(lǐng)域的應(yīng)用。   故障處理   三菱變頻器目前在市場上用量最多的就是A500系列,以及E500系列了,A500系列為通用型變頻器,適合高 ...…

查看全部問答∨

過渡狀態(tài)?

單片機編程過種中:鍵值的過渡狀態(tài)是什么意思. 而且這個鍵值不管是多少(char),程序都能運行,這是怎么一回事.沒有那個鍵值還不行.…

查看全部問答∨

設(shè)計經(jīng)驗規(guī)范

1、PCB接地設(shè)計_中興.pdf 2、電路設(shè)計規(guī)范_中興.pdf 3、電子工程師筆試題(第二卷)遙控電路部分.doc 4、華為PCB_Layout設(shè)計規(guī)范.pdf 5、華為硬件設(shè)計規(guī)范.pdf 6、接地技術(shù).docx 7、如何通過仿真有效提高數(shù)模混合設(shè)計性.pdf 8、設(shè)計心理學(xué) [美 ...…

查看全部問答∨

關(guān)于C++變量的聲明和定義

關(guān)于C++變量的聲明和定義我們已經(jīng)知道,一個函數(shù)一般由兩部分組成:聲明部分和執(zhí)行語句。 聲明部分的作用是對有關(guān)的標(biāo)識符(如變量、函數(shù)、結(jié)構(gòu)體、共用體等)的屬性進行說明。對于函數(shù),聲明和定義的區(qū)別是明顯的,前邊已說明 ...…

查看全部問答∨

CC1101程序運行一會 就死機了

程序一開始能正常發(fā)送接收, 運行幾分鐘后  就不能夠發(fā)送接收了  重啟上電又能運行  ,幾分鐘后接著死機!!!怎么解決啊。 …

查看全部問答∨
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 肃北| 桐柏县| 出国| 抚顺市| 万安县| 涞水县| 岱山县| 巴塘县| 宿州市| 凤庆县| 浙江省| 北碚区| 红桥区| 凤凰县| 融水| 赤水市| 广平县| 永修县| 乐至县| 新营市| 五大连池市| 县级市| 宁河县| 阆中市| 温宿县| 南开区| 西乡县| 康保县| 陇南市| 广西| 栾城县| 都兰县| 西盟| 沁源县| 宜兴市| 深水埗区| 怀安县| 乌海市| 鄂托克旗| 托克托县| 岚皋县|