2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  單片機原理及應用</b></p><p><b>  課程設計論文</b></p><p>  2009 屆 自動化 專業(yè) 0906*** 班級</p><p>  題 目 數(shù)字溫度計的設計 </p><p> 

2、 姓 名 *** 學號 *** </p><p>  指導教師 </p><p>  二О一二 年 六 月 二 日</p><p>  數(shù)字溫度計的基本原理</p><p>  數(shù)字溫度計工作的基本原理是: 采用溫度敏感元件也就是溫度傳感器(如鉑電阻,

3、熱電偶,半導體,熱敏電阻等),將溫度的變化轉換成電信號的變化,如電壓和電流的變化,溫度變化和電信號的變化有一定的關系,如線性關系,一定的曲線關系等,這個電信號可以使用模數(shù)轉換的電路即AD轉換電路將模擬信號轉換為數(shù)字信號,數(shù)字信號再送給處理單元,如單片機或者PC機等,處理單元經過內部的軟件計算將這個數(shù)字信號和溫度聯(lián)系起來,成為可以顯示出來的溫度數(shù)值</p><p>  數(shù)字溫度計根據使用的傳感器的不同,AD轉換電路

4、,及處理單元的不同,它的精度,穩(wěn)定性,測溫范圍等都有區(qū)別,這就要根據實際情況選擇符合規(guī)格的數(shù)字溫度計。</p><p><b>  二、設計方案</b></p><p>  本設計以檢測溫度并顯示溫度提供上下限報警為目的,按照系統(tǒng)設計功能的要求,確定系統(tǒng)由4個模塊組成:主控器、測溫電路,報警電路,顯示電路。</p><p>  系統(tǒng)以為傳感器用

5、以將溫度模擬量轉化為電壓數(shù)字量以總線傳入單片機,以AT89C51為主芯片,在主芯片對DS18B20傳入的溫度值進行處理,由單片機程序控制,將經處理后的溫度由LED顯示器顯示出來。</p><p>  測溫電路的總體系統(tǒng)框圖</p><p><b>  三、硬件設計</b></p><p><b>  溫度檢測</b><

6、;/p><p>  每次測溫由單片機向測溫傳感器發(fā)出特定脈沖,測溫傳感器能夠檢測到脈沖并做相應的工作。傳感器將模擬溫度信號經過采集,數(shù)字處理,放大后輸出。DS18B20使用一個單線接口發(fā)送或接受信息,因此在單片機和DS18B20之間只需要有一個模數(shù)轉換電路,把傳感器采集到的模擬信號轉化為數(shù)字信號傳遞給單片機,用于讀寫和溫度轉換的電源可以從數(shù)據線獲得,無需外接電源。</p><p>  數(shù)字信號

7、的處理及溫度顯示</p><p>  送入單片機內部的數(shù)字信號經過單片機的處理,將數(shù)據用LED顯示屏顯示出來。其處理過程主要由單片機能存儲的程序進行控制。</p><p><b>  報警功能</b></p><p>  在單片機程序內設置了報警溫度的上下限值,當所測得的溫度超過了這一數(shù)值,將會由蜂鳴器發(fā)出報警。報警功能是本系統(tǒng)的重要功能之一,

8、在工業(yè)應用中常常需要在特定的溫度條件下進行報警,當溫度超出范圍時及時的報警是十分必要的。</p><p><b>  AT89C51簡介</b></p><p>  對于單片機的選擇,可以考慮使用8031與8051系列,由于8031沒有內部RAM,系統(tǒng)又需要大量內存存儲數(shù)據,因而不適用。所以,我們選用51系列單片機AT89C51。AT89C51是美國ATMEL公司生產

