單片機數(shù)字傳感器課程設計-- 溫度控制器_第1頁
已閱讀1頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  計算機系統(tǒng)與接口課程設計</p><p>  設計名稱: 溫度控制器</p><p><b>  姓 名: </b></p><p><b>  班 級: </b></p><p><b>  學 號: </b></p&g

2、t;<p><b>  指導教師: </b></p><p>  2010年 01 月 08 日</p><p>  一、溫度控制器的原理及功能</p><p>  如圖1-1所示此多點溫度測量電路主要由以下幾部分組成:兩個溫度傳感器DS18B20及其選擇開關電路,控制器單片機AT89S52、掃描驅動電路、數(shù)碼管LED顯示器、報

3、警電路、報警溫度控制電路及電源電路等。</p><p>  圖1-1 多點溫度計組成方框圖</p><p>  溫度傳感器從測試點采集溫度,然后把溫度轉換成電壓(或電流),溫度傳感器輸出電壓的大小隨溫度的高低變化而變化,電壓值的變化范圍從幾個微伏到幾個毫伏,不同的溫度傳感器,輸出電壓的范圍也差別很大。單片機AT89S52是多點溫度測量電路的控制核心,它將采集到的數(shù)字溫度電壓值,經過計算處理

4、,得到相應的溫度值,經掃描驅動送到LED顯示器以數(shù)字形式顯示測量的溫度。LED顯示器用于顯示測量溫度的結果。報警溫度控制電路用于在不同應用中靈活設定報警溫度,在超過設定范圍時,報警電路進行報警。</p><p>  二、系統(tǒng)硬件電路的設計</p><p>  2.1 多點溫度測量電路</p><p>  多點溫度測量電路如圖2-1所示由主控器單片機AT89S52作為

5、多點溫度測量電路的核心,溫度傳感器DS18B20負責從測量點采集溫度,四位共陽LED數(shù)碼管以動態(tài)掃描法實現(xiàn)溫度顯示。</p><p>  2.1.1 DS18B20單線智能溫度傳感器的工作原理</p><p>  (1) DS18B20單線智能溫度傳感器的性能特點</p><p>  DS18B20溫度傳感器是美國DALLAS半導體公司最近推出的一種改進型智能溫度傳

6、感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9-12位的數(shù)字值讀數(shù)方式。</p><p>  DS18B20的性能特點如下:</p><p>  獨特的單線接口僅需要一個端口引腳進行通信;</p><p>  多個DS18B20可以并聯(lián)在唯一的三線上,實現(xiàn)多點組網功能;</p><p>&l

7、t;b>  無須外接部件;</b></p><p>  可通過數(shù)據(jù)供電,電壓范圍為3.0—5.5V;</p><p><b>  零待機功耗;</b></p><p>  溫度以9或12位數(shù)字量讀出;</p><p>  用戶可定義的非易失性溫度報警設置;</p><p>  報

8、警搜索命令識別并標志超過程序限定溫度(溫度報警條件)的器件;</p><p>  負電壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒壞,但不能正常工作.</p><p>  (2) DS18B20的內部結構框圖如圖2—4 所示,它采用3腳PR—35封裝或8腳SOIC封裝其管腳封裝如圖2-5所示。</p><p>  (3) DS18B20單線智能溫度傳感器的工作原理&

9、lt;/p><p>  64位ROM的位結構如圖2—6 所示。開始8位是產品類型的編號,接著是每個器件的惟一的序號,共有48位,最后8位是前面56位的CRC檢驗碼,這也是多個 DS18B20可以采用一線進行通信的原因。非易失性溫度報警觸發(fā)器TH和TL,可通過軟件寫入戶報警上下限。</p><p>  DS18B20溫度傳感器的內部存儲器還包括一個高速暫存RAM和一個非易失性的可</p&g

10、t;<p>  電擦除的EEPRAM。高速暫存RAM的結構為8字節(jié)的存儲器,結構如圖3—7 所示。</p><p>  圖2-4 DS18B20內部結構</p><p>  圖2-5 DS18B20的引腳排列</p><p>  頭2個字節(jié)包含測得的溫度信息,第3和第4字節(jié)是TH和TL的拷貝,是易失的,每次上電復位時被刷新。第5個字節(jié)為配置寄存器,它的

