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

QQ登錄

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

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

DS18B20單片機(jī)數(shù)字溫度計(jì)的仿真電路圖PCB與源程序設(shè)計(jì)

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

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


Altium Designer畫(huà)的原理圖和PCB圖如下:(51hei附件中可下載工程文件)



①采用單片機(jī)設(shè)計(jì)電子溫度計(jì),選擇適合的感溫元件,溫度測(cè)量范圍-50℃~110℃;

②測(cè)量誤差小于0.1℃;

③LED數(shù)碼直讀顯示;

1.2總體方案分析

在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,所以本次設(shè)計(jì)采用溫度傳感器DS18B20。整個(gè)系統(tǒng)由單片機(jī)控制,溫度傳感器采用DS18B20。DS18b20采用單總線方式與單片機(jī)相連.把采集到得溫度信息傳給單片機(jī)。單片機(jī)采集到的溫度輸出到四個(gè)數(shù)碼管上進(jìn)行顯示。當(dāng)四位數(shù)碼管顯示的溫度超過(guò)上限值時(shí)可以實(shí)現(xiàn)報(bào)警功能。系統(tǒng)總體方案如圖1-1所示。

圖1-1 系統(tǒng)總體方案
2 電路設(shè)計(jì)2.1電路原理圖

電路原理圖如圖2-1所示;


圖2-1 電路原理圖
2.2電路PCB圖

電路PCB圖底層如圖2-2所示;

圖2-2 電路PCB底層圖

電路PCB頂層如圖2-3所示;

圖2-3 電路PCB頂層圖

電路PCB3D圖如2-4所示;

圖2-4 電路PCB3D圖
2.3設(shè)計(jì)計(jì)算及分析說(shuō)明2.3.1時(shí)鐘電路和復(fù)位電路
①?gòu)?fù)位電路
復(fù)位電路的基本功能是:系統(tǒng)上電時(shí)提供復(fù)位信號(hào),直至系統(tǒng)電源穩(wěn)定后,撤銷(xiāo)復(fù)位信號(hào)。在本系統(tǒng)中,上電復(fù)位采用電平方式開(kāi)關(guān)復(fù)位。上電復(fù)位采用RC電路,其中電容為10uF,電阻為10K。
②晶振電路
單片機(jī)系統(tǒng)里晶振的作用非常大,它結(jié)合單片機(jī)內(nèi)部的電路,產(chǎn)生單片機(jī)所必須的時(shí)鐘頻率,單片機(jī)的一切指令的執(zhí)行都是建立在這個(gè)基礎(chǔ)上的,晶振提供的十種頻率越高,單片機(jī)運(yùn)行的速度也就越快。單片機(jī)的晶振頻率應(yīng)低于40MHZ,本設(shè)計(jì)中采用的晶振頻率為11.0592MHZ,在晶振上并聯(lián)兩個(gè)30pF電容。
時(shí)鐘電路和復(fù)位電路如圖2-5所示。
圖2-5 電路和復(fù)位電路圖
2.3.2溫度采集電路

DS18B20溫度傳感器是一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)9~12位的數(shù)字值讀數(shù)方式。DS18B20的性能特點(diǎn)如下:
    ①獨(dú)特的單線接口僅需要一個(gè)端口引腳進(jìn)行通信;
    ②多個(gè)DS18B20可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)功能;
    ③無(wú)須外部器件;
    ④可通過(guò)數(shù)據(jù)線供電,電壓范圍為3.0~5.5V;
    ⑤零待機(jī)功耗;
    ⑥溫度以9或12位數(shù)字;
    ⑦用戶可定義報(bào)警設(shè)置;
    ⑧報(bào)警搜索命令識(shí)別并標(biāo)志超過(guò)程序限定溫度(溫度報(bào)警條件)的器件;
    ⑨負(fù)電壓特性,電極接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,只是不能正常工作。溫度采集電路如圖2-6所示。

圖2-6 溫度采集電路圖

DS18B20測(cè)溫原理如圖2.7所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給計(jì)數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號(hào)作為計(jì)數(shù)器2的脈沖輸入。計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55℃所對(duì)應(yīng)的一個(gè)基數(shù)值。計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,計(jì)數(shù)器1的預(yù)置將重新被裝入,計(jì)數(shù)器1重新開(kāi)始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值即為所測(cè)溫度。圖中的斜率累加器用于補(bǔ)償和修正測(cè)溫過(guò)程中的非線性,其輸出用于修正計(jì)數(shù)器1的預(yù)置值。