9、的低功耗,高性能CMOS8位單片機,片內含4KB的可編程的Flash只讀程序存儲器,兼容標準8051指令系統(tǒng)及引腳,并集成了 Flash 程序存儲器,既可在線編程(ISP),也可用傳統(tǒng)方法進行編程,因此,低價位AT89C51單片機可應用于許多高性價比的場合,可靈活應用于各種控制領域,對于簡單的測溫系統(tǒng)已經足夠。單片機AT89C51具有低電壓供電和體積小等特點,四個端口只需要兩個口就能滿足電路系統(tǒng)的設計需要,很適合便攜手持式產品的設計使用

10、系統(tǒng)可用二節(jié)電池供電。</p><p>  AT89C51的主要特性如下:</p><p>  ①與MCS-51 兼容; </p><p>  ②4K字節(jié)可編程閃爍存儲器;</p><p> ?、廴壋绦虼鎯ζ麈i定;</p><p> ?、?28×8位內部RAM;

11、 </p><p> ?、?2根可編程I/O線;</p><p>  ⑥兩個16位定時器/計數(shù)器; </p><p><b> ?、?個中斷源;</b></p><p> ?、嗫删幊檀型ǖ?; </p><p> ?、崞瑑日袷幤骱蜁r鐘電

12、路。</p><p><b>  DS18B20簡介</b></p><p>  DS18B20是美國DALLAS半導體公司繼DS1820之后最新推出的一種改進型智能溫度傳感器。具有3引腳TO-92小體積封裝形式,測溫分辨率可達0.0625℃,被測溫度用符號擴展的16位數(shù)字量方式串行輸出。其工作電源既可在遠端引入,也可采用寄生電源方式產生。CPU只需一根端口線就能與諸

13、多DS18B20通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路。與傳統(tǒng)的熱敏電阻相比,他能夠直接讀出被測溫度并且可根據實際要求通過簡單的編程實現(xiàn)9~12位的數(shù)字值讀數(shù)方式。可以分別在93.75 ms和750 ms內完成9位和12位的數(shù)字量,并且從DS18B20讀出的信息或寫入DS18B20的信息僅需要一根口線(單線接口)讀寫,溫度變換功率來源于數(shù)據總線,總線本身也可以向所掛接的DS18B20供電,而無需額外電源。</p&

14、gt;<p>  DS18B20支持“一線總線”接口,測量溫度范圍為 -55°C~+125°C,在-10~+85°C范圍內,精度為±0.5°C?,F(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:環(huán)境控制、設備或過程控制、測溫類消費電子產品等。</p><p>  因而使用DS18B20可使系統(tǒng)結構更

15、趨簡單,可靠性更高。他在測溫精度、轉換時間、傳輸距離、分辨率等方面較DS1820有了很大的改進,給用戶帶來了更方便的使用和更令人滿意的效果。根據本設計的要求,根據多次比較和選擇,決定采用DS18B20溫度傳感器。</p><p><b>  顯示電路設計</b></p><p>  發(fā)光二極管是半導體二極管的一種,可以把電能轉化成光能,常簡寫為LED。發(fā)光二極管與普通

16、二極管一樣是由一個PN結組成,也具有單向導電性。當給發(fā)光二極管加上正向電壓后,從P區(qū)注入到N區(qū)的空穴和由N區(qū)注入到P區(qū)的電子,在PN結附近數(shù)微米內分別與N區(qū)的電子和P區(qū)的空穴復合,產生自發(fā)輻射的熒光。</p><p>  發(fā)光二極管的正向伏安特性曲線很陡,使用時必須串聯(lián)限流電阻以控制通過管子的電流。發(fā)光二極管的特點是:工作電壓很低(有的僅一點幾伏);工作電流很?。ㄓ械膬H零點幾毫安即可發(fā)光);抗沖擊和抗震性能好,可

17、靠性高,壽命長;由于有這些特點,發(fā)光二極管在一些光電控制設備中用作光源,在許多電子設備中用作信號顯示器。把它的管心做成條狀,用7條條狀的發(fā)光管組成7段式半導體數(shù)碼管,每個數(shù)碼管可顯示0~9十個數(shù)字。</p><p><b>  時鐘電路的設計</b></p><p>  本電路選石英晶振作為時鐘組件,接至AT89C51的XTAL1,XTAL2引腳組成時鐘電路。<

