單片機課程設計--多功能溫度巡檢儀程序設計_第1頁
已閱讀1頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設計任務書</b></p><p>  課程設計題目: 多功能溫度巡檢儀程序設計 </p><p>  系 別 班級 </p><p>  學生姓名 學號

2、</p><p>  課程設計進行地點: </p><p>  任 務 下 達 時 間: 15年 1月12日</p><p>  起止日期: 15年1月12日起——至15年1月23日止</p><p>  系主任 年 月 日批

3、準</p><p>  1.設計主要內(nèi)容及要求;</p><p>  編寫多功能溫度巡檢儀程序。</p><p>  要求:1)多路溫度測量和顯示。</p><p>  2)可以設置正常溫度范圍,越限報警。</p><p>  2.對設計論文撰寫內(nèi)容、格式、字數(shù)的要求;</p><p> ?。?

4、).課程設計論文是體現(xiàn)和總結(jié)課程設計成果的載體,一般不應少于3000字。</p><p> ?。?).學生應撰寫的內(nèi)容為:中文摘要和關(guān)鍵詞、目錄、正文、參考文獻等。課程設計論文的結(jié)構(gòu)及各部分內(nèi)容要求可參照《沈陽工程學院畢業(yè)設計(論文)撰寫規(guī)范》執(zhí)行。應做到文理通順,內(nèi)容正確完整,書寫工整,裝訂整齊。</p><p> ?。?).論文要求打印,打印時按《沈陽工程學院畢業(yè)設計(論文)撰寫規(guī)范》

5、的要求進行打印。</p><p> ?。?). 課程設計論文裝訂順序為:封面、任務書、成績評審意見表、中文摘要和關(guān)鍵詞、目錄、正文、參考文獻。</p><p><b>  3.時間進度安排;</b></p><p><b>  中文摘要</b></p><p>  隨著人們生活水平的不斷提高,單片機

6、控制無疑是人們追求的目標之一,它所給人帶來的方便也是不可否定的,其中數(shù)字溫度測量就是一個典型的例子。溫度測量系統(tǒng)廣泛應用于社會生活的各個領(lǐng)域 ,如家電、汽車、材料、電力電子等。但人們對它的要求越來越高,要為現(xiàn)代人工作、科研、生活、提供更好的更方便的設施就需要從數(shù)單片機技術(shù)入手,一切向著數(shù)字化控制,智能化控制方向發(fā)展。</p><p>  本設計以C8051F020芯片為核心,輔以必要的外圍電路,設計了一

7、個簡易的多路溫度巡檢儀。在硬件方面,除了CPU外,系統(tǒng)采用DS18B20數(shù)字溫度傳感器測量溫度,采用1602液晶顯示屏顯示當前溫度。然后通過三個獨立按鍵來設置一個正常溫度的范圍的最小值和最大值,當溫度不在設置的正常溫度范圍內(nèi),用于報警的蜂鳴器就會發(fā)出響聲。在軟件反面,采用C語言設計,系統(tǒng)能夠準確測量三路溫度并且顯示,并且具有調(diào)整溫度范圍和報警的功能。 </p><p>  此系統(tǒng)嚴格按照要求設計,最終達到預期的效

8、果,能夠測量和顯示多路溫度,并且可以設置正常的溫度范圍,超過范圍具有報警功能。是一次比較成功的設計。</p><p>  關(guān)鍵字: 單片機 測溫 顯示 報警</p><p><b>  1課程設計要求</b></p><p>  1.1設計主要內(nèi)容及要求</p><p><b>  編寫多功能時鐘程序<

9、/b></p><p>  要求:1)多路溫度測量和顯示。</p><p>  2)可以設置正常溫度范圍,越限報警。</p><p>  1.2 對設計論文撰寫內(nèi)容、格式及字數(shù)的要求</p><p> ?。?).課程設計論文是體現(xiàn)和總結(jié)課程設計成果的載體,一般不應少于3000字。</p><p> ?。?).學生

10、應撰寫的內(nèi)容為:中文摘要和關(guān)鍵詞、目錄、正文、參考文獻等。課程設計論文的結(jié)構(gòu)及各部分內(nèi)容要求可參照《沈陽工程學院畢業(yè)設計(論文)撰寫規(guī)范》執(zhí)行。應做到文理通順,內(nèi)容正確完整,書寫工整,裝訂整齊。</p><p> ?。?).論文要求打印,打印時按《沈陽工程學院畢業(yè)設計(論文)撰寫規(guī)范》的要求進行打印。</p><p> ?。?). 課程設計論文裝訂順序為:封面、任務書、成績評審意見表、中文