圖2-7 DS18B20測(cè)溫原理
2.3.3蜂鳴器報(bào)警電路

本設(shè)計(jì)報(bào)警系統(tǒng)使用蜂鳴器報(bào)警電路,在單片機(jī)程序內(nèi)設(shè)置了報(bào)警溫度的上下限值,當(dāng)溫度高于設(shè)定溫度上限時(shí),蜂鳴器提示;當(dāng)溫度低于設(shè)定溫度下限時(shí),蜂鳴器也會(huì)提示。報(bào)警功能是重要功能之一,在很多應(yīng)用場(chǎng)合下通過(guò)報(bào)警功能可以避免很多人力、財(cái)力的損失,蜂鳴器報(bào)警電路所測(cè)溫度超出上、下限溫度極限值時(shí),為實(shí)現(xiàn)報(bào)警功能,設(shè)計(jì)了蜂鳴器報(bào)警電路。報(bào)警電路如圖2-8所示。

圖2-8 蜂鳴器報(bào)警電路圖
2.3.4LED數(shù)碼管顯示電路

              在該電路中采用的是4位共陽(yáng)極數(shù)碼管,通過(guò)P2.0~P2.3端來(lái)控制四位數(shù)碼管的亮滅,通過(guò)P0并行口來(lái)控制數(shù)碼管顯示的數(shù)值。使用數(shù)碼管時(shí),采用動(dòng)態(tài)掃描的方式, 動(dòng)態(tài)顯示的特點(diǎn)是將所有位數(shù)碼管的段選線s一位數(shù)碼管有效。選亮數(shù)碼管采用動(dòng)態(tài)掃描顯示。所謂動(dòng)態(tài)掃描顯示即輪流向各位數(shù)碼管送出字形碼和相應(yīng)的位選,利用發(fā)光管的余輝和人眼視覺(jué)暫留作用,使人的感覺(jué)好像各位數(shù)碼管同時(shí)都在顯示。LED數(shù)碼管顯示電路圖如圖2-9所示。

圖2-9 LED數(shù)碼管顯示電路圖
2.3.5按鍵控制電路

本電路具有按鍵輸入功能,當(dāng)有按鍵被按下時(shí),相對(duì)應(yīng)的引腳會(huì)變成低電平,便可確定是哪一個(gè)按鈕被按下。按鍵可設(shè)定報(bào)警溫度的上限值和下限值,如果當(dāng)前環(huán)境溫度不在設(shè)定范圍之內(nèi),蜂鳴器就會(huì)報(bào)警。按鍵控制電路如圖2-10所示。

圖2-10 按鍵控制電路圖

2.4電路元件選擇

由Altium Designer的bill of material功能導(dǎo)出得到本次設(shè)計(jì)的所有元器件,電路元器件如圖2-11所示。

圖2-11 電路元器件清單圖


3 程序3.1程序流程圖及說(shuō)明3.1.1主程序

主程序設(shè)計(jì)如圖3-1所示;

圖3-1 主程序流程圖
代碼:
  1. //主函數(shù)
  2. void main()
  3. {
  4.               beep=0;
  5.               delay(10);
  6.               while( 1 )
  7.               {
  8.               tmpchange();                  //溫度變換
  9.               if(shu==0)
  10.               {
  11.                       displayTemp(tmp( ));
  12.               }
  13.               keyscan();                                          //鍵盤(pán)掃描
  14.               if(shu==1)
  15.               {
  16.                       displayTemp(count);                //設(shè)置上限溫度值
  17.                }
  18.               if(shu==2)
  19.               {
  20.                       displayTemp(alarm);              //設(shè)置下限溫度值
  21.               }
  22.               if(shu==3)
  23.               {
  24.                  shu=0;            
  25.                }
  26.               if(temp>count||(temp<alarm))                //比較
  27.               {
  28.               beep=0;
  29.               }
  30.               else
  31.               beep=1;
  32.               }
  33. }
復(fù)制代碼

3.1.2按鍵控制程序設(shè)計(jì)

在鍵盤(pán)掃描程序中,對(duì)按鍵初始化,然后判斷按鍵是否閉合,如果按鍵閉合,通過(guò)軟件延時(shí)去抖,最后通過(guò)顯示程序可以看到相應(yīng)的按鍵設(shè)置值,以做下一步指示,這是最基本的人機(jī)交互模式。按鍵控制流程如圖3-2所示。

