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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  目錄</b></p><p><b>  1 概緒1</b></p><p>  1.1 溫度控制系統(tǒng)設(shè)計(jì)的背景、發(fā)展歷史及意義1</p><p>  1.2 溫度控制系統(tǒng)的目的1</p><p>  1.3 溫度控制系統(tǒng)完成的功能1</p>&l

2、t;p>  2 單片機(jī)人機(jī)接口系統(tǒng)的軟件設(shè)計(jì)1</p><p>  2.1四位數(shù)碼管動(dòng)態(tài)顯示和任意浮點(diǎn)數(shù)顯示2</p><p>  2.2輸入?yún)?shù)合成、計(jì)時(shí)器程序以及串口通訊程序等7</p><p>  3 DS18B20溫度傳感器簡(jiǎn)介8</p><p>  3.1 DS18B20的工作原理8</p><p

3、>  3.2 DS18B20的驅(qū)動(dòng)程序10</p><p>  4 溫度控制模塊設(shè)計(jì)11</p><p>  4.1 光電隔離控制電路的設(shè)計(jì)11</p><p>  4.2 風(fēng)扇PWM驅(qū)動(dòng)程序11</p><p>  4.3 制冷片的控制以及程序設(shè)計(jì)13</p><p>  5 溫度測(cè)量試驗(yàn)與分析1

4、7</p><p>  5.1 溫度測(cè)量實(shí)驗(yàn)17</p><p>  5.2 數(shù)據(jù)處理與誤差分析(最大的引用誤差)17</p><p>  6 溫度控制試驗(yàn)與分析18</p><p><b>  6.1升溫18</b></p><p><b>  6.2 降溫18</b

5、></p><p><b>  6.3 恒溫18</b></p><p><b>  7 總結(jié)19</b></p><p><b>  考文獻(xiàn)參20</b></p><p><b>  1 概緒</b></p><p>

6、  1.1 溫度控制系統(tǒng)設(shè)計(jì)的背景、發(fā)展歷史及意義 </p><p>  溫度是生產(chǎn)過程和科學(xué)實(shí)驗(yàn)中普遍而且重要的物理參數(shù),隨著社會(huì)的發(fā)展,科技的進(jìn)步,以及測(cè)溫儀器在各個(gè)領(lǐng)域的應(yīng)用,智能化已是現(xiàn)代溫度控制系統(tǒng)發(fā)展的主流方向。特別是近年來,溫度控制系統(tǒng)已應(yīng)用到人們生活的各個(gè)方面,但溫度控制一直是一個(gè)未開發(fā)的領(lǐng)域,卻又是與人們息息相關(guān)的一個(gè)實(shí)際問題。針對(duì)這種實(shí)際情況,設(shè)計(jì)一個(gè)溫度控制系統(tǒng),具有廣泛的應(yīng)用前景與實(shí)際意義

7、。</p><p>  溫度是一個(gè)重要的物理量,它反映了物體冷熱的程度,與自然界中的各種物理和化學(xué)過程相聯(lián)系。在工、農(nóng)業(yè)生產(chǎn)和日常生活中,各個(gè)環(huán)節(jié)都與溫度緊密相聯(lián),溫度的準(zhǔn)確監(jiān)測(cè)及控制占據(jù)著極其重要地位。比如,發(fā)電廠鍋爐的溫度必須控制在一定的范圍之內(nèi);許多化學(xué)反應(yīng)的工藝過程必須在適當(dāng)?shù)臏囟认虏拍苷_M(jìn)行等。沒有合適的溫度環(huán)境,許多電子設(shè)備就不能正常工作,糧倉的儲(chǔ)糧就會(huì)變質(zhì)霉?fàn)€,酒類的品質(zhì)就沒有保障。可見,溫度的測(cè)

8、量和控制是非常重要的。</p><p>  隨著電子技術(shù)和微型計(jì)算機(jī)的迅速發(fā)展,單片機(jī)在電子產(chǎn)品中的應(yīng)用已經(jīng)越來越廣泛。利用單片機(jī)對(duì)溫度進(jìn)行控制的技術(shù)也隨之而生,并日益發(fā)展和完善,且越來越顯示出它的優(yōu)越性。</p><p>  1.2 溫度控制系統(tǒng)的目的</p><p>  本設(shè)計(jì)的內(nèi)容是溫度測(cè)試控制系統(tǒng),控制對(duì)象是溫度。溫度控制在日常生活及工業(yè)領(lǐng)域應(yīng)用相當(dāng)廣泛,比

