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

下載本文檔

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

文檔簡介

1、<p>  單片機(jī)原理及系統(tǒng)課程設(shè)計</p><p>  專 業(yè): 自動控制 </p><p>  班 級: </p><p>  姓 名: </p><p>  學(xué) 號: </p>&

2、lt;p>  指導(dǎo)教師: </p><p>  2014 年 1 月 15日</p><p>  基于單片機(jī)的數(shù)字溫度計設(shè)計</p><p><b>  1設(shè)計目的</b></p><p>  隨著人們生活水平的不斷提高,單片機(jī)控制無疑是人們追求的目標(biāo)之一,它所給人帶來的方便是不可否

3、定的,各種數(shù)字系統(tǒng)的應(yīng)用也使人們的生活更加舒適。數(shù)字化控制、智能控制為現(xiàn)代人的工作、生活、科研等方面帶來方便。其中數(shù)字溫度計就是一個典型的例子。數(shù)字溫度計與傳統(tǒng)的溫度計相比,具有讀數(shù)方便、測溫范圍廣、測溫精確、功能多樣話等優(yōu)點(diǎn)。其主要用于對測溫要求準(zhǔn)確度比較高的場所,或科研實驗室使用。</p><p>  本設(shè)計主要介紹了一個基于AT89C51單片機(jī)的測溫系統(tǒng),詳細(xì)描述了利用數(shù)字溫度傳感器DS18B20開發(fā)測溫系

4、統(tǒng)的過程,重點(diǎn)對傳感器在單片機(jī)下的硬件連接,軟件編程以及各模塊系統(tǒng)流程進(jìn)行了詳盡分析,特別是數(shù)字溫度傳感器DS18B20的數(shù)據(jù)采集過程。對各部分的電路也一一進(jìn)行了介紹,該系統(tǒng)可以方便的實現(xiàn)溫度采集和顯示,并可根據(jù)需要任意設(shè)定上下限報警溫度。 </p><p><b>  2設(shè)計方案及原理</b></p><p>  2.1系統(tǒng)總體設(shè)計方案</p><

5、;p>  數(shù)字溫度計具有精度高、量程寬、靈敏度高、體積小、功耗低等優(yōu)點(diǎn),在生活中廣泛應(yīng)用。本設(shè)計中用單片機(jī)AT89C51、溫度傳感器DS18B20和數(shù)碼管組成數(shù)字溫度計,實現(xiàn)了對溫度的測量和報警的功能,結(jié)構(gòu)簡單,便于操作。</p><p>  2.2溫度計設(shè)計原理</p><p>  溫度計原理圖如圖1所示。系統(tǒng)工作時,溫度傳感器將采集到的信號傳送給單片機(jī),單片機(jī)通過軟件處理把數(shù)據(jù)傳

6、送到顯示模塊和報警模塊,實現(xiàn)溫度的顯示和報警作用。</p><p><b>  圖1 溫度計原理圖</b></p><p><b>  3硬件設(shè)計</b></p><p>  3.1系統(tǒng)原理電路圖</p><p>  本課題是以AT89C51單片機(jī)為核心的一種數(shù)字溫度控制系統(tǒng),系統(tǒng)整體硬件電路包括,

7、傳感器數(shù)據(jù)采集電路,上下限報警調(diào)整電路,溫度顯示電路,單片機(jī)主板電路等組成。</p><p>  圖2 系統(tǒng)原理電路圖</p><p><b>  3.2晶體振蕩電路</b></p><p>  AT89C51芯片內(nèi)部有一個高增益反相放大器,用于構(gòu)成振蕩器。引線 XTAL1和XTAL2分別為反向放大器的輸入和輸出,兩端跨接石英晶體及兩個電容就可

8、構(gòu)成穩(wěn)定的自激振蕩器。</p><p>  這里,選用51單片機(jī)12MHZ的內(nèi)部振蕩方式,電容器C1、C2起穩(wěn)定振蕩頻率,并對振蕩頻率有微調(diào)作用,C1和C2可在20~100pF之間取值,這里取22pF。</p><p>  晶振電路圖如圖3所示。</p><p><b>  圖3 晶振電路圖</b></p><p>&l