11、內容用于確定溫度值的數(shù)字轉換分辨率。DS18B20工作時按此寄存器中的分辨率將溫度轉換為相應精度的數(shù)值。該字節(jié)各位的定義如圖3-8所示。低5位一直為1,TM是測試模式位,用于設置DS18B20在工作模式還是在測試模式。在DS18B20 出廠時該位被設置為0,用戶不要改動,R1和R0決定溫度轉換的精度位數(shù),即用來設置分辨率,方法見表3—3 。</p><p>  MSB LSB M

12、SB LSB MSB LSB</p><p>  圖2—6 位64位ROM結構圖</p><p>  由表3—3可見,DS18B20溫度轉換時間比較長,而且設定的分辨率越高,所需要的溫度數(shù)據(jù)轉換時間就越長。因此,在實際應用中要將分辨率和轉換時間權衡考慮。</p><p>  高速暫存RAM的第6、7、8字節(jié)保留

13、未用,表現(xiàn)為全邏輯1。第9字節(jié)讀出前面所有8字節(jié)的CRC碼,可用來檢驗數(shù)據(jù),從而保證通信數(shù)據(jù)的正確性。</p><p>  表2—3 DS18B20分辨率的定義規(guī)定</p><p><b>  1字節(jié)</b></p><p><b>  2字節(jié)</b></p><p><b>  3

14、字節(jié)</b></p><p><b>  4字節(jié) </b></p><p><b>  5字節(jié)</b></p><p><b>  6字節(jié)</b></p><p>  7字節(jié) EEPROM</p><p>&l

15、t;b>  8字節(jié)</b></p><p><b>  9字節(jié)</b></p><p>  圖3—7 高速暫存RAM結構圖</p><p>  圖2-8 配置寄存器</p><p>  當DS18B20接收到溫度轉換命令后,開始啟動轉換。轉換完成后的溫度值就以16位帶符號擴展的二進制補碼形式存儲在高

16、速暫存存儲器的第1、2字節(jié)。單片機可以通過單總線接口讀出該數(shù)據(jù),讀數(shù)據(jù)時低位在先,高位在后,數(shù)據(jù)格式以0.0625℃/LSB形式表示。溫度值格式如圖2—9 所示。</p><p>  當符號位S=0時,表示測得的溫度值為正值,可以直接將二進制轉換為十進制;當符號位S=1時,表示測得的溫度值為負值,要先將補碼變成原碼,再計算十進制值。表2—4 是一部分溫度值對應的二進制溫度數(shù)據(jù)。</p><p&

17、gt;  DS18B20完成溫度轉換后,就把測得的溫度值與RAM中的TH、TL字節(jié)內容做比較。若T>TH或T<TL,則將該器件內的報警標志位置位,并對主機發(fā)出的報警搜索命令做出響應。因此,可用多只 DS18B20同時測量溫度并進行報警搜索。</p><p><b>  LS字節(jié)</b></p><p><b>  MS字節(jié)</b>&l

18、t;/p><p>  圖2—9 溫度數(shù)據(jù)值格式</p><p>  在64位ROM的最高有效字節(jié)中存儲器循環(huán)冗余檢驗碼(CRC)。主機根據(jù)ROM的前56位來計算CRC值,并和存入DS18B20的CRC值做比較,以判斷主機收到的ROM數(shù)據(jù)是否正確。</p><p>  DS18B20的測溫原理如圖2—10所示.圖中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用它產生的信

19、號作為減法計數(shù)器1的脈沖輸入;高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯變化,所以產生的信號作為減法計數(shù)器2的脈沖輸入。圖中還隱含著計數(shù)門,當計數(shù)門打開時,DS18B20對低溫度系數(shù)振蕩器產生的時鐘脈沖進行計數(shù),進而完成溫度測量。計數(shù)門的開啟時間由高溫度系數(shù)振蕩器決定,每次測量前,首先將—55℃所對應的一個基數(shù)分別置入減法計數(shù)器1和溫度寄存器中,減法計數(shù)器1和溫度寄存器被預置在—55℃所對應的一個基數(shù)值。</p><p&