9、如溫室、水池、發(fā)酵缸、電源等場(chǎng)所的溫度控制。而以往溫度控制是由人工完成的而且不夠重視,其實(shí)在很多場(chǎng)所溫度都需要監(jiān)控以防止發(fā)生意外。針對(duì)此問題,本系統(tǒng)設(shè)計(jì)的目的是實(shí)現(xiàn)一種可連續(xù)高精度調(diào)溫的溫度控制系統(tǒng),它應(yīng)用廣泛,功能強(qiáng)大,小巧美觀,便于攜帶,是一款既實(shí)用又廉價(jià)的控制系統(tǒng)。</p><p>  1.3 溫度控制系統(tǒng)完成的功能</p><p>  本設(shè)計(jì)是對(duì)溫度進(jìn)行實(shí)時(shí)監(jiān)測(cè)與控制,設(shè)計(jì)的溫度控

10、制系統(tǒng)實(shí)現(xiàn)了基本的溫度控制功能:當(dāng)溫度低于設(shè)定下限溫度時(shí),系統(tǒng)自動(dòng)啟動(dòng)加熱繼電器加溫,使溫度上升,同時(shí)綠燈亮。當(dāng)溫度上升到下限溫度以上時(shí),停止加溫;當(dāng)溫度高于設(shè)定上限溫度時(shí),系統(tǒng)自動(dòng)啟動(dòng)風(fēng)扇降溫,使溫度下降,同時(shí)紅燈亮。當(dāng)溫度下降到上限溫度以下時(shí),停止降溫。溫度在上下限溫度之間時(shí),執(zhí)行機(jī)構(gòu)不執(zhí)行。三個(gè)數(shù)碼管即時(shí)顯示溫度,精確到小數(shù)點(diǎn)一位。</p><p>  2 單片機(jī)人機(jī)接口系統(tǒng)的軟件設(shè)計(jì)</p>

11、<p>  軟件設(shè)計(jì)主要包括鍵盤掃描程序、四位數(shù)碼管動(dòng)態(tài)顯示程序、任意浮點(diǎn)數(shù)顯示程序、輸入?yún)?shù)合成、計(jì)時(shí)器程序以及串口通訊程序等。</p><p>  2.1四位數(shù)碼管動(dòng)態(tài)顯示和任意浮點(diǎn)數(shù)顯示</p><p>  #include <reg52.h></p><p>  #define uchar unsigned char</p>

12、;<p>  #define uint unsigned int</p><p>  sbit DS=P2^2; //define interface</p><p>  sbit dula=P2^6;</p><p>  sbit wela=P2^7;</p><p>  sbit li=P3^1;<

13、/p><p>  sbit wai=P3^0;</p><p>  sbit hot=P3^2; </p><p>  sbit up=P3^4;</p><p>  sbit down=P3^5;</p><p>  unsigned char code table[]={0x3f,0x06,0x5b,0x4f

14、,0x66,0x6d,0x7d,</p><p>  0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};</p><p>  unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,</p><p>  0x87,0xff,0xef};</p>

15、;<p>  uint temp; // variable of temperature</p><p>  uint aa=0,bb=0,cc,dd,ee;</p><p>  void delay(uint count) //delay</p><p><b>  {</b></p>

16、;<p><b>  uint i;</b></p><p>  while(count)</p><p><b>  {</b></p><p><b>  i=200;</b></p><p>  while(i>0)</p><p&

17、gt;<b>  i--;</b></p><p><b>  count--;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void dsreset(void) //send r

18、eset and initialization command</p><p><b>  {</b></p><p><b>  uint i;</b></p><p><b>  DS=0;</b></p><p><b>  i=103;</b>&l

19、t;/p><p>  while(i>0)i--;</p><p><b>  DS=1;</b></p><p><b>  i=4;</b></p><p>  while(i>0)i--;</p><p><b>  }</b></p

20、><p>  bit tmpreadbit(void) //read a bit</p><p><b>  {</b></p><p><b>  uint i;</b></p><p><b>  bit dat;</b></p><p> 

21、 DS=0;i++; //i++ for delay</p><p>  DS=1;i++;i++;</p><p><b>  dat=DS;</b></p><p>  i=8;while(i>0)i--;</p><p>  return (dat);</p><p>

22、;<b>  }</b></p><p>  uchar tmpread(void) //read a byte date</p><p><b>  {</b></p><p>  uchar i,j,dat;</p><p><b>  dat=0;</b></p

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

24、p><b>  }</b></p><p>  return(dat);</p><p><b>  }</b></p><p>  void tmpwritebyte(uchar dat) //write a byte to ds18b20</p><p><b>  {<

