⑴ 關於51單片機的多功能溫度顯示器論文中的摘要怎麼寫
本課題主要介紹了溫度感測器的硬體電路的設計和系統軟體設計。硬體電路主要包括主控制器,測溫電路和顯示電路等,控制器採用單片機AT89C51,溫度感測器採用美國DALLAS半導體公司生產的DS18B20,顯示電路採用4位共陽極LED數碼管以動態掃描法直讀顯示者改圓。系統程序主要包括主程序,讀出溫度子程序,溫度轉換命令子程序,計算溫度子程序,顯示數據刷新子程序等。此外,還介紹了系統的調試和性能分析。
由於採用了改進型智能溫度感測器DS18B20作為檢測元件,與傳統殲此的溫度計相比,本數字溫度計減少了外部的硬體電路,具有低成本和易使用的特點。DS18B20溫度計還可以在過限報警、遠距離多點測溫控制等方面進行應用開發,具有很好的發展前景。DS18B20是一種可組網的高精度數字式溫度感測器,由於其具有單匯流排的獨特優點,可以使用戶輕松地組建起感測器網路,並可使多點溫度測量電路變得簡單、可靠。介紹了DS18B20數字溫度感測器在單片機下的硬體連接及軟體編程,並給出了軟體流程圖。
在該論文中,我們通過對單片機和溫度感測器的設計,從中學到了許多有用的東西,其中我們明白了如何去設計一個產品,首先要有性價比、良好的適應性,其次要知道設計的關鍵,最後也懂得了設計與實際的聯系。
關鍵詞:
單片機系統;數首塌字溫度感測器;單匯流排;過限報警
This thesis mainly include hardware circuit design and system design process. Hardware circuit include the main controller, temperature measurement circuit and display circuit, the controller using SCM AT89C51, temperature sensors using the proction DS18B20 of United States DALLAS Semiconctor, and the display circuit using four common anode of LED by digital dynamic scanning and Direct Reading show. The system procere mainly includes main procere, reading temperature sub-procere, the temperature conversion orderanies sub-procere, computing the temperature sub- procere, the manifestation data breaks sub-procere etc. In addition, it introced a system debugging and performance analysis.
In order to adopting the improvement type the intelligence temperature transcer DS18 B20 Be examine component, compared with the traditional thermometer, this numerical thermometer reced the hardware telephone of the exterior, have low cost with the characteristics of the easy usage. The DS18 B20 thermometers can report to the police still in the heat, long-distance leave to click to measure control much etc. carry on an applied development, having good development foreground. As a kind of high-accuracy digital net temperature sensor,DS18 B20 can be used building a sensor net easily. It can also make the net simple and reliable with it's special 1-wire interface .This paper introces the application of DS18B20 with single chip processor.
In that thesis, we from the design of the SCM and the temperature transcer, we learned many useful things, among them, we understand how go to design a proct, first it should have to have good quality but inexpensive, adaptabilities, than should know hinge of the design, the last we also know the communication between design and practice.
Keyword:
SCM;Digital thermometer; Single bus;Over the boundary to alarm
僅供參考!!!
⑵ 用51單片機和18b20做一個溫度計,求一個完整程序,要求用12864顯示。
這個是用數碼顯示的 你自己改改顯示就ok了 12864 有帶字型檔的那種,只要輸入ASCII碼就行了 程序有點亂,你注意換行就行
1.DS18B20基本知識
DS18B20數字溫度計是DALLAS公司生產的1-Wire,即單匯流排器件,具有線路簡單,體積小的特點。因此用它來組成一個測溫系統,具有線路簡單,在一根通信線,可以掛很多這樣的數字溫度計,十分方便。
1、DS18B20產品的特點
(1)、只要求一個埠即可實現通信。
(2)、在DS18B20中的每個器件上都有獨一無二的序列號。
(3)、實際應用中不需要外部任何元器件即可實現測溫。
(4)、測量溫度范圍在-55。C到+125。C之間。
(5)、數字溫度計的解析度用戶可以從9位到12位選擇。
(6)、內部有溫度上、下限告警設置。
2、DS18B20的引腳介紹
TO-92封裝的DS18B20的引腳排列見圖1,其引腳功能描述見表1。
(底視圖)圖1
表1 DS18B20詳細引腳功能描述
序號 名稱 引腳功能描述
1 GND 地信號
2 DQ 數據輸入/輸出引腳。開漏單匯流排介面引腳。當被用著在寄生電源下,也可以向器件提供電源。
3 VDD 可選擇的VDD引腳。當工作於寄生電源時,此引腳必須接地。
3. DS18B20的使用方法
由於DS18B20採用的是1-Wire匯流排協議方式,即在一根數據線實現數據的雙向傳輸,而對AT89S51單片機來說,硬體上並不支持單匯流排協議,因此,我們必須採用軟體的方法來模擬單匯流排的協議時序來完成對DS18B20晶元的訪問。
由於DS18B20是在一根I/O線上讀寫數據,因此,對讀寫的數據位有著嚴格的時序要求。DS18B20有嚴格的通信協議來保證各位數據傳輸的正確性和完整性。該協議定義了幾種信號的時序:初始化時序、讀時序、寫時序。所有時序都是將主機作為主設備,單匯流排器件作為從設備。而每一次命令和數據的傳輸都是從主機主動啟動寫時序開始,如果要求單匯流排器件回送數據,在進行寫命令後,主機需啟動讀時序完成數據接收。數據和命令的傳輸都是低位在先。
DS18B20的復位時序
DS18B20的讀時序
對於DS18B20的讀時序分為讀0時序和讀1時序兩個過程。
對於DS18B20的讀時隙是從主機把單匯流排拉低之後,在15秒之內就得釋放單匯流排,以讓DS18B20把數據傳輸到單匯流排上。DS18B20在完成一個讀時序過程,至少需要60us才能完成。
DS18B20的寫時序
對於DS18B20的寫時序仍然分為寫0時序和寫1時序兩個過程。
對於DS18B20寫0時序和寫1時序的要求不同,當要寫0時序時,單匯流排要被拉低至少60us,保證DS18B20能夠在15us到45us之間能夠正確地采樣IO匯流排上的「0」電平,當要寫1時序時,單匯流排被拉低之後,在15us之內就得釋放單匯流排。
4. 實驗任務
用一片DS18B20構成測溫系統,測量的溫度精度達到0.1度,測量的溫度的范圍在-20度到+100度之間,用8位數碼管顯示出來。
5. 電路原理圖
6. 系統板上硬體連線
(1). 把「單片機系統」區域中的P0.0-P0.7用8芯排線連接到「動態數碼顯示」區域中的ABCDEFGH端子上。
(2). 把「單片機系統」區域中的P2.0-P2.7用8芯排線連接到「動態數碼顯示」區域中的S1S2S3S4S5S6S7S8端子上。
(3). 把DS18B20晶元插入「四路單匯流排」區域中的任一個插座中,注意電源與地信號不要接反。
(4). 把「四路單匯流排」區域中的對應的DQ端子連接到「單片機系統」區域中的P3.7/RD端子上。
C語言源程序#include <AT89X52.H>#include <INTRINS.h> unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,25,28,31,34,38,41,44,48,50,53,56,59,63,66,69,72,75,78,81,84,88,91,94,97};unsigned char displaycount;unsigned char displaybuf[8]={16,16,16,16,16,16,16,16};unsigned char timecount;unsigned char readdata[8]; sbit DQ=P3^7;bit sflag; bit resetpulse(void){unsigned char i; DQ=0;for(i=255;i>0;i--);DQ=1;for(i=60;i>0;i--);return(DQ);for(i=200;i>0;i--);} void writecommandtods18b20(unsigned char command){unsigned char i;unsigned char j; for(i=0;i<8;i++){if((command & 0x01)==0){DQ=0;for(j=35;j>0;j--);DQ=1;}else{DQ=0;for(j=2;j>0;j--);DQ=1;for(j=33;j>0;j--);}command=_cror_(command,1);}} unsigned char readdatafromds18b20(void){unsigned char i;unsigned char j;unsigned char temp; temp=0;for(i=0;i<8;i++){temp=_cror_(temp,1);DQ=0;_nop_();_nop_();DQ=1;for(j=10;j>0;j--);if(DQ==1){temp=temp | 0x80;}else{temp=temp | 0x00;}for(j=200;j>0;j--);}return(temp);} void main(void){TMOD=0x01;TH0=(65536-4000)/256;TL0=(65536-4000)%256;ET0=1;EA=1; while(resetpulse());writecommandtods18b20(0xcc);writecommandtods18b20(0x44);TR0=1;while(1){;}} void t0(void) interrupt 1 using 0{unsigned char x;unsigned int result; TH0=(65536-4000)/256;TL0=(65536-4000)%256;if(displaycount==2){P0=displaycode[displaybuf[displaycount]] | 0x80;}else{P0=displaycode[displaybuf[displaycount]];}P2=displaybit[displaycount];displaycount++;if(displaycount==8){displaycount=0;} timecount++;if(timecount==150){timecount=0;while(resetpulse());writecommandtods18b20(0xcc);writecommandtods18b20(0xbe);readdata[0]=readdatafromds18b20();readdata[1]=readdatafromds18b20();for(x=0;x<8;x++){displaybuf[x]=16;}sflag=0;if((readdata[1] & 0xf8)!=0x00){sflag=1;readdata[1]=~readdata[1];readdata[0]=~readdata[0];result=readdata[0]+1;readdata[0]=result;if(result>255){readdata[1]++;}}readdata[1]=readdata[1]<<4;readdata[1]=readdata[1] & 0x70;x=readdata[0];x=x>>4;x=x & 0x0f;readdata[1]=readdata[1] | x;x=2;result=readdata[1];while(result/10){displaybuf[x]=result%10;result=result/10;x++;}displaybuf[x]=result;if(sflag==1){displaybuf[x+1]=17;}x=readdata[0] & 0x0f;x=x<<1;displaybuf[0]=(dotcode[x])%10;displaybuf[1]=(dotcode[x])/10;while(resetpulse());writecommandtods18b20(0xcc);writecommandtods18b20(0x44);}}
⑶ 單片機溫度計上電顯示溫度怎麼設置
1、首先通過DS18B20檢測溫度,若溫度高於設定最大閾值,紅燈亮,若溫度低於設定最小閾值,黃燈亮。
2、其次通過ADC0832配合電壓檢測電路檢測當前電壓,通過蜂鳴器提供按鍵音。
3、最後通過顯示屏顯示數字溫度計的溫度下限閾值,當前溫度值,電壓表的電壓值,通過按鍵切換界面,設置上下限閾值。
⑷ 單片機數字溫度計的上電溫度為30
最低溫度。單片機數字溫度計的上電溫度為30是最低溫度,溫度控制范圍為30度道100度之間,可鍵盤設置控制溫度值,並顯示。溫度感測器採用18B20。18b20採用單匯流排方式與單片機相連,把採集到得溫度信息傳給單片機。
⑸ 51單片機數字溫度計常見故障及解決辦法
用51做處理器,外圍電路如圖,一片雙積分轉換晶元ICL7135做AD,它的時鍾需要125K,用51的ALE經過一片CD4024分頻得到。1403提供基準源。另外,一片7660提供7135工作所需要的負壓。
為了省電,把所有模擬電路部分電源用一個晶體管管理起來,由P1.0來控制。(上圖為示意圖,省去了電阻沒畫)P1.0為地的時候,模擬系統才上電
現在怪現象如下:
模擬機正常運行,燒寫晶元後無反應。
模擬正常,說明外圍晶元完全正常,電路也沒有錯誤。
經過檢查,晶體正常,復位可靠,EA高,程序堆棧都沒有溢出,並排除其它一切低級錯誤的可能。
再編寫一程序,
main()
{
while(1) {P1.1=0;}
}
P1.1和VCC間接有一發光管,開機無反應。
後來,發現更奇怪的現象:
拔除CD4024,MC1403,ICL7135,ICL7660中的任何一個,系統就可以正常運行!
百思不得其解,茶飯不思,郁悶了N久
更換全部晶元,如故。
更換ATMEL/PHILIPS/WINBOND的N款單片機,如故。
檢查,排除電路故障的可能,
後來又發現,只要上電之前把P1.0對地短路,(也就是模擬部分強加電源),上電,系統正常運行。
但是,如果開機前P1.0不對地短路,上電一定不能運行,此後即使再把P1.0對地接,也不行。
順這個思路,應該是和模擬部分有關……
又是郁悶N久,之後,無意間翻看CD4024內部圖,茅塞頓開……
CD4024等TTL/CMOS邏輯晶元,為了防止靜電或錯誤的IO電平,內部都有保護電路
51單片機故障分析一個 - cryinrain_cug - cryinrain_cug的博客
如圖2,每個IO口都有如圖的2個二極體,集成在晶元內部。保證IO口電壓在-0.6~5.6V之間
復位的過程中,全部IO為高,P1.0和ALE當然也是高。這樣模擬部分不上電。
那麼,ALE的輸出角就等效於通過一個二極體向這四塊模擬晶元供電!!!(如圖)
ALE的輸出能力不強,自然,ALE就被拉低了。
在查看51的手冊,ALE和/PROG腳是復用的!!
在復位過程中,ALE如果為低,晶元進入編程狀態!!!
也就是說,我的系統在上電復位的過程中就進入了PROG編程模式,難怪一條語句都不能執行
那麼,也很好解釋為什麼四個晶元中拔掉一個就能正常工作了,因為負載輕了,ALE可能還沒有被拉到2.5V以下,所以正常復位進入程序。
解決的辦法:ALE接2K的上拉,再通過47K電阻接到Cd4024上,上電,一切正常!
結論:單片機編程模式/ISP模式是通過用戶很不容易出現的一個時序來啟動的,在一些特殊應用時要小心避開這些非用戶代碼模式。