20、gt;  減法計數(shù)器1對低溫度系數(shù)晶振產生的脈沖信號進行減法計數(shù),當減法計數(shù)器1的預置值減到0時,溫度寄存器的值將加1,減法計數(shù)器1的預置值將重新被裝入,減法計數(shù)器1重新開始對低溫度系數(shù)晶振產生的脈沖信號進行計數(shù),如此循環(huán)直到減法計數(shù)器2計數(shù)到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數(shù)值就是所測溫度值。圖2—10 中的斜率累加器用于溫度補償和修正測溫過程中的非線形性,其輸出用于修正減法計數(shù)器的預置值,只要計數(shù)門仍未關閉就重復上述

21、過程,直到溫度寄存器值達到被測溫度值。</p><p>  另外,由于DS18B20單線通信功能是分時完成的,它有嚴格的時隙概念,因此讀寫時很重要。系統(tǒng)對DS18B20的各種操作必須按協(xié)議進行。操作協(xié)議為:初始化DS18B20(發(fā)復位脈沖) 發(fā)ROM功能命令 發(fā)存儲器操作命令 處理數(shù)據(jù)。</p><p>  (4) DS18B20與單片機的接口電路</p&g

22、t;<p>  DS18B20可以采用兩種方式供電,一種是采用電源供電方式,此時DS18B20的1腳接地,2腳作為信號線,3腳接電源。另一種是寄生電源方式,如圖2—11 所示。單片機端口接單總線,為保證在有效的DS18B20時鐘周期內提供足夠的電流,可用一個MOSFET管來完成對總線的上拉。</p><p>  當DS18B20處于寫存儲器操作和溫度A/D轉換操作時,總線上必須有強的上拉,</

23、p><p>  表2—4 DS18B20溫度與測得值對應表</p><p>  圖2—10 DS18B20測溫原理圖</p><p>  上拉開始時間最大為10μs。采用寄生電源供電方式時VDD和GND端均接地。由于單線制只有一根線,因此發(fā)送接口必須是三態(tài)的。</p><p>  圖2—11 DS18B20采用寄生電源的電路圖</p&g

24、t;<p><b>  2.2 顯示電路</b></p><p><b>  1602原理圖</b></p><p>  LCD技術是把液晶灌入兩個列有細槽的平面之間。這兩個平面上的槽互相垂直(相交成90度)。也就是說,若一個平面上的分子南北向排列,則另一平面上的分子東西向排列,而位于兩個平面之間的分子被強迫進入一種90度扭轉的狀態(tài)

25、。由于光線順著分子的排列方向傳播,所以光線經過液晶時也被扭轉90度。但當液晶上加一個電壓時,分子便會重新垂直排列,使光線能直射出去,而不發(fā)生任何扭轉。 LCD是依賴極化濾光器(片)和光線本身。自然光線是朝四面八方隨機發(fā)散的。極化濾光器實際是一系列越來越細的平行線。這些線形成一張網,阻斷不與這些線平行的所有光線。極化濾光器的線正好與第一個垂直,所以能完全阻斷那些已經極化的光線。只有兩個濾光器的線完全平行,或者光線本身已扭轉到與第二個極化

26、濾光器相匹配,光線才得以穿透。 LCD正是由這樣兩個相互垂直的極化濾光器構成,所以在正常情況下應該阻斷所有試圖穿透的光線。但是,由于兩個濾光器之間充滿了扭曲液晶,所以在光線穿出第一個濾光器后,會被液晶分子扭轉90度,最后從第二個濾光器中穿出。另一方面,若為液晶加一個電壓,分子又會重新排列并完全平行,使光線不再扭轉,所以正好被第二個濾光器擋住。總</p><p><b>  2.3 報警電路</b

27、></p><p>  溫度報警電路采用NPN三極管、電阻和蜂鳴器組成。在設定報警溫度后,超出溫度范圍時,由報警電路實現(xiàn)報警功能。</p><p>  圖 3—14 報警部分電路圖</p><p>  以上我們對多點溫度測量電路的硬件各部分電路溫度測量電路、報警電路等進行了介紹,在下一章我們將對軟件部分進行分析。</p><p>  三