18、/p><p>  石英晶片所以能做振蕩電路(諧振)是基于它的壓電效應,從物理學中知道,若在晶片的兩個極板間加一電場,會使晶體產生機械變形;反之,若在極板間施加機械力,又會在相應的方向上產生電場,這種現(xiàn)象稱為壓電效應。如在極板間所加的是交變電壓,就會產生機械變形振動,同時機械變形振動又會產生交變電場。一般來說,這種機械振動的振幅是比較小的,其振動頻率則是很穩(wěn)定的。</p><p>  石英晶體振

19、蕩器是利用石英晶體的壓電效應來起振,振蕩器直接應用于電路中。</p><p><b>  蜂鳴器電路的設計</b></p><p>  目前,在許多情況下需要對環(huán)境的溫度進行限定,隨著人民生活的改善和工業(yè)的發(fā)展,安全問題變的就更加的重要。環(huán)境溫度一旦超過限定值,勢必會對所處環(huán)境的人或設備造成影響,更甚者將會給個人和社會造成巨大的損失和社會影響。因此,在某些特定環(huán)境內安

20、裝溫度報警器進行監(jiān)控也成為一種必然的需要。</p><p>  設計要求到上下限溫度限制時有聲音提醒信號產生,可選擇一只蜂鳴器來實現(xiàn)這一功能。蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,廣泛應用于電子產品中作發(fā)聲器件。電壓式蜂鳴器(HA)工作時約需10mA的驅動電流,并設計一個相應的驅動及控制電路。</p><p>  數(shù)字溫度計設計的原理圖如下:</p><

21、p><b>  四、軟件設計</b></p><p><b>  編程語言選擇:</b></p><p>  51的編程語言常用的有兩種,一種是匯編語言,一種是C語言。匯編語言的機器代碼生成效率很高但可讀性卻并不強,復雜一點的程序就更是難讀懂,而C語言在大多數(shù)情況下其機器代碼生成效率和匯編語言相當,C 語言很好的結構性和模塊化更容易閱讀和維

22、護,用C 編寫程序比匯編更符合人們的思考習慣,開發(fā)者可以更專心的考慮算法而不是考慮一些細節(jié)問題這樣就減少了開發(fā)和調試的時間,而且C語言還可以嵌入匯編來解決高時效性的代碼編寫問題。</p><p>  系統(tǒng)程序主要包括主程序,讀出溫度子程序,溫度轉換命令子程序,計算溫度子程序,顯示數(shù)據刷新子程序等。</p><p><b>  主程序的設計</b></p>

23、<p>  主程序的主要功能是負責多點溫度數(shù)據的實時采集、傳輸,處理和顯示。其程序流程圖1所示。</p><p><b>  圖2 讀溫度流程圖</b></p><p><b>  讀出溫度子程序</b></p><p>  讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時需進行CRC校驗,校驗有錯時不

24、進行溫度數(shù)據的改寫。其程序流程圖如圖2所示</p><p><b>  溫度轉換命令字程序</b></p><p>  溫度轉換命令子程序主要是發(fā)溫度轉換開始命令,當采用12位分辨率時轉換時間約為750ms,在本程序設計中采用1s顯示程序延時法等待轉換的完成。溫度轉換命令子程序流程圖如下圖,圖3所示:</p><p>  圖3溫度轉換流程圖

25、 圖4 溫度計算流程圖</p><p><b>  計算溫度子程序</b></p><p>  計算溫度子程序將RAM中讀取值進行BCD碼的轉換運算,并進行溫度值正負的判定,其程序流程圖如圖4所示</p><p><b>  溫度采集模塊設計</b></p><p>  為