9、t;b>  3.3報警電路</b></p><p>  在報警電路中,我們可以在I/O口上直接接LED燈和蜂鳴器,由P1.4連接紅色LED燈作為高溫報警燈,P1.5連接黃色LED燈作低溫報警燈;P3.7連接蜂鳴器。當(dāng)系統(tǒng)溫度高于某值時,P1.4便會輸出低電平,紅燈閃爍;當(dāng)系統(tǒng)溫度低于某值時,P1.5便會輸出低電平,黃燈閃爍;在這兩種情況下P3.7都會輸出高電平,是蜂鳴器報警。在報警時,只要將按鈕

10、開關(guān)斷開,就會解除蜂鳴器報警,當(dāng)溫度變化到某范圍時,LED燈才會停止閃爍。</p><p>  報警電路圖如圖5所示。</p><p><b>  圖4 報警電路圖</b></p><p><b>  3.4溫度顯示電路</b></p><p>  顯示電路既可以選用液晶顯示器,也可以選用數(shù)碼管顯示

11、。我們采用的是數(shù)碼管顯示電路。用8位共陰數(shù)碼管顯示,LED是七段式顯示器,內(nèi)部有7個條形發(fā)光二極管和1個小圓點(diǎn)發(fā)光二極管組成,根據(jù)各管的亮暗組合成字符。</p><p>  在用數(shù)碼管顯示時,我們有靜態(tài)和動態(tài)兩種選擇,靜態(tài)顯示程序簡單,顯示穩(wěn)定,但是占用端口比較多;動態(tài)顯示所需端口比較少,可以節(jié)省單片機(jī)的I/O口。</p><p>  74LS245是常用的芯片,用來驅(qū)動LED或者其他的設(shè)

12、備,它是8路雙向總線收發(fā)器,可雙向傳輸數(shù)據(jù)。74LS245還具有雙向三態(tài)功能,既可以輸出,也可以輸入數(shù)據(jù)。當(dāng)AT89C51單片機(jī)的P0口總線負(fù)載達(dá)到或超過P0口最大負(fù)載能力時,必須接入74LS245等總線驅(qū)動器。</p><p>  顯示電路圖如圖6所示。</p><p><b>  圖5 顯示電路圖</b></p><p>  3.5 DS1

13、8B20溫度傳感器</p><p>  數(shù)字溫度傳感器DS18B20是一種新型的“一線器件”,溫度測量范圍為-55~+125攝氏度,可編程為9位~12位轉(zhuǎn)換精度,測溫分辨率可達(dá)0.0625攝氏度,分辨率設(shè)定參數(shù)以及用戶設(shè)定的報警溫度存儲在EEPROM中,掉電后依然保存。被測溫度用符號擴(kuò)展的16位數(shù)字量方式串行輸出;其工作電源既可以在遠(yuǎn)端引入,也可以采用寄生電源方式產(chǎn)生;多個DS18B20可以并聯(lián)到3根或2根線上,

14、CPU只需一根端口線就能與諸多DS18B20通信。</p><p>  DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。</p><p>  由于DS18B20單線通信功能是分時完成的,有嚴(yán)格的時隙概念,因此讀寫時序很重要。系統(tǒng)對DS18B20的各種操作必須按協(xié)議進(jìn)行。操作協(xié)議為:初始化DS18B20(發(fā)復(fù)位脈沖)→發(fā)RO

15、M功能命令→發(fā)存儲器操作命令→處理數(shù)據(jù)。</p><p>  圖6 DS18B20電路圖</p><p><b>  4軟件設(shè)計</b></p><p><b>  4.1程序流程圖</b></p><p>  本系統(tǒng)的軟件部分主要可分為顯示程序、定時計數(shù)中斷程序、報警程序、延時程序。利用Keil軟