圖3-2 按鍵控制流程圖
代碼:
  1. //鍵盤(pán)掃描函數(shù)
  2. uint keyscan()
  3. {
  4.               if(key1==0)
  5.               {
  6.                    delay(5);
  7.                    if(key1==0)
  8.                    {
  9.                             while(!key1);
  10.                             shu++;
  11.                     }
  12.               }
  13.                           if(key2==0)
  14.                            {
  15.                                   delay(5);
  16.                                   if(key2==0)
  17.                                   {
  18.                                      while(!key2);
  19.                                      count=count+10;
  20.                                        if(shu==2)
  21.                                        {
  22.                                             alarm+=10;
  23.                                         }
  24.                                    }
  25.                            }
  26.                                if(key3==0)
  27.                                {
  28.                                      delay(5);
  29.                                      if(key3==0)
  30.                                      {
  31.                                               while(!key3);
  32.                                               count=count-10;
  33.                                                            if(shu==2)
  34.                                                 {
  35.                                                       alarm-=10;
  36.                                                  }
  37.                                      }
  38.                                                     }
  39.       return(count);
  40. }
復(fù)制代碼

3.1.3DS18B20初始化程序設(shè)計(jì)

DS18B20的初始化

(1)先將數(shù)據(jù)線置高電平”1”

(2)延時(shí)(該時(shí)間要求的不是很?chē)?yán)格,但是盡可能的短一點(diǎn))
(3)數(shù)據(jù)線拉到低電平“0”
(4)延時(shí)750微秒(該時(shí)間的時(shí)間范圍可以從480到960微秒)
(5)數(shù)據(jù)線拉到高電平“1”
(6)延時(shí)等待(如果初始化成功則在15到60毫秒時(shí)間之內(nèi)產(chǎn)生一個(gè)由DS18B20所返回的低電平”0”。據(jù)該狀態(tài)可以來(lái)確走它的存在,但是應(yīng)注意不能無(wú)限的進(jìn)行等待,不然會(huì)使程序進(jìn)入死循環(huán),所以要進(jìn)行超時(shí)控制)。
(7)若CPU讀到了數(shù)據(jù)線上的低電平“0”后,還要做延時(shí),其延時(shí)的時(shí)間從發(fā)出的高電平算起第(5)步的時(shí)間算起)最少要480微秒。
(8)將數(shù)據(jù)線再次拉高到高電平“1后結(jié)束。

DS18B20初始化程序流程圖如圖3-3所示。

圖3-3 DS18B20初始化程序流程圖
代碼:
  1. void dsreset()//發(fā)復(fù)位
  2. {   
  3.               uint i;
  4.               DS=0;
  5.               i=103;
  6.               while(i>0)i--;
  7.               DS=1;
  8.               i=4;
  9.               while(i>0)i--;
  10. }
  11. uchar tmpread()   //讀取一字節(jié)
  12. {
  13.               uchar j,k,dat;
  14.               uint i;
  15.     for(j=1;j<=8;j++)
  16.     {
  17.                   DS=0;i++;          //延時(shí)
  18.                   DS=1;i++;i++;
  19.                             k=DS;
  20.                   i=8;while(i>0)i--;
  21.                             dat=(k<<7)|(dat>>1);//讀出的數(shù)據(jù)最低位在最前面存一個(gè)字節(jié)在DAT里
  22.     }
  23.     return(dat);
  24. }
  25. void tmpwritebyte(uchar dat)   //寫(xiě)一個(gè)字節(jié)
  26. {
  27.     uint i;
  28.     uchar j;
  29.     bit testb;
  30.     for(j=1;j<=8;j++)
  31.     {
  32.                   testb=dat&0x01;
  33.                   dat=dat>>1;
  34.                   if(testb)     //寫(xiě) 1
  35.                                 {
  36.                                   DS=0;
  37.                                   i++;i++;
  38.                                   DS=1;
  39.                                   i=8;while(i>0)i--;
  40.                                 }
  41.     else
  42.     {
  43.               DS=0;       //寫(xiě) 0
  44.               i=8;while(i>0)i--;
  45.               DS=1;
  46.               i++;i++;
  47.     }
  48.   }
  49. }
復(fù)制代碼

3.3.4溫度轉(zhuǎn)換程序設(shè)計(jì)

溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開(kāi)始命令,當(dāng)采用 12 位分辨率時(shí)轉(zhuǎn)換時(shí)間約為 750ms,在本程序設(shè)計(jì)中采用 1s 顯示程序延時(shí)法等待轉(zhuǎn)換的完成。溫度轉(zhuǎn)換程序流程如圖3-4所示。

