|
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (28.22 KB, 下載次數(shù): 59)
下載附件
2020-10-27 15:47 上傳
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
000.JPG (48.96 KB, 下載次數(shù): 69)
下載附件
2020-10-27 11:03 上傳
①采用單片機(jī)設(shè)計電子溫度計,選擇適合的感溫元件,溫度測量范圍-50℃~110℃; ②測量誤差小于0.1℃; ③LED數(shù)碼直讀顯示; 1.2總體方案分析在單片機(jī)電路設(shè)計中,大多都是使用傳感器,所以本次設(shè)計采用溫度傳感器DS18B20。整個系統(tǒng)由單片機(jī)控制,溫度傳感器采用DS18B20。DS18b20采用單總線方式與單片機(jī)相連.把采集到得溫度信息傳給單片機(jī)。單片機(jī)采集到的溫度輸出到四個數(shù)碼管上進(jìn)行顯示。當(dāng)四位數(shù)碼管顯示的溫度超過上限值時可以實現(xiàn)報警功能。系統(tǒng)總體方案如圖1-1所示。 圖1-1 系統(tǒng)總體方案 2 電路設(shè)計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è)計計算及分析說明2.3.1時鐘電路和復(fù)位電路①復(fù)位電路 復(fù)位電路的基本功能是:系統(tǒng)上電時提供復(fù)位信號,直至系統(tǒng)電源穩(wěn)定后,撤銷復(fù)位信號。在本系統(tǒng)中,上電復(fù)位采用電平方式開關(guān)復(fù)位。上電復(fù)位采用RC電路,其中電容為10uF,電阻為10K。 ②晶振電路 單片機(jī)系統(tǒng)里晶振的作用非常大,它結(jié)合單片機(jī)內(nèi)部的電路,產(chǎn)生單片機(jī)所必須的時鐘頻率,單片機(jī)的一切指令的執(zhí)行都是建立在這個基礎(chǔ)上的,晶振提供的十種頻率越高,單片機(jī)運行的速度也就越快。單片機(jī)的晶振頻率應(yīng)低于40MHZ,本設(shè)計中采用的晶振頻率為11.0592MHZ,在晶振上并聯(lián)兩個30pF電容。 時鐘電路和復(fù)位電路如圖2-5所示。 圖2-5 電路和復(fù)位電路圖 2.3.2溫度采集電路DS18B20溫度傳感器是一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9~12位的數(shù)字值讀數(shù)方式。DS18B20的性能特點如下:
①獨特的單線接口僅需要一個端口引腳進(jìn)行通信;
②多個DS18B20可以并聯(lián)在惟一的三線上,實現(xiàn)多點組網(wǎng)功能;
③無須外部器件;
④可通過數(shù)據(jù)線供電,電壓范圍為3.0~5.5V;
⑤零待機(jī)功耗;
⑥溫度以9或12位數(shù)字;
⑦用戶可定義報警設(shè)置;
⑧報警搜索命令識別并標(biāo)志超過程序限定溫度(溫度報警條件)的器件;
⑨負(fù)電壓特性,電極接反時,溫度計不會因發(fā)熱而燒毀,只是不能正常工作。溫度采集電路如圖2-6所示。 圖2-6 溫度采集電路圖 DS18B20測溫原理如圖2.7所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號送給計數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號作為計數(shù)器2的脈沖輸入。計數(shù)器1和溫度寄存器被預(yù)置在-55℃所對應(yīng)的一個基數(shù)值。計數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計數(shù),當(dāng)計數(shù)器1的預(yù)置值減到0時,溫度寄存器的值將加1,計數(shù)器1的預(yù)置將重新被裝入,計數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計數(shù),如此循環(huán)直到計數(shù)器2計數(shù)到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數(shù)值即為所測溫度。圖中的斜率累加器用于補(bǔ)償和修正測溫過程中的非線性,其輸出用于修正計數(shù)器1的預(yù)置值。 
圖2-7 DS18B20測溫原理 2.3.3蜂鳴器報警電路本設(shè)計報警系統(tǒng)使用蜂鳴器報警電路,在單片機(jī)程序內(nèi)設(shè)置了報警溫度的上下限值,當(dāng)溫度高于設(shè)定溫度上限時,蜂鳴器提示;當(dāng)溫度低于設(shè)定溫度下限時,蜂鳴器也會提示。報警功能是重要功能之一,在很多應(yīng)用場合下通過報警功能可以避免很多人力、財力的損失,蜂鳴器報警電路所測溫度超出上、下限溫度極限值時,為實現(xiàn)報警功能,設(shè)計了蜂鳴器報警電路。報警電路如圖2-8所示。 圖2-8 蜂鳴器報警電路圖 2.3.4位LED數(shù)碼管顯示電路 在該電路中采用的是4位共陽極數(shù)碼管,通過P2.0~P2.3端來控制四位數(shù)碼管的亮滅,通過P0并行口來控制數(shù)碼管顯示的數(shù)值。使用數(shù)碼管時,采用動態(tài)掃描的方式, 動態(tài)顯示的特點是將所有位數(shù)碼管的段選線s一位數(shù)碼管有效。選亮數(shù)碼管采用動態(tài)掃描顯示。所謂動態(tài)掃描顯示即輪流向各位數(shù)碼管送出字形碼和相應(yīng)的位選,利用發(fā)光管的余輝和人眼視覺暫留作用,使人的感覺好像各位數(shù)碼管同時都在顯示。LED數(shù)碼管顯示電路圖如圖2-9所示。 圖2-9 LED數(shù)碼管顯示電路圖 2.3.5按鍵控制電路本電路具有按鍵輸入功能,當(dāng)有按鍵被按下時,相對應(yīng)的引腳會變成低電平,便可確定是哪一個按鈕被按下。按鍵可設(shè)定報警溫度的上限值和下限值,如果當(dāng)前環(huán)境溫度不在設(shè)定范圍之內(nèi),蜂鳴器就會報警。按鍵控制電路如圖2-10所示。 圖2-10 按鍵控制電路圖
2.4電路元件選擇由Altium Designer的bill of material功能導(dǎo)出得到本次設(shè)計的所有元器件,電路元器件如圖2-11所示。 圖2-11 電路元器件清單圖
3 程序3.1程序流程圖及說明3.1.1主程序主程序設(shè)計如圖3-1所示;  圖3-1 主程序流程圖
代碼: - //主函數(shù)
- void main()
- {
- beep=0;
- delay(10);
- while( 1 )
- {
- tmpchange(); //溫度變換
- if(shu==0)
- {
- displayTemp(tmp( ));
- }
- keyscan(); //鍵盤掃描
- if(shu==1)
- {
- displayTemp(count); //設(shè)置上限溫度值
- }
- if(shu==2)
- {
- displayTemp(alarm); //設(shè)置下限溫度值
- }
- if(shu==3)
- {
- shu=0;
- }
- if(temp>count||(temp<alarm)) //比較
- {
- beep=0;
- }
- else
- beep=1;
- }
- }
復(fù)制代碼
3.1.2按鍵控制程序設(shè)計在鍵盤掃描程序中,對按鍵初始化,然后判斷按鍵是否閉合,如果按鍵閉合,通過軟件延時去抖,最后通過顯示程序可以看到相應(yīng)的按鍵設(shè)置值,以做下一步指示,這是最基本的人機(jī)交互模式。按鍵控制流程如圖3-2所示。 圖3-2 按鍵控制流程圖 代碼: - //鍵盤掃描函數(shù)
- uint keyscan()
- {
- if(key1==0)
- {
- delay(5);
- if(key1==0)
- {
- while(!key1);
- shu++;
- }
- }
- if(key2==0)
- {
- delay(5);
- if(key2==0)
- {
- while(!key2);
- count=count+10;
- if(shu==2)
- {
- alarm+=10;
- }
- }
- }
- if(key3==0)
- {
- delay(5);
- if(key3==0)
- {
- while(!key3);
- count=count-10;
- if(shu==2)
- {
- alarm-=10;
- }
- }
- }
- return(count);
- }
復(fù)制代碼
3.1.3DS18B20初始化程序設(shè)計DS18B20的初始化 (1)先將數(shù)據(jù)線置高電平”1” (2)延時(該時間要求的不是很嚴(yán)格,但是盡可能的短一點)
(3)數(shù)據(jù)線拉到低電平“0”
(4)延時750微秒(該時間的時間范圍可以從480到960微秒)
(5)數(shù)據(jù)線拉到高電平“1”
(6)延時等待(如果初始化成功則在15到60毫秒時間之內(nèi)產(chǎn)生一個由DS18B20所返回的低電平”0”。據(jù)該狀態(tài)可以來確走它的存在,但是應(yīng)注意不能無限的進(jìn)行等待,不然會使程序進(jìn)入死循環(huán),所以要進(jìn)行超時控制)。
(7)若CPU讀到了數(shù)據(jù)線上的低電平“0”后,還要做延時,其延時的時間從發(fā)出的高電平算起第(5)步的時間算起)最少要480微秒。
(8)將數(shù)據(jù)線再次拉高到高電平“1后結(jié)束。 DS18B20初始化程序流程圖如圖3-3所示。 圖3-3 DS18B20初始化程序流程圖 代碼: - void dsreset()//發(fā)復(fù)位
- {
- uint i;
- DS=0;
- i=103;
- while(i>0)i--;
- DS=1;
- i=4;
- while(i>0)i--;
- }
- uchar tmpread() //讀取一字節(jié)
- {
- uchar j,k,dat;
- uint i;
- for(j=1;j<=8;j++)
- {
- DS=0;i++; //延時
- DS=1;i++;i++;
- k=DS;
- i=8;while(i>0)i--;
- dat=(k<<7)|(dat>>1);//讀出的數(shù)據(jù)最低位在最前面存一個字節(jié)在DAT里
- }
- return(dat);
- }
- void tmpwritebyte(uchar dat) //寫一個字節(jié)
- {
- uint i;
- uchar j;
- bit testb;
- for(j=1;j<=8;j++)
- {
- testb=dat&0x01;
- dat=dat>>1;
- if(testb) //寫 1
- {
- DS=0;
- i++;i++;
- DS=1;
- i=8;while(i>0)i--;
- }
- else
- {
- DS=0; //寫 0
- i=8;while(i>0)i--;
- DS=1;
- i++;i++;
- }
- }
- }
復(fù)制代碼
3.3.4溫度轉(zhuǎn)換程序設(shè)計溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令,當(dāng)采用 12 位分辨率時轉(zhuǎn)換時間約為 750ms,在本程序設(shè)計中采用 1s 顯示程序延時法等待轉(zhuǎn)換的完成。溫度轉(zhuǎn)換程序流程如圖3-4所示。 圖3-4 溫度轉(zhuǎn)換程序流程圖 代碼: void tmpchange() //DS18B20溫度變換 { dsreset(); delay(1); tmpwritebyte(0xcc); //跳過讀取內(nèi)存rom tmpwritebyte(0x44); //開始轉(zhuǎn)換 } 3.1.5溫度顯示程序設(shè)計根據(jù)用戶的鍵盤選擇來顯示數(shù)據(jù),在普通模式下顯示當(dāng)前溫度;在設(shè)置模式下,顯示設(shè)置的限值,顯示數(shù)據(jù)刷新新子程序主要是對顯示緩沖器中的顯示數(shù)據(jù)進(jìn)行刷新操作,溫度顯示流程如圖3-5所示。 圖3-5 溫度顯示流程圖 代碼: - void displayTemp(uint temp) //顯示溫度程序
- {
- uchar ge,shi,bai,qian,ser;
- d1=0;
- d1=0;
- d3=0;
- d4=0;
- dsreset();
- ser=temp/10; //分離出三位要顯示的數(shù)字
- SBUF=ser;
- qian=temp/1000;
- bai=temp/100%10; // 百位數(shù)字
- shi=temp/10%10; // 十位數(shù)字
- ge=temp%10; // 個位數(shù)字
- if(flag==1)
- {
- flag=0;
- P0=0xbf;
- d1=1;
- delay(2);
- d1=0;
- }
- if(qian!=0)
- {
- P0=tab[qian];
- d1=1;
- delay(2);
- d1=0;
- }
- else
- {
- P0=0xff;
- d1=1;
- delay(2);
- d1=0;
- }
- if(temp>99)
- {
- P0=tab[bai];
- d2=1;
- delay(2);
- d2=0;
- }
- P0=tab1[shi];
- d3=1;
- delay(2);
- d3=0;
- P0=tab[ge];
- d4=1;
- delay(2);
- d4=0;
- }
復(fù)制代碼
51hei.png (9.44 KB, 下載次數(shù): 56)
下載附件
2020-10-27 15:52 上傳
全部資料51hei下載地址:
數(shù)字溫度計設(shè)計.7z
(2.21 MB, 下載次數(shù): 143)
2020-10-27 15:53 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|