16、件對程序調(diào)試,程序運(yùn)行無誤后生成了hex文件。</p><p><b>  流程圖如圖7所示。</b></p><p><b>  圖7 程序流程圖</b></p><p><b>  4.2主程序</b></p><p><b>  程序見附錄。</b>

17、</p><p><b>  5系統(tǒng)仿真及總結(jié)</b></p><p><b>  5.1仿真結(jié)果</b></p><p>  本次課程設(shè)計中的系統(tǒng)仿真利用Proteus軟件進(jìn)行硬件電路連接,通過放置元器件,合理布線,確認(rèn)電路連接后,將Keil軟件已經(jīng)生成的hex文件裝入AT89C51單片機(jī)中進(jìn)行仿真,最后仿真成功。<

18、;/p><p>  系統(tǒng)仿真結(jié)果圖如圖7所示。</p><p>  圖8 系統(tǒng)仿真結(jié)果圖</p><p><b>  5.2總結(jié)</b></p><p>  通過本次課程設(shè)計,使我深刻地認(rèn)識到自己掌握的單片機(jī)方面的知識還很少,對學(xué)過的課本知識理解不透徹,而且不能熟練運(yùn)用匯編和C語言編寫程序,從而導(dǎo)致在設(shè)計方案初期出現(xiàn)了一些錯

19、誤。通過老師答疑和查閱書籍慢慢地理清了設(shè)計方案的思路和程序的編寫,以及對仿真軟件PROTEUS和KEIL的熟練運(yùn)用。</p><p>  本次課程設(shè)計使我加深了對單片機(jī)課程的全面認(rèn)識,復(fù)習(xí)和掌握,在大學(xué)課堂學(xué)習(xí)了大量的專業(yè)知識,但沒有太多的實踐來檢驗自己的掌握程度,只有理論和實踐相結(jié)合,才能更好地學(xué)好專業(yè)知識,這次的數(shù)字溫度計的設(shè)計給我奠定了一個實踐基礎(chǔ),我會在以后的學(xué)習(xí)生活中更好地將理論轉(zhuǎn)化為實踐,使自己的各方

20、面能得到提高,同時在查找資料的過程中我也學(xué)到了許多新的知識,在和同學(xué)的互相討論中,提高了自己的單片機(jī)知識水平。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 王思明,茍軍年.單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計[M].北京:科學(xué)出版社,2012:176-189.</p><p>  [2] 譚浩強(qiáng).C程序設(shè)計(第四版) [M].

21、北京:清華大學(xué)出版社,2010:36-60.</p><p>  [3] 賀敬凱.單片機(jī)系統(tǒng)設(shè)計[M].西安:電子科技大學(xué)出版社,2011:86-102.</p><p><b>  附錄:</b></p><p>  #include<reg51.h></p><p>  #include<intri

22、ns.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  sbit DQ=P3^6;</p><p>  sbit BEEP=P3^7;</p><p>  sbit HI_LED=P1^4;

23、</p><p>  sbit LO_LED=P1^5;</p><p>  //共陰極數(shù)碼管及空白顯示</p><p>  uchar code DSY_CODE[]=</p><p>  { 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};</p><p&

24、gt;  //溫度小數(shù)位對照表</p><p>  uchar code df_Table[]={ 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};</p><p>  // 報警溫度上下限</p><p>  char Alarm_Temp_HL[2]={70,-20};</p><p>  uchar CurrentT=

25、0; // 當(dāng)前讀取的溫度整數(shù)部分</p><p>  uchar Temp_Value[]={0x00,0x00};//從DS18B20讀取的溫度值</p><p>  uchar Display_Digit[]={0,0,0,0}; //待顯示的各溫度數(shù)位</p><p>  bit HI_Alarm=0,LO_Alarm=0; //高低溫報

26、警標(biāo)志</p><p>  bit DS18B20_IS_OK=1; //傳感器正常標(biāo)志</p><p>  uint Time0_Count=0 ; //定時器延時累加</p><p><b>  // 延時</b></p><p>  void Delay(uint x)</p>&l

27、t;p><b>  {</b></p><p>  while(--x);</p><p><b>  }</b></p><p>  //初始化DS18B20</p><p>  uchar Init_DS18B20()</p><p><b>  {<