11、摘要和關(guān)鍵詞、目錄、正文、參考文獻。</p><p>  1.3 時間進度安排</p><p><b>  3.時間進度安排;</b></p><p><b>  2 課程設計思路</b></p><p>  本設計主要介紹單片機編程來實現(xiàn)系統(tǒng)功能,本設計由C8051F020芯片為主要核心,采用DS

12、18B20數(shù)字溫度傳感器測量當前溫度,采用1602液晶顯示屏顯示當前溫度。正常溫度的設置采用三個按鍵,其中一個功能按鍵,用來選擇設置后溫度最小值和溫度最大值,另外兩個按鍵分別是設置溫度時用來加減溫度。</p><p><b>  2.1 測溫和顯示</b></p><p>  數(shù)字溫度傳感器DS18B20,因其內(nèi)部集成了A/D轉(zhuǎn)換器,使得電路結(jié)構(gòu)更加簡單,而且減少了溫

13、度測量轉(zhuǎn)換時的精度損失,使得測量溫度更加精確。數(shù)字溫度傳感器DS18B20只用一個引腳即可與單片機進行通信,大大減少了接線的麻煩,使得單片機更加具有擴展性。DS18B20采用單總線的方式和單片機進行通信,通過編程,單片機可以直接從DS18B20內(nèi)部讀取溫度值。本次設計使用的1602液晶顯示器為5V電壓驅(qū)動,帶背光,可顯示兩行,每行16個字符,不能顯示漢字,內(nèi)置128個字符的ASCII字符集字庫。</p><p>

14、  2.2 設置正常溫度范圍</p><p>  系統(tǒng)采用三個按鍵,KEY1,KEY2,KE3設置正常的溫度范圍,其中,KEY1是功能選擇按鍵,按KEY1可以在顯示溫度,設置正常溫度最小值,設置正常溫度最大值三個模式中切換。當選擇設置正常溫度最小值或設置正常溫度最大值模式時,液晶顯示正常溫度范圍的最小值或者最大值,然后通過按鍵KEY2和KEY3可以選擇讓這個值增加或者減小。</p><p>

15、;<b>  2.3報警功能</b></p><p>  報警功能的電路采用一個三極管驅(qū)動的蜂鳴器作為報警電路,在顯示溫度時,當測得三路溫度中有任何一路的溫度不在正常溫度的范圍內(nèi)時,報警電路就開始工作,發(fā)出響聲。</p><p><b>  4 各模塊程序設計</b></p><p><b>  4.1 測溫部分