圖3-4 溫度轉(zhuǎn)換程序流程圖
代碼:
void tmpchange()  //DS18B20溫度變換
{
              dsreset();
              delay(1);
              tmpwritebyte(0xcc);  //跳過(guò)讀取內(nèi)存rom
              tmpwritebyte(0x44);  //開(kāi)始轉(zhuǎn)換
}
3.1.5溫度顯示程序設(shè)計(jì)

根據(jù)用戶的鍵盤(pán)選擇來(lái)顯示數(shù)據(jù),在普通模式下顯示當(dāng)前溫度;在設(shè)置模式下,顯示設(shè)置的限值,顯示數(shù)據(jù)刷新新子程序主要是對(duì)顯示緩沖器中的顯示數(shù)據(jù)進(jìn)行刷新操作,溫度顯示流程如圖3-5所示。

圖3-5 溫度顯示流程圖
代碼:
  1. void displayTemp(uint temp)   //顯示溫度程序
  2. {
  3.               uchar ge,shi,bai,qian,ser;
  4.               d1=0;
  5.               d1=0;
  6.               d3=0;
  7.               d4=0;
  8.               dsreset();
  9.               ser=temp/10;     //分離出三位要顯示的數(shù)字
  10.               SBUF=ser;
  11.               qian=temp/1000;
  12.               bai=temp/100%10; // 百位數(shù)字
  13.               shi=temp/10%10;   // 十位數(shù)字
  14.               ge=temp%10;   // 個(gè)位數(shù)字
  15.               if(flag==1)
  16.               {
  17.                             flag=0;
  18.                             P0=0xbf;
  19.                             d1=1;
  20.                             delay(2);
  21.                             d1=0;
  22.               }
  23.               if(qian!=0)
  24.               {
  25.                             P0=tab[qian];
  26.                             d1=1;
  27.                             delay(2);
  28.                             d1=0;            
  29.               }
  30.               else
  31.               {
  32.                             P0=0xff;
  33.                             d1=1;
  34.                             delay(2);
  35.                             d1=0;            
  36.               }
  37.               if(temp>99)
  38.               {
  39.                             P0=tab[bai];
  40.                             d2=1;
  41.                             delay(2);
  42.                             d2=0;
  43.               }
  44.                             P0=tab1[shi];
  45.                             d3=1;
  46.                             delay(2);
  47.                             d3=0;
  48.                             P0=tab[ge];
  49.                             d4=1;
  50.                             delay(2);
  51.                             d4=0;
  52. }
復(fù)制代碼



全部資料51hei下載地址:
數(shù)字溫度計(jì)設(shè)計(jì).7z (2.21 MB, 下載次數(shù): 143)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:856286 發(fā)表于 2020-12-7 20:46 | 只看該作者
什么垃圾嘛,第一次下載說(shuō)我壓縮包損壞
回復(fù)

使用道具 舉報(bào)

板凳
ID:328014 發(fā)表于 2020-12-8 02:17 | 只看該作者
1181535551 發(fā)表于 2020-12-7 20:46
什么垃圾嘛,第一次下載說(shuō)我壓縮包損壞

你看我已經(jīng)打開(kāi)了,要用winrar來(lái)打開(kāi),而且要最新版的,其他的都不行

51hei.png (12.84 KB, 下載次數(shù): 53)

51hei.png
回復(fù)

使用道具 舉報(bào)

地板
ID:856286 發(fā)表于 2020-12-9 00:30 來(lái)自觸屏版 | 只看該作者
這是雙面板嘛。。。
回復(fù)

使用道具 舉報(bào)

5#
ID:856286 發(fā)表于 2020-12-9 00:37 來(lái)自觸屏版 | 只看該作者
打開(kāi)他的PCB工程,但是我的原理圖上元件沒(méi)有他的封裝,難道打開(kāi)別人的工程都是這樣嘛
回復(fù)

使用道具 舉報(bào)

6#
ID:856286 發(fā)表于 2020-12-9 00:38 來(lái)自觸屏版 | 只看該作者
可以的話把自己畫(huà)的原理圖庫(kù)和PCB給我
回復(fù)

使用道具 舉報(bào)

7#
ID:830435 發(fā)表于 2020-12-14 19:38 | 只看該作者
不錯(cuò)的學(xué)習(xí)資料,有很大幫助
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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