28、;/b></p><p>  uchar status;</p><p>  DQ=1;Delay(8);</p><p>  DQ=0;Delay(90);</p><p>  DQ=1;Delay(8);</p><p>  status=DQ;</p><p>  Delay(100

29、);</p><p><b>  DQ=1;</b></p><p>  return status; //初始化成功時返回0</p><p><b>  }</b></p><p><b>  //讀一字節(jié)</b></p><p>  u

30、char ReadOneByte()</p><p><b>  {</b></p><p>  uchar i, dat=0;</p><p>  DQ=1;_nop_();</p><p>  for (i=0;i<8;i++)</p><p><b>  {</b>

31、;</p><p>  DQ=0;dat>>=1;DQ=1;_nop_();_nop_();</p><p>  if(DQ)dat |=0x80;Delay(30);DQ=1;</p><p><b>  }</b></p><p>  return dat;</p><p><

32、;b>  }</b></p><p><b>  //寫一字節(jié)</b></p><p>  void WriteOneByte(uchar dat)</p><p><b>  {</b></p><p><b>  uchar i;</b></p>

33、;<p>  for (i=0;i<8;i++)</p><p><b>  {</b></p><p>  DQ=0;DQ=dat&0x01;Delay(5);DQ=1;dat>>=1;</p><p><b>  }</b></p><p><b&g

34、t;  }</b></p><p><b>  //讀取溫度值</b></p><p>  void Read_Temperature()</p><p><b>  {</b></p><p>  if(Init_DS18B20()==1) //DS18B20故障</p>

35、;<p>  DS18B20_IS_OK=0;</p><p><b>  else</b></p><p><b>  {</b></p><p>  WriteOneByte(0xCC); //跳過序列號</p><p>  WriteOneByte(0x44); //啟

36、動溫度轉(zhuǎn)換</p><p>  Init_DS18B20();</p><p>  WriteOneByte(0xCC);//跳過序列號</p><p>  WriteOneByte(0xBE);//讀取溫度寄存器</p><p>  Temp_Value[0]=ReadOneByte(); //溫度低八位</p>

37、<p>  Temp_Value[1]=ReadOneByte(); //溫度高八位</p><p>  Alarm_Temp_HL[0]=ReadOneByte(); //報警溫度TH</p><p>  Alarm_Temp_HL[1]=ReadOneByte(); //報警溫度TL</p><p>  DS18B20_IS_OK=1;</

38、p><p><b>  }</b></p><p><b>  }</b></p><p>  //設(shè)置DS18B20溫度報警值</p><p>  void Set_Alarm_Temp_Value()</p><p><b>  {</b></p&

39、gt;<p>  Init_DS18B20();</p><p>  WriteOneByte(0xCC); //跳過序列號</p><p>  WriteOneByte(0x4E); //將設(shè)定的溫度報警值寫入DS18B20</p><p>  WriteOneByte(Alarm_Temp_HL[0]); //寫TH<

40、/p><p>  WriteOneByte(Alarm_Temp_HL[1]);//寫TL</p><p>  WriteOneByte(0x7F); //12位精度</p><p>  Init_DS18B20();</p><p>  WriteOneByte(0xCC);// 跳過序列號</p><p

41、>  WriteOneByte(0x48);//溫度報警值存入DS18B20</p><p><b>  }</b></p><p>  //在數(shù)碼管上顯示溫度</p><p>  void Display_Temperature()</p><p><b>  {</b></p

42、><p><b>  uchar i;</b></p><p>  uchar t=150; //延時值</p><p>  uchar ng=0,np=0; //負(fù)數(shù)標(biāo)識及負(fù)號顯示位置</p><p>  char Signed_Current_Temp;</p><p>  