16、</b></p><p>  DS18B20采用單總線方式與單片機之間經(jīng)行通信,所以在程序中,單片機只要操作一個IO口就可以對DS18B20經(jīng)行操作,完成測溫的功能。DQ0~DQ2分別對應三個DS18B20。程序主要包括四個函數(shù),分別說傳感器初始化操作,讀字節(jié)操作,寫字節(jié)操作和讀取溫度操作。代碼如下:</p><p>  /*初始化ds1820

17、 */</p><p>  /*******************************************************************/</p><p>  uchar Init_DS18B20(void)</p><p><b>  { </b></p>&

18、lt;p>  DQ0 = 1 ;DQ1 = 1 ;DQ2 = 1 ; //DQ復位</p><p>  Delay(10) ; //稍做延時</p><p>  DQ0 = 0 ;DQ1 = 0 ;DQ2 = 0 ; //單片機將DQ拉低</p><p>  Delay(100) ; //精確延時

19、大于 480us</p><p>  DQ0 = 1 ;DQ1 = 1 ;DQ2 = 1 ; //拉高總線</p><p>  Delay(8) ;</p><p>  presence =DQ; </p><p>  Delay(100) ;</p><p>  DQ0 = 1 ;DQ1 = 1 ;DQ2 = 1

20、 ; //拉高總線 </p><p>  return(presence) ; //返回信號,表示初始化成功,否則表示初始化失敗</p><p><b>  }</b></p><p>  /* 讀一個字節(jié) */</p><p>  /**********

21、*********************************************************/</p><p>  void ReadOneChar(void)</p><p><b>  {</b></p><p>  unsigned char i = 0 ;</p><p>  dat0 =

22、0 ;dat1 = 0 ;dat2 = 0 ;</p><p>  for (i = 8 ; i > 0 ; i--)</p><p><b>  {</b></p><p>  DQ0 = 0;DQ1 = 0;DQ2 = 0; // 給脈沖信號</p><p>  dat0>>= 1;dat

23、1>>= 1;dat2>>=1; //用于存放數(shù)據(jù)的字節(jié)右移一位</p><p>  DQ0 = 1;DQ1 = 1;DQ2 = 1; // 給脈沖信號</p><p>  Delay(1); //稍做延時</p><p>  if(DQ0)

24、//如果總線為高,說明返回的數(shù)據(jù)時1</p><p>  dat0 |= 0x80 ; //將1寫入變量中,如果是0則不寫,因為前面已經(jīng)清零了?</p><p><b>  if(DQ1)</b></p><p>  dat1 |= 0x80 ;</p><p><b>  if(

25、DQ2)</b></p><p>  dat2 |= 0x80 ;</p><p>  Delay(6) ;</p><p><b>  }</b></p><p><b>  }</b></p><p>  /* 寫一個字節(jié)

26、 */</p><p>  /*******************************************************************/</p><p>  void WriteOneChar(unsigned char dat)</p><p><b>  {</b>&l

27、t;/p><p>  unsigned char i = 0 ;</p><p>  for (i = 8 ; i > 0 ; i--)</p><p><b>  {</b></p><p>  DQ0 = 0 ;DQ1 = 0 ;DQ2 = 0 ; //單片機將DQ拉低</p><p>

28、;  DQ0 = dat&0x01 ; //如果寫的數(shù)據(jù)位是1,則拉高總線,否則總線保持低電平即可</p><p>  DQ1 = dat&0x01 ;</p><p>  DQ2 = dat&0x01 ;</p><p>  Delay(6) ;</p><p>  DQ0 = 1 ;DQ

29、1 = 1 ;DQ2 = 1 ; //拉高總線 </p><p>  dat>>=1 ; //要寫的數(shù)據(jù)右移一位</p><p><b>  }</b></p><p><b>  }</b></p><p>  /* 讀取溫度

30、 */</p><p>  /*******************************************************************/</p><p>  void Read_Temperature(void)</p><p><b>  {</b></p>

31、<p>  Init_DS18B20() ;</p><p>  WriteOneChar(0xCC) ; // 跳過讀序號列號的操作</p><p>  WriteOneChar(0x44) ; // 啟動溫度轉(zhuǎn)換</p><p>  Init_DS18B20() ; //初始化DS18B20</p><p>  

32、WriteOneChar(0xCC) ; //跳過讀序號列號的操作</p><p>  WriteOneChar(0xBE) ; //讀取溫度寄存器</p><p>  ReadOneChar() ; //溫度低8位</p><p>  wd0=dat0; //先將溫度低8位存到16位的變量中</p><p

33、><b>  wd1=dat1;</b></p><p><b>  wd2=dat2;</b></p><p>  ReadOneChar() ; //溫度高8位 </p><p>  wd0=wd0+256*dat0; //將溫度的高8位也存到16位的變量中</p><p&

34、gt;  wd1=wd1+256*dat1;</p><p>  wd2=wd2+256*dat2;</p><p>  wd0=wd0*0.625; //轉(zhuǎn)化成實際溫度,保留一位小數(shù)</p><p>  wd1=wd1*0.625;</p><p>  wd2=wd2*0.625;</p><p>&l

35、t;b>  }</b></p><p><b>  4.2 顯示部分</b></p><p>  1602液晶顯示屏采用并口方式與單片機進行通信,單片機的P0口與液晶的數(shù)據(jù)口鏈接,P2.0,P2.1,P2.2分別與液晶的RS,RW,EN三個命令端相連。通過正確的時序,單片機就可以控制1602液晶顯示我們需要的字符。程序主要包括三個函數(shù),液晶初始化函數(shù)

36、,寫命令函數(shù),寫數(shù)據(jù)函數(shù)。代碼如下:</p><p>  /******************************************************************/</p><p>  /*檢查LCD忙狀態(tài) */</p><p>  /*

37、lcd_busy為1時,忙,等待。lcd-busy為0時,閑,可寫指令與數(shù)據(jù)。 */</p><p>  /******************************************************************/ </p><p>  bit lcd_busy()</p><p>  {

38、 </p><p>  bit result ;</p><p>  LCD_RS = 0 ;</p><p>  LCD_RW = 1 ;</p><p>  LCD_EN = 1 ;</p><p>  delayNOP() ;</p><p>  result = (bit)(P0&a

39、mp;0x80) ;</p><p>  LCD_EN = 0 ;</p><p>  return(result) ; </p><p><b>  }</b></p><p>  /*寫指令數(shù)據(jù)到LCD */</p

40、><p>  /*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。 */</p><p>  /*******************************************************************/</p><p>  void lcd_wcmd(uchar cmd)</p><p>  {

41、 </p><p>  while(lcd_busy()) ;</p><p>  LCD_RS = 0 ;</p><p>  LCD_RW = 0 ;</p><p>  LCD_EN = 0 ;</p><p><b>  _nop_() ;</b

42、></p><p>  _nop_() ; </p><p>  P0 = cmd ;</p><p>  delayNOP() ;</p><p>  LCD_EN = 1 ;</p><p>  delayNOP() ;</p><p>  LCD_EN = 0 ; </p&g

43、t;<p><b>  }</b></p><p>  /*******************************************************************/</p><p>  /*寫顯示數(shù)據(jù)到LCD */</p><p>  /*RS=H

44、,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。 */</p><p>  /*******************************************************************/</p><p>  void lcd_wdat(uchar dat)</p><p>  { &

45、lt;/p><p>  while(lcd_busy()) ;</p><p>  LCD_RS = 1 ;</p><p>  LCD_RW = 0 ;</p><p>  LCD_EN = 0 ;</p><p>  P0 = dat ;</p><p>  delayNOP() ;</p

46、><p>  LCD_EN = 1 ;</p><p>  delayNOP() ;</p><p>  LCD_EN = 0 ;</p><p>  delay1(1); </p><p><b>  }</b></p><p>  /* LCD初始化設定

47、 */</p><p>  /*******************************************************************/</p><p>  void lcd_init()</p><p><b>  { </b><

48、;/p><p>  delay1(15) ; </p><p>  lcd_wcmd(0x01) ; //清除LCD的顯示內(nèi)容 </p><p>  lcd_wcmd(0x38) ; //16*2顯示,5*7點陣,8位數(shù)據(jù)</p><p>  delay1(5) ;</p><p&

49、gt;  lcd_wcmd(0x0c) ; //顯示開,關(guān)光標</p><p>  delay1(5) ;</p><p>  lcd_wcmd(0x06) ; //移動光標</p><p>  delay1(5) ;</p><p>  lcd_wcmd(0x01) ; //清除LCD的顯示內(nèi)容</p&g

50、t;<p>  delay1(5) ;</p><p><b>  }</b></p><p>  4.3 設置正常溫度</p><p>  首先通過按鍵KEY1選擇模式,程序中一共具有三個模式,分別是測溫顯示模式,設置正常溫度最小值模式,設置正常溫度最大值模式。在測溫模式下,系統(tǒng)可以自動判斷當前幾路傳感器測到的溫度是否在正常溫度

51、之內(nèi),如果超過正常溫度就出發(fā)報警裝置報警。設置正常溫度最小值模式,設置正常溫度最大值模式下,可以用個KEY2和KEY3兩個按鍵分別對最大值和最小值經(jīng)行增加和減小。程序主要包括一個設置函數(shù),代碼如下:</p><p>  /* 設置函數(shù),用于設置正常溫度范圍的最大值或者最小值 */</p><p>  /*******************************

52、************************************/</p><p>  uchar set_tem(uchar dat)</p><p><b>  {</b></p><p><b>  while(1)</b></p><p><b>  {</b>

53、</p><p>  lcd_wcmd(0xc8); //寫地址(要顯示字符的地址)</p><p>  lcd_wdat(dat/10+48) ; //顯示最大值(最小值)的十位</p><p>  lcd_wdat(dat%10+48) ; //顯示最大值(最小值)的個位</p><p>  if(key2==0)

54、 //如果KEY2鍵按下</p><p>  delay1(10); //稍作延時,消抖</p><p>  if(key2==0) //再次判斷KEY2按下</p><p><b>  {</b></p><p>  while(key2==0); //等待按鍵釋放</p&g

55、t;<p>  dat++; //最大值(最小值)加一</p><p><b>  }</b></p><p>  if(key3==0) //如果KEY3鍵按下</p><p>  delay1(10); //稍作延時,消抖</p><p>  i

56、f(key3==0) //再次判斷KEY3按下</p><p><b>  {</b></p><p>  while(key3==0); //等待按鍵釋放</p><p>  dat--; //最大值(最小值)減一</p><p><b>  }</b><

57、/p><p>  if(key1==0) //如果KEY1按下</p><p>  delay1(5); //稍作延時,消抖</p><p>  if(key1==0) //如果KEY1按下,退出循環(huán),設置完成,切換模式 </p><p><b>  {</b><

58、;/p><p>  lcd_wcmd(0x01) ; //清屏</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  return dat;</p>

59、;<p><b>  }</b></p><p>  /* 主函數(shù) */</p><p>  /************************************/</p><p>  void main()</p><p><b>  {</b></p>

60、<p>  uchar flage=0;</p><p>  lcd_init() ; //液晶初始化</p><p>  while(1) //大循環(huán)</p><p><b>  {</b></p><p>  if(key1==0) //如果KEY1按下</p>&l

61、t;p><b>  {</b></p><p>  delay1(5); //稍作延時,消抖</p><p>  if(key1==0) //再次判斷到KEY1按下</p><p><b>  { </b></p><p>  flage++; //標志位加1</p>

62、<p>  if(flage==3) //標志位到3清零,保證標志位只能在0 1 2 三個狀態(tài)中循環(huán),對應三個模式</p><p><b>  flage=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>

63、  Read_Temperature() ; //讀傳感器的溫度</p><p>  switch(flage) //判斷標志位,進入相應的模式</p><p><b>  {</b></p><p>  case 0:display_tem();break; //正

64、常測溫顯示模式</p><p>  case 1: //設置正常溫度范圍最小值模式</p><p>  lcd_init();</p><p>  dis_string(0x80,"set min tem");</p><p>  dis_string(0xc0,&quo

65、t;min tem:");</p><p>  writetab() ; //自定義字符寫入CGRAM</p><p>  lcd_wcmd(0xca);</p><p>  lcd_wdat(0x00) ; //顯示自定義字符</p><p>  min=se

66、t_tem(min) ;</p><p><b>  break;</b></p><p>  case 2: //設置正常溫度范圍最小值模式</p><p>  lcd_init();</p><p>  dis_string(0x80,"set max

67、tem");</p><p>  dis_string(0xc0,"max tem:");</p><p>  writetab() ; //自定義字符寫入CGRAM</p><p>  lcd_wcmd(0xca);</p><p>  lcd_wdat(0x00) ;

68、 //顯示自定義字符</p><p>  max=set_tem(max) ;</p><p><b>  break;</b></p><p>  default: display_tem();break; //默認進入正常顯示模式</p><p><b> 

69、 }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  4.3 溫度顯示和報警</p><p>  溫度顯示和報警的功能放在同一個函數(shù)中,在顯示溫度的同時,會判斷每一路DS18B20是否正常工作,如果沒有,則提示,ERROR,如果

70、傳感器正常工作,就顯示采集的溫度,并且判斷是否在正常范圍之內(nèi),如果不在,就觸發(fā)報警功能,蜂鳴器發(fā)出響聲。</p><p>  程序主要有一個函數(shù),代碼如下:</p><p>  /* 在1602上顯示溫度,并且判斷溫度是否超過正常設定范圍 */</p><p>  /***********************

71、********************************************/</p><p>  void display_tem()</p><p><b>  {</b></p><p><b>  BEEP=1;</b></p><p>  if(presence&0x0

72、1)//presence最低位為1說明0號測溫度傳感器沒有正常工作。</p><p>  dis_string(0x80,"T0 ERROR");</p><p><b>  else</b></p><p><b>  {</b></p><p>  dis_string(0

73、x80,"T0:"); </p><p>  lcd_wdat(wd0%1000/100+48) ;</p><p>  lcd_wdat(wd0%100/10+48) ;</p><p>  lcd_wdat('.') ;</p><p>  lcd_wdat(wd0%10+48) ;</p>

74、;<p>  writetab() ; //自定義字符寫入CGRAM</p><p>  lcd_wcmd(0x87);</p><p>  lcd_wdat(0x00) ; //顯示自定義字符</p><p>  if((wd0>max*10)|(wd0<min*10))</p>

75、<p><b>  BEEP=0;</b></p><p><b>  }</b></p><p>  if(presence&0x02)//presence中間位為1說明1號測溫度傳感器沒有正常工作。</p><p>  dis_string(0x88,"T1 ERROR");&

76、lt;/p><p><b>  else</b></p><p><b>  {</b></p><p>  dis_string(0x88,"T1:"); </p><p>  lcd_wdat(wd1%1000/100+48) ;</p><p>  lc

77、d_wdat(wd1%100/10+48) ;</p><p>  lcd_wdat('.') ;</p><p>  lcd_wdat(wd1%10+48) ;</p><p>  writetab() ; //自定義字符寫入CGRAM</p><p>  lcd_wcmd(0x8f);<

78、/p><p>  lcd_wdat(0x00) ; //顯示自定義字符</p><p>  if((wd1>max*10)|(wd1<min*10))</p><p><b>  BEEP=0;</b></p><p><b>  }</b></p><

79、p>  if(presence&0x04)//presence最高位為1說明2號測溫度傳感器沒有正常工作。</p><p>  dis_string(0xc0,"T2 ERROR");</p><p><b>  else</b></p><p><b>  {</b></p>

80、;<p>  dis_string(0xc0,"T2:"); </p><p>  lcd_wdat(wd2%1000/100+48) ;</p><p>  lcd_wdat(wd2%100/10+48) ;</p><p>  lcd_wdat('.') ;</p><p>  lcd_

81、wdat(wd2%10+48) ;</p><p>  writetab() ; //自定義字符寫入CGRAM</p><p>  lcd_wcmd(0x8f);</p><p>  lcd_wdat(0x00) ; //顯示自定義字符</p><p>  if((wd2>max*10)|(

82、wd2<min*10))</p><p><b>  BEEP=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  5 主要元器件介紹</b></p><p&g

83、t;  5.1 C8051F系列單片機</p><p>  C8051F020/1/2/3 器件是完全集成的混合信號系統(tǒng)級MCU 芯片,具有64 個數(shù)字I/O 引腳(C8051F020/2)或32 個數(shù)字I/O 引腳(C8051F021/3)。下面列出了一些主要特性;</p><p>  (1) 高速、流水線結(jié)構(gòu)的8051 兼容的CIP-51 內(nèi)核(可達25MIPS)</p>

84、<p>  (2) 全速、非侵入式的在系統(tǒng)調(diào)試接口(片內(nèi))</p><p>  (3) 真正12 位(C8051F020/1)或10 位(C8051F022/3)、100 ksps 的8 通道ADC,帶PGA和模擬多路開關(guān)</p><p>  (4) 真正8 位500 ksps 的ADC,帶PGA 和8 通道模擬多路開關(guān)</p><p>  (5) 兩個

85、12 位DAC,具有可編程數(shù)據(jù)更新方式</p><p>  (6) 64K 字節(jié)可在系統(tǒng)編程的FLASH 存儲器</p><p>  (7) 4352(4096+256)字節(jié)的片內(nèi)RAM</p><p>  (8) 可尋址64K 字節(jié)地址空間的外部數(shù)據(jù)存儲器接口</p><p>  (9) 硬件實現(xiàn)的SPI、SMBus/ I2C 和兩個UAR

86、T 串行接口</p><p>  (10) 5 個通用的16 位定時器</p><p>  (11) 具有5 個捕捉/比較模塊的可編程計數(shù)器/定時器陣列</p><p>  (12) 片內(nèi)看門狗定時器、VDD 監(jiān)視器和溫度傳感器</p><p>  具有片內(nèi)VDD 監(jiān)視器、看門狗定時器和時鐘振蕩器的C8051F020/1/2/3 是真正能獨立

87、工作的片上系統(tǒng)。所有模擬和數(shù)字外設均可由用戶固件使能/禁止和配置。FLASH 存儲器還具有在系統(tǒng)重新編程能力,可用于非易失性數(shù)據(jù)存儲,并允許現(xiàn)場更新8051 固件。</p><p>  片內(nèi)JTAG 調(diào)試電路允許使用安裝在最終應用系統(tǒng)上的產(chǎn)品MCU 進行非侵入式(不占用片內(nèi)資源)、全速、在系統(tǒng)調(diào)試。該調(diào)試系統(tǒng)支持觀察和修改存儲器和寄存器,支持斷點、觀察點、單步及運行和停機命令。在使用JTAG 調(diào)試時,所有的模擬和

88、數(shù)字外設都可全功能運行。每個MCU 都可在工業(yè)溫度范圍(-45℃到+85℃)內(nèi)用2.7V-3.6V 的電壓工作。端口I/O、/RST 和JTAG 引腳都容許5V 的輸入信號電壓。</p><p>  C8051F020 系列MCU 對CIP-51 內(nèi)核和外設有幾項關(guān)鍵性的改進,提高了整體性能,更易于在最終應用中使用。</p><p>  擴展的中斷系統(tǒng)向CIP-51 提供22 個中斷源(標

89、準8051 只有7 個中斷源),允許大量的模擬和數(shù)字外設中斷微控制器。一個中斷驅(qū)動的系統(tǒng)需要較少的MCU 干預,因而有更高的執(zhí)行效率。在設計一個多任務實時系統(tǒng)時,這些增加的中斷源是非常有用的。</p><p>  MCU 可有多達7 個復位源:一個片內(nèi)VDD 監(jiān)視器、一個看門狗定時器、一個時鐘丟失檢測器、一個由比較器0 提供的電壓檢測器、一個軟件強制復位、CNVSTR 引腳及/RST 引腳。</p>

90、<p>  /RST 引腳是雙向的,可接受外部復位或?qū)?nèi)部產(chǎn)生的上電復位信號輸出到/RST 引腳。除了VDD 監(jiān)視器和復位輸入引腳以外,每個復位源都可以由用戶用軟件禁止;使用MONEN 引腳使能/禁止VDD 監(jiān)視器。在一次上電復位之后的MCU 初始化期間,WDT 可以被永久性使能。</p><p>  MCU 內(nèi)部有一個獨立運行的時鐘發(fā)生器,在復位后被默認為系統(tǒng)時鐘。如果需要,時鐘源可以在運行時切換到