28、、 系統(tǒng)軟件的設計</p><p>  系統(tǒng)程序主要包括主程序、讀出溫度子程序、溫度轉換命令子程序、計算溫度子程序、顯示數(shù)據(jù)刷新子程序等等。</p><p><b>  3.1 主程序</b></p><p>  主程序的主要功能是負責溫度的實際顯示、讀數(shù)并處理DS18B20的測量溫度值,溫度測量每1s進行一次。其程序流程圖見圖3—1 。<

29、;/p><p>  3.2 讀出溫度子程序</p><p>  讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時需進行CRC檢驗,校驗有錯時不進行溫度數(shù)據(jù)的改寫。寫程序流程圖如圖3—2 所示。</p><p>  3.3 溫度轉換命令子程序</p><p>  溫度轉換命令子程序主要是發(fā)溫度轉換開始命令,當采用12位分辨率知轉換時間約75

30、0ms,在本程序設計中采用1s顯示程序延時法等待轉換的完成。溫度轉換命令子程序流程圖如圖3—3 所示。</p><p>  3.4 計算溫度子程序</p><p>  計算溫度子程序將RAM中讀取值進行BCD碼的轉換運算,并進行溫度值正負的判定,其程序流程圖如圖3—4 所示。</p><p>  3.5 顯示數(shù)據(jù)刷新子程序</p><p> 

31、 顯示數(shù)據(jù)刷新子程序主要是對顯示緩沖器中的顯示數(shù)據(jù)進行刷新操作,當最高顯示位為0將符號顯示位移入下一位。程序流程圖如圖4-5所示。</p><p>  圖 3-1 溫度計主程序流程圖 圖3-2 讀出溫度子程序流程圖</p><p>  圖3—3 溫度轉換命令子程序流程圖</p><p>  圖3—4 計算溫度子程序流程圖 圖3—5 顯示

32、數(shù)據(jù)刷新子程序流程圖</p><p>  3.6 溫度數(shù)據(jù)的計算處理方法</p><p>  從DS18B20讀取出的二進制值必須先轉換成十進制值,才能用于字符顯示。因為DS18B20的轉換精度為9到12位可選的,為了提高精度選取12位。在采用12位轉換精度時,溫度寄存器里的值是以0.0625為步進的,即溫度值為溫度寄存器里的二進制值乘以0.0625,就是實際的十進制溫度值。</p&

33、gt;<p>  通過觀察表3—1可以發(fā)現(xiàn)一個十進制值和二進制值之間有很明顯的關系,就是把二進制的高字節(jié)的低半字節(jié)和低字節(jié)的高半字節(jié)組成一個字節(jié),這個字節(jié)的二進制值化為十進制值后,就是溫度值的百、十、個位值,而剩下的低字節(jié)的低半字節(jié)化成十進制后,就是溫度值的小數(shù)部分。</p><p>  小數(shù)部分因為是半個字節(jié),所以二進制值范圍是0至F,轉換成十進制小數(shù)值就是0.0625的倍數(shù)(0至15)。這樣需要

34、4位的數(shù)碼管來顯示小數(shù)部分,實際應用不必有這么高的精度,采用1位數(shù)碼管來顯示小數(shù),可以精確到0.10C。表3-1就是二進制和十進制的近似對應關系表。</p><p><b>  附錄一</b></p><p>  #include<reg51.h></p><p>  #define uchar unsigned char</

35、p><p>  #define uint unsigned int</p><p>  sbit DQ=P1^7;//ds18b20與單片機連接口</p><p>  sbit RS=P2^4;</p><p>  sbit RW=P2^5;</p><p>  sbit EN=P2^6;</p><p

36、>  sbit BEEP = P2^7; //蜂鳴器驅動線</p><p>  sbit BEEP1 = P1^6;//小燈報警驅動線</p><p>  sbit BEEP2 = P3^4;</p><p>  sbit key0=P3^0;</p><p>  sbit key1=P3^1;</p&

37、gt;<p>  sbit key2=P3^6;</p><p>  sbit key3=P3^7; //加熱驅動線</p><p>  unsigned char code str1[]={"TH: TL:" } ;</p><p>  unsigned char code str2[]={"temp:

38、 "}; </p><p>  unsigned char code str3[]={"design:wj "} ;</p><p>  unsigned char code str4[]={" error "} ;</p><p>  uchar data d