25、;/b></p><p><b>  uint i;</b></p><p><b>  uchar j;</b></p><p>  bit testb;</p><p>  for(j=1;j<=8;j++)</p><p><b>  {</

26、b></p><p>  testb=dat&0x01;</p><p>  dat=dat>>1;</p><p>  if(testb) //write 1</p><p><b>  {</b></p><p><b>  DS=0;</b&

27、gt;</p><p><b>  i++;i++;</b></p><p><b>  DS=1;</b></p><p>  i=8;while(i>0)i--;</p><p><b>  }</b></p><p><b>  e

28、lse</b></p><p><b>  {</b></p><p>  DS=0; //write 0</p><p>  i=8;while(i>0)i--;</p><p><b>  DS=1;</b></p><p><b>

29、;  i++;i++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void tmpchange(void) //DS18B20 begin change<

30、;/p><p><b>  {</b></p><p>  dsreset();</p><p><b>  delay(1);</b></p><p>  tmpwritebyte(0xcc); // address all drivers on bus</p><p>  

31、tmpwritebyte(0x44); // initiates a single temperature conversion</p><p><b>  }</b></p><p>  uint tmp() //get the temperature</p><p><b>  {</b>

32、;</p><p><b>  float tt;</b></p><p>  uchar a,b;</p><p>  dsreset();</p><p><b>  delay(1);</b></p><p>  tmpwritebyte(0xcc);</p>

33、;<p>  tmpwritebyte(0xbe);</p><p>  a=tmpread();</p><p>  b=tmpread();</p><p><b>  temp=b;</b></p><p>  temp<<=8; //two byte compo

34、se a int variable</p><p>  temp=temp|a;</p><p>  tt=temp*0.0625;</p><p>  temp=tt*10+0.5;</p><p>  return temp;</p><p><b>  }</b></p>&l

35、t;p>  void readrom() //read the serial</p><p><b>  {</b></p><p>  uchar sn1,sn2;</p><p>  dsreset();</p><p><b>  delay(1);</b></p

36、><p>  tmpwritebyte(0x33);</p><p>  sn1=tmpread();</p><p>  sn2=tmpread();</p><p><b>  }</b></p><p>  void delay10ms() //delay</p>

37、;<p><b>  {</b></p><p>  uchar a,b;</p><p>  for(a=10;a>0;a--)</p><p>  for(b=60;b>0;b--);</p><p><b>  }</b></p><p>  

38、void display(uint temp)//顯示程序</p><p><b>  {</b></p><p>  uchar A1,A2,A2t,A3,ser;</p><p>  ser=temp/10;</p><p><b>  SBUF=ser;</b></p>&

39、lt;p>  A1=temp/100;</p><p>  A2t=temp%100;</p><p>  A2=A2t/10;</p><p>  A3=A2t%10;</p><p><b>  dula=0;</b></p><p>  P0=table[A1];//顯示百位<

40、;/p><p><b>  dula=1;</b></p><p><b>  dula=0;</b></p><p><b>  wela=0;</b></p><p><b>  P0=0x7e;</b></p><p><b

41、>  wela=1;</b></p><p><b>  wela=0;</b></p><p><b>  delay(1);</b></p><p><b>  dula=0;</b></p><p>  P0=table1[A2];//顯示十位<

42、;/p><p><b>  dula=1;</b></p><p><b>  dula=0;</b></p><p><b>  wela=0;</b></p><p><b>  P0=0x7d;</b></p><p><b

43、>  wela=1;</b></p><p><b>  wela=0;</b></p><p><b>  delay(1);</b></p><p>  P0=table[A3];//顯示個(gè)位</p><p><b>  dula=1;</b><

44、/p><p><b>  dula=0;</b></p><p><b>  P0=0x7b;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><p><b&