91、外部振蕩器,外部振蕩器可以使用晶體、陶瓷諧振器、電容、RC 或外部時鐘源產(chǎn)生系統(tǒng)時鐘。時鐘切換功能在低功耗系統(tǒng)中是非常有用的,它允許MCU 從一個低頻率(節(jié)電)外部晶體源運行,當需要時再周期性地切換到高速(可達16MHz)的內(nèi)部振蕩器。</p><p>  其原理圖如下圖所示:</p><p><b>  圖5.1</b></p><p>  

92、5.2 液晶顯示屏(LCD)</p><p>  用于數(shù)字型鐘表和許多便攜式計算機的一種顯示器類型。液晶顯示器(LCD)目前科技信息產(chǎn)品都朝著輕、薄、短、小的目標發(fā)展,在計算機周邊中擁有悠久歷史的顯示器產(chǎn)品當然也不例外。在便于攜帶與搬運為前題之下,傳統(tǒng)的顯示方式如CRT映像管顯示器及LED顯示板等等,皆受制于體積過大或耗電量甚巨等因素,無法達成使用者的實際需求。而液晶顯示技術(shù)的發(fā)展正好切合目前信息產(chǎn)品的潮流,無論

93、是直角顯示、低耗電量、體積小、還是零輻射等優(yōu)點,都能讓使用者享受最佳的視覺環(huán)境。</p><p>  以下是對本設計中所用到的LCD的說明,LCD接口實驗電路圖如圖5.2所示。液晶顯示屏是以5X8或5X11點陣組成的字符組。其主控制驅(qū)動電路為 HD44780或其他公司的兼容電路,如SED1278,KD0066和NJU6408,都是將液晶顯示點陣和驅(qū)動電路結(jié)合為一體的液晶顯示模塊。</p><p