43、if((Temp_Value[1]&0xF8)==0xF8)</p><p><b>  {</b></p><p>  Temp_Value[1]=~Temp_Value[1];</p><p>  Temp_Value[0]=~Temp_Value[0]+1;</p><p>  if(Temp_Value[

44、0]==0x00) Temp_Value[1]++;</p><p>  ng=1;np=0xFD;</p><p><b>  }</b></p><p>  Display_Digit[0]=df_Table[Temp_Value[0]&0x0F];</p><p>  CurrentT=((Temp_Val

45、ue[0]&0xF0)>>4)|((Temp_Value[1]&0x07)<<4);</p><p>  Signed_Current_Temp=ng?-CurrentT:CurrentT;</p><p>  HI_Alarm=Signed_Current_Temp>=Alarm_Temp_HL[0]?1:0;</p><

46、p>  LO_Alarm=Signed_Current_Temp<=Alarm_Temp_HL[1]?1:0;</p><p>  Display_Digit[3]=CurrentT/100;</p><p>  Display_Digit[2]=CurrentT%100/10;</p><p>  Display_Digit[1]=CurrentT%1

47、0;</p><p>  if(Display_Digit[3]==0)</p><p><b>  {</b></p><p>  Display_Digit[3]=10;</p><p><b>  np=0xFB;</b></p><p>  if(Display_Di

48、git[2]==0)</p><p><b>  {</b></p><p>  Display_Digit[2]=10;</p><p><b>  np=0xF7;</b></p><p><b>  }</b></p><p><b> 

49、 }</b></p><p>  //刷新顯示若干時間</p><p>  for(i=0;i<30;i++)</p><p><b>  {</b></p><p>  P0=0x39;P2=0x7F;Delay(t);P2=0xFF;</p><p>  P0=0x63;P2

50、=0xBF;Delay(t);P2=0xFF;</p><p>  P0=DSY_CODE[Display_Digit[0]]; //小數(shù)位</p><p>  P2=0xDF;Delay(t);P2=0xFF;</p><p>  P0=( DSY_CODE[Display_Digit[1]]) | 0x80;</p><p>

51、;  P2=0xEF;Delay(t);P2=0xFF;</p><p>  P0=DSY_CODE[Display_Digit[2]];</p><p>  P2=0xF7;Delay(t);P2=0xFF;</p><p>  P0=DSY_CODE[Display_Digit[3]]; </p><p>  P2=0xFB;D

52、elay(t);P2=0xFF;</p><p>  if(ng) //如果為負(fù)則在調(diào)整后的位置顯示"-"</p><p><b>  {</b></p><p>  P0=0x40;P2=np;Delay(t);P2=0xFF;</p><p><b>  }</b>

53、</p><p><b>  }</b></p><p><b>  }</b></p><p>  void T0_INT() interrupt 1</p><p><b>  {</b></p><p>  TH0=-1000/256;</p

54、><p>  TL0=-1000%256;</p><p>  BEEP=!BEEP;</p><p>  if(++Time0_Count==400)</p><p><b>  {</b></p><p>  Time0_Count=0;</p><p>  if(HI_A

55、larm)HI_LED=~HI_LED;else HI_LED=1;</p><p>  if(LO_Alarm)LO_LED=~LO_LED;else LO_LED=1;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  // 主

56、程序</b></p><p>  void main(void)</p><p><b>  {</b></p><p><b>  IE=0x82;</b></p><p>  TMOD=0x01;</p><p>  TH0=-1000/256;</p&

57、gt;<p>  TL0=-1000%256;</p><p><b>  TR0=0;</b></p><p><b>  HI_LED=1;</b></p><p><b>  LO_LED=1;</b></p><p>  Set_Alarm_Temp_Va

58、lue();</p><p>  Read_Temperature();</p><p>  Delay(50000);</p><p>  Delay(50000);</p><p><b>  while(1)</b></p><p><b>  {</b></p&

59、gt;<p>  Read_Temperature();</p><p>  if(DS18B20_IS_OK)</p><p><b>  {</b></p><p>  if(HI_Alarm==1||LO_Alarm==1) TR0=1;</p><p>  else TR0=0;</p>

60、<p>  Display_Temperature();</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  P0= P2=0x00;</p><p&

溫馨提示

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

評論

0/150

提交評論