26、本溫度采集系統(tǒng)開發(fā)的軟件程序,可以對DS18B20內部的寄存器編程控制DS18B20的工作方式,以及從這些數(shù)據寄存器讀取溫度值,最后把經過單片機數(shù)據處理后的溫度送到LED上顯示。AT89C51扮演著上傳下達的角色,單片機端的程序采用了C語言。</p><p>  整個軟件采用了模塊化的程序設計方法。為了實現(xiàn)AT89C51和DS18B20之間的串行通信,編寫了一些專用子程序。這些子程序段包括:符號定義、AT89C5

27、1的端口初始化、啟動信號時序產生、停止信號時序產生、發(fā)送字節(jié)、讀取字節(jié)、讀取溫度、顯示。</p><p>  系統(tǒng)電路在上電后開始工作,最先程序單片機進行初始化設置,然后單片機利用模擬I2C總線對DS18B20進行尋址。單片機在接收到DS18B20應答后,緊接著單片機利用命令(AAh、ACh、EEh、22h)將設置/狀態(tài)寄存器的值通過I2C總線寫入DS18B20狀態(tài)寄存器,該系統(tǒng)中把DS18B20設置為連續(xù)溫度轉

28、換工作方式,之后DS18B20在單片控制下進行溫度測量,然后DS18B20把所采集的溫度傳輸給單片機。</p><p><b>  主程序:</b></p><p>  #include <reg52.h></p><p>  #include "DS18B20.H"</p><p>  

29、sbit beep=P0^0;//蜂鳴器控制口</p><p>  extern unsigned int wendu;</p><p>  unsigned int H=33,L=30;</p><p>  void main(void)</p><p><b>  {</b></p><p>

30、;  unsigned int temp;</p><p>  unsigned char temp_h,temp_l;</p><p>  Delay(50000);</p><p>  Lcd_Init(); //12864初始化</p><p>  Lcd_DisplayString(0,2,"溫度檢測");<

31、/p><p>  Lcd_DisplayString(1,1,"溫度:");</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  temp=read_temp()*0.625;//讀取溫度</p><p

32、>  if(temp>H*10)//溫度高于33攝氏度則報警 //上下限報警判斷</p><p><b>  {</b></p><p><b>  beep=0;</b></p><p><b>  red_H=0;</b></p><p><b> 

33、 }</b></p><p>  else if(temp<L*10)// 溫度低于30攝氏度則報警</p><p><b>  { </b></p><p><b>  beep=0;</b></p><p>  green_L=0; </p><p>

34、<b>  }</b></p><p>  else //否則取消報警</p><p><b>  {</b></p><p><b>  beep=1;</b></p><p>  green_L=1; </p><p><b>  re

35、d_H=1;</b></p><p><b>  }</b></p><p>  Lcd_WriteCmd(0x90+0x04); // 把收到的溫度信息顯示在12864上</p><p>  Lcd_WriteData(temp/1000+0x30);</p><p>  Lcd_WriteData(te

36、mp%1000/100+0x30);</p><p>  Lcd_WriteData(temp%100/10+0x30);</p><p>  Lcd_WriteData('.');</p><p>  Lcd_WriteData(temp%10+0x30);</p><p>  Lcd_WriteData('C

37、9;);</p><p>  Delay(20000);</p><p><b>  }</b></p><p>  DS18B20測溫子程序:</p><p>  void dsreset(void) //發(fā)送DS18B20復位與初始化命令 </p><p><b>  

38、{ </b></p><p><b>  uint i; </b></p><p><b>  DS=0; </b></p><p><b>  i=103; </b></p><p>  while(i>0)i--; </p><p>

39、;<b>  DS=1; </b></p><p><b>  i=4; </b></p><p>  while(i>0)i--; </p><p><b>  } </b></p><p>  bit tmpreadbit(void) //讀一位數(shù)據 &l

40、t;/p><p><b>  { </b></p><p><b>  uint i; </b></p><p><b>  bit dat; </b></p><p>  DS=0;i++; //i++用于延時 </p><p>  DS

41、=1;i++;i++; </p><p><b>  dat=DS; </b></p><p>  i=8;while(i>0)i--; </p><p>  return (dat); </p><p><b>  } </b></p><p>  uchar tm