94、>  對照液晶顯示模塊LCM與單片機的硬件接口電路圖,液晶顯示模塊電路可直接與單片機C8051F020的I/O口P7和P6連接。P7作數(shù)據(jù)口(D0—D7),P6.0,P6.1和P6.2用作LCD模塊的3條信號線RS,R/W和E控制LCD的讀/寫操作。</p><p>  單片機可對LCD進行讀/寫。LCD沒款編程要點如下:</p><p>  (1) 用LCD模塊的3條信號線RS,R

95、/W和E控制LCD的讀/寫操作。</p><p>  (2) RS為寄存器的選擇位,RS=1,選擇數(shù)據(jù)寄存器;RS=0,選擇指令寄存器。</p><p>  (3) E為使能信號,下降沿觸發(fā)。</p><p>  (4)R/W為讀/寫信號,R/W=1,讀;R/W=0,寫;</p><p>  (5)D0—D7是8位數(shù)據(jù)總線。</p>

96、;<p>  (6)VDD接+5V電源,VSS接地。LCD模塊的第16腳為背光控制線。短接 J1的1,2腳就能加上背光。</p><p>  (7)將P6.0線與E端相連,P6.1線與R/W端連接,P6.2線與RS端相連,可利用I/O線P6.2,P6.1和P6.0代替RS,R/W和E實現(xiàn)讀/寫操作。</p><p>  (8)編寫LCD模塊的驅(qū)動程序時,應對照地址分配表(表5

97、.1)和LCD模塊讀/寫時序圖(圖5.3)</p><p><b>  圖 5.2</b></p><p><b>  表 5.1</b></p><p><b>  圖 5.3</b></p><p>  5.2 數(shù)字溫度傳感器DS18B20</p>&l

