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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

17、</p><p><b>  5系統(tǒng)仿真及總結(jié)</b></p><p><b>  5.1仿真結(jié)果</b></p><p>  本次課程設(shè)計(jì)中的系統(tǒng)仿真利用Proteus軟件進(jìn)行硬件電路連接,通過(guò)放置元器件,合理布線,確認(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>  通過(guò)本次課程設(shè)計(jì),使我深刻地認(rèn)識(shí)到自己掌握的單片機(jī)方面的知識(shí)還很少,對(duì)學(xué)過(guò)的課本知識(shí)理解不透徹,而且不能熟練運(yùn)用匯編和C語(yǔ)言編寫(xiě)程序,從而導(dǎo)致在設(shè)計(jì)方案初期出現(xiàn)了一些錯(cuò)

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

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

21、北京:清華大學(xué)出版社,2010:36-60.</p><p>  [3] 賀敬凱.單片機(jī)系統(tǒng)設(shè)計(jì)[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ù)位對(duì)照表</p><p>  uchar code df_Table[]={ 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};</p><p>  // 報(bào)警溫度上下限</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; //高低溫報(bào)

26、警標(biāo)志</p><p>  bit DS18B20_IS_OK=1; //傳感器正常標(biāo)志</p><p>  uint Time0_Count=0 ; //定時(shí)器延時(shí)累加</p><p><b>  // 延時(shí)</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; //初始化成功時(shí)返回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>  //寫(xiě)一字節(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); //跳過(guò)序列號(hào)</p><p>  WriteOneByte(0x44); //啟

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

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

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

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

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

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

最新文檔

評(píng)論

0/150

提交評(píng)論