39、isdata[5];</p><p>  uint tvalue,x=6,y=4,h,m=0x00,n=0x00;//溫度值</p><p>  uchar tflag,z;//溫度正負標志</p><p>  unsigned char val ;</p><p>  void delay(uint n) //延時1us</

40、p><p><b>  { </b></p><p>  while (--n);</p><p><b>  }</b></p><p>  void speak() // 蜂鳴器響一聲 </p><p><b>  {</b></p&g

41、t;<p>  unsigned char i;</p><p>  for (i=0;i<200;i++) //喇叭發(fā)聲的時間循環(huán),改變大小可以改變發(fā)聲時間長短</p><p><b>  { </b></p><p>  delay(100); //數(shù)決定發(fā)聲的頻率,估算值</p>

42、<p>  BEEP=!BEEP; //BEEP取反</p><p>  //if(temp<30&temp>20) break;</p><p><b>  } </b></p><p>  BEEP=1; //喇叭停止工作,間歇的時間,可更改</p><p>  de

43、lay(10) ;</p><p>  //if(temp<30&temp>20) break; </p><p><b>  }</b></p><p>  /*************************lcd1602程序**************************/</p><p&

44、gt;  void delay1ms(unsigned int ms)//延時1毫秒(不夠精確的)</p><p>  {unsigned int i,j;</p><p>  for(i=0;i<ms;i++)</p><p>  for(j=0;j<100;j++);</p><p><b>  }</b>

45、;</p><p>  void wr_com(unsigned char com)//寫指令//</p><p>  { delay1ms(1);</p><p><b>  RS=0;</b></p><p><b>  RW=0;</b></p><p><b&

46、gt;  EN=0;</b></p><p><b>  P0=com;</b></p><p>  delay1ms(1);</p><p><b>  EN=1;</b></p><p>  delay1ms(1);</p><p><b>  EN

47、=0;</b></p><p><b>  } </b></p><p>  void wr_dat(unsigned char dat)//寫數(shù)據(jù)//</p><p>  { delay1ms(1);;</p><p><b>  RS=1;</b></p>&l

48、t;p><b>  RW=0;</b></p><p><b>  EN=0;</b></p><p><b>  P0=dat;</b></p><p>  delay1ms(1);</p><p><b>  EN=1;</b></p>

49、;<p>  delay1ms(1);</p><p><b>  EN=0;</b></p><p><b>  }</b></p><p>  void lcd_init()//初始化設置//</p><p>  {delay1ms(15);</p><p>

50、;  wr_com(0x38);delay1ms(5);</p><p>  wr_com(0x08);delay1ms(5);</p><p>  wr_com(0x01);delay1ms(5);</p><p>  wr_com(0x06);delay1ms(5);</p><p>  wr_com(0x0c);delay1ms(5);

51、</p><p><b>  }</b></p><p>  void display(unsigned char *p)//顯示//</p><p><b>  {</b></p><p>  while(*p!='\0')</p><p><b>

52、;  {</b></p><p>  wr_dat(*p);</p><p><b>  p++;</b></p><p>  delay1ms(1);</p><p><b>  }</b></p><p><b>  }</b></

53、p><p>  init_play()//初始化顯示</p><p>  { lcd_init(); wr_com(0x80);</p><p>  display(str2);</p><p>  wr_com(0xc0); </p><p>  display(str1);</p><p&g

54、t;<b>  }</b></p><p>  /******************************ds1820程序***************************************/</p><p>  void delay_18B20(unsigned int i)//延時1微秒</p><p><b>  