98、t;p>  溫度傳感器我們采用DS18B20單總線溫度傳感器,其具有接口簡單、直接輸出數(shù)字量等優(yōu)點。</p><p>  圖5.4 DS18B20外形及管腳圖</p><p>  DS18B20是美國DALLAS半導體公司繼DS1820之后最新推出的一種改進型智能溫度傳感器。與傳統(tǒng)的熱敏電阻相比,他能夠直接讀出被測溫度并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9~12位的數(shù)字值讀數(shù)方式。

99、可以分別在93.75 ms和750 ms內(nèi)完成9位和12位的數(shù)字量,并且從DS18B20讀出的信息或?qū)懭隓S18B20的信息僅需要一根口線(單線接口)讀寫,溫度變換功率來源于數(shù)據(jù)總線,總線本身也可以向所掛接的DS18B20供電,而無需額外電源。因而使用DS18B20可使系統(tǒng)結(jié)構(gòu)更趨簡單,可靠性更高。[5]</p><p>  DS18B20輸出的數(shù)據(jù)格式如下所示:</p><p>  圖5

100、.5 DS18B20輸出的數(shù)據(jù)格式</p><p><b>  5.3 蜂鳴器電路</b></p><p>  單片機IO口電流輸出能力比較小,無法輸出大電流,所以通過一個三極管驅(qū)動,增大輸出電流,驅(qū)動蜂鳴器發(fā)出聲音。電路圖如圖</p><p>  圖5.6 蜂鳴器驅(qū)動電路</p><p><b>  總結(jié)&l

101、t;/b></p><p>  兩周的課程設計就這樣結(jié)束了,在這兩周里,我學到了很多東西,學到了很多在教科書本上沒有的知識,比如八路開關(guān)的使用,液晶顯示的使用等,這些要是不自己親手動手去實現(xiàn)它,永遠都不知道是怎么回事。我還學到了此系列單片機的其他資源的使用方法,從而對所學的課本知識有了更深的理解,也學習到了很多編程技巧,扎實了我的基本功。</p><p>  在此次課程設計中,我遇到

102、了各種各樣的問題,這些就是對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,我查詢大量資料,很多問題也就迎刃而解了,但還有一些問題在書上找不到的問題,可是在老師的幫助下還是解決了,在此非常感謝老師對我的幫助。</p><p>  我覺得做課程設計同時也是對課本知識的鞏固和加強,由于課本上的知識太多,平時課間的學習并不能很好的理解和運用各個元件的功能,而且考試內(nèi)容有限,所以在這次課程設計過程中,我們了解了很多功能的

溫馨提示

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

評論

0/150

提交評論