45、gt;  delay(1);</b></p><p><b>  }</b></p><p>  void xianshi(uint temp1)</p><p><b>  {</b></p><p>  uint A5,A6; </p><p>  A5=te

46、mp1/10;</p><p>  A6=temp1%10;</p><p>  P0=table[A5];</p><p><b>  dula=1;</b></p><p><b>  dula=0;</b></p><p><b>  P0=0xef;<

47、;/b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><p><b>  delay(1);</b></p><p>  P0=table[A6];</p><p><b

48、>  dula=1;</b></p><p><b>  dula=0;</b></p><p><b>  P0=0xdf;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b>

49、</p><p><b>  delay(1);</b></p><p><b>  }</b></p><p>  void keyscan()</p><p><b>  {</b></p><p><b>  if(up==0)</

50、b></p><p><b>  {</b></p><p>  delay(10);</p><p><b>  if(up==0)</b></p><p><b>  {</b></p><p><b>  aa++;</b&g

51、t;</p><p>  if(aa==50)</p><p><b>  {</b></p><p><b>  aa=0;</b></p><p><b>  }</b></p><p><b>  }</b></p>

52、;<p><b>  }</b></p><p>  if(down==0)</p><p><b>  {</b></p><p>  delay(10);</p><p>  if(down==0)</p><p><b>  {</b>

53、;</p><p><b>  if(aa==0)</b></p><p><b>  {</b></p><p><b>  aa=50;</b></p><p><b>  }</b></p><p><b>  aa

54、--;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  2.2輸入?yún)?shù)合成、計(jì)時(shí)器程序以及串口通訊程序等</p><p>  void main()</p><p><b>  uchar a

55、;</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  keyscan();</p><p>  tmpchange();</p><p><b>  bb=tmp();</b&

56、gt;</p><p><b>  bb=bb/10;</b></p><p><b>  cc=aa-1;</b></p><p><b>  dd=aa+1;</b></p><p>  if(bb>cc&&bb<dd)</p>&

57、lt;p><b>  {</b></p><p>  for(a=10;a>0;a--)</p><p><b>  { </b></p><p>  xianshi(aa);</p><p>  display(tmp());</p><p><b>

58、;  P1=0x00;</b></p><p><b>  li=1;</b></p><p><b>  wai=1;</b></p><p><b>  hot=1;</b></p><p><b>  }</b></p>&

59、lt;p>  else if(bb>dd)</p><p><b>  {</b></p><p>  for(a=10;a>0;a--)</p><p><b>  { </b></p><p>  xianshi(aa);</p><p>  disp

60、lay(tmp());</p><p><b>  P1=0xff;</b></p><p><b>  li=0;</b></p><p><b>  wai=1;</b></p><p><b>  hot=1;</b></p><

61、p><b>  }</b></p><p><b>  }</b></p><p>  else if(bb<cc)</p><p><b>  {</b></p><p>  for(a=10;a>0;a--)</p><p><

62、;b>  { </b></p><p>  xianshi(aa);</p><p>  display(tmp());</p><p><b>  P1=0xff;</b></p><p><b>  li=0;</b></p><p><b>

63、;  wai=1;</b></p><p><b>  hot=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  3 DS18B20溫度傳感器簡(jiǎn)介</p><p>  3.1 D

64、S18B20的工作原理</p><p>  DS18B20工作時(shí)序</p><p>  根據(jù)DS18B20的通訊協(xié)議,主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個(gè)步驟:</p><p>  1. 每一次讀寫之前都必須要對(duì)DS18B20進(jìn)行復(fù)位;</p><p>  2. 復(fù)位成功后發(fā)送一條ROM指令;</p><p>

65、;  3. 最后發(fā)送RAM指令,這樣才能對(duì)DS18B20進(jìn)行預(yù)定的操作。</p><p>  復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,DS18B20收到信號(hào)后等待15~60微秒左右后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號(hào)表示復(fù)位成功。其工作時(shí)序包括初始化時(shí)序、寫時(shí)序和讀時(shí)序,具體工作方法如圖2.1,2.2,2.3所示。</p><p><b>  (1)

66、初始化時(shí)序</b></p><p>  圖3-1 初始化時(shí)序</p><p>  總線上的所有傳輸過程都是以初始化開始的,主機(jī)響應(yīng)應(yīng)答脈沖。應(yīng)答脈沖使主機(jī)知道,總線上有從機(jī)設(shè)備,且準(zhǔn)備就緒。主機(jī)輸出低電平,保持低電平時(shí)間至少480us,以產(chǎn)生復(fù)位脈沖。接著主機(jī)釋放總線,4.7KΩ上拉電阻將總線拉高,延時(shí)15~60us,并進(jìn)入接受模式,以產(chǎn)生低電平應(yīng)答脈沖,若為低電平,再延時(shí)48

67、0us[12]。</p><p><b>  (2) 寫時(shí)序</b></p><p><b>  圖3-2 寫時(shí)序</b></p><p>  寫時(shí)序包括寫0時(shí)序和寫1時(shí)序。所有寫時(shí)序至少需要60us,且在2次獨(dú)立的寫時(shí)序之間至少需要1us的恢復(fù)時(shí)間,都是以總線拉低開始。寫1時(shí)序,主機(jī)輸出低電平,延時(shí)2us,然后釋放總線,

68、延時(shí)60us。寫0時(shí)序,主機(jī)輸出低電平,延時(shí)60us,然后釋放總線,延時(shí)2us[8]。</p><p><b>  (3) 讀時(shí)序</b></p><p><b>  圖3-3 讀時(shí)序</b></p><p>  總線器件僅在主機(jī)發(fā)出讀時(shí)序是,才向主機(jī)傳輸數(shù)據(jù),所以,在主機(jī)發(fā)出讀數(shù)據(jù)命令后,必須馬上產(chǎn)生讀時(shí)序,以便從機(jī)能夠

69、傳輸數(shù)據(jù)。所有讀時(shí)序至少需要60us,且在2次獨(dú)立的讀時(shí)序之間至少需要1us的恢復(fù)時(shí)間。每個(gè)讀時(shí)序都由主機(jī)發(fā)起,至少拉低總線1us。主機(jī)在讀時(shí)序期間必須釋放總線,并且在時(shí)序起始后的15us之內(nèi)采樣總線狀態(tài)。主機(jī)輸出低電平延時(shí)2us,然后主機(jī)轉(zhuǎn)入輸入模式延時(shí)12us,然后讀取總線當(dāng)前電平,然后延時(shí)50us[4]</p><p><b>  ROM操作命令</b></p><

70、p>  當(dāng)主機(jī)收到DSl8B20 的響應(yīng)信號(hào)后,便可以發(fā)出ROM 操作命令之一,這些命令如表2.2:ROM操作命令。</p><p>  3.2 DS18B20的驅(qū)動(dòng)程序</p><p>  unsigned char ReadOneChar(void)</p><p>  { u

71、nsigned char i=0;</p><p>  unsigned char dat; //儲(chǔ)存讀出的一個(gè)字節(jié)數(shù)據(jù)</p><p>  for (i=0;i<8;i++)</p><p>  {DQ =1; // 先將數(shù)據(jù)線拉高</p><p>  _nop_(); //等待一個(gè)機(jī)器周期 </p&g

72、t;<p>  DQ = 0; //單片機(jī)從DS18B20讀書據(jù)時(shí),將數(shù)據(jù)線從高拉低即啟動(dòng)讀時(shí)序</p><p>  _nop_(); //等待一個(gè)機(jī)器周期 </p><p>  DQ = 1; //將數(shù)據(jù)線"人為"拉高,為單片機(jī)檢測(cè)DS18B20的輸出電平作準(zhǔn)備</p><p>  for(tim

73、e=0;time<2;time++) ; //延時(shí)約6us,使主機(jī)在15us內(nèi)采樣</p><p><b>  dat>>=1;</b></p><p><b>  if(DQ==1)</b></p><p>  dat|=0x80; //如果讀到的數(shù)據(jù)是1,則將1存入dat </p&

74、gt;<p><b>  else</b></p><p>  dat|=0x00;//如果讀到的數(shù)據(jù)是0,則將0存入dat </p><p>  for(time=0;time<8;time++); //延時(shí)3us,兩個(gè)讀時(shí)序之間必須有大于1us的恢復(fù)期</p><p>  }

75、</p><p>  return(dat); //返回讀出的十六進(jìn)制數(shù)據(jù)</p><p><b>  }</b></p><p>  WriteOneChar(unsigned char dat)</p><p>  { unsigned char i=0;</p>

76、<p>  for (i=0; i<8; i++)</p><p><b>  {</b></p><p>  DQ =1; // 先將數(shù)據(jù)線拉高</p><p>  _nop_(); //等待一個(gè)機(jī)器周期 </p><p>  DQ=0; //將數(shù)據(jù)線從高

77、拉低時(shí)即啟動(dòng)寫時(shí)序 </p><p>  DQ=dat&0x01; //利用與運(yùn)算取出要寫的某位二進(jìn)制數(shù)據(jù),</p><p>  //并將其送到數(shù)據(jù)線上等待DS18B20采樣</p><p>  for(time=0;time<10;time++)</p><p>  ;//延時(shí)約30us,DS18B20在拉

78、低后的約15~60us期間從數(shù)據(jù)線上采樣</p><p>  DQ=1; //釋放數(shù)據(jù)線 </p><p>  for(time=0;time<1;time++)</p><p>  ;//延時(shí)3us,兩個(gè)寫時(shí)序間至少需要1us的恢復(fù)期</p><p>  dat>>=1; //將da

79、t中的各二進(jìn)制位數(shù)據(jù)右移1位</p><p><b>  }</b></p><p>  for(time=0;time<4;time++)</p><p>  ; //稍作延時(shí),給硬件一點(diǎn)反應(yīng)時(shí)間</p><p><b>  }</b></p><p><b&g

80、t;  * 總結(jié)</b></p><p>  單總線即只有一根數(shù)據(jù)線,系統(tǒng)中的數(shù)據(jù)交換,控制都由這根線完成。</p><p>  單總線通常要求外接一個(gè)約為 4.7K—10K 的上拉電阻,這樣,當(dāng)總線閑置時(shí)其狀態(tài)為高電平。</p><p>  4 溫度控制模塊設(shè)計(jì)</p><p>  4.1 光電隔離控制電路的設(shè)計(jì)</p&g

81、t;<p>  4.2 風(fēng)扇PWM驅(qū)動(dòng)程序</p><p>  void keyscan()</p><p><b>  {</b></p><p><b>  if(up==0)</b></p><p><b>  {</b></p><p&

82、gt;  delay(10);</p><p><b>  if(up==0)</b></p><p><b>  {</b></p><p><b>  aa++;</b></p><p>  if(aa==50)</p><p><b> 

83、 {</b></p><p><b>  aa=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(down==

84、0)</p><p><b>  {</b></p><p>  delay(10);</p><p>  if(down==0)</p><p><b>  {</b></p><p><b>  if(aa==0)</b></p>&l

85、t;p><b>  {</b></p><p><b>  aa=50;</b></p><p><b>  }</b></p><p><b>  aa--;</b></p><p><b>  }</b></p>

86、<p><b>  }</b></p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p><b>  uchar a;</b></p><p

87、><b>  while(1)</b></p><p><b>  {</b></p><p>  keyscan();</p><p>  tmpchange();</p><p><b>  bb=tmp();</b></p><p><

88、b>  bb=bb/10;</b></p><p><b>  cc=aa-1;</b></p><p><b>  dd=aa+1;</b></p><p>  if(bb>cc&&bb<dd)</p><p><b>  {</b&g

89、t;</p><p>  for(a=10;a>0;a--)</p><p><b>  { </b></p><p>  xianshi(aa);</p><p>  display(tmp());</p><p><b>  P1=0x00;</b></p&

90、gt;<p><b>  li=1;</b></p><p><b>  wai=1;</b></p><p><b>  hot=1;</b></p><p><b>  }</b></p><p><b>  }</b&g

91、t;</p><p>  else if(bb>dd)</p><p><b>  {</b></p><p>  for(a=10;a>0;a--)</p><p><b>  { </b></p><p>  xianshi(aa);</p>

92、<p>  display(tmp());</p><p><b>  P1=0xff;</b></p><p><b>  li=0;</b></p><p><b>  wai=1;</b></p><p><b>  hot=1;</b>&

93、lt;/p><p><b>  }</b></p><p><b>  }</b></p><p>  else if(bb<cc)</p><p><b>  {</b></p><p>  for(a=10;a>0;a--)</p>

94、;<p><b>  { </b></p><p>  xianshi(aa);</p><p>  display(tmp());</p><p><b>  P1=0xff;</b></p><p><b>  li=0;</b></p>&l

95、t;p><b>  wai=1;</b></p><p><b>  hot=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p&g

96、t;<p><b>  }</b></p><p>  4.3 制冷片的控制以及程序設(shè)計(jì)</p><p>  #include <reg52.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int&

97、lt;/p><p>  sbit DS=P2^2; //define interface</p><p>  sbit dula=P2^6;</p><p>  sbit wela=P2^7;</p><p>  sbit li=P3^1;</p><p>  sbit wai=P3^0;</p&

98、gt;<p>  sbit hot=P3^2; </p><p>  sbit up=P3^4;</p><p>  sbit down=P3^5;</p><p>  unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,</p><p>  0

99、x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};</p><p>  unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,</p><p>  0x87,0xff,0xef};</p><p>  uint temp; //

100、variable of temperature</p><p>  uint aa=0,bb=0,cc,dd,ee;</p><p>  void delay(uint count) //delay</p><p><b>  {</b></p><p><b>  uint i;</b>

101、</p><p>  while(count)</p><p><b>  {</b></p><p><b>  i=200;</b></p><p>  while(i>0)</p><p><b>  i--;</b></p>

102、<p><b>  count--;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void dsreset(void) //send reset and initialization command</p>

103、;<p><b>  {</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--;&l

104、t;/p><p><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)

105、 //read a bit</p><p><b>  {</b></p><p><b>  uint i;</b></p><p><b>  bit dat;</b></p><p>  DS=0;i++; //i++ for delay</

106、p><p>  DS=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

107、>  uchar tmpread(void) //read a byte date</p><p><b>  {</b></p><p>  uchar i,j,dat;</p><p><b>  dat=0;</b></p><p>  for(i=1;i<=8;i++)<

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

109、lt;p>  return(dat);</p><p><b>  }</b></p><p>  void tmpwritebyte(uchar dat) //write a byte to ds18b20</p><p><b>  {</b></p><p><b>  u

110、int i;</b></p><p><b>  uchar j;</b></p><p>  bit testb;</p><p>  for(j=1;j<=8;j++)</p><p><b>  {</b></p><p>  testb=dat&am

111、p;0x01;</p><p>  dat=dat>>1;</p><p>  if(testb) //write 1</p><p><b>  {</b></p><p><b>  DS=0;</b></p><p><b>  i++;i

112、++;</b></p><p><b>  DS=1;</b></p><p>  i=8;while(i>0)i--;</p><p><b>  }</b></p><p><b>  else</b></p><p><b&

113、gt;  {</b></p><p>  DS=0; //write 0</p><p>  i=8;while(i>0)i--;</p><p><b>  DS=1;</b></p><p><b>  i++;i++;</b></p><p&g

114、t;<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void tmpchange(void) //DS18B20 begin change</p><p><b>  {</b>

115、</p><p>  dsreset();</p><p><b>  delay(1);</b></p><p>  tmpwritebyte(0xcc); // address all drivers on bus</p><p>  tmpwritebyte(0x44); // initiates a sin

116、gle temperature conversion</p><p><b>  }</b></p><p>  uint tmp() //get the temperature</p><p><b>  {</b></p><p><b>  float t

117、t;</b></p><p>  uchar a,b;</p><p>  dsreset();</p><p><b>  delay(1);</b></p><p>  tmpwritebyte(0xcc);</p><p>  tmpwritebyte(0xbe);</p&

118、gt;<p>  a=tmpread();</p><p>  b=tmpread();</p><p><b>  temp=b;</b></p><p>  temp<<=8; //two byte compose a int variable</p><p>  

119、temp=temp|a;</p><p>  tt=temp*0.0625;</p><p>  temp=tt*10+0.5;</p><p>  return temp;</p><p><b>  }</b></p><p>  void readrom() //read

120、the serial</p><p><b>  {</b></p><p>  uchar sn1,sn2;</p><p>  dsreset();</p><p><b>  delay(1);</b></p><p>  tmpwritebyte(0x33);<

121、/p><p>  sn1=tmpread();</p><p>  sn2=tmpread();</p><p><b>  }</b></p><p>  void delay10ms() //delay</p><p><b>  {</b></p

122、><p>  uchar a,b;</p><p>  for(a=10;a>0;a--)</p><p>  for(b=60;b>0;b--);</p><p><b>  }</b></p><p>  void display(uint temp)//顯示程序</p&g

123、t;<p><b>  {</b></p><p>  uchar A1,A2,A2t,A3,ser;</p><p>  ser=temp/10;</p><p><b>  SBUF=ser;</b></p><p>  A1=temp/100;</p><p&

124、gt;  A2t=temp%100;</p><p>  A2=A2t/10;</p><p>  A3=A2t%10;</p><p><b>  dula=0;</b></p><p>  P0=table[A1];//顯示百位</p><p><b>  dula=1;<

125、/b></p><p><b>  dula=0;</b></p><p><b>  wela=0;</b></p><p><b>  P0=0x7e;</b></p><p><b>  wela=1;</b></p><p

126、><b>  wela=0;</b></p><p><b>  delay(1);</b></p><p><b>  dula=0;</b></p><p>  P0=table1[A2];//顯示十位</p><p><b>  dula=1;<

127、/b></p><p><b>  dula=0;</b></p><p><b>  wela=0;</b></p><p><b>  P0=0x7d;</b></p><p><b>  wela=1;</b></p><p

128、><b>  wela=0;</b></p><p><b>  delay(1);</b></p><p>  P0=table[A3];//顯示個(gè)位</p><p><b>  dula=1;</b></p><p><b>  dula=0;</

129、b></p><p><b>  P0=0x7b;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><p><b>  delay(1);</b></p><

130、p><b>  }</b></p><p>  void xianshi(uint temp1)</p><p><b>  {</b></p><p>  uint A5,A6; </p><p>  A5=temp1/10;</p><p>  A6=temp1%1

131、0;</p><p>  P0=table[A5];</p><p><b>  dula=1;</b></p><p><b>  dula=0;</b></p><p><b>  P0=0xef;</b></p><p><b>  w

132、ela=1;</b></p><p><b>  wela=0;</b></p><p><b>  delay(1);</b></p><p>  P0=table[A6];</p><p><b>  dula=1;</b></p><p

133、><b>  dula=0;</b></p><p><b>  P0=0xdf;</b></p><p><b>  wela=1;</b></p><p><b>  wela=0;</b></p><p><b>  delay(1)

134、;</b></p><p><b>  }</b></p><p>  5 溫度測(cè)量試驗(yàn)與分析</p><p>  5.1 溫度測(cè)量實(shí)驗(yàn)</p><p>  5.2 數(shù)據(jù)處理與誤差分析(最大的引用誤差)</p><p>  被測(cè)量的真值和試驗(yàn)所得的給出值總存在一定的差異,這就是測(cè)量誤

135、差。而誤差的存在使我們對(duì)客觀事物的認(rèn)識(shí)受到不同程度的歪曲,因此就必須進(jìn)行誤差分析。</p><p>  另一方面,一般原始的測(cè)試技術(shù)都是參差不齊的,需運(yùn)用數(shù)學(xué)方法加以精選、加工,以求獲得可靠、真正反映事物內(nèi)在本質(zhì)的結(jié)論,這就是要進(jìn)行數(shù)據(jù)處理。</p><p>  誤差分析和數(shù)據(jù)處理是判斷科學(xué)實(shí)驗(yàn)和科學(xué)測(cè)試結(jié)果質(zhì)量和水平的主要手段。</p><p>  6 溫度控制

136、試驗(yàn)與分析</p><p><b>  6.1升溫</b></p><p><b>  溫度測(cè)量數(shù)值表</b></p><p><b>  6.2 降溫</b></p><p><b>  溫度測(cè)量數(shù)值表</b></p><p>&

137、lt;b>  6.3 恒溫</b></p><p>  表3 溫度控制性能數(shù)據(jù)表</p><p>  控制溫度值: 35 、 時(shí)間:10分鐘</p><p><b>  7 總結(jié)</b></p><p>  

138、經(jīng)過這兩周的努力,實(shí)習(xí)終于完成了,這次實(shí)踐我受益匪淺。在摸索該如何設(shè)計(jì)電路使之實(shí)現(xiàn)所需功能的過程中,特別有趣,培養(yǎng)了我的設(shè)計(jì)思維,增加了實(shí)際操作能力。在讓我體會(huì)到了設(shè)計(jì)電路的艱辛的同時(shí),更讓我體會(huì)到成功的喜悅和快樂。通過這次設(shè)計(jì)真的讓我長(zhǎng)進(jìn)了很多,單片機(jī)課程設(shè)計(jì)重點(diǎn)就在于軟件算法的設(shè)計(jì),需要有很巧妙的程序算法,雖然以前寫過幾次程序,但我覺的寫好一個(gè)程序并不是一件簡(jiǎn)單的事,有好多的東西,只有我們?nèi)ピ囍隽耍拍苷嬲恼莆?,只學(xué)習(xí)理論有些東

139、西是很難理解的,更談不上掌握。</p><p>  從這次的課程設(shè)計(jì)中,我真真正正地意識(shí)到,在以后的學(xué)習(xí)中,要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識(shí)用到實(shí)際當(dāng)中,學(xué)習(xí)單機(jī)片機(jī)更是如此,程序只有在經(jīng)常的寫與讀的過程中才能提高,這就是我在這次課程設(shè)計(jì)中的最大收獲。</p><p>  最后感謝老師和我的組員們?cè)谶@次設(shè)計(jì)中給于我的幫助和支持。</p><p><b>

140、;  考文獻(xiàn)參</b></p><p>  [1].李朝青,單片機(jī)原理及接口技術(shù)(簡(jiǎn)明修訂版)[M]. 北京:北京航空航天大學(xué)出版社,1998</p><p>  [2].李廣弟.單片機(jī)基礎(chǔ)[M]. 北京:北京航空航天大學(xué)出版社,1994</p><p>  [3].金偉正.單線數(shù)字溫度傳感器的原理與應(yīng)用[J].電子技術(shù)與應(yīng)用,2000</p>

141、;<p>  [4].李 鋼.1-Wire總線數(shù)字溫度傳感器DS18B20原理及應(yīng)用.現(xiàn)代電子技術(shù)[J],2005</p><p>  [5].蘇麟祥.DS1820數(shù)字溫度傳感器的功能特性及其應(yīng)用.世界采礦快報(bào),</p><p><b>  2000(9)</b></p><p>  [6]. 沙占友等.智能化集成溫度傳感器原理與

溫馨提示

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

評(píng)論

0/150

提交評(píng)論