55、{</b></p><p>  while(i--);</p><p><b>  }</b></p><p>  void ds1820rst()/*ds1820復位*/</p><p>  { unsigned char x=0;</p><p>  DQ = 1;

56、 //DQ復位</p><p>  delay_18B20(4); //延時</p><p>  DQ = 0; //DQ拉低</p><p>  delay_18B20(100); //精確延時大于480us</p><p>  DQ = 1; //拉高</p><p>  

57、delay_18B20(40); </p><p><b>  } </b></p><p>  uchar ds1820rd()/*讀數(shù)據(jù)*/</p><p>  { unsigned char i=0;</p><p>  unsigned char dat =0;</p><p>  f

58、or (i=8;i>0;i--)</p><p>  { DQ = 0; //給脈沖信號</p><p><b>  dat>>=1;</b></p><p>  DQ = 1; //給脈沖信號</p><p><b>  if(DQ)</b></p><p

59、>  dat|=0x80;</p><p>  delay_18B20(10);</p><p><b>  }</b></p><p>  return(dat);</p><p><b>  }</b></p><p>  void ds1820wr(uchar w

60、data)/*寫數(shù)據(jù)*/</p><p>  {unsigned char i=0;</p><p>  for (i=8; i>0; i--)</p><p><b>  { DQ = 0;</b></p><p>  DQ = wdata&0x01;</p><p>  dela

61、y_18B20(10);</p><p><b>  DQ = 1;</b></p><p>  wdata>>=1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  read_temp()

62、/*讀取溫度值并轉換*/</p><p>  {uchar a,b;</p><p>  ds1820rst(); </p><p>  ds1820wr(0xcc);//*跳過讀序列號*/</p><p>  ds1820wr(0x44);//*啟動溫度轉換*/</p><p>  ds1820rst();

63、 </p><p>  ds1820wr(0xcc);//*跳過讀序列號*/ </p><p>  ds1820wr(0xbe);//*讀取溫度*/ </p><p>  a=ds1820rd();</p><p>  b=ds1820rd();</p><p><b>  tvalue=b;</b&

64、gt;</p><p>  tvalue<<=8;</p><p>  tvalue=tvalue|a;</p><p>  if(tvalue<0x0fff)</p><p><b>  tflag=0;</b></p><p><b>  else</b>

65、;</p><p>  {tvalue=~tvalue+1; </p><p><b>  tflag=1;</b></p><p><b>  }</b></p><p>  tvalue=tvalue*(0.625)+0.5;//溫度值擴大10倍,精確到1位小數(shù)</p>&l

66、t;p>  return(tvalue);</p><p><b>  }</b></p><p>  /*******************************************************************/</p><p>  void ds1820disp()//溫度值顯示</p>&l

67、t;p>  { uchar flagdat;</p><p>  uchar a,b,c;</p><p>  disdata[0]=tvalue/1000+0x30;//百位數(shù)</p><p>  disdata[1]=tvalue%1000/100+0x30;//十位數(shù)</p><p>  disdata[2]=tvalue%1

68、00/10+0x30;//個位數(shù)</p><p>  disdata[3]=tvalue%10+0x30;//小數(shù)位</p><p>  disdata[4]=x+0x30;</p><p>  disdata[5]=y+0x30;</p><p>  if(tflag==0)</p><p>  flagdat=0x

69、20;//正溫度不顯示符號</p><p><b>  else</b></p><p>  flagdat=0x2d;//負溫度顯示負號:-</p><p>  if(disdata[0]==0x30)</p><p>  {disdata[0]=0x20;//如果百位為0,不顯示</p><p&g

70、t;  if(disdata[1]==0x30)</p><p>  {disdata[1]=0x20;}//如果百位為0,十位為0也不顯示</p><p><b>  } </b></p><p>  a=tvalue/1000;b=tvalue%1000/100;c=tvalue%100/10;</p><p>

71、;  z=a*100+b*10+c;</p><p><b>  if(z>x) </b></p><p><b>  {speak();</b></p><p><b>  BEEP1=0;</b></p><p><b>  BEEP2=1;</b&g

72、t;</p><p><b>  }</b></p><p>  else if(z<y)</p><p>  { speak();</p><p><b>  BEEP1=0;</b></p><p>  BEEP2=0; </p><p&g

73、t;<b>  } </b></p><p><b>  else</b></p><p>  BEEP1=1; </p><p>  wr_com(0x85);</p><p>  wr_dat(flagdat);//顯示符號位</p><p>  wr_com(0x86

74、);</p><p>  wr_dat(disdata[0]);//顯示百位</p><p>  wr_com(0x87);</p><p>  wr_dat(disdata[1]);//顯示十位 </p><p>  wr_com(0x88);</p><p>  wr_dat(disdata[2]);//顯示個位

75、 </p><p>  wr_com(0x89);</p><p>  wr_dat(0x2e);//顯示小數(shù)點 </p><p>  wr_com(0x8A);</p><p>  wr_dat(disdata[3]);//顯示小數(shù)位 </p><p>  wr_com(0xc4);</p>&

76、lt;p>  wr_dat(disdata[4]);</p><p>  wr_com(0xcb);</p><p>  wr_dat(disdata[5]);</p><p><b>  }</b></p><p>  /********************主程序***********************

77、************/</p><p>  void main()</p><p>  { //uchar a,b,c,temp,th=30,tl=20;</p><p>  init_play();//初始化顯示</p><p><b>  while(1)</b></p><p>  {

78、 if(key0==0)</p><p><b>  { </b></p><p>  while(key0==0);</p><p>  x+=1; m=m+1;</p><p><b>  }</b></p><p>  if(key1==0)</p>

79、<p>  { delay(200);</p><p>  while(key1==0);</p><p>  x=x-1;m=m-1; </p><p><b>  }</b></p><p>  if(key2==0)</p><p>  { delay(200);<

80、/p><p>  while(key2==0);</p><p>  y+=1; n=n+1;</p><p><b>  }</b></p><p>  if(key3==0)</p><p><b>  { </b></p><p>  whi

81、le(key3==0);</p><p>  y=y-1; n=n-1;</p><p><b>  } </b></p><p>  if(x<=y) {</p><p><b>  speak();</b></p><p>  wr_com(0xc0);&l

82、t;/p><p>  display(str4);</p><p>  delay(100);</p><p>  wr_com(0xc0);</p><p>  display(str1);</p><p><b>  } </b></p><p>  read_te

83、mp();//讀取溫度</p><p>  ds1820disp();//顯示</p><p><b>  } } </b></p><p><b>  附錄二</b></p><p><b>  6 結論</b></p><p>  由于本設計

84、采用了集成溫度傳感器,這樣不僅減少了硬件電路的設計與調試,并且此溫度傳感元件的集成性能比傳統(tǒng)的元件要優(yōu)越得多,這樣簡化了電路的設計難度還降低了產品的價格。如果我們采用傳統(tǒng)的元件則在設計中還要加入A/D轉換器和模擬開關,這樣就增加了電路的設計難度并且感溫元件的精度和轉換性能也是遠不及集成的感溫元件DS18B20的。所以在以后的設計過程中應該盡量的采用集成元件。另外,本設計還可以實現(xiàn)高低溫報警功能和多點溫度測量功能,因此,能夠適用于多種場合

85、。</p><p>  計算機系統(tǒng)與接口課程設計</p><p><b>  任務書</b></p><p>  學 院: 信 電 學 院 </p><p>  專 業(yè): 電子信息工程技術 </p><p>  設計題目: 溫度控制器</p><p&

86、gt;  1、課程設計的內容和要求</p><p><b>  內容:</b></p><p>  1. 熟悉AT89C51/52單片機的硬件資源</p><p>  2. 掌握Keil μVision 單片機集成開發(fā)環(huán)境的使用,掌握 C/ASM程序的編輯、編譯、調試、仿真的方法。</p><p>  3. 掌握單片

87、機常用溫度傳感器,液晶顯示器的使用。</p><p>  4. 了解實際工業(yè)溫度采集儀表的功能、工作方式和設計流程。</p><p><b>  要求:</b></p><p>  1. 在Keil μVision 單片機集成開發(fā)環(huán)境下實現(xiàn)溫度的采集、和溫度上下限的設定。</p><p>  2. 編寫完整單片機C51程

88、序,生成HEX文件。</p><p>  3. 繪制PROTEUS單片機仿真軟件,實現(xiàn)Keil μVision和PROTEUS單片機聯(lián)合調試和仿真。</p><p>  4. 根據(jù)實際工業(yè)儀表、儀器的工作功能和流程,在完成基本要求的情況下適當增加軟件、硬件功能。(提高要求)</p><p><b>  2、主要參考文獻</b></p>

89、;<p>  1. 《單片機典型模塊設計實例導航》 </p><p>  2. 《 單片機原理與應用及C51程序設計 》 </p><p>  3. 《51單片機C語言常用模塊與綜合系統(tǒng)設計》

90、 </p><p>  3、課程設計進度計劃</p><p><b>  4、考核方式</b></p><p>  課程設計的考核采取論文評閱、結果演示和答辯相結合的原則。嚴禁抄襲。</p><p>  指導老師簽字:

溫馨提示

  • 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

提交評論