42、pread(void) //讀一字節(jié)數(shù)據 </p><p><b>  { </b></p><p>  uchar i,j,dat; </p><p><b>  dat=0; </b></p><p>  for(i=1;i<=8;i++) </p><p>&

43、lt;b>  { </b></p><p>  j=tmpreadbit(); </p><p>  dat=(j<<7)|(dat>>1); //讀出的數(shù)據最低位在最前面,這樣剛好一個字節(jié)在</p><p><b>  DAT里 </b></p><p><b>

44、  } </b></p><p>  return(dat); </p><p><b>  } </b></p><p>  void tmpwritebyte(uchar dat) //寫一字節(jié)到DS18B20 </p><p><b>  { </b></p>

45、<p>  uint i; uchar j; </p><p>  bit testb; for(j=1;j<=8;j++) </p><p><b>  { </b></p><p>  testb=dat&0x01; </p><p>  dat=dat>>1; &

46、lt;/p><p>  if(testb) //寫1 </p><p><b>  { </b></p><p><b>  DS=0; </b></p><p><b>  i++;i++; </b></p><p><b>  DS=1

47、; </b></p><p>  i=8;while(i>0)i--; </p><p><b>  } </b></p><p><b>  else </b></p><p><b>  { </b></p><p>  DS=0;

48、 //寫0 </p><p>  i=8;while(i>0)i--; DS=1; i++;i++; </p><p><b>  } </b></p><p><b>  } } </b></p><p>  void tmpchange(void)

49、 //DS18B20 開始轉換 </p><p><b>  { </b></p><p>  dsreset(); </p><p>  delay(1); </p><p>  tmpwritebyte(0xcc); // 尋址總線上所有的驅動器 </p><p>  tmpwrite

50、byte(0x44); // 開始單個溫度轉化} </p><p>  uint tmp() //獲取溫度子程序 </p><p><b>  { </b></p><p>  float tt; </p><p>  uchar a,b; </p><p>  d

51、sreset(); </p><p>  delay(1); </p><p>  tmpwritebyte(0xcc); </p><p>  tmpwritebyte(0xbe); </p><p>  a=tmpread(); </p><p>  b=tmpread(); </p><p&

52、gt;<b>  temp=b; </b></p><p>  temp<<=8; //兩字節(jié)組成一個整型變量 temp=temp|a; tt=temp*0.0625; </p><p>  temp=tt*10+0.5; </p><p>  return temp; </p>&

53、lt;p><b>  } </b></p><p>  void readrom() //讀序列 </p><p><b>  { </b></p><p>  uchar sn1,sn2; </p><p>  dsreset(); </p><p>

54、;  delay(1); </p><p>  tmpwritebyte(0x33); </p><p>  sn1=tmpread(); </p><p>  sn2=tmpread(); </p><p><b>  } </b></p><p><b>  五、結論:</b&

55、gt;</p><p>  數(shù)字溫度計是一個用途非常廣泛的電路,在很多地方都可以看到他們的身影,如:工農業(yè)生產、科研、生活中。</p><p>  本文采用AT89C51單片機做主控芯片,利用溫度傳感器DS18B20測量溫度,并配上相應的外部接口電路,介紹了一款簡易數(shù)字溫度計的設計制作過程。該溫度計與系統(tǒng)實現(xiàn)簡單、功能穩(wěn)定、使用方便,適用于人們日常生活和工、農業(yè)生產中的各種溫度測量。<

56、;/p><p><b>  參考文獻:</b></p><p>  1、程琤,單片機與應用系統(tǒng)開發(fā)</p><p>  2、譚浩強,C程序設計</p><p>  3、康華光,電子技術基礎—模擬部分</p><p>  4、康華光,電子技術基礎—數(shù)字部分</p